Home / Tools / Keyword Gap & Opportunity Report

Keyword data

Keyword Gap & Opportunity Report

Keywords up to 3 competitors rank for on Google and your client's domain doesn't: volume, difficulty, intent, competing URLs and why each was picked. Top 20 re-checked on the live Google top 10. CSV-ready dataset + HTML report. One flat price per report.

Run it on Apify API & MCP

Output fields

From the Actor's dataset schema. Every row has the same flat shape, so it drops straight into a spreadsheet, a database or an agent's context.

FieldTypeDescription
rankintegerPosition in this report (live-confirmed gaps first, then by opportunity score)
keywordstringKeyword at least one competitor ranks for on Google and the client domain does not
opportunity_scorenumber0-100: 25% demand, 20% ease (100 - KD), 20% topic fit, 15% competitor overlap, 10% intent, 10% best competitor position
search_volumeintegerAverage monthly Google searches (Google Ads data). null = unavailable
search_volume_statusstringmeasured, zero (Google reports no searches) or unavailable (no value; not the same as zero)
search_volume_monthstringLatest month covered by the volume data (YYYY-MM)
cpc_usdnumberAverage Google Ads cost per click, USD
competition_levelstringGoogle Ads competition: LOW, MEDIUM, HIGH
topic_fitnumber0-1: share of the keyword's words found on the client's homepage (title, headings, links). null = site could not be read
topic_fit_statusstringmeasured or unavailable
keyword_difficultyintegerKeyword difficulty 0-100. null = unavailable
keyword_difficulty_statusstringmeasured or unavailable
search_intentstringMain intent: informational, commercial, transactional, navigational
search_intent_statusstringmeasured or unavailable
competitors_rankingintegerHow many of the competitors rank for the keyword (database)
competitor_positionsstringEach ranking competitor with its Google position, e.g. 'zendesk.com #4; intercom.com #7'
best_competitorstringCompetitor with the best position
best_competitor_positionintegerThat competitor's Google position (database)
best_competitor_urlstringThe competitor page that ranks
competing_urlsstringAll ranking competitor URLs, separated with ' | '
competitor_traffic_estimateintegerModeled monthly visits competitors get from the keyword (provider estimate)
serp_features_labsstringSERP features seen in the database snapshot (AI Overview, People Also Ask, ...)
selection_reasonsstringWhy the keyword was picked, in plain language, separated with '; '
live_checkedbooleanWhether the keyword was re-checked on the live Google top 10

Pricing

Pay per result, billed by Apify. No subscription and no minimum. Discount tiers apply automatically on paid Apify plans.

EventFree planBronzeSilverGold
Keyword gap report main
One completed report: up to 3 competitors, up to 300 gap keywords with volume, difficulty, intent, competing URLs and selection reasons, the top 20 re-checked on the live Google top 10, CSV dataset and HTML report. Not charged if any competitor fails or nothing matches the filters.
$9$9$9$9

Example input

This is the prefilled input on the Store page. Keep it and click Start to see real data in seconds.

{
  "clientDomain": "helpscout.com",
  "competitors": [
    "zendesk.com",
    "freshworks.com",
    "intercom.com"
  ],
  "location": "United States",
  "language": "English"
}

Use it from code, no-code or an AI agent

cURL (one request, returns rows)
curl -X POST \
  "https://api.apify.com/v2/acts/wrenfield-data~keyword-gap-report/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"clientDomain": "helpscout.com", "competitors": ["zendesk.com", "freshworks.com", "intercom.com"], "location": "United States", "language": "English"}'
Python
# pip install apify-client
import os
from apify_client import ApifyClient

client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("wrenfield-data/keyword-gap-report").call(
    run_input={
    "clientDomain": "helpscout.com",
    "competitors": [
        "zendesk.com",
        "freshworks.com",
        "intercom.com"
    ],
    "location": "United States",
    "language": "English"
},
    max_total_charge_usd=1.00,  # hard cap for this run
)
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(row)
JavaScript / Node
// npm i apify-client
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('wrenfield-data/keyword-gap-report').call({
  "clientDomain": "helpscout.com",
  "competitors": [
    "zendesk.com",
    "freshworks.com",
    "intercom.com"
  ],
  "location": "United States",
  "language": "English"
}, { maxTotalChargeUsd: 1 });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
MCP (Claude, Cursor, VS Code, any MCP client)
{
  "mcpServers": {
    "wrenfield-keyword-gap-report": {
      "url": "https://mcp.apify.com?tools=wrenfield-data/keyword-gap-report"
    }
  }
}

Remote MCP server hosted by Apify. Sign in with OAuth on first use, or send Authorization: Bearer <APIFY_TOKEN>. The tool appears as wrenfield-data--keyword-gap-report. More client setups on the MCP page.

n8n, Make, Zapier

Use the official Apify node or app, pick Run Actor, enter wrenfield-data/keyword-gap-report and paste the input JSON above. Then read the run's dataset items. Ready-made n8n workflows are on the n8n templates page.

For AI agents and code generators: this page as Markdown ยท OpenAPI 3 spec (run, run-sync and dataset endpoints).

FAQ

How much does Keyword Gap cost?

$9 per keyword gap report on the Apify Free plan, billed per result by Apify with no subscription. Higher Apify plans get the discounted tiers shown in the pricing table. You can cap any run with a maximum cost.

Related tools

Compare and plan

Try Keyword Gap & Opportunity Report now

Open it on Apify, keep the prefilled example and click Start. The Apify Free plan includes $5 of monthly credit, no card needed.

Open on Apify