glossary

What the Reddit Upvote Ratio Measures, and What Vote Fuzzing Hides

Taras Shynkarenko
Taras Shynkarenko
•Updated: •7 min read
What the Reddit Upvote Ratio Measures, and What Vote Fuzzing HidesWhat the Reddit Upvote Ratio Measures, and What Vote Fuzzing Hides

TL;DR

7 min read

The Reddit upvote ratio is the share of all votes on a post that were upvotes, and the API returns it as a decimal between 0 and 1 in the upvote_ratio field. Reddit's archived source computes it as upvotes divided by total votes. Two posts with the same score can sit at 0.90 and 0.55, so read the ratio next to the score. Reddit has never said whether today's ratio uses fuzzed or real vote tallies, and its help center defines "upvote ratio" a second, different way for comments.

What is the Reddit upvote ratio?

The percentage Reddit shows alongside a post is the Reddit upvote ratio: the share of all votes on that post that were upvotes, returned by the API as a decimal between 0 and 1 in the upvote_ratio field. A post with 45 upvotes and 5 downvotes has a ratio of 0.9, or 90 percent.

Reddit's current API reference at reddit.com/dev/api documents endpoints and parameters, not response fields, so the clearest definition comes from Reddit's own archived source code. In r2/models/builder.py of the reddit-archive/reddit repository, the calculation is two lines:

total_votes = max(item.num_votes, 1)
w.upvote_ratio = float(item._ups) / total_votes

Upvotes over total votes, with a floor of one vote so a brand new post does not divide by zero. PRAW, the most widely used Python wrapper for the API, describes the field the same way: "The percentage of upvotes from all votes on the submission."

How do you calculate the upvote ratio?

Divide upvotes by the sum of upvotes and downvotes. The score, which is the number next to the arrows, is a different quantity: upvotes minus downvotes. The two numbers answer different questions, and the ratio is the one that tells you whether people agreed.

PostUpvotesDownvotesScore (score)Upvote ratio (upvote_ratio)
A455400.90
B220180400.55
C4041.00

Posts A and B show the same score of 40. Post A is a quiet post most readers liked. Post B drew eight times the votes and split the room almost evenly, which is the pattern Reddit's controversial sort looks for. Post C shows the other failure of reading the ratio alone: a perfect 1.00 on four votes says almost nothing.

Where does upvote_ratio appear in Reddit's API?

It sits on post objects in the JSON Reddit returns, alongside score, ups and downs. Two of those neighbours no longer mean what their names say. The archived JSON template in r2/lib/jsontemplates.py hard-codes "downs": 0 and sets "ups": item.score, so on any post ups equals the net score and downs is always zero. A script that computes ups / (ups + downs) gets 1.0 on every post.

The same archived template adds upvote_ratio only when c.permalink_page is true, meaning the post's own comment page, not the subreddit listing. That repository was last pushed on 17 October 2017 and is marked as archived, so the live site can differ. Reddit's archived field reference on the repository wiki lists ups, downs and score and does not mention upvote_ratio at all.

The archived comment template has no upvote_ratio. Comments carry a score only.

Can you work out the real vote count from the ratio and score?

Yes, with algebra, as long as the ratio is not exactly 0.5. Upvotes minus downvotes equals the score, and upvotes over total votes equals the ratio. Solving the pair gives:

upvotes   = ratio x score / (2 x ratio - 1)
downvotes = upvotes - score

For Post A, 0.9 x 40 / 0.8 = 45 upvotes and 5 downvotes, which matches. The formula falls apart in two places. At a ratio of 0.5 the denominator is zero, and a score of 0 tells you nothing about how many votes cancelled out. Near 0.5 it becomes hypersensitive. Post B at 0.55 and a score of 40 gives 220 upvotes. Nudge the ratio to 0.56 and the same formula returns about 187. A one-point rounding difference moves the estimate by 33 votes, so treat any reconstructed count on a divided post as a rough range.

A person scrolling a phone on a couch, next to the section on vote fuzzing and what Reddit has and hasn't disclosed about it.

What is vote fuzzing, and does it touch the upvote ratio?

Vote fuzzing is Reddit adding fake votes to the up and down tallies so that bots cannot tell whether their votes counted. Reddit's old FAQ, now marked "no longer updated", explains it with an example: five upvotes and three downvotes "may say 23 upvotes and 21 downvotes, or 12 upvotes, and 10 downvotes. The points score is correct, but the vote totals are 'fuzzed'."

The ratio used to be computed from those fuzzed totals. On 18 June 2014 Reddit admin Deimorz announced in r/announcements that individual up and down counts would disappear from public view, and gave the reason: every post near the top of the front page "seems to drift towards showing '55% like it' due to the vote-fuzzing." After the change, the top post "has gone from showing '57% like it' to '96% like it'." On 6 December 2016 admin KeyserSosa announced a recompute of historical scores that removed outdated anti-cheating rules, with the TL;DR that "Scores are increasing by a lot."

Here is the gap. Neither announcement states what the ratio is computed from today, and Reddit's current help center never mentions fuzzing. Its article on hidden votes says only that votes are not shown for "the first few hours after a post is created" and that some communities hide them for a short time. The ratio got "closer to reality" in 2014. Reddit has not said it is exact.

What the ratio has been computed from
Until 2014: fuzzed totals
18 June 2014: individual up and down counts hidden
6 December 2016: historical scores recomputed
Today: Reddit has not said
Reddit's current help center never mentions fuzzing.

How does the upvote ratio relate to Reddit's controversial sort?

