Two kinds of bad forecast, and both of them get signed
Ask ten agencies for an organic forecast and you'll get two answers.
The first is a refusal. "SEO can't be forecast — there are too many variables." It sounds like integrity and it's mostly abdication. The client still has to put a number in a budget, so they invent one, usually optimistic, usually without telling anyone. You haven't avoided a forecast. You've avoided being accountable for the one that ends up in the spreadsheet.
The second is worse and more common: a curve that bends upward at exactly the point the contract renews. Nobody in the room believes it. Everyone signs it, because it's the only number on the table.
We have an unusually direct interest in getting this right. Our commercial model is a commitment against the client's own trailing-90-day baseline — miss it and we keep working free — so a forecast we can't defend is a cost we absorb personally. What follows is the model we actually use, the places it's wrong, and the honest way to present it.
Three inputs. Everything else is decoration.
Strip a good forecast back and there are three numbers doing all the work.
Most forecast spreadsheets you'll be shown are enormous — four hundred keywords, difficulty scores, a competitor column, monthly tabs. The size is the sales pitch. Underneath it, there are still only three inputs, and two of them are guesses being presented as arithmetic.
- Multiply the three and you have monthly leads at steady state. Everything else in the file is presentation.
- The fourth input people add — a monthly growth rate, compounding — is where hockey sticks come from. Growth is an output of the ramp curve, not something you get to type in.
- Three wide-ish guesses multiply into an output spanning a factor of five, which is why the last section of this page is about presenting a range rather than a line.
- Demand. How many people search for the things you can plausibly rank for, per month, in your market, excluding your own brand name.
- Achievable click share. What fraction of those searches turn into a visit, at the positions you can realistically reach within the forecast window — not at position one.
- Your conversion rate. What fraction of those visits become a lead or an order, measured on your own site, on non-brand organic traffic, not borrowed from an industry average.
Input one: demand, and what that volume number actually is
Everyone starts here and almost nobody reads the definition of the number they've pasted in.
Google's own documentation is clear that the average monthly searches figure in Keyword Planner is an average across a month range, for the keyword and its close variants, based on the locations and network settings you selected — and that the volume statistics are rounded, which is why totals across locations don't add up the way you'd expect. Read that sentence twice, because four consequences fall out of it.
First, it's an average, usually over twelve months. A term that spikes for six weeks around admissions season and sits near zero the rest of the year reports as a flat mid-sized number, and your forecast will be wrong in both directions at different times of the year. Second, it's bucketed and rounded — you are being handed a range wearing the costume of a point estimate. Third, close variants are grouped, so one row can be several genuinely different intents merged together. Fourth, it counts searches, not people; one buyer researching for a fortnight is many searches.
Where you already rank for something, there's a better source sitting in your own account. Search Console impressions tell you how often a link to your site was actually shown for a query, in your actual market, on your actual result pages. For any cluster where you have even weak visibility, impressions beat third-party volume estimates, because they're measurement rather than modelling.
Two adjustments before the number goes in the model. Strip brand queries out entirely — they were coming anyway, and including them is the most common way an organic forecast overstates itself. Then discount for the queries in your cluster you have no realistic path to, which on a young domain is most of the head terms.
Input three: your conversion rate, not the benchmark's
The third input is the easiest to get right and the one most often borrowed from a blog post. "B2B SaaS converts at 2.3%" is not a fact about your website. It's an average of an unknown sample, and using it is how a forecast ends up wrong by a factor of three in the least visible way.
Your own number is available and specific. In GA4, take non-brand organic sessions landing on the page types the forecast covers, over the last 90 days, and divide the relevant key event — for a lead-gen site, Google's recommended generate_lead event — by those sessions. If the volume is too small to be stable, widen the window rather than substituting a benchmark.
Two rates, not one. Visitor-to-lead comes from analytics. Lead-to-customer comes from your CRM, and it's the one nobody pulls, which is how forecasts end up expressed in leads and budgets end up expressed in revenue with nothing joining them.
Three warnings about the number you get. Non-brand organic converts materially worse than brand organic, so a site-wide blended rate will overstate you. Informational pages convert far worse than commercial ones, so if your forecast is mostly blog content you cannot use your pricing page's rate. And if your leads arrive by phone or WhatsApp — which in India they very often do — your analytics conversion rate is understating reality, and you should say so on the page rather than quietly fixing it with a multiplier.
The model, worked end to end
Illustrative arithmetic with plausible inputs. Not a client, not a result, and the specific numbers matter far less than the shape of the output.
A mid-sized Indian B2B services company. One cluster of twelve related non-brand queries, combined volume around 14,000 searches a month in India. Realistic year-one outcome: positions four to eight on most terms, two to three on a couple of long-tail ones. Their own non-brand organic visitor-to-lead rate, pulled from GA4 over 90 days, is 1.8%. Their CRM says organic leads close at 20%, at ₹1,20,000 gross profit per deal.
- The spread is the finding. Against a ₹75,000/month retainer, the low case is marginal, the base case pays for itself roughly twice over, and the high case is a good business. Presenting only the middle column would be dishonest, and presenting only the right-hand one is what most proposals do.
- Steady state is not month three. Every figure above describes where the cluster settles once the pages rank, which is somewhere between month twelve and month eighteen. The ramp to get there is a separate curve, and quoting a steady-state number as a month-six number is the most common way a proposal misleads without saying anything false.
- Sanity-check against the ceiling. If your base case implies capturing a click share the category has never given anyone, the model is wrong somewhere upstream. Sizing the ceiling first takes an afternoon and catches this before a client does.
- One cluster, not the whole site. Build the model for one cluster, show your working, then repeat it. A single spreadsheet claiming to forecast an entire site is a spreadsheet nobody has checked.
| Line | Low | Base | High |
|---|---|---|---|
| Non-brand cluster demand, monthly | 14,000 | 14,000 | 14,000 |
| Blended click share at achievable positions | 2% | 4% | 7% |
| Organic clicks per month | 280 | 560 | 980 |
| Visitor-to-lead rate, from their own GA4 | 1.8% | 1.8% | 1.8% |
| Leads per month at steady state | 5 | 10 | 17 |
| Closed customers per month at a 20% close rate | 1 | 2 | 3.4 |
| Gross profit per month, at ₹1,20,000 a deal | ₹1,20,000 | ₹2,40,000 | ₹4,08,000 |
The three places every forecast is systematically wrong
Not randomly wrong — systematically, in the same three directions, every time. Naming them in the document is what separates a forecast from a projection nobody will own in nine months.
The volume data is modelled, not measured
Rounded, bucketed, averaged across twelve months, and grouping close variants together. For a stable category the error is tolerable. For a seasonal one it is enormous, and it points in opposite directions at different times of the year.
How to state it: give the demand input as a range too, not just the output. "Between 11,000 and 17,000 monthly non-brand searches, depending on how close variants are grouped" is a more honest opening line than a confident 14,000.
The assumed position is an assumption, not a plan
Every forecast contains a hidden clause: given that we reach these positions. Nobody can promise that clause — Google's own guidance for hiring an SEO says outright that no one can guarantee a #1 ranking, and lists agencies that do among the warning signs.
How to state it: put the assumed position band in the document, visibly, next to the output. If the reader disagrees with position four to eight, they're disagreeing with an assumption you named rather than with your competence.
The result page does not hold still
This is the one that has aged worst. A forecast built in January assumes the same ten blue links in December. Meanwhile AI Overviews and AI Mode change what a click is worth on a query, ads expand, packs appear, and three competitors publish something better than your page.
Google's documentation notes that traffic from AI features is folded into overall search traffic in Search Console rather than reported as a separate channel, which means the composition of the result page can shift under a query without your reporting showing you a clean before-and-after.
How to state it: attach a review date to the forecast, not a defence of it. "This is rebuilt every quarter against actual Search Console data" is a promise you can keep. "This is what will happen" is not.
How to present it: a range with its assumptions attached
The presentation is not cosmetic. A forecast presented as a single line will be quoted back to you as a commitment, and a range presented without its assumptions will be read as the top of the range by everyone in the room.
So: three columns, and directly under each one, the sentence that has to be true for it to happen. Low assumes you reach page one on the mid-tail and nothing else. Base assumes positions four to eight across the cluster and the publishing cadence holds. High assumes two or three terms land in the top three and no AI Overview appears on them. Written that way, an argument about the forecast becomes an argument about an assumption, which is a much more productive meeting.
Then add the two lines that make it usable. What we'll measure monthly to know whether we're tracking — non-brand impressions and average position for the cluster, which move within six to eight weeks, long before leads do. And when we rebuild it — every quarter, against real data, with the old version kept so both sides can see how wrong the last one was.
- Date the forecast and version it. An undated projection gets quoted forever.
- Never show a monthly traffic line chart without an error band. It's the most misleading object in SEO reporting.
- Forecast leads, not sessions. Sessions are trivially easy to hit with pages that produce nothing.
- Keep the superseded versions. Showing a client your last forecast was 30% high, and why, buys more credibility than an accurate one ever will.
Why we commit to a baseline instead — and what that can't do
A forecast is a prediction with no consequence attached. However carefully it's built, if it's wrong the agency is mildly embarrassed and the client is out a year's budget. That asymmetry is the whole problem, and no amount of methodological rigour fixes it.
So we sell a different instrument. We freeze the client's trailing-90-day qualified organic leads on day one, both sides sign the figure, and if we haven't beaten it in 90 days we keep working free until we do. It's the reason we only take three clients a month — you can't carry that risk at volume, and any agency offering it to everyone is either not honouring it or has defined the metric so loosely it can't be missed. The mechanics are on our SEO page.
It's a stronger instrument than a forecast because there's money behind it. It's also a much narrower one, and it's worth being precise about what it doesn't do.
It doesn't size the opportunity. A baseline commitment tells you the floor is rising; it says nothing about the ceiling, and if you need a number for a board deck you still have to build the demand model above. It doesn't work in categories with no search demand — we'll say so in the first call rather than sell a guarantee against a number that can't move. And it deliberately measures a short window, so it proves an engagement is working long before it proves the engagement was worth it.
Use both, for different jobs. The forecast to decide whether to spend the money; the baseline to decide whether the spending is working. An agency offering only the first is asking you to carry all the risk of it being wrong.