Free SEO ROI Calculator
Model what an SEO budget returns in traffic, leads and revenue, and the month it pays for itself.
What this calculator does
This free SEO ROI calculator forecasts the return on an SEO budget from your own numbers: current organic traffic, average ranking position, conversion rate, order or deal value and monthly spend. SEO ROI, as the tool defines it, is the cumulative extra revenue a campaign generates minus its cost, as a percentage of that cost.
Choose a business model (ecommerce, lead generation or professional services), a campaign length of 6 to 24 months and a scenario, and it returns projected revenue uplift, cumulative gain, total investment, ROI, break-even month and a month-by-month chart. I built it for marketing managers who need a defensible figure for a budget conversation, founders sizing a first retainer and enterprise teams checking an agency proposal. Every output is a directional projection, not a guarantee. Use the conservative scenario when the number is going in front of a finance director.
Four steps to a forecast
Choose the model, length and scenario
Ecommerce, Lead Gen or Services sets the revenue formula, campaign length sets how far rankings can move, and the scenario scales the gain by 0.6, 1.0 or 1.4.
Enter your current position
Monthly organic visits, the average position of the pages in scope, and optionally the combined search volume of their keywords, which caps the traffic awarded.
Set the revenue model and budget
Conversion rate and order value, plus a close rate for lead generation or a lifetime value multiplier for services, then the all-in monthly budget and a 0 to 100 domain strength score.
Read the cards and copy the results
Target position, extra revenue, cumulative gain, ROI and break-even month, plus a chart of revenue against spend and a copy button for a plain-text summary.
How the calculation works
1. Target position from domain strength
Domain strength sets a base gain: under 20 gives 3 places, 20 to 39 gives 5, 40 to 59 gives 7, 60 and above gives 9. Campaign length scales it (6 months × 0.5, 12 × 1.0, 18 × 1.35, 24 × 1.65), rounded down, never passing position 1. The professional curve adds one place.
target = max(1, current position − floor(base gain × length multiplier))
2. Traffic at the target position
The click-through-rate table for positions 1 to 20 is 27.6, 15.8, 11.0, 8.4, 6.3, 4.9, 3.9, 3.3, 2.7, 2.4, 2.1, 1.8, 1.6, 1.4, 1.2, 1.1, 1.0, 0.9, 0.8 and 0.7 per cent; positions 21 to 50 use 0.7. Projected traffic is current traffic × target CTR ÷ current CTR, capped at 85% of volume × target CTR if you enter a volume, with a 5% growth floor.
extra traffic = (min(current × targetCTR ÷ currentCTR, volume × targetCTR × 0.85) − current) × scenario
3. Revenue from the extra traffic
Ecommerce: extra traffic × conversion rate × order value. Lead generation: × close rate × deal value. Services: the lead generation result × the lifetime value multiplier. That is the extra monthly revenue at full run-rate.
4. The ramp curve
Month m earns 1 ÷ (1 + e−8 × (m ÷ months − 0.45)) of run-rate. Over 12 months that is 5% in month 1, 17% in month 3, 60% in month 6, 92% in month 9 and 99% in month 12, summing to 7.06 months at full run-rate.
5. Break-even and ROI
Each month adds phased revenue to a cumulative revenue total and the budget to a cumulative investment total. Break-even is the first month cumulative revenue reaches cumulative investment.
ROI % = (cumulative revenue − cumulative investment) ÷ cumulative investment × 100
Ecommerce, 3,000 visits at position 12, 20,000 searches, 2.5% conversion, £150 order value, £1,500 a month, domain strength 25, 12 months, standard; a 20% close rate and 2× lifetime multiplier for the other models. With these the volume ceiling binds, so the page opens on a capped 5% gain: replace them, and enter the combined volume of every keyword or set the slider to Skip.
Three worked examples
Standard 12-month scenario, inputs chosen so traffic roughly equals volume × current CTR. Illustrative, not client results.
| Input or output | SaaS (lead generation) | Ecommerce | Local service (services) |
|---|---|---|---|
| Inputs | |||
| Monthly traffic, position | 2,000, position 14 | 4,000, position 9 | 400, position 18 |
| Monthly search volume | 150,000 | 150,000 | 40,000 |
| Conversion, close rate | 2%, 15% | 2% | 4%, 30% |
| Value per customer | £3,000 deal | £85 order | £2,500 × 2 lifetime |
| Budget, domain strength | £3,500, DR 45 | £2,500, DR 35 | £1,000, DR 15 |
| Outputs | |||
| Target position, CTR | 7 (1.4% → 3.9%) | 4 (2.7% → 8.4%) | 15 (0.9% → 1.2%) |
| Extra traffic at run-rate | +2,973 (volume cap) | +6,710 (volume cap) | +20 (5% floor) |
| Extra revenue at run-rate | £26,753 | £11,407 | £1,200 |
| 12-month gain, investment | £188,812, £42,000 | £80,508, £30,000 | £8,469, £12,000 |
| ROI, break-even | 350%, month 4 | 168%, month 6 | −29%, not reached |
| Conservative scenario | 170%, month 6 | 61%, month 8 | −58%, not reached |
The local example is the instructive one: 3 places from position 18 lifts CTR only to 1.2%, and the ceiling caps traffic at 420 visits, so £1,000 a month cannot pay back on 20 extra visits. Over 24 months the gain is 4 places and it breaks even in month 12 at 159% ROI. Weak domains need longer horizons, not bigger budgets.
How to use the outputs
What the break-even month tells you
Break-even is the month in which extra revenue earned so far equals budget spent so far. Before it you are funding the campaign; after it every month is net positive and the gap widens, because run-rate persists while spend stays flat. A break-even in the final quarter means the ROI is small and sensitive, so compare conservative and standard before relying on it. Not reached? Check the volume ceiling, then a longer campaign, then the conversion rate.
Presenting it to a budget holder
- Lead with the conservative scenario. Standard and optimistic are the range, not the promise.
- Pair break-even with total investment. "£42,000 over 12 months, recovered by month 4" is the payback frame finance already uses.
- State the assumptions (CTR table, domain-strength band, ramp, volume entered) so any challenge lands on an input.
- Compare with paid. Extra traffic × your cost per click is what the same visits cost every month, with nothing retained.
What this tool does not do
- No data connection: you type the figures, and the output is only as good as they are.
- No keyword-level modelling: one averaged position and a blended CTR table that ignores SERP features such as AI Overviews.
- No seasonality, algorithm updates or competitor activity.
- No credit for traffic that persists after the campaign, so long-term ROI is understated.
- No substitute for an audit of whether the site can technically support growth.
Questions about the calculator
Where do I find the inputs?
Google Search Console, Performance report, filtered to the pages in scope: clicks for the last three months divided by three, and the average position column. Sum search volume across the target keywords in a keyword tool. Domain strength is Ahrefs Domain Rating or similar.
Can I use it as an enterprise SEO ROI calculator?
Yes, up to 50,000 monthly visits, 200,000 searches and £10,000 a month. For a larger site, run it per product line or market and add the results.
Why is my break-even beyond the campaign length?
Three usual causes: the search volume is too low for your existing traffic, so the ceiling pins growth at 5%; the starting position is 20 or worse, where every position shares the 0.7% benchmark; or the budget is high relative to revenue per visitor. Try 24 months first.
Which scenario should I choose?
Conservative for any budget decision, standard as the working forecast, optimistic only with strong content, clean technical health and active link acquisition.
Does it store my figures?
No. It runs entirely in your browser; nothing is saved or sent. Data leaves the page only when you copy the results.
Turn the projection into a plan
My monthly SEO retainer delivers the position gains this calculator assumes, run by me rather than an account manager. Want a second opinion on the inputs? Send me the copied results.
