GenGrowth

Competitive search planning

Find keyword gaps across up to five competitors

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.

Set up your competitor keyword gap

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

How the competitor gap is built

  1. 1

    Name your site and one to five 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.

  2. 2

    Choose one market and language

    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.

  3. 3

    Add your own Search Console evidence when available

    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.

  4. 4

    Read one on-demand result

    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.

What one run gives you

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.

An optional own-site overlay

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.

Honest coverage

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.

A bounded manual snapshot

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.

What one gap row actually contains

The keyword, and who holds it
One row per normalized keyword across every competitor you entered, carrying each competitor domain that was observed ranking for it, that competitor's position, and a link to the page it ranks with. Repeated keywords merge into one row; no observed rank is dropped in the merge.
Provider estimates, kept as estimates
Monthly search volume, cost-per-click and difficulty arrive from a third-party keyword source in three distinct states: a measured value, an explicit zero, or no data at all. The third stays blank in the table and in the export — a zero nobody measured is a lie with decimals. Intent is not one of the three: it is a label the provider either returns or does not, and a missing one reads as unknown rather than being guessed.
Your own status, from your own data
With a Search Console property connected, the row shows whether you are already ranking, have impressions, were not observed in this run's sample, or could not be read — for this keyword as an exact query, over a 28-day window that ends three days behind today.
A pre-screen band, on its own axis
A second, orthogonal label: check the SERP first, higher difficulty or page two, not banded, a head term to defer, or brand and navigational to defer. Each band names the single check that decided it and whether that check was a provider estimate or this tool's own text rule.
One recommended action, decided only by your Search Console evidence
Optimize the page Search Console attributes to a query you already draw impressions on, review the page carrying it, open the competitor's page and treat the term as a content gap, or locate your own property first. The pre-screen band never changes this. A term you already rank for is not a gap, no matter how attractive the provider's estimates look.

How the sample is drawn, and what that leaves out

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.

Two axes that are never allowed to collapse into one

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.

The recommended action comes only from Search Console

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.

The pre-screen is an estimate, shown per row

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.

The tool's own text rules are labelled as its own

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.

The pre-screen never removes a row

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

Example rows · invented numbers to show the shape, not a live run
KeywordVolume (est.)Competitor coverageYour statusOpportunity signalsRecommended action
travel espresso kit1,300 · KD 122 of 3 · best #6Not in sampleCheck SERP first · AI Overview, source snapshot 2026-08-04Open smallbrew.example's page
espresso ratio calculator590 · KD 83 of 3 · best #3Has impressions · avg position 24.6 · 64 impressionsCheck SERP first · competitor page est. 900/moOptimize existing page /guides/ratio
manual espresso maker cleaning320 · —1 of 3 · best #14Already ranking · avg position 6.2 · 240 impressionsNot banded · provider reported no KD or volumeOpen Opportunity Finder
beanpress pro210 · KD 411 of 3 · best #2GSC not readBrand or navigational, defer · tool ruleLocate GSC property

Your Search Console layer, and the number it is not

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.

What one run refuses to be

It is not a monitor

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.

An empty result is not a verdict

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.

Feature marks are dated snapshots

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.

Competitor outcomes are unavailable

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.

Difficulty is not permission

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.

There is no credit claim on this page

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 export, and what it deliberately leaves out

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.

Tools that continue the analysis

Further reading

FAQ

Where does competitor data come from?

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.

Do I have to connect Search Console?

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.

Why can I enter only five competitors?

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.

Does the report refresh automatically?

No. It runs only when you submit the form. There is no cron job, next-refresh promise, or automatic weekly history behind this tool.

Does a missing GSC row mean zero impressions?

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.

How many credits does a run cost?

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.