Home / Tools / Competitor Keywords

Keyword research

Competitor Keywords

See every Google keyword a competitor ranks for: position, URL, search volume, CPC, keyword difficulty, intent and estimated traffic for any domain or page, in 90+ countries. Bulk domains, sortable, filterable. No SEO suite subscription needed.

Run it on Apify API & MCP

Sample output

Real rows from the prefilled example run on Oct 19, 2026.

Full JSON of one real output row (4 rows in the example dataset)
{
  "domain": "upliftdesk.com",
  "keyword": "uplift desk",
  "position": 1,
  "position_absolute": 1,
  "result_type": "organic",
  "url": "https://www.upliftdesk.com/",
  "title": "UPLIFT Desk | Office Furniture that Benefits You",
  "search_volume": 40500,
  "cpc": 2.62,
  "competition": "HIGH",
  "keyword_difficulty": 10,
  "search_intent": "transactional",
  "estimated_traffic": 5491.1,
  "estimated_traffic_cost_usd": 14386.59,
  "previous_position": 1,
  "position_change": "same",
  "serp_features": [
    "organic",
    "people_also_ask",
    "perspectives",
    "... 5 more"
  ],
  "is_featured_snippet": false,
  "search_volume_trend": {
    "monthly": 0,
    "quarterly": 0,
    "yearly": 0
  },
  "location": "United States",
  "language": "English",
  "serp_checked_at": "2026-07-30T04:57:13Z",
  "scraped_at": "2026-10-19T02:07:03Z"
}

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
domainstringDomain or page URL the keywords were looked up for
keywordstringKeyword the domain ranks for in Google
positionintegerGoogle rank among results of the same type (1 = top)
position_absoluteintegerAbsolute position on the results page, counting all SERP elements
result_typestringType of the ranking result: organic, paid, featured_snippet, local_pack or ai_overview_reference
urlstringURL of the ranking page
titlestringTitle of the ranking result
search_volumeintegerAverage monthly Google searches for the keyword
cpcnumberAverage Google Ads cost per click (USD)
competitionstringGoogle Ads competition level: LOW, MEDIUM or HIGH
keyword_difficultyintegerSEO keyword difficulty, 0-100 (higher = harder to rank)
search_intentstringMain search intent: informational, navigational, commercial or transactional
estimated_trafficnumberEstimated monthly organic visits this ranking brings the domain
estimated_traffic_cost_usdnumberWhat that traffic would cost per month in Google Ads (USD)
previous_positionintegerPrevious absolute position, when known
position_changestringChange since the previous check: new, up, down or same
serp_featuresarraySERP feature types present on the results page (e.g. people_also_ask, ai_overview)
is_featured_snippetbooleanTrue when the ranking result is a featured snippet
search_volume_trendobjectSearch volume change in % (monthly, quarterly, yearly)
locationstringCountry the data is for, e.g. "United States"
languagestringLanguage name, e.g. "English"
serp_checked_atstringWhen the Google results page was last checked (ISO 8601, UTC)
scraped_atstringWhen this row was produced (ISO 8601, UTC)

Pricing

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

EventFree planBronzeSilverGold
Ranked keyword main
Charged once per ranked keyword returned for a domain.
$0.002$0.0019$0.0018$0.0016
Domain lookup
Charged once per domain for each block of up to 1,000 ranked keywords fetched.
$0.03$0.03$0.03$0.03

Examples on the Free plan: 100 ranked keywords = $0.20, 1,000 ranked keywords = $2, 10,000 ranked keywords = $20. Apify's Free plan includes $5 of monthly usage credit. Prices read from the Apify API at build time (2026-10-19).

Example input

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

{
  "domains": [
    "backlinko.com"
  ],
  "location": "United States",
  "language": "English",
  "maxKeywordsPerDomain": 20
}

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~competitor-keywords/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"domains": ["backlinko.com"], "location": "United States", "language": "English", "maxKeywordsPerDomain": 20}'
Python
# pip install apify-client
import os
from apify_client import ApifyClient

client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("wrenfield-data/competitor-keywords").call(
    run_input={
    "domains": [
        "backlinko.com"
    ],
    "location": "United States",
    "language": "English",
    "maxKeywordsPerDomain": 20
},
    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/competitor-keywords').call({
  "domains": [
    "backlinko.com"
  ],
  "location": "United States",
  "language": "English",
  "maxKeywordsPerDomain": 20
}, { maxTotalChargeUsd: 1 });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
MCP (Claude, Cursor, VS Code, any MCP client)
{
  "mcpServers": {
    "wrenfield-competitor-keywords": {
      "url": "https://mcp.apify.com?tools=wrenfield-data/competitor-keywords"
    }
  }
}

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--competitor-keywords. More client setups on the MCP page.

n8n, Make, Zapier

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

FAQ

How much does Competitor Keywords cost?

$0.002 per ranked keyword on the Apify Free plan ($2 per 1,000), billed per result by Apify with no subscription. Plus $0.03 per domain lookup. Higher Apify plans get the discounted tiers shown in the pricing table. You can cap any run with a maximum cost.

Where does the data come from?

From a licensed SEO database that tracks Google results for hundreds of millions of keywords, refreshed regularly. serp_checked_at shows when each result was last checked.

Why is estimated_traffic low for a high-volume keyword?

Traffic depends on position. A keyword with 1M searches at position 14 sends far fewer clicks than one at position 1.

Can I check a single page instead of a whole domain?

Yes. Paste the full URL (e.g. https://example.com/blog/post).

Does it include paid (Google Ads) keywords?

Set Result types to Organic + paid.

Related tools

Keyword Search Volume

Google Keyword Planner volume, CPC, competition and 12-month trends, no Ads account.

Keyword Research Tool Launching soon

Keyword ideas with volume, KD, intent and SERP features in one row.

Keyword Difficulty Checker

KD 0-100 and search intent for thousands of keywords at once.

Google Autocomplete Expander Launching soon

Long-tail and question keywords from Google and YouTube suggestions.

People Also Ask Scraper Launching soon

PAA question trees, related searches and AI Overview text.

Google Trends Scraper

Interest over time, by region, related queries and Trending Now.

Compare and plan

Try Competitor Keywords 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