A search engine that ranks sites by whether readers pay for them
2026-10-20
ReaderFunded is a web search engine with one unusual ranking input: whether the site's readers pay for it. Not ad revenue, not backlinks, not a model's opinion of the prose. Dated, two-sided evidence that individuals send money to the people who publish the site, read from the platforms where that money moves. I built it because the sites I actually want to find, the one-person blogs, the newsletters, the niche sites, are the ones that lost the most ground to content farms. "Someone pays for this" is the one signal a content farm cannot fake for free.
This post is about the method and about what broke while building it. The product is the method; if the method is wrong the product is wrong.
How a site gets in
A site counts as funded only when the claim runs both ways. The site must link to a funding endpoint (a Patreon, Ko-fi, Buy Me a Coffee, Liberapay, SubscribeStar, Steady, Substack, Tipeee, GitHub Sponsors, Open Collective, or a crypto address on its own pages). And the endpoint must name the site back. A Patreon page that mentions a site it likes is not evidence. A site that pastes someone else's Patreon link in its footer is not evidence. Both together are.
For now the main input comes from Common Crawl: every page in the crawl that links to one of those platforms. The reverse side comes from reading the profile. Both sides carry a source and a date, and both are re-checked monthly. A pair whose evidence goes missing is marked broken and its money fades out over 90 days rather than vanishing, so a link that flaps between two crawls does not flap the score.
Where a platform cannot name a site back, the rule gets stricter, not looser. A Substack only ties to a site through the custom domain it is served from. A bitcoin address is credited to the one site that publishes it, only if no other site in the corpus publishes it and its on-chain history looks like donations rather than an exchange wallet.
How a site gets a weight
Two terms, each a logarithm so another order of magnitude of money adds a constant rather than a multiple:
- payers: people paying now. Patreon's paid member count, Liberapay's patrons, a Substack's paid tier, Tipeee's tippers. Ko-fi and Buy Me a Coffee only publish lifetime supporter totals, so those are discounted to a recurring equivalent, calibrated on the sites that run both a Patreon and a Buy Me a Coffee.
- revenue: yearly dollars where the creator publishes them.
They blend 75/25. I experimented with different proportion. But gave weight to the number of the people donating. If someone is ready to give your site even a single dollar is huge. Spending 1 or 10 dollars does not make such a big difference. A site missing one term is treated as average on it, never as a second copy of the term it has, so publishing more evidence can never lower a score. Estimates enter at half strength and are labeled as estimates everywhere.
Every site carries a tier that says how well its number of paying supporters is known. A: a published count of people paying now. B: a count that only estimates it (lifetime totals, a Substack bracket, sponsor lists). C: verified, but no count at all. The tier is not part of the weight. It is a label for readers (tier:A works in the search box) and it decides the crawler's budget: 60% of each indexing pass goes to tier A sites, 30% to B, 10% to C.
Search itself is BM25 over the indexed pages, plus a funding term: 2 × min(ln(1 + weight), 2.5). So funding can add at most 5 points, and a page still has to be about the thing you typed. There is also a personalized PageRank over Common Crawl's host graph (134 million domains), seeded by the funded sites and weighted by their money, so that what funded sites link to gets credit too. It is computed and published per domain but not yet in the search score; I wanted to see the direct signal on its own first.
Every result has a "why?" link. It lists the site's endpoints, who claimed each direction and when, every money fact with its source, and the weight rebuilt step by step from those facts. If a score cannot be traced that way, it is a bug.
What broke
This is the part I think is worth reading.
The fake donations. The on-chain collector's first pass credited gwern.net with 111,114 BTC. An article on the site quoted a whale's address, and the collector read it as a donation address. The guard that exists now, one claimant per address, plausible volume, a cap on the amount, was written that day. The address is still in the database as a weightless candidate.
Mention is not evidence. An early Substack rule accepted a publication that mentioned a site as that site's funder. It verified one newsletter as the funding source of 24 sites it had discussed. All 24 were cleared and the rule was replaced with the custom-domain rule above. It is the standing example in my own docs of why both directions have to be explicit claims.
The Patreon page shape. Patreon's page since 2025 loads the campaign client-side and embeds only its id. Two thirds of the verified Patreon profiles (8,963 of 13,763) produced no counts, although Patreon publishes them. Those sites sat at the tier C floor for weeks before I noticed the shape. The fix reads the id and asks the public campaign endpoint, one more request at the same spacing.
The Steady free plans. Steady is a German membership platform. A project whose plans are all free was verified as funded, because the link ran both ways and the pipeline did not ask whether any plan cost money. Fixing that produced the opposite bug: the price regex read the rendered plan card wrongly and called twenty paying projects free. The third version reads the plan JSON the page embeds and falls back to the cards. Each of the three versions was "done" when I shipped it.
The wash-donation question
So how can you game the system? There are two attacks, and I have priced both against the live formula. The cheap one is a profile with nothing in it; the expensive one is a profile with fake people in it.
The cheap attack: an empty profile. Register a domain, attach an empty Ko-fi you control, and both directions verify, for about $10 a year. When I first costed this (September 2026) a verified site with no amounts got a floor weight worth 28% of the maximum search boost. The spec said the floor should be about 1% of a typical quantified seed; it was 17 times that. It is 1% now. The cost of that fix falls on real creators: about 22,000 of them are on platforms that hide their counts, and they now get almost nothing from being verified. That trade is deliberate and I am not sure it is right.
What is left to fake is payers. The floor fix only works because the weight above the floor comes from known payers. It did not always: until this week the tiers graded revenue, which put every US nonprofit with a 990 filing in tier A, above a blog with 300 named patrons, and the headline "verified sites" count was 85% nonprofits by number. The creator index and the nonprofit index are different indexes now; the search uses the creator scope, and the tiers grade known payers. So an attacker who wants more than the floor has to supply payers, which brings us to the attack everyone proposes first.
The expensive attack: sock payers. Fund your own Patreon with accounts you control. I costed it with the live formula, Patreon's cut plus payment processing at about 13% on every faked dollar, forever:
| fake payers at $10/month | fees per year | weight | rank among ~48k seeds | search boost of max 5 |
|---|---|---|---|---|
| 10 | $156 | 5.8 | ~4,200 | 3.8 |
| 40 | $624 | 12.2 | ~1,400 | 5.0 |
| 500 | $7,800 | 30.2 | ~50 | 5.0 |
| 1,000 | $15,600 | 36.5 | ~20 | 5.0 |
Log damping does what it is meant to for rank: going from 40 to 1,000 payers costs 25 times the fees for 3 times the weight, and rank 50 is about $8k a year plus 500 accounts a payment platform's fraud team is also looking for.
What it does not do is make a sufficient score expensive. Forty sock payers, about $624 a year in fees, buy the maximum search boost. I am not going to pretend that is closed. What stands in the way today:
- Both sides must exist and survive monthly re-checks, so the sock accounts pay fees for as long as the boost lasts.
- A payer-history monitor flags a campaign with many payers and a recent start, many payers and almost no posts, or a paying count that multiplied inside a window. It flags for review; nothing is penalized automatically.
- Age gating is built and switched off: evidence can enter at 25% and ramp to full over 90 days of surviving re-checks. It is off because nobody games an index with no traffic and every genuine new creator would wait a quarter. It is one flag when that changes.
- A site revoked by hand becomes a negative seed, and distrust is propagated backwards over the reversed link graph, so a network that keeps pointing at caught sites gets pointed at.
- The boost is capped at 5 points of BM25, so the page still has to match.
The honest summary: $10 a year buys a verified badge worth 1% of the boost, and $624 a year buys the maximum boost, on a search engine whose traffic is, today, small. The day the traffic is worth more than that, the gate goes on and the monitor gets teeth. The platforms' own fraud teams are the real defense against sock payers and always will be.
What it does not cover
- A creator funded through a platform I do not read, or a page Common Crawl did not see, has no evidence and no weight. Discovery follows Common Crawl's cadence, so a site funded last week is found when the next crawl is worked.
- Patreon, Ko-fi and Buy Me a Coffee counts come from public profile pages and can stop at any time. The durable sources (IRS filings, Open Collective's API, Liberapay's JSON, on-chain) would remain; the creator scope would thin. Publisher self-verification is the planned replacement, not a scrape.
- Adult sites are labeled by the platform's own flag and left out unless you turn safe search off.
- Categories and languages are keyword heuristics. Half the sites are "general".
- Verification started in August 2026. The broken and decay states have barely been exercised on real data.
- The raw top of the list is whatever people pay for, and some of it is political. Nothing is removed for its subject.
Numbers today
About 2 million pages indexed across about 26,000 funded sites (tier A and B; another 22,000 verified sites sit at the floor). 337,000 verified pairs, 2.2 million money facts. By platform, roughly: Buy Me a Coffee 13,700 sites, Patreon 11,000, YouTube channels 6,700, Substack 1,600, Ko-fi 1,400, Steady 300, GitHub Sponsors 190, Tipeee 100 (added this week), Liberapay 40, SubscribeStar 30.
Stack, since someone will ask: Kotlin, one SQLite file, one Windows desktop under a desk, Cloudflare tunnel in front. No LLM anywhere in the ranking.
The full method, the attack ladder with its costs, and the list of things I do not claim are at https://readerfunded.com/method. I would rather be told where it is wrong than where it is clever.