SEO ROI calculator
Most SEO proposals quote a monthly fee and a list of deliverables, and leave the client to guess whether the arithmetic works. This does the arithmetic.
calculatorYou leave with: A payback month, a 12-month return multiple, and a break-even traffic figure
What the model is doing
The chain is short and every link is one of your inputs. Combined monthly searches are reduced by the zero-click share to get searches still available to click. Your click-through rate turns those into sessions. Conversion rate turns sessions into leads, close rate turns leads into customers, and deal value multiplied by gross margin turns customers into gross profit. That is the monthly figure at maturity.
Then time is applied. Month one produces a fraction of that profit, month two a larger fraction, and the full figure arrives in the month you set as months to full ranking. Cost, meanwhile, starts at full rate immediately and includes the one-off setup in month one. The payback month is the first month where the running total of profit passes the running total of cost, which is the crossing point drawn on the chart.
The number people get wrong
Click-through rate. It is tempting to enter the figure for position one because that is where the proposal says you will end up, and the result is a forecast that is roughly three times too optimistic for a campaign that lands at position three. The default here is 10%, which corresponds to position three on a clean result page. If there are ads above the organic results, or an AI Overview, the real rate is lower again — and the way to represent that is to raise the zero-click share rather than to invent a smaller CTR, because those are two different losses and mixing them makes the model impossible to argue with later.
The second most abused input is deal value, which should be the value of one order rather than the lifetime value of the customer who placed it, unless the cost side is also running over that lifetime. Mismatching the two horizons is how a programme shows a four-month payback on a spreadsheet and an unpaid invoice in month nine.
What it deliberately does not model
Brand search, which usually rises during any content programme and is the hardest lift to attribute honestly. Seasonality, which matters enormously in retail and not at all in most B2B. Cannibalisation of paid search, where organic clicks replace clicks you were already buying, and which makes the true return higher than this shows. Competitor response. Any of these can move the answer by a wide margin, and a calculator that pretended to include them would be inventing coefficients rather than modelling anything.
Use it the way it is built: to find out what has to be true for the spend to make sense, and then to argue about whether those things are true. If the model needs a 6% conversion rate and a position-one ranking on a keyword owned by an incumbent with three thousand referring domains, that is the finding — arrived at before the budget, rather than after.
Checking the traffic assumption against a live page
The one input this cannot supply is where you rank now and what is actually reachable. For that you need something to fetch your live URLs, which no browser tab is allowed to do. The free checkers on visibility100x.com crawl a page from a server and report what search engines and AI assistants can read from it, which is the input this model treats as given.
Questions
What counts as a realistic click-through rate for position one?
Across public studies of Google click distribution, position one takes somewhere between 25% and 40% of clicks on a query with no ads and no AI Overview above it, and materially less when either is present. The calculator defaults to 28% and lets you move it, because the honest answer is that it depends on the SERP for your specific query and anyone quoting a single universal number is selling something.
Why does the model ramp traffic instead of applying it from month one?
Because nothing ranks in month one. New content on an established domain typically takes three to six months to reach a stable position, and longer on a domain with no link profile. The ramp spreads the modelled traffic over the period you set, so the payback month reflects the delay rather than pretending the first invoice buys the first customer.
Does this account for AI assistants answering the query instead?
Partly, through the zero-click share input. Set it to the proportion of searches you expect to end without a click to anyone, and the model removes that share from the addressable clicks before it applies your CTR. It is a blunt instrument, but leaving it at zero produces a forecast that assumes the SERP of 2019.
Can I use this for a client proposal?
Yes, and the export is built for that: the CSV carries every input alongside the outputs, so the assumptions travel with the number. A forecast without its assumptions is not a forecast, and it is the thing that gets you into an awkward meeting in month seven.
The other four