TL;DR
7 min readThe 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_votesUpvotes 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.
| Post | Upvotes | Downvotes | Score (score) | Upvote ratio (upvote_ratio) |
|---|---|---|---|---|
| A | 45 | 5 | 40 | 0.90 |
| B | 220 | 180 | 40 | 0.55 |
| C | 4 | 0 | 4 | 1.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 - scoreFor 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.

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.
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
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.
| Where | Applies to | Definition |
|---|---|---|
API field upvote_ratio (archived source, PRAW) | Posts | Upvotes divided by total votes, 0 to 1 |
| Help center, Post & Comment Insights | Comments | "The ratio of upvotes to downvotes that the comment has received" |
| Help center, Reddit Pro Performance | Posts | Upvotes: "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.

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.
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
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
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


Every Reddit Engagement Rate You See Was Built by Somebody Else
A Reddit engagement rate exists in no Reddit product. What the API returns, what post insights show, and the three rates people build out of those parts.


How Reddit Rising Surfaces Threads Before They Reach Hot
The reddit rising sort ranks young posts by recent views. Where it appears, its .json and RSS endpoints, and how it differs from hot and new.


How to Find Reddit Hidden Posts, Unhide Them, and Use Hide for Triage
Where Reddit hidden posts go, what Reddit documents for viewing them on desktop and the app, how to unhide one, and how hiding speeds up reply triage.

