Free worksheet · 4 minutes · no email, no tracking
The Ceiling Test
Before you build the site, compute what the site is worth at its best. Twelve lines of arithmetic. If the answer is small, the four hours you were about to spend are a donation.
The formula
ceiling/mo = monthly_clicks_available × your_realistic_share × $per_1k_clicks ÷ 1000
Four inputs. Three of them you can look up in ten minutes. The fourth — your realistic share — is the one people invent, so the calculator below caps it for you.
Why a ceiling and not a forecast: a forecast assumes you execute well, get indexed, keep the domain, and still care in month nine. A ceiling assumes nothing. If the ceiling is $9/month, no amount of execution gets you to rent.
The calculator
Everything here runs in your browser. Nothing is sent anywhere, nothing is stored.
Three worked examples, with my own numbers
From a portfolio of ten live sites. The red row is the one that cost me the most.
| Idea (anonymised) | Clicks/mo | $/1k clicks | Ceiling/mo | Verdict |
|---|---|---|---|---|
| Generator on a cheap .fun domain, "it only needs 8 pages" | 30–80, flat for 12 months | $0.11 (measured, ad network) | $0.01 | Do not build. I built it: 7h, ¥12 paid, ¥93 renewal coming. |
| Converter tool site, one high-volume query | peak 1,109 → 20 after a single index event | $0.9 (AdSense, held under a payout floor) | $1.00 → $0.02 | Do not build on a third-party index. Traffic is a loan. |
| Non-English tool page, affiliate intent, 3 pages | 0 → 29 → 408 and accelerating | $8 (affiliate, per 1k sessions) | $3.3 → $11 | Build. Small ceiling, positive slope, near-zero cost — the only combination worth an evening. |
The first two were "quick" builds. Both shipped. Neither pays for the domain. The third was a worse idea on paper and is the only one of the three whose curve points up. Gate 0 does not grade your taste; it grades the arithmetic.
Four numbers that will lie to you
1. Ad RPM is a gross number, and networks pay less than they advertise
Take the published RPM and halve it before it enters the formula. If your whole idea depends on the difference between $4 and $2 RPM, the idea depends on a rounding error.
2. Sessions are not clicks
On one of my sites GA4 recorded roughly one session per four Search Console clicks — consent mode, blocked scripts, the usual. Every "revenue per 1,000 sessions" metric derived from it was inflated 4×, which made a dead site look nearly profitable. Measure per 1,000 clicks.
3. The price you paid is not the price you will pay
¥12 for the first year, ¥93 at renewal. 7.75×. Put the list renewal price in the cost box, not the promo you grabbed. Same trap on the AI subscription that "just" helps you write pages.
4. A balance is not revenue
$26.96 sitting under a $100 payout threshold is not money. It is a hostage: it converts to zero the week you stop, and it makes your "lifetime earnings" look 20× better than your monthly rate. Count money when it arrives.
The six lines you must be able to write before you build
query universe : ____ clicks/mo (source + date) realistic share : ____ % (page-1-for-a-new-domain is 5-10%) monetisable rate : $____ per 1k clicks (measured, or published ÷ 2) ceiling : $____/mo → under $30 = do not build cost to stay alive : $____/yr (renewal at list price + hosting + shared subs ÷ n) kill date + gate : if <____ clicks/mo AND <$____/mo by YYYY-MM-DD → stop, no extension
If you cannot fill line 6 before you have the traffic, you will not fill it in month eight either — that is precisely when the site gets its quiet renewal and its 11th hour per week.
The gate, in the shape you can paste into a repo
{
"domain": "example.com",
"renewal_est_usd": 13, // list price, not the promo
"kill_date": "2027-02-28",
"hours_budget_30d": 10,
"measured_revenue_usd_month": 0, // 0 is a value, not a blank
"gates": [
{ "label": "search clicks ≥ 300/mo", "metric": "search_clicks_month", "op": ">=", "threshold": 300 },
{ "label": "measured revenue ≥ $10/mo", "metric": "measured_revenue_usd_month", "op": ">=", "threshold": 10 }
],
"note": "why this site exists, and what would prove it should stop"
}
Two rules make this file worth more than the code you are about to write. Write it while you are still excited — in month five you will argue with it. And 0 is a value: a blank field gets read as "not measured yet", which is how a site survives eleven consecutive months of nothing.
If the ceiling is fine, build it — but in four hours
The ceiling test kills bad ideas. It does not tell you how to execute a good one, and a good idea
executed for three weeks is still a loss. The rest of the method I use lives in a small kit: a runbook
that ends at "live + pushed to Bing" in four hours, an AGENTS.md contract that stops your
AI agent from rewriting titles while your ranking is falling, seven zero-dependency check scripts that
fail the build on duplicated pages and dishonest schema, and a ledger that recomputes this arithmetic
monthly and names the site you are wasting hours on.
The kit — $29 founding / $79 standard. Everything in the Ceiling Test is in it, plus the scripts and the docs that make the rule stick when you do not want to follow it. It also contains the parts of this page I got wrong the first time, on ten sites, in writing.
Listing: https://lhqlvp.gumroad.com/l/4h-tool-site-kit · the
worksheet above is deliberately not gated. Keep it, publish it, use it on your own next idea.
中文版:上线前先算这 12 行
公式:`上限/月 = 该查询集每月总点击 × 你现实能拿到的份额 × 每千次点击价值 ÷ 1000`。
算出来 < $30/月 → 不建。这不是打击你,是把 7 个小时还给你。
四个会骗你的数字:① 广告 RPM 先除以 2 再用;② 别用会话口径——我有个站 GA4 每 4 次点击只记 1 个会话, 按会话算的单位收益虚高 4 倍;③ 续费填挂牌价,不是首年促销价(¥12 → ¥93,差 7.75 倍); ④ 余额不是收入——$26.96 卡在 $100 起付线下,只是人质,不是钱。
动手前必须能写出六行:查询量、现实份额(新站第一年首页 5-10%,不是 30%)、每千点击价值、上限、 一年活着的成本、到期日与判定闸门。第六行现在写不出来,第八个月也写不出来—— 而那时它会安静地续费,并再吃掉你每周 11 小时。
三个我自己的例子:.fun 生成器站(30-80 点击/月,$0.11/1k → 上限 $0.01,我建了); 转换工具站(峰值 1,109 点击/月,一次索引事件后连续 5 个月 0); 印尼语工具页(0 → 29 → 408 且在加速,联盟 $8/1k → 上限 $11/月,只有这个值得一个晚上)。