Open Source Algorithms

Author Payouts

Last Updated: January 6th, 2026

Author payouts are calculated at the end of each month based on platform activity. Aemula is committed to providing writers and journalists with full transparency into how their earnings are calculated.

The primary goal of Author Payouts are to reward high-quality reporting that receives diverse support from different ideological communities, incentivizing factual, credible reporting rather than clickbait or inflammatory rhetoric used to increase engagement.


Subscription Revenue

Author Payouts are earned from subscription revenue from paid subscribers, as well as from Aemula's support of free-trial users.

User subscriptons, paid in USD, settle directly into a community subscription pool (the "Subscription Pool") as USDC (a stablecoin backed 1:1 with USD). Handling subscription payments onchain using USDC stablecoins allows subscription payments to programmatically flow directly from users to authors without flowing through a corporate bank account, removing a potential point of censorship.

Author earnings are programmatically calculated using the below open-source algorithm, which then determines payments to the author's Aemula smart account in USDC. Authors can then cash out their earnings directly to their bank accounts to receive USD.


Author Payout Algorithm

Author earnings are a function of the interactions their articles receive, the reputations of the users interacting with their articles, and the diversity of users interacting with their articles.

Interaction Types

When a user reads an article, they can vote to either support, disagree, or report the article. If a user reads an article and does not record a vote, their interaction is considered to be neutral.

Support Votes - Increase the portion of subscription revenue earned and increase the article's ranking in the recommendation algorithm

Neutral Votes - Relative to support votes, neutral votes earn relatively less subscription revenue and slightly increase the article's ranking in the recommendation algorithm

Disagree Votes - Move funds from the Subscription Pool to the Moderator Bounty Pool and decrease an article's ranking in the recommendation algorithm

Report Votes - Move relatively more funds from the Subscription Pool to the Moderator Bounty Pool, decrease an article's ranking in the recommendation algorithm, and with enough report votes, an article can be removed from circulation and sent to the Moderator Community for review

User Reputations

Prior to the release of Aemula's full reputation system, user reputations follow a simplified weighting scheme. Paid subscribers and authors have a reputation weight of 1, since they are confirmed to be unique, real people and typically have a longer history on the platform. Free-trial users have a reputation weight of 0.67 since it is possible for one person to have multiple free-trial accounts and they only have a maximum of 2 weeks of interaction history.

Diversity Weighting

Authors should be rewarded when they receive support and engagement from users with ideologically diverse points of view, since this indicates clear and credible reporting that is widely accepted by different communites.

We also want to avoid a scenario where a small user community can skew author earnings by spamming support for authors that only receive support from their community, as well as the inverse where a small user community spams disagreement for authors they want to demote in the rankings.

To protect against this, we penalize outsized numbers of user interactions that are concentrated between a small community of users and authors. We currently use a simplified method to prevent this form of payout manipulation prior to implementing our full bridging-based algorithm that can determine ideological communities and platform diversity.

Interaction Concentration Penalty

To calculate the penalty for concentrated user interactions, we use:

pu,a,t=Cu,a,tIu,tp_{u,a,t} = \frac{C_{u,a,t}}{I_{u,t}}

Where:

  • pu,a,tp_{u,a,t} represents the penalty we apply to interactions of type tt, between a specific user, uu, and a specific author, aa

  • Cu,a,tC_{u,a,t} represents the count of interaction type, tt, between a specific user, uu, and a specific author, aa

  • Iu,tI_{u,t} represents the total interactions of type tt made by a user, uu

Examples:

If a user were to cast 30 support votes only for a single author, then Cu,a,tC_{u,a,t} would be equal to 30, and Iu,tI_{u,t} would also be equal to 30, making the concentration penalty, pu,a,tp_{u,a,t}, for interactions between that user and that author equal to 1 (the maximum penalty).

