Competitor Keywords, Keyword Gap & Competitor Finder avatar

Competitor Keywords, Keyword Gap & Competitor Finder

Pricing

from $2.00 / 1,000 ranked keywords

Go to Apify Store
Competitor Keywords, Keyword Gap & Competitor Finder

Competitor Keywords, Keyword Gap & Competitor Finder

Every Google keyword any website ranks for, the keywords competitors rank for and you don't, and who your organic competitors are. Position, URL, traffic, volume, CPC, difficulty, intent. Semrush and Ahrefs alternative: $2 per 1,000 keywords, $0.60 after 500.

Pricing

from $2.00 / 1,000 ranked keywords

Rating

0.0

(0)

Developer

Pravus

Pravus

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

15 days ago

Last modified

Categories

Security

Limited permissions

Share

Three competitor-research tools in one, pay per use. A Semrush and Ahrefs alternative with no subscription and no SEO-suite seat:

  1. Ranked keywords: every Google keyword any website, or a single page, ranks for, with position, ranking URL, estimated monthly visits, search volume, CPC, keyword difficulty and search intent.
  2. Keyword gap: the keywords your competitors rank for and you don't, with brand terms filtered out so you get keywords you can actually target. Or the keywords you both rank for, with both positions side by side.
  3. Competitor finder: who your real organic competitors are, ranked by shared keywords, with their total keywords and traffic. Giant sites like Wikipedia and Amazon are left out.
  • Up to 10,000 keywords per domain and 100 domains per run, sorted by the traffic each keyword brings.
  • Organic, paid ads, featured snippets, local pack and Google AI Overview citations.
  • Free domain overview for every site: total ranked keywords, estimated monthly organic traffic and its ad value, top-3 and top-10 counts, and new and moving keywords.
  • $2 per 1,000 keywords, dropping to $0.60 per 1,000 after the first 500 of a run. Competitors are $0.003 each.

