I've been thinking about how much of what happens on big platforms is decided by numbers you don't get to see. Twitter, TikTok, YouTube, all have systems deciding who sees what you post, and as a user you don't get much visibility into those decisions.
I thought Hacker News might be the exception, mostly because it's old. The site has barely changed in twenty years and it's famously reluctant to add anything. So either it never bothered building a hidden score, or it has one written in such plain, old code that I could probably just read it off the public API. So I went to find mine.
What the API actually stores
HN's public API returns a small account record, and you don't need a key or a login to read it. You request a username and get back a small JSON object:
id, your username.created, when you signed up.karma, one integer.about, your bio text.submitted, the ID of every post and comment you've ever made.
That's five fields. I checked a range of accounts and the shape never changes. There's no trust, no score, no rank, nothing with a suggestive name. The only number that grades you is karma, and karma is already printed next to your username.
So what I expected to find wasn't there. I couldn't see a hidden reputation score in the public account data. That doesn't tell me what HN might use internally, but it did get me looking more closely at karma, which turned out to be stranger than I expected.
Where karma comes from
Karma looks like a single clean number, but it's actually the sum of every vote you've ever received, across stories and comments together, collapsed into one integer. HN shows you the sum and never the parts.
You can get the parts back, up to a point. There's a second public API, the Algolia index, and it treats stories and comments differently. For a story it returns the score. For a comment it returns everything except the score, the points field just isn't there.
This is on purpose, and it's one of the oldest rules on the site. A comment has a score, and only its author can see it. Everyone else, the API included, gets the comment with the number removed. The stated reason is to keep people from piling votes onto whatever is already ahead.
Story scores are public though, so you can measure how much of an account's karma came from submissions and attribute the rest to comments. I ran that on fourteen well-known accounts, and here are eight of them:
| Account | Karma | From comments | Story hit-rate | Dead on arrival |
|---|---|---|---|---|
| tptacek | 422,970 | ~91% | 20.6% | 5.3% |
| jacquesm | 242,026 | ~86% | 10.2% | 23.6% |
| pg | 157,316 | ~70% | 20.5% | 4.3% |
| rayiner | 127,920 | ~98% | 9.5% | 15.9% |
| patio11 | 127,807 | ~96% | 36.5% | 1.9% |
| edw519 | 73,785 | ~87% | 2.0% | 40.4% |
| dang | 41,569 | ~44% | 17.5% | 44.7% |
| sama | 23,059 | ~0% | 51.6% | 3.3% |
The third column is the main thing. For nearly all of them, most of the karma came from comments. The median across the fourteen was about 80%, and rayiner and jerf (not in the table) are both above 98%. These are some of the most trusted accounts on the site, their standing is built almost entirely out of comments, and none of those comment scores are visible to anyone but them.
So karma, the one public measure of how much HN trusts you, is a sum over thousands of scores that are each private. The total is public and every individual number in it is hidden.
To be fair, the attribution is rough. Karma is upvotes minus downvotes, and I'm treating story-karma as the sum of public story points, which ignores downvotes and assumes a point of story score is worth a point of karma. sama's ~0% is the estimate hitting its floor, since his stories are worth more points than his entire karma, so the subtraction bottoms out at zero. The exact percentages are approximate, but I think the direction is right, the gap is way too large to just be an artifact of the math.
What you can see: how people post
What you can rebuild from the public side is how someone submits, and that varies a lot more than karma shows. Two numbers cover most of it: the fraction of posts that clear 100 points (hit-rate), and the fraction that never get past 1 point (dead on arrival).
The table kind of splits into two types of accounts. sama and patio11 post rarely and hit often. sama lands 51% of the time, and patio11 has 52 submissions across seventeen years and a third of them hit. At the other end is edw519, one of the most prolific commenters on the site, who also made 3,819 submissions, 40% of which died at 1 point and 2% of which cleared 100. Karma doesn't show any of this, two accounts can be right next to each other on the karma leaderboard and post completely differently.
One thing is true for everyone, the dead-on-arrival column is never zero. Every account here, including the ones that basically live on the front page, has some posts that went up and died at 1 point. I found that weirdly reassuring.
The account record and the search index don't match
Something I wasn't looking for: HN's account record and its search index don't match. The account lists everything you've submitted, and the index lists everything it can find. For heavy users the two are off by tens of thousands of items, in both directions.
dang is the clearest case. His account record lists 83,933 submissions, and the search index returns 54,007. So about thirty thousand of the moderator's own items are in his history but missing from search. Most of that is probably deleted and dead comments, which stay in the raw history but drop out of the index. It's still a strange result, the person who runs moderation has the least searchable history on the site, and neither public source is complete on its own.
The one hidden score you can get
There is one hidden score, and it's the missing column from earlier. Every comment you've written has a point value that only you can see, only while logged in, one comment at a time. Nothing adds it up for you. But it's your data, behind your own login, so you can go through your whole comment history and sum it yourself. That gives you a number that doesn't exist anywhere else, the distribution of your own comment scores, which HN keeps from you just by never totaling it.
This only works on your own account. Everyone else's comment scores are stripped for you the same way yours are stripped for them. So the only hidden reputation number you can recover on Hacker News is the one you were always allowed to see, just never all in one place.
What I took from it
I went in expecting to find some secret number grading users, and that's not what I found. At least in the public data I checked, there's no separate reputation number to point to. The scores HN deliberately hides are the individual comment scores, and it's explained why it does that.
What's actually there is smaller and I think more accurate. The public reputation number is an aggregate of private ones. Karma is real and it unlocks real permissions on the site, and for most people it's mostly a comment score made of pieces they aren't allowed to see. I thought I was looking for one hidden number, but what interested me more was how the public total is made from a long list of individual numbers nobody else can see.
Run it yourself
It's all read-only and doesn't need an account. There are two endpoints. hacker-news.firebaseio.com/v0/user/YOURNAME.json gives you karma, account age, and the full submitted list. hn.algolia.com/api/v1/search?tags=story,author_YOURNAME gives you every story with its score, and if you swap in tags=comment you get every comment with the score missing. Count both, sum the story points, subtract from karma, and you have your own row of the table. It's about forty lines of Python. Try it on your own username and see how much of your karma came from numbers you never got to see.