The proof: keywords ranking nearly quadrupled in 18 days
Start with the result, because it is the point. We re-ran the exact pipeline on June 1, 18 days after the canonical May 15 build, against a comparable corpus (4,842 keywords then, 4,831 now). The clean read across the two runs: the number of keywords actually ranking in Google Search Console went from 7 to 27, and the coverage gaps the strategy set out to close fell by nearly half.
- The site started ranking for terms it never reached before, led by google analytics 4 (9,900 searches/mo) at position 31, a topic cluster it had zero presence in at the May 15 build.
- Commercial long-tail entered the results too: is wix good for seo, seo audit pdf, and ai traffic in ga4 all now surface where they did not before.
The honest read: this is a leading indicator, not a traffic win. Every new keyword except the brand term sits mid-page (positions 20-95), and non-brand clicks are still essentially zero. Ranking for 27 queries instead of 7 means Google now puts us in the race for far more searches; turning those positions into page-one clicks is the next phase. Treat it as correlation with the May builds, not proof of ROI.
| Signal | May 15 | Jun 1 | Change |
|---|---|---|---|
| Keywords ranking in Search Console | 7 | 27 | +20 (~3.9x) |
| Coverage gaps (real demand, no page) | 601 | 325 | -276 (-46%) |
| Keywords covered by a page | 1,035 | 1,612 | +577 (+56%) |
| Brand term "stackra" avg position | 4.1 | 2.3 | up ~1.9 spots |
| Queries triggering an AI Overview | 639 | 660 | +21 |
The approach
We pointed the pipeline at our own site, stackra.app. The goal was not to find a million keywords. It was to build a clean, costed, deduplicated corpus, map every keyword to a page we already had (or did not have), then target the handful worth writing for. Everything below is from real production runs. The canonical full build is the May 15 2026 run: 4,842 keywords captured for about $1 marginal.
The cost model: unit prices, exactly as we pay them
DataForSEO bills per call, not per seat. Knowing the unit price of each endpoint is what lets you spend deliberately instead of blindly.
- Batching. Search volume is a flat $0.075 whether you send 1 keyword or 1,000, so we always max the batch at 1,000.
- Caching. Volume and related results are cached 30 days, SERPs 14 days. A re-audit within the 14-day SERP window reuses the expensive SERP calls and drops the cost to about $1.
| Source | Endpoint | Unit | Price |
|---|---|---|---|
| Google Suggest (autocomplete) | public suggest endpoint | per probe | Free |
| Search Volume | Google Ads search_volume/live | up to 1,000 kw / request | $0.075 flat |
| Global Volume | DFS Labs keyword_overview/live | up to 1,000 kw / task | ~$0.01 |
| Related Keywords | DFS Labs related_keywords/live | per seed + per returned kw | ~$0.01/seed + $0.0001/kw |
| SERP | Google organic/live/advanced | per keyword | $0.002 |
| On-page parse | DFS on-page | per URL | ~$0.003 |
The pipeline, step by step
Counts are from the May 15 build: 203 seeds in, 4,842 keywords out.
Run total (May 15): roughly $1.06 marginal, because caching from earlier runs covered most of the volume and related calls. The first-ever full build cost $3.52 because nothing was cached yet.
| Step | What we did | Input -> Output | Cost |
|---|---|---|---|
| 1. Seed the corpus | Hand-wrote seeds: what we sell, the problem we solve, our category, brand variants, competitor brand terms. | -> 203 seeds | Free |
| 2. Free breadth (autocomplete) | Ran each seed through Google Suggest with the a-z trick plus question prefixes to harvest long-tail. | 203 -> 4,482 added | Free |
| 3. Paid breadth (related) | Called DFS Related Keywords per seed for semantic neighbors autocomplete misses. Volume comes back attached. | 203 seeds -> 157 kept | ~$0.02 marginal |
| 4. Filter noise | Regex blocklist drops off-topic drift before we pay (e.g. our brand colliding with HR stack ranking or IRS audit). | removes off-topic | Free |
| 5. Get volume | One batched Google Ads call per 1,000 keywords. Cache covered the rest; only 1,539 were live misses. | 1,539 priced live | $0.15 |
| 6. Volume gate | Drop anything under 30 searches/mo from deeper paid analysis. Of 4,842 captured, only 1,165 cleared the floor. | 4,842 -> 1,165 | Free |
| 7. Pull live SERPs | Fetch the real Google SERP: who ranks, AI Overview and cited domains, People Also Ask, forums, Knowledge Graph. Cache served 847; 454 live. | 454 live SERPs | $0.91 |
| 8. Match to our pages | Token-scored every keyword against our own sitemap pages. Partial match >= 40, covered >= 70. | 4,842 classified | Free |
| 9. Pick targets | Prioritized the mid-volume commercial band where intent is real but the SERP is not locked up by giants. | 97 in 800-1,600/mo band | Free |
What one complete cold pass costs
A complete pass is one full cold run with nothing cached, at our canonical scale: ~203 seeds expanding to ~4,842 keywords, of which ~1,300 get a live SERP. The May 15 run actually cost about $1.06 marginal because it reused cached calls. The ~$5.03 below is what the same run costs from a standing start with an empty cache. Same run, three cache conditions, not a contradiction.
A re-run within 14 days costs roughly $1, because the SERPs (the biggest line item) are still cached and reused. After that window expires, a re-run pays full price for SERPs again.
| Phase | What incurs cost | One cold pass |
|---|---|---|
| Build | Related Keywords: 203 seeds x $0.01 + ~$0.0001/kw (seeds and autocomplete are free) | ~$2.05 |
| Funnel | Search volume: ~5 batches of 1,000 x $0.075 (+ optional global volume ~$0.05) | ~$0.38 |
| Scan | ~1,300 live SERPs x $0.002 | ~$2.60 |
| Layer | AI Overview / PAA / Knowledge Graph (bundled in SERP) + robots.txt bot check | $0.00 |
| Coverage | Token-matching keywords to your own pages, computed locally | $0.00 |
| Total | ~$5.03 |
Competitor analysis comes in two layers
Competitor intelligence runs on two separate layers, and only one costs anything beyond what we already spend. Layer 1 is free and bundled in the scan: every SERP we pull returns the top organic results, so for all 1,301 scanned keywords we automatically captured exactly who outranks us, for no extra cost. Aggregated across the run, it shows who we actually compete with in the results, not who we assume. Google and Reddit are informational noise to filter out; the real product rivals that keep taking page one are SEOptimer, Seobility, Semrush, and Ahrefs.
Layer 2 is a separate, occasional deep positioning pass (~$0.40 in AI tokens) that benchmarks our messaging against 16 named rivals across 10 dimensions, with a second calibration pass so scores are relative and hallucinations get reconciled out.
| Domain | #1 organic results |
|---|---|
| seoptimer.com | 209 |
| seobility.net | 76 |
| support.google.com | 51 |
| developers.google.com | 35 |
| semrush.com | 20 |
| reddit.com | 17 |
| ahrefs.com | 11 |
Avoiding the keywords giants already own
This is the part that matters most and the easiest to get wrong. We did not exclude the big head terms during collection. We collected everything, then ran a separate review pass over the finished corpus to decide what was actually worth pursuing. Nothing was deleted; terms were tiered by how winnable they are for a site our size. The winnability signal is peer overlap, not raw difficulty.
What we did not chase: the head-term tier is the giant-owned space, queries like search engine optimization tool (49,500/mo, KD 65). We kept them on the board as a long game once our domain authority grows, and spent our effort on the 108 Tier 1 and Tier 2 terms where a site our size demonstrably ranks today.
| Tier | Rule | Keywords | What it means |
|---|---|---|---|
| Tier 1 | KD <= 30, vol >= 100, 3+ peers rank | 68 | Best targets. Multiple peers already rank, low difficulty. |
| Tier 2 | KD <= 30, vol >= 100, 2 peers rank | 40 | Strong, slightly thinner proof. |
| Tier 3 | KD 31-50, vol >= 500, 3+ peers rank | 30 | Medium difficulty, worth it for the volume. |
| Head terms | vol >= 5,000, 5+ peers, KD 50+ | 20 | Kept as a long game, NOT primary targets. |
How the filtering narrowed the funnel
The value is not the 4,842 keywords. It is the funnel.
- 4,842 captured (seeds + free autocomplete + paid related)
- 1,165 cleared the volume floor (>= 30/mo), the only ones we paid to analyze deeply
- 651 had real traffic (>= 100/mo)
- 97 sat in the 800-1,600/mo sweet spot, the editorial shortlist we actually write for
The AI-search signal most keyword tools ignore: 639 of these queries already trigger a Google AI Overview, so we know which pages must be written to be extracted and cited, not just ranked.
Coverage against our existing site
From the same run, every keyword mapped to one of three states against our current pages:
- 1,035 covered (a page already targets it well)
- 3,206 partial (we touch it but no page owns it: consolidate or strengthen)
- 601 gaps (real demand, zero coverage: new content)
What the whole program cost
Eleven runs against stackra.app, from the first 100-keyword probe to the 4,800-keyword full builds. The figures are upper bounds; real spend was lower because caching is not subtracted in the estimate.
Total: under ~$19. The takeaway: a competitor-grade keyword strategy is a coffee-money line item, not a SaaS subscription, if you gate spend on volume and batch your calls.
| Date | Keywords captured | Est. cost (upper bound) |
|---|---|---|
| Apr 30 | 100 | $0.62 |
| May 1 (x3) | 107 / 121 / 136 | $0.43 / $0.47 / $0.50 |
| May 7 (first full build) | 3,752 | $3.52 |
| May 8 | 3,180 | $1.20 |
| May 12 | 3,183 | $1.28 |
| May 13 | 3,183 | $1.20 |
| May 14 | 571 | $3.05 |
| May 15 (canonical) | 4,842 | $3.10 |
| May 31 (refresh) | 571 | $3.41 |
Results so far, early and honest
Eight weeks in, the data shows a leading-indicator lift, not a traffic win yet. Read straight from Search Console:
- Visibility roughly quadrupled. Daily Google impressions rose from about 70 in early April to about 270 in the last week of May, with the jump starting around May 24, roughly 10-17 days after the May 7 and May 15 corpus builds.
- Average position settled in the low 40s. It reads as worse than late April (near 15-20), but that is the footprint-expansion artifact: the site now appears for a far wider, harder set of queries that land mid-page and pull the average down.
- Clicks have not moved. About 14 in April, 16 in May, which at this volume is noise. Position ~40 is not click range, so flat clicks are expected.
The honest read: the pipeline did its first job, expanding what Google surfaces us for by about 4x. Turning that visibility into clicks is the next phase. These figures track with the May builds but are not isolated from normal indexing and domain-age effects, so treat them as correlation, not proof of ROI.
Why this beats buying an all-in-one tool
Three reasons the pay-per-call approach wins for a small team:
- You only pay for the keywords that clear your own volume floor, not a flat monthly fee.
- You capture the AI-search layer (AI Overview citations, PAA sources) that most SMB-tier tools do not expose.
- The corpus is yours, mapped to your pages, and re-runnable for about a dollar within the 14-day SERP cache window.
Methodology and verification
Every number in this case study comes from real DataForSEO billing and Google Search Console data for stackra.app across eleven runs between April 30 and May 31, 2026.
- Run a free Stackra audit →
See how your own site scores on conversion, search visibility, and technical confidence.