Built for SEO teams, content strategists, agencies doing competitor audits, PPC managers, and AI agents that need competitor data mid-task (works over Apify's MCP server in Claude, Cursor, ChatGPT and other clients).

What you get for each keyword

FieldMeaning
targetThe domain or page you asked about
keywordA keyword it ranks for
positionIts Google position among results of that type (1 = top organic result)
positionChange, previousAbsolutePositionnew, up, down or same since the previous check
url, titleThe page that ranks and its title
estimatedTrafficEstimated monthly visits this ranking brings
trafficValueUsdWhat that traffic would cost per month as Google Ads clicks
searchVolume, monthlySearchesAverage monthly Google searches, plus the last 12 months
trendMonthlyPct, trendQuarterlyPct, trendYearlyPctPercentage change in search volume
cpc, competition, competitionLevelGoogle Ads cost per click (USD) and competition
keywordDifficultyHow hard it is to rank in the top 10 organically (0–100)
searchIntentinformational, commercial, transactional or navigational
resultTypeorganic, paid, featured_snippet, ai_overview_reference or local_pack
serpFeaturesWhich Google result features appear for the keyword
comparedWith, gapType, yourPosition, yourUrlKeyword gap: your domain, missing or shared, and (shared) where you rank
foundfalse on rows that explain a domain with no results, or an invalid or rejected target

What you get for each competitor (competitor finder)

FieldMeaning
competitorA domain competing with your target for the same keywords
sharedKeywordsKeywords both sites rank for
avgPositionOnSharedThe competitor's average position on those keywords
competitorTotalKeywords, competitorTop10KeywordsAll keywords the competitor ranks for, and how many are on page one
competitorEstimatedTraffic, competitorTrafficValueUsdThe competitor's estimated monthly organic visits and their ad value
competitorTrafficOnShared, targetTrafficOnSharedEstimated visits each site gets from the shared keywords: who wins the overlap

The Domain overview output (DOMAINS) gives each site's totals for free: matching ranked keywords, estimated monthly traffic and traffic value, keywords in the top 3 and top 10, and how many are new, moved up or moved down, per ranking type.

Examples

A competitor's top 500 keywords by traffic

{
"targets": ["competitor.com"],
"maxKeywordsPerTarget": 500
}

First-page keywords for several competitors, in the UK

{
"targets": ["competitor-one.com", "competitor-two.co.uk", "competitor-three.com"],
"location": "uk",
"maxPosition": 10,
"minSearchVolume": 100,
"maxKeywordsPerTarget": 1000
}

One page: what does a competitor's pricing page rank for?

{ "targets": ["https://competitor.com/pricing"], "sortBy": "position" }

Keyword gap: what do my competitors rank for that I don't?

{
"mode": "gap",
"targets": ["competitor-one.com", "competitor-two.com"],
"yourDomain": "my-site.com",
"maxKeywordsPerTarget": 500,
"minSearchVolume": 100
}

Brand keywords (theirs and yours) are excluded by default in gap mode. Set "gapType": "shared" for keywords you both rank for, with your position next to theirs.

Who are my organic competitors?

{ "mode": "competitors", "targets": ["my-site.com"], "maxCompetitors": 50 }

Feed the result into a keyword gap run to see what each of them ranks for that you don't.

Which questions does a site get cited for in Google's AI Overviews?

{ "targets": ["healthline.com"], "resultType": "ai_overview_reference", "keywordContains": "how" }
  • sortBy: traffic (default, the keywords that matter most), searchVolume or position.
  • location: a country name ("Germany"), a two-letter code ("us", "uk", "de") or a numeric location code (2840).
  • language: leave empty to use the country's main language (English for the US and UK, German for Germany...), or set "en", "es" and so on. Countries with several languages (Belgium, Switzerland...) need it set for gap and competitor runs.
  • brandKeywords: "exclude" skips keywords containing the site's brand name, "include" keeps them. The default, "auto", excludes them in gap mode only.

Output example

{
"target": "https://www.nike.com/w/sale-3yaep",
"keyword": "nike outlet",
"found": true,
"resultType": "organic",
"position": 1,
"absolutePosition": 1,
"previousAbsolutePosition": 4,
"positionChange": "up",
"url": "https://www.nike.com/w/sale-3yaep",
"title": "Shop All Sale",
"searchVolume": 301000,
"estimatedTraffic": 60942.2,
"trafficValueUsd": 59113.98,
"cpc": 0.97,
"competition": 1,
"competitionLevel": "HIGH",
"keywordDifficulty": 19,
"searchIntent": "navigational",
"trendMonthlyPct": 0,
"trendQuarterlyPct": 50,
"trendYearlyPct": -18,
"monthlySearches": [{ "year": 2026, "month": 8, "searchVolume": 368000 }],
"serpFeatures": ["organic", "local_pack", "people_also_ask", "related_searches", "knowledge_graph", "images"],
"location": "United States",
"language": "en",
"dataUpdatedAt": "2026-07-30 03:41:45 +00:00"
}

Competitor finder row (nike.com, real data)

{
"target": "nike.com",
"competitor": "dickssportinggoods.com",
"found": true,
"sharedKeywords": 314855,
"avgPositionOnShared": 14.4,
"competitorTotalKeywords": 1613684,
"competitorEstimatedTraffic": 8962786,
"competitorTrafficValueUsd": 5430338,
"competitorTop10Keywords": 499933,
"targetTrafficOnShared": 6015630,
"competitorTrafficOnShared": 1470119,
"location": "United States",
"language": "en"
}

Pricing

Pay per use, with no subscription:

Price
Domain data request (up to 1,000 keywords or competitors for one domain or page), charged per successful request$0.04
Ranked keyword: first 500 keywords of each run$0.002 each ($2 per 1,000)
Ranked keyword: every keyword after the first 500 in a run$0.0006 each ($0.60 per 1,000)
Competitor domain (competitor finder)$0.003 each
RunCost
1 domain, top 100 keywords$0.24
1 domain, top 1,000 keywords$1.34
10 competitors, top 100 keywords each$1.70
1 domain, 10,000 keywords$7.10
Keyword gap vs 3 competitors, top 200 each$1.18
Your top 20 competitors$0.10
  • Invalid domains, duplicates, and requests that fail are never charged. A domain with no results (a brand-new site, or filters that match nothing) costs only the $0.04 request fee, and the free domain overview tells you why.
  • Free Apify plan: try it on 1 domain with up to 20 keywords per run. Any paid Apify plan unlocks up to 100 domains and 10,000 keywords per domain.
  • Set a maximum cost per run in the run options and the Actor stops before doing work that would exceed it, so you're never charged past your limit.

Use it from code

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('pravus/competitor-keywords').call({
targets: ['competitor.com'],
maxKeywordsPerTarget: 1000,
maxPosition: 20,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
const domains = await client.keyValueStore(run.defaultKeyValueStoreId).getRecord('DOMAINS');

Use it from an AI agent (MCP)

Add the Apify MCP server to your client and the agent can call this Actor as a tool, for example: "Find the 300 keywords that bring competitor.com the most traffic, keep the ones with difficulty under 30 where we could realistically rank, and group them into content topics."

Pair it with keyword research

To check volumes and difficulty for your own keyword list, or find new keyword ideas from seed terms, use Keyword Research API: Search Volume, CPC, Difficulty & Intent.

FAQ

Where does the data come from? A licensed SEO data provider that tracks Google results for millions of keywords. The database is updated weekly; dataUpdatedAt shows when each keyword's ranking was last checked. Search volume and CPC come from Google Ads data.

How accurate is the traffic estimate? estimatedTraffic is a model: search volume times the typical click-through rate for that position. It is best for comparing keywords and competitors, not as an exact visit count.

Why are the totals different from Semrush or Ahrefs? Every SEO database tracks a different set of keywords, so totals differ between tools. Relative rankings and the top keywords usually agree.

What counts as a "brand keyword"? Any keyword containing the domain's name, e.g. "adidas samba" for adidas.com. Hyphenated names match the spaced and joined spellings, so foot-locker.com excludes "foot locker" and "footlocker". If a site's name is an everyday word (apartments.com, cars.com), its "brand" keywords are its main topic: set "brandKeywords": "include" for those.

Domain or page: which should I use? A domain (competitor.com) covers every page on the site. A full URL (https://competitor.com/blog/post) covers that page only. A subdomain (blog.competitor.com) covers just that subdomain. Keyword gap and competitor finder work on domains.

Is there a limit? 100 domains per run, 10,000 keywords or 1,000 competitors per domain, and about 60,000 keywords per run in total. A run that reaches a limit stops cleanly, keeps everything it collected and lists what it didn't reach (not charged). Start another run for the rest.

What happens with very large runs? Big lists (for example 100 domains with 10,000 keywords each) can take longer than the default run timeout. The Actor stops cleanly shortly before the timeout, keeps everything it collected, and tells you which domains it didn't reach (those aren't charged). Raise the timeout in the run options, or split the list across runs.