The archived code uses the ratio directly to decide what counts as controversial. _is_controversial in builder.py flags an item when its vote count clears cflag_min_votes and its ratio falls between cflag_lower_bound and cflag_upper_bound. The shipped example.ini sets those to 7, 0.4 and 0.6.

RedReplier
RedReplier

Get Started

Reddit, X, Bluesky & HN

Real-time intent alerts

Unlimited AI replies

Ranked by buyer intent

The controversial sort itself, in _sorts.pyx, rewards volume and balance together: magnitude ** balance, where magnitude is total votes and balance is the smaller side divided by the larger. Post B above, 220 against 180, scores far higher than a 3 to 2 post with the same ratio. The full set of sorts, and which ones Reddit documents, is covered in Reddit hot vs new vs top.

Does Reddit define "upvote ratio" the same way everywhere?

No. Reddit uses the phrase for at least two different formulas.

WhereApplies toDefinition
API field upvote_ratio (archived source, PRAW)PostsUpvotes divided by total votes, 0 to 1
Help center, Post & Comment InsightsComments"The ratio of upvotes to downvotes that the comment has received"
Help center, Reddit Pro PerformancePostsUpvotes: "Ratio of upvotes to downvotes"

Upvotes to downvotes and upvotes to total votes are different numbers. A post with 90 up and 10 down is 9 to 1 under the first and 0.9 under the second. When you compare numbers across Reddit's own tools, check which one you are looking at. The same trap shows up in Reddit engagement rate calculations, where the denominator changes the answer.

Two people in a heated conversation across a table, next to the section on reading a ratio near 0.5 as a sign of disagreement.

What is a good upvote ratio on Reddit?

Reddit publishes no benchmark, and a single target number would mislead. The ratio depends on the subreddit, the topic and how many people voted. Read it in three parts. A high ratio on a high score means broad agreement. A ratio near 0.5 on a high score means a fight, and the comments will tell you what about. A ratio near 1.0 on a handful of votes means nobody has decided yet.

For brands, a low ratio on a post that mentions you is a signal to read the thread before replying. It is not a reason to rally votes. Asking people to vote breaks Reddit's rules, as laid out in Reddit vote manipulation, and downvotes on your own posts and comments also cost you Reddit karma.

Reading the ratio next to the score
High ratio, high scoreBroad agreement
Ratio near 0.5, high scoreA fight, so read the comments
Ratio near 1.0, few votesNobody has decided yet
Reddit publishes no benchmark, so the ratio only means something with the vote volume beside it.

Frequently asked questions

What does a 50 percent upvote ratio mean on Reddit?

It means the post received as many downvotes as upvotes, so its score sits at or near zero. A 50 percent ratio on two votes and on two thousand votes looks identical, which is why you need the vote volume or comment count to read it.

Why does the Reddit API return downs as 0?

Reddit stopped exposing separate up and down counts in June 2014. The archived JSON template hard-codes "downs": 0 and sets ups equal to the net score, so neither field is a real tally. Use score and upvote_ratio instead.

Can you see the upvote ratio on a Reddit comment?

Not in the API JSON. Reddit's archived comment template returns a score and no ratio. The comment author can see an "Upvote ratio" in comment insights, which Reddit's help center defines as upvotes to downvotes, a different formula from the post field.

Is the Reddit upvote ratio accurate?

It is closer to the truth than the fuzzed tallies it replaced, per Reddit's 2014 announcement. Reddit has not stated whether today's ratio uses fuzzed or real vote counts, so treat it as a good estimate, not an audited figure.

Why is my post's upvote ratio hidden?

Reddit hides vote counts for the first few hours after a post goes up, and some communities also hide votes on posts and comments for a short time. The help center says this prevents vote manipulation and keeps people from being swayed by how others voted.

Does a low upvote ratio hurt a post's ranking?

The hot sort in Reddit's archived code uses the net score and the post's age, not the ratio. At the same number of votes, a lower ratio means a lower score, which lowers hot rank. Reddit has not published the ranking code it runs today.

How do I find the upvote ratio of a Reddit post?

Reddit shows it as a percentage alongside the post. In the API it is the upvote_ratio field, a decimal between 0 and 1. Reddit's archived template adds it only on the post's own comment page, not in subreddit listings.

How do you calculate upvotes and downvotes from the ratio and score?

Solve the pair of equations: upvotes = ratio x score / (2 x ratio - 1), and downvotes = upvotes - score. For a ratio of 0.9 and a score of 40, that gives 45 upvotes and 5 downvotes. The formula breaks at a ratio of exactly 0.5, and near it a one-point rounding difference moves the estimate by dozens of votes.

What is the difference between Reddit score and upvote ratio?

The score is upvotes minus downvotes. The upvote ratio is upvotes divided by total votes. Two posts can both have a score of 40 while one sits at 0.90 and the other at 0.55.

RedReplier
RedReplier

Get Started

Reddit, X, Bluesky & HN

Real-time intent alerts

Unlimited AI replies

Ranked by buyer intent

What upvote ratio makes a Reddit post controversial?

In Reddit's archived code, an item is flagged as controversial when it has at least 7 votes and a ratio between 0.4 and 0.6. Those are the values in the shipped example.ini. Reddit has not published the settings it runs today.

See us more often in Google

One click marks RedReplier as a preferred source, so our articles sit higher in your Top Stories, AI Mode, and AI Overviews.

Before you go...

RedReplier

RedReplier

Catch every buyer asking for what you sell

RedReplier watches Reddit, X, Bluesky and Hacker News in real time, ranks every thread by buyer intent, and drafts your reply, so you get there first.

Reddit, X, Bluesky & HN

Real-time intent alerts

Unlimited AI replies

Ranked by buyer intent

Related Articles