PeakKR

SEO campaign estimation

SEO Campaign Estimation Using Historical Time Data

Most agencies estimate SEO campaigns the same way they did in year one: someone stares at the scope, remembers a vaguely similar project, and says "call it 80 hours." Then the campaign runs 130 hours, the retainer margin evaporates, and everyone agrees the client was "unusually difficult."

The client wasn't unusually difficult. The estimate was unusually uninformed. And if you've been tracking time for more than a year, you already own the data that would have prevented it.

This is a practical guide to SEO campaign estimation using your own historical time data — what to extract, how to convert it into forecasts, and the specific traps that make time data lie to you.

Why gut-feel estimates fail specifically in SEO

SEO work has three properties that make intuition unreliable.

The work is invisible until it isn't. A technical audit on a 400-page Shopify site takes six hours. The same audit on a 40,000-URL enterprise site with faceted navigation, three subdomains, and a decade of redirect chains takes 30. Both go on the proposal as "Technical SEO Audit."

Outcomes are decoupled from effort. A content refresh that takes four hours can produce more traffic lift than a 40-hour migration. So teams stop associating deliverables with effort and start associating them with impact — which is right for strategy and disastrous for forecasting.

Client overhead is enormous and unbudgeted. In agency data I've reviewed, non-production time — calls, Slack, revision rounds, reporting, internal handoffs — routinely runs 30 to 45 percent of total campaign hours. Almost nobody estimates it.

Historical time data fixes all three, but only if you structure it deliberately.

Step 1: Restructure your time data around repeatable units

Raw time logs are nearly useless for estimation. "8.5h — Client X — SEO" tells you nothing you can reuse.

What you need is time logged against repeatable deliverable types. Build a short, boring taxonomy — 12 to 20 items maximum — and use it across every client. Something like:

The last two matter most. If your taxonomy has no bucket for "talking to the client," that time gets misfiled into production categories and your per-deliverable benchmarks inflate unpredictably.

Step 2: Calculate medians and ranges, not averages

Averages are wrecked by outliers, and SEO work is full of outliers. One migration that went nuclear will drag your "average migration" up by 40 percent and make every future proposal uncompetitive.

Use the median as your baseline and the 80th percentile as your risk buffer. A real example from an agency dataset of 34 technical audits:

You quote against the median plus a defined buffer. You staff against the 80th percentile. That gap — 9.5 to 18 — is your actual commercial risk, and now it's visible instead of a surprise in month two.

Segment before you average anything

Pooling all your audits together hides the real driver of variance. Segment by the factors that actually predict effort:

Once you have four to five segments per deliverable type, your estimates get sharp fast.

Step 3: Build the estimate bottom-up, then apply overhead

Here's the arithmetic for a six-month mid-market campaign, using historical medians:

  1. Technical audit, 1k–10k URLs, WordPress: 11h
  2. Keyword research and mapping, 120 terms: 14h
  3. On-page optimization, 24 pages at 1.8h median: 43h
  4. Content briefs, 12 at 1.5h: 18h
  5. Content production, 12 pieces at 4.2h: 50h
  6. Link campaign, 15 placements at 3.5h: 53h
  7. Reporting, 6 months at 3h: 18h

Production subtotal: 207 hours.

Now the part most agencies skip. Apply your historical overhead ratio — the measured relationship between production hours and total logged hours. If your data says account management and client comms have run at 32 percent of production time:

207 × 1.32 = 273 hours. That's your realistic forecast. At a $130 blended cost rate, that's $35,490 in delivery cost, which tells you exactly what the retainer needs to clear.

The difference between quoting 207 and 273 hours is the difference between a 38 percent margin and a 6 percent one. This is why so many retainers quietly go underwater — and it's worth reading how to spot unprofitable retainers before they drain you if you suspect you already have two or three.

Step 4: Add complexity multipliers for the unknown

New verticals, new platforms, and new client archetypes break historical benchmarks. Rather than guessing, apply explicit multipliers and record whether they were right:

These start as educated guesses. After six months of tracking actuals against multipliers, they become calibrated. That feedback loop is the whole game.

Step 5: Close the loop with variance reviews

Estimation only improves if someone compares forecast to actual and asks why they differed. Run a 20-minute variance review at each campaign close with three questions:

  1. Which deliverables came in more than 20 percent over estimate? Fix the benchmark or fix the process — don't just note it.
  2. Was the overrun scope, complexity, or execution? Scope creep is a contract problem. Complexity is an estimation problem. Execution is a training or tooling problem. Different fixes.
  3. What did we learn that changes the next proposal? Write one sentence. Add it to the estimation notes for that segment.

Agencies that do this quarterly typically get estimate accuracy from ±45 percent to within ±15 percent inside a year. That's the entire margin difference between a struggling agency and a comfortable one.

The traps that make historical data mislead you

Retroactive time entry. Time logged on Friday for a whole week is guesswork dressed as data — usually rounded to convenient numbers and biased toward billable-looking work. Same-day logging is non-negotiable, which is more about culture than software; why agency time tracking data lies covers the specific distortions.

Unlogged rework. When a strategist redoes a keyword map because the client changed direction, that often gets logged under the original task or not at all. Create a "revision" flag so you can see how much rework costs you per client type.

Survivorship bias in your dataset. Campaigns that got cancelled at month two are often excluded from analysis, but they're frequently the ones that were badly estimated in the first place. Include them.

Senior-junior blending. Forty hours from

Featured in this list? Grab your “Featured on PeakKR” badge and add it to your site — free.
Get your badge →

Frequently asked questions

How much historical data do I need before I can estimate accurately?

Three to five completed instances of the same deliverable type is usually enough to spot a pattern, and 10+ gives you a defensible range. Below three, you're still guessing — use the data as a sanity check on gut estimates rather than as the estimate itself.

Should I estimate in hours or in deliverables?

Estimate in deliverables, then convert to hours using your historical median per deliverable. Clients understand "12 optimized pages and 3 link campaigns"; they don't understand 140 hours. The hours are for your internal capacity and margin math.

Why are my estimates always low even when I use past data?

Most agencies only log production time and forget the surrounding work — client calls, revision rounds, QA, reporting, internal coordination. Historical data that excludes this overhead will consistently under-forecast by 25 to 40 percent. Track everything under the project code, not just the billable-looking work.

How do I handle a niche or client type I've never worked with?

Find the closest analogue in your data and apply a complexity multiplier — typically 1.3x to 1.6x for unfamiliar verticals, enterprise stakeholders, or legacy CMS platforms. Then set an explicit checkpoint at 30 percent of budget to recalibrate before you're too deep to renegotiate.

Nick Quirk

Written by Nick Quirk

Founder of PeakKR

Nick Quirk is the founder of PeakKR, the agency workspace. He has spent decades running SEO and operations for marketing agencies, and writes about what holds up in real client work: technical audits, reporting, local campaigns, retainers and the systems behind them.

Run your agency on PeakKR

Client projects with phases, time tracking, technical SEO audits, client-ready reporting and AI briefs — the workspace this blog is written from.

Start free

Keep reading