Competitor Keywords — Ranked Keywords of Any Domain
Pricing
from $1.40 / 1,000 rows
Competitor Keywords — Ranked Keywords of Any Domain
Every Google keyword a competitor's domain or page ranks for, with position, ranking URL, search volume, difficulty and intent. Or find who your organic competitors are. No Semrush or Ahrefs account needed.
Pricing
from $1.40 / 1,000 rows
Rating
0.0
(0)
Developer
Salih Küçükkayış
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
12 hours ago
Last modified
Categories
Share
See every Google keyword a competitor ranks for: position, ranking URL, search volume, keyword difficulty, intent and estimated clicks, highest volume first. Works for a whole domain, a subdomain or one page, in up to 10 countries per run. Or find out who your real organic competitors are. No Semrush or Ahrefs account needed.
$2 per 1,000 rows ($1.80, $1.60 and $1.40 on the Starter, Scale and Business plans), plus $0.02 per lookup. A lookup is one page of up to 1,000 rows for one domain in one country. Domains with no rankings have no row fee, and failed lookups are free. No subscription, and platform usage is included. (Plus a tiny $0.00005 start fee per run.)
What you get
- Every keyword a competitor ranks for. Up to 10,000 per domain and country, highest search volume first, with the position, the page that ranks and its title.
- Movement. Previous position and whether the keyword is new, up or down since the last check.
- The numbers you sort by. Search volume, estimated monthly clicks to that page, keyword difficulty (0 to 100), search intent, CPC and 12-month trend on every row.
- Domain, subdomain or one page.
asana.com,blog.asana.comorhttps://asana.com/pricing. - Filter before you pay. Position (for example first page only), minimum volume, maximum difficulty, intent and "ranking URL contains /blog/" are applied at the source.
- Organic competitors. For any domain, the sites that rank for the most of the same keywords, with how many they share, their average position on them, and their total keywords and estimated clicks. Giant sites like Wikipedia and Amazon are left out unless you want them.
- Beyond the blue links. Optionally include paid ads, featured snippets, local packs and AI Overview citations.
- Many domains in one run. Paste a list, link a CSV, or point to another Actor's dataset.
Typical uses
- Steal a content plan. Ranked keywords of a competitor's
/blog/, positions 1 to 10, difficulty under 40: their best-performing articles you can realistically match. - Keyword gap by hand. Run your domain and two competitors, then compare in a spreadsheet (or merge with Dataset Merge & Dedup Datasets).
- Track who you are up against. Competitors mode for your domain shows the sites Google actually puts next to you, which are often not the ones you think.
- Agency prospecting. A list of 200 prospect domains, first-page keywords only, to size each one's search presence.
Input
{"domains": ["asana.com", "https://monday.com/blog/"],"mode": "ranked","countries": ["US"],"maxResults": 1000,"maxPosition": 10}
| Field | Meaning |
|---|---|
domains | Domains, subdomains or page URLs, up to 1,000 per run. |
mode | ranked (default) or competitors. |
countries | Up to 10 countries: two-letter codes or names. Default US. |
language | Optional language code. Empty means each country's main language. |
maxResults | Ranked: rows per domain and country, up to 10,000. Default 500. |
maxCompetitors | Competitors: domains per domain and country, up to 1,000. Default 20. |
maxPosition | Only positions up to this one (10 = first page). |
minSearchVolume, maxKeywordDifficulty, intents, urlContains | Ranked: filters. Dropped rows are not charged. |
resultTypes | Ranked: organic (default), paid, featured_snippet, local_pack, ai_overview_reference. |
excludeTopDomains | Competitors: leave out sites that rank for almost everything. Default true. |
domainsUrl, datasetId, domainField | Other ways to pass domains. Fields named domain, url, website or target are found automatically. |
Output
Ranked keywords, one row per keyword, domain and country:
{"target": "asana.com","keyword": "performance improvement plan","country": "US","position": 15,"absolutePosition": 20,"previousPosition": 43,"positionChange": "up","url": "https://asana.com/resources/performance-improvement-plan-template","title": "Performance improvement plan template: Free PIP PDF","resultType": "organic","searchVolume": 1000000,"keywordDifficulty": 17,"difficultyLevel": "easy","intent": "informational","cpcUsd": 5.29,"trend3mPct": -33,"trendDirection": "falling","status": "ok","charged": true}
A real row from a run on 17 October 2026 (asana.com, United States: 500 keywords, one lookup).
Competitors, one row per competing domain:
{"target": "asana.com","competitor": "monday.com","country": "US","sharedKeywords": 18450,"avgPositionShared": 21.4,"sharedKeywordsTop10": 2310,"competitorKeywords": 96200,"competitorEstimatedTraffic": 1240000,"type": "competitor","status": "ok","charged": true}
This competitor row shows the shape only; its figures are not real data.
| Field | Meaning |
|---|---|
position, absolutePosition | Position among results of the same type, and among all elements on the page |
previousPosition, positionChange | Last check's position; new, up, down or same |
url, title, resultType, isFeaturedSnippet | The page that ranks and how it appears |
searchVolume, cpcUsd, competitionLevel, monthlySearches, trend3mPct, trendDirection | Keyword demand and its trend |
estimatedTraffic | Estimated monthly clicks from this keyword to this page, from its position and search volume |
keywordDifficulty, difficultyLevel, intent | 0 to 100 difficulty with a label, and the main search intent |
serpFeatures, lastUpdated | What else is on that results page, and when it was last checked |
sharedKeywords, avgPositionShared, sharedKeywordsTop3, sharedKeywordsTop10 | Competitors: keywords both domains rank for, and how well the competitor ranks on them |
competitorKeywords, competitorEstimatedTraffic | Competitors: all the competitor's ranking keywords and estimated monthly clicks |
status, note, charged | ok, or why there is no row; charged is true only on rows you paid for |
Rows with no row fee: no_data (no rankings found; the lookup fee is charged), invalid_target, input_error, spending_limit, free_plan_limit, skipped (ten lookups in a row returned nothing), throttled and provider_error.
What it costs
| Run | Price (no discount) |
|---|---|
| Top 500 keywords of 1 domain | $1.02 |
| Top 1,000 keywords of 10 domains | $20.20 |
| First-page keywords of 200 prospects (≈ 50 each) | $24.00 |
| 20 competitors of 1 domain | $0.06 |
These assume every row is delivered. On a paid Apify plan the row fee is 10 %, 20 % or 30 % lower.
Apify free plan
Every lookup costs us real money at the data source, and free-plan runs earn nothing. So on the Apify free plan this Actor gives one lookup a day with up to 20 rows for the first domain in the first country. Everything else comes back as uncharged free_plan_limit rows. Any paid Apify plan has no such limits.
Covered countries
The same 92 countries as Keyword Research, including the United States, United Kingdom, Canada, Australia, India, most of Europe and Latin America, Japan, South Korea and Türkiye. Other countries come back as an uncharged input_error row.
Using it from an AI agent or code
The Actor works as a tool through the Apify MCP server and through the Apify API. Send {"domains": ["example.com"], "countries": ["US"], "maxPosition": 10}.
Next steps with your results
- More ideas around the keywords that work for them: send the keyword column to Keyword Research.
- What a competitor's site runs on: Tech Stack Detector.
- Every URL on their site: Sitemap Extractor.
- Merge and compare several domains: Dataset Merge & Dedup Datasets.
Good to know
- Rankings come from a licensed SEO data provider that checks Google results at scale. Nothing is scraped from Semrush, Ahrefs or any other tool, and no account with them is needed.
- Positions and clicks are estimates from the provider's last check of each keyword, not live rankings and not the site's own analytics.
- This Actor is not affiliated with, endorsed by or sponsored by Google, Semrush or Ahrefs. Names are trademarks of their owners.
- A run that is moved to another server, or resurrected, continues where it stopped. Nothing is looked up or charged twice.
- Pricing: one
resultcharge per delivered row, onelookupcharge per page the database answers, plus $0.00005 when a run starts. - Questions or a missing feature: open an issue on the Actor page.
FAQ
Can I look up a single page? Yes: pass the full URL, for example https://example.com/pricing.
Why are the positions different from what I see in Google? Google results change by location, device and person. These are the provider's last check for the chosen country, not a live search.
How do I get only first-page keywords? Set maxPosition to 10.
More from this developer
- Keyword Research: keyword ideas, suggestions and related keywords with volume, difficulty and search intent, $2 per 1,000 keywords.
- Domain SEO Overview: organic keywords, estimated traffic and top-10 rankings for thousands of domains, $5 per 1,000 domains.
- Google SERP Rank Tracker: Google positions for your keywords by country and device, with AI Overview checks, $2 per 1,000 result pages.
- Google Trends API: interest over time, by region and related queries for hundreds of keywords, $6 per 1,000 queries.
- Keyword Search Volume: Google Ads search volume, CPC and up to 48 months of trend for a keyword list, $2 per 1,000 keywords.
- Sitemap Extractor: every URL a website lists in its sitemaps, with lastmod, images and hreflang, $0.25 per 1,000 URLs.
- Broken Link Checker: crawl a site and find broken links and images, with the pages they are on.
- Tech Stack Detector: which CMS, ecommerce platform, analytics and hosting a website uses, $1.50 per 1,000 websites.
- Website Screenshot + Change Detection: screenshots of many URLs on desktop and mobile, with visual change detection between runs.
- Dataset Merge & Dedup Datasets: merge, dedupe and filter the results of several runs into one dataset.