A multi-competitor gap table
One row per normalized keyword, with every observed competitor domain and rank plus estimated search volume, CPC, difficulty, and intent when those fields are available.
Competitive search planning
Sign in, enter one to five competitor domains, and run an on-demand competitor comparison. Competitor rankings stay separate from the optional Search Console evidence for your own site.
A GenGrowth sign-in is required
Competitor facts come from a third-party keyword source. If you already connected Search Console, you can optionally add your own observed query and page evidence; competitor data never comes from GSC.
No scheduled refresh, no saved report history, and no fixed credit claim. Each run states which competitor reads completed, which were unavailable, and where either provider sample was truncated.
Enter your site and one to five competitor domains. This runs only when you ask; competitor facts come from a third-party keyword source, while a selected Search Console property adds an optional own-site overlay.
Type or paste all of them here, separated by commas — up to 5. Nothing to add one at a time; fill the box and run.
0 / 5 competitors
Domains are normalized and deduplicated before the run. Your own domain cannot also be submitted as a competitor, and the five-domain ceiling is enforced by the API as well as the form.
The tool reads each competitor against your site in the same organic-ranking scope, and combines repeated keywords into one row while preserving every observed competitor rank.
A connected property can add observed impressions, average position, and a page for your site. A query missing from the bounded GSC sample stays ‘not observed in this sample’; it is never turned into zero exposure.
The report separates complete, partial, and unavailable reads, keeps missing provider metrics blank, and records when limits shortened the returned set. It does not refresh itself in the background.
One row per normalized keyword, with every observed competitor domain and rank plus estimated search volume, CPC, difficulty, and intent when those fields are available.
Search Console observations for your site appear in their own column and keep their own source label. They do not replace or rewrite the third-party competitor facts.
Each competitor reports whether its read completed, returned rows, and whether it was truncated. One failed domain makes the run partial; it never becomes a claim that the competitor has no keywords.
Results are computed when you ask for them, are not auto-refreshed, and are not presented as a weekly change report or saved history. The capture time remains visible on the result.
Each competitor is compared against your site in one market and one language, in the same organic-ranking scope. The comparison is bounded on purpose and the bound is printed on the result: the competitor must rank at position 20 or better, rows come back ordered by the estimated traffic of the competitor's own ranking page, highest first, and at most 300 rows are taken per competitor. The provider bills per returned row, so the ranking filter is what keeps a five-competitor comparison bounded rather than open-ended.
Your site is excluded at the source rather than filtered afterwards: the provider is asked for terms the competitor ranks for and yours does not appear on, which is why every row is labelled “your site was not observed in the provider ranking sample”. That phrasing is exact. It reports what the bounded sample contained, not what your site does or does not rank for in the world.
Up to five competitors, entered as one comma-separated list. Domains are normalized and deduplicated before anything is spent, your own domain cannot also be submitted as a competitor, and the five-domain ceiling is enforced by the API as well as by the form. Eight markets are offered, and the language options for each are read from the provider's own catalogue rather than typed by hand — an earlier hard-coded list was both too long and too short for the same market.
The most common way a keyword gap tool misleads is by folding an estimate and a measurement into a single verdict. Here they stay in separate columns with separate provenance, and only one of them decides what you are told to do.
Whether you already rank, have impressions without a strong position, were not observed in this sample, or could not be read — that, and nothing else, decides the next step on the row. It is first-party evidence about your own property, and it is the only evidence in the run that measures you.
Difficulty at or below 30 with a competitor on page one reads as check the SERP first; anything not both of those reads as higher difficulty or page two; above 60 is a head term to defer. Each band carries the one check that produced it, and every band is labelled as a pre-screen rather than a claim about whether you can win the result.
Rows that contain a competitor's brand token, that are shaped like a hostname, or where the competitor ranks with a domain-profile page for someone else's brand are banded by this tool's heuristics, not by the provider. The row says which of the two decided it, because a heuristic that misreads an ordinary brand-shaped product name should be visible as a heuristic.
It does not order the table, does not filter it, and does not overrule the next step. Difficulty is a third-party model's estimate of a search result it looked at some time ago; a band that deleted rows would be an unverified threshold performing an irreversible cut on your keyword plan.
Example rows · invented numbers to show the shape, not a live run
| Keyword | Volume (est.) | Competitor coverage | Your status | Opportunity signals | Recommended action |
|---|---|---|---|---|---|
| travel espresso kit | 1,300 · KD 12 | 2 of 3 · best #6 | Not in sample | Check SERP first · AI Overview, source snapshot 2026-08-04 | Open smallbrew.example's page |
| espresso ratio calculator | 590 · KD 8 | 3 of 3 · best #3 | Has impressions · avg position 24.6 · 64 impressions | Check SERP first · competitor page est. 900/mo | Optimize existing page /guides/ratio |
| manual espresso maker cleaning | 320 · — | 1 of 3 · best #14 | Already ranking · avg position 6.2 · 240 impressions | Not banded · provider reported no KD or volume | Open Opportunity Finder |
| beanpress pro | 210 · KD 41 | 1 of 3 · best #2 | GSC not read | Brand or navigational, defer · tool rule | Locate GSC property |
The overlay reads your selected property for the same keywords as exact queries, over a 28-day window that ends three days behind today, and reports four states: already ranking (an average position inside the top ten on at least ten impressions), has impressions, not observed in this run's sample, or the sample could not be read. Where a page can be attributed, the page URL and its own impressions and average position appear beside it.
That number will usually be smaller than the one you get by typing the keyword into Search Console's own interface, and the difference is not an error. The console's query filter defaults to “contains”, which sums every query containing the phrase; this tool asks about the exact query and nothing else. Two figures that differ by an order of magnitude are two different questions, and the row says which one it answered.
A query missing from the overlay is reported as not observed in this sample. Search Console anonymizes low-volume queries and a bounded read can be truncated, so absence is not evidence of zero exposure — and when the read is truncated the run says so rather than letting a shortened sample read as a complete one.
The Search Console half is also checked before any paid work starts. If the session cannot read the selected property, if the property does not cover the domain you entered, if the authorization has expired, or if the shared hourly read allowance is exhausted, the whole run is refused with a named reason and a button to run again without the overlay. Being charged for a run and handed a report with a silently empty overlay is the outcome that preflight exists to prevent.
The analysis runs when you submit the form and at no other time. There is no scheduled refresh, no saved report history, and no “new this week” — the tool is deliberately stateless, so it has no previous run to compare against and does not display a placeholder pretending otherwise. The capture time stays on the result.
If no competitor returns a usable sample the run is refused as a keyword-source failure rather than handed over as an empty gap list — nothing was read, so nothing was ruled out. One failed domain among several makes the run partial and is reported as unavailable with its reason code, never as a competitor that has no keywords.
AI Overview and other SERP feature marks come from the keyword source's stored snapshot and carry its date. They are not a live observation made by this run, and a snapshot taken weeks ago is presented with its age visible.
The traffic figure beside a competitor's ranking page is a third-party estimate of that page, not measured traffic and not revenue. Rankings and estimates do not establish what a competitor earns from a term.
A difficulty score is one model's summary of a result page it looked at previously. The row keeps the competitor's actual ranking page and a link to it, because opening page one yourself is still the only way to see what is holding those positions.
This tool does not display or promise a fixed credit charge. Any future price has to be defined for this specific tool before the interface states it.
The download is a keyword import sheet, not an audit trail: nine columns with the keyword first, up to 150 rows, cut by estimated monthly search volume across the merged set rather than a slice per competitor. Column ids are stable English field names so the file can be diffed against an older export and mapped by a keyword importer whose fields do not change with your interface language.
Values that were never measured stay empty. Cost-per-click is the only column rounded at all — to four decimal places, and never rounded down to zero from a positive value — because every other number is carried through exactly as the provider gave it. Cells beginning with a formula character are neutralized before writing, since keywords are arbitrary text from a third party and a spreadsheet treats some of that text as executable.
Two things are outside the file by design, and both are on the page instead: the capture date lives in the filename, and the file does not record which competitor read failed. When a competitor was unavailable, the note beside the export button says so — read that competitor's absence from a row as unknown rather than as an absence of ranking.
What changed on your own property since yesterday, from the same Search Console grant.
Generates candidates from your own site instead of from a competitor list, and opens page one for each.
For terms you already rank for: where your clicks trail your own CTR curve.
Check what an existing page's public HTML supports before rewriting it for a new term.
The selection method this list feeds, including the part a difficulty score cannot do.
What to make of a gap row whose provider volume came back empty.
When a keyword set justifies a template, and when it does not.
From third-party organic-ranking datasets for the market and language you select. Search Console is used only for optional first-party evidence about your own verified property; it cannot provide a competitor’s private query data.
No. A GenGrowth sign-in is required, but the competitor comparison can run without a GSC property. Connecting one adds an optional own-site overlay rather than changing the competitor result.
Each domain requires its own bounded provider comparison. The five-domain limit keeps one manual run understandable and protects shared provider capacity; submitting more is rejected before any provider work begins.
No. It runs only when you submit the form. There is no cron job, next-refresh promise, or automatic weekly history behind this tool.
No. Search Console can omit low-volume or anonymized queries, and a bounded read can be truncated. The report says the query was not observed in this sample, or that the sample was unavailable, instead of changing absence into zero.
This beta page does not show or promise a fixed credit charge. Any future price must be defined for this specific tool before the interface claims it.