SEO Competitors & Keyword Gap Finder avatar

SEO Competitors & Keyword Gap Finder

Pricing

from $1.60 / 1,000 competitor or gap keywords

Go to Apify Store
SEO Competitors & Keyword Gap Finder

SEO Competitors & Keyword Gap Finder

Find the organic Google competitors of any website and the keywords they rank for that it misses (keyword gap): shared keywords, positions, traffic, volume, CPC, difficulty. 94 countries. Semrush and Ahrefs alternative. $0.002 per competitor or keyword, plus a $0.012 fee per domain with results.

Pricing

from $1.60 / 1,000 competitor or gap keywords

Rating

0.0

(0)

Developer

PlainRows

PlainRows

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

For any list of websites, find who they really compete with on Google (the sites ranking on the most keywords shared with them) and the keywords those competitors rank for that the website misses: the keyword gap, with search volume, CPC, difficulty, intent, the competitor's position, ranking URL and estimated traffic. 94 countries.

Built on a commercial SEO data provider: no scraping of SEO tools, no accounts, no subscriptions. You pay $0.002 per competitor or gap keyword returned, plus a $0.012 fee per domain with results. Domains without data are free.

Typical uses

  • Competitor research: the 10 (up to 100) organic competitors of your site or a client's, with shared keywords, average position and traffic.
  • Content planning: the keywords your top competitors get traffic from and you don't rank for at all, best traffic first.
  • SEO audits and agency pitches for many prospects in one run (up to 100 domains).
  • Feed spreadsheets, n8n / Make workflows or AI agents with clean JSON, one row per competitor or keyword.

What you get

Two kinds of rows, both billed as one result. The type field tells them apart.

Competitor rows (type: "competitor")

FieldDescription
domainThe website analysed (lowercase, without www.)
rank1 = the competitor sharing the most ranking keywords
competitorDomainThe competing website
commonKeywordsKeywords both sites rank for in Google's top 100
competitorAvgPositionThe competitor's average position on those shared keywords
competitorOrganicTraffic, competitorOrganicKeywordsThe competitor's estimated monthly organic visits and ranking keywords (all keywords)
competitorTrafficOnCommonKeywords, domainTrafficOnCommonKeywordsEstimated monthly visits each site gets from the shared keywords

Keyword gap rows (type: "gap-keyword")

FieldDescription
keywordA keyword the competitor ranks for (top 100) and the domain does not
competitorDomain, competitorPosition, competitorUrlWho ranks, where, with which page
competitorTrafficEstimated monthly visits the competitor gets from this keyword
searchVolume, cpc, keywordDifficulty, searchIntentKeyword metrics

Every row also has country, languageCode, observedAt (UTC) and found. A domain without enough Google data gets one free row with found: false. Missing values are null, never guessed. The Output tab has a Competitors view and a Keyword gap view.

Input

{
"domains": ["plausible.io", "https://www.example.com/blog/"],
"country": "US",
"maxCompetitors": 10,
"keywordGap": true,
"gapCompetitors": 3,
"maxGapKeywords": 100
}
  • domains: domains or full URLs, up to 100 per run. URLs are reduced to their domain; subdomains other than www are kept. Duplicates are removed for free.
  • country / languageCode: one of 94 countries; the language defaults to the country's main language.
  • maxCompetitors: 5 to 100 competitors per domain (default 10).
  • keywordGap: also return the keyword gap (default on). gapCompetitors: gap from the first 1 to 5 competitors (default 3). maxGapKeywords: 20 to 1,000 gap keywords per domain (default 100), split between those competitors. A keyword ranked by several competitors is returned once.
  • excludeTopDomains: leave out giant sites that rank for everything (Wikipedia, Amazon, YouTube...). Default on.

Output example

Real rows from DataForSEO data fetched on 2026-10-18 (US):

[
{
"domain": "plausible.io",
"type": "competitor",
"found": true,
"rank": 1,
"competitorDomain": "semrush.com",
"commonKeywords": 600,
"competitorAvgPosition": 8.3,
"competitorOrganicTraffic": 978907,
"competitorOrganicKeywords": 98888,
"competitorTrafficOnCommonKeywords": 1165,
"domainTrafficOnCommonKeywords": 290,
"country": "US",
"languageCode": "en",
"observedAt": "2026-10-18T08:40:00.000Z",
"schemaVersion": "1.0"
},
{
"domain": "plausible.io",
"type": "gap-keyword",
"found": true,
"rank": 4,
"keyword": "semrush",
"competitorDomain": "semrush.com",
"competitorPosition": 1,
"competitorUrl": "https://www.semrush.com/",
"competitorTraffic": 21960.2,
"searchVolume": 90500,
"cpc": 2.76,
"keywordDifficulty": 63,
"searchIntent": "informational",
"country": "US",
"languageCode": "en",
"observedAt": "2026-10-18T08:40:00.000Z",
"schemaVersion": "1.0"
}
]

Pricing

Pay per result, no subscription. See the Pricing tab for current prices:

  • Competitor or gap keyword: $0.002 per row (FREE and BRONZE), $0.0018 (SILVER), $0.0016 (GOLD and above);
  • Domain analysed: a $0.012 fee per domain that returns at least one row, at about what the data source charges us for the competitor lookup.

Example: one domain with the defaults (10 competitors + 100 gap keywords) costs 110 x $0.002 + $0.012 = $0.232 on the FREE tier.

Domains without data, duplicates and invalid entries are never billed. Input mistakes cost nothing. The run never spends more than the maximum cost you set: it returns fewer rows, then stops, before reaching it. The keyword gap is not asked for competitors that rank for fewer than 20 keywords outside the shared ones. Lists where most domains have no data stop early with a clear warning; the remaining domains are not looked up and not charged.

Free Apify plan: each run analyses 1 domain with up to 10 competitors and 20 gap keywords from 1 competitor, so you can check the output. A paid Apify plan removes these limits.

Use it from code, automations or AI agents

API (one call, results returned directly):

curl -X POST "https://api.apify.com/v2/acts/plainrows~seo-competitors-keyword-gap/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"domains": ["plausible.io"], "country": "US", "maxCompetitors": 10, "keywordGap": true}'

n8n, Make, Zapier: use the Apify integration and pick plainrows/seo-competitors-keyword-gap as the Actor.

AI agents (MCP): add https://mcp.apify.com?tools=plainrows/seo-competitors-keyword-gap to Claude, Cursor or any MCP client.

What this is not

  • Competitors are organic Google search competitors (sites ranking on the same keywords), not business competitors from a directory.
  • Traffic figures are estimates of Google organic search traffic, not analytics data.
  • Not affiliated with Google, Semrush or Ahrefs.

Run summary

Each run stores a summary in the key-value store (OUTPUT): domains submitted and analysed, rows billed, domains without data, gap requests skipped, duplicates removed, invalid entries with the reason, and anything skipped because of the free-plan or budget limit or an early stop.

FAQ

How do I find my SEO competitors? Enter your domain, pick the country and run. You get the sites that rank on the most of your keywords, with how many keywords you share and how well they rank.

What is a keyword gap? The keywords a competitor ranks for in Google's top 100 and your site does not rank for at all. Sorted by the traffic they bring the competitor, they are your best content opportunities.

Do I need a Semrush or Ahrefs account? No. The data comes from a commercial SEO data provider; you pay per result, with no subscription.

More PlainRows tools

Same pay-per-result pricing, same clean JSON, built to chain together in n8n, Make, Zapier or AI agents.

Support

Found a bug or need a field? Open an issue on this page. Issues are read and answered.

Support

Found a bug or need a field? Open an issue on this page. Issues are read and answered.