Alternatively, if a user were to cast 30 support votes split evenly across 30 authors (1 support vote per author), then Cu,a,tC_{u,a,t} would be equal to 1 (since there is only 1 support vote between that user and any author they support), and Iu,tI_{u,t} would still be equal to 30 since that user cast a total of 30 support votes, making pu,a,tp_{u,a,t} equal to 130\frac{1}{30}, or 0.03 (near the minimum of 0).

Similarly, if a user casts 30 support votes, with 29 support votes for a single author in their close community, and a single support vote for an author outside of their close community, then the penalty for their support interactions with the author in their close community receives a penalty of 2930\frac{29}{30}, or 0.97 (near the maximum penalty), but their support vote for the author outside of their community receives a penalty of only 130\frac{1}{30}, or 0.03 (near the minimum of 0).

While this is not perfect, it is a simple way to penalize concentrated support in tightly knit ideological communites, while rewarding authors that are able to earn support from users that typically concentrate their support within close communities.

Author Payout Algorithm

With the above goals and inputs, we can arrive at the full Author Payout algorithm. For each interaction type between each user and each author, we calculate the following:

Effective Interaction Counts

eff(u,a,t)=wtrep(u)cu,a,t1+(cu,a,t1)(pu,a,t)β\mathrm{eff}(u,a,t) = w_t \cdot \mathrm{rep}(u) \cdot \frac{c_{u,a,t}}{1 + (c_{u,a,t}-1)\cdot (p_{u,a,t})^{\beta}}

Where:

  • eff(u,a,t)\mathrm{eff}(u,a,t) represents the effective interaction count of type tt, between a specific user, uu, and a specific author, aa

  • wtw_t represents the relative weight of an interaction type, tt, where support and report interactions have a weight of 3, and neutral and disagree interactions have a weight of 1, making support and report interactions have more influence than neutral reads and simple disagreement

  • rep(u)\mathrm{rep}(u) represents the user reputation weighting, where paid subscribers and authors have a weight of 1, and free-trial users have a weight of 0.67

  • Cu,a,tC_{u,a,t} represents the count of interaction type, tt, between a specific user, uu, and a specific author, aa

  • pu,a,tp_{u,a,t} represents the penalty we apply to interactions of type tt, between a specific user, uu, and a specific author, aa

  • β{\beta} represents the penalty modifier, which can increase or decrease the magnitude of the penalty applied to the interactions between a user and an author, where β{\beta} currently equals 3

This gives us an effective interaction count for each interaction type between each user and each author, where the effective interaction count is an equally weighted combination of the weight of the interaction, the user's reputation, and the interaction concentration penalty.

To extend our above examples, you can see that a maximum interaction concentration penalty, pu,a,tp_{u,a,t}, of 1 would cause the full interaction concentration penalty term of cu,a,t1+(cu,a,t1)(pu,a,t)β\frac{c_{u,a,t}}{1 + (c_{u,a,t}-1)\cdot (p_{u,a,t})^{\beta}} to be 1. Meaning that if a user only supports a single author, they can support them as many times as they want, but it will only count as a single support interaction.

Alternatively, if the interaction concentration penalty is near the minimum of 0, the denominator of the full interaction concentraion penalty term would approach 1, making the full term approach Cu,a,tC_{u,a,t}, meaning that a user that diversly supports various authors will have each of their interactions count nearly in full.


Determining Payout Splits

Once we have the effective interaction counts for each interaction type between each user and each author, we can calculate the total effective interactions on the platform for the month, and the total effective interactions received by each author.

Starting with the total funds available in Subscription Pool, we first look at the platform-level splits of total support and neutral interactions compared to total disagree and report interactions. The percentage of total effective interactions that are comprised of support and neutral interactions are applied to the Author Payout Pool. The percentage of total effective interactions that are comprised of disagree and report interactions are applied to the Moderator Bounty Pool.

Once we have determined the funds available in the Author Payout Pool, we look at the relative splits of effective support and neutral interactions per author. Each author then earns their percentage of effective support and neutral interactions relative to the total effective support and neutral interactions received by all authors on the platform.

Previous
Article Ranking