SpyFu Alternative: PPC Keywords & Competitor Google Ads avatar

SpyFu Alternative: PPC Keywords & Competitor Google Ads

Pricing

from $4.00 / 1,000 domains

Go to Apify Store
SpyFu Alternative: PPC Keywords & Competitor Google Ads

SpyFu Alternative: PPC Keywords & Competitor Google Ads

PPC competitor research and MCP tool: the keywords any website buys on Google Ads, with ad position, landing page, ad title and text, CPC, volume and estimated monthly ad spend. Bulk domains, 94 countries, organic keywords too. Pay per domain and keyword found, plus a $0.012 start fee per run.

Pricing

from $4.00 / 1,000 domains

Rating

0.0

(0)

Developer

PlainRows

PlainRows

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

18 hours ago

Last modified

Share

PPC competitor research in bulk: for any list of websites, get the keywords each one buys on Google Ads, with the ad position, landing page, ad title and ad text, search volume and CPC, plus the site's estimated monthly ad spend and paid traffic, in 94 countries. The same run also gives each site's organic traffic and keyword counts; switch keywordType to organic to get its top SEO keywords instead.

Built on a commercial SEO data provider: no scraping of SpyFu or other tools, no accounts, no subscription. You pay per domain with data and per keyword returned, plus $0.012 per run.

Typical uses

  • See which keywords a competitor pays for on Google Ads, what its ads say and which landing pages they send to.
  • Estimate a competitor's Google Ads budget (paidTrafficCostUsd) and paid traffic, for one site or hundreds in one run.
  • Find keywords worth bidding on: the terms your competitors advertise on, with volume and CPC, as a spreadsheet with one row per keyword.
  • Qualify leads by their ad spend: agencies can spot businesses that already advertise on Google.
  • Track competitors' ads over time by scheduling runs; feed n8n / Make workflows, dashboards or AI agents with clean JSON.

What you get for each domain

FieldDescription
domainThe website analysed (lowercase, without www.)
foundfalse when no search data exists for the domain (not billed)
paidTraffic, paidKeywordsEstimated monthly visits from Google Ads and number of keywords the domain advertises on
paidTrafficCostUsdEstimated monthly cost of that Google Ads traffic*
topKeywordsThe domain's ad keywords, most traffic first: keyword, ad position, landing page URL, ad title, ad text, estimated traffic, search volume, CPC, difficulty, intent*
organicTraffic, organicKeywordsEstimated monthly Google organic visits and number of ranking keywords
topKeywordsTypepaid or organic: what topKeywords holds (input keywordType)
organicTrafficValueUsd, organicPositionsWith keywordType: "organic" only: value of the organic traffic and ranking keywords per position bucket*
observedAtWhen this run fetched the data (UTC)

* Filled when topKeywords is 10 or more. With topKeywords: 0 you get the traffic metrics only, at the lowest price. Domains without ads come back with their traffic data and no keywords.

Missing values are always null, never guessed.

Input

{
"domains": ["semrush.com", "https://www.nike.com/", "moz.com"],
"country": "US",
"languageCode": "",
"topKeywords": 10,
"keywordType": "paid"
}
  • domains: domains or full URLs, up to 5,000 per run. URLs are reduced to their domain; subdomains other than www are kept. Duplicates are removed for free.
  • country: two-letter code of one of 94 countries: the US, Canada, the UK and most of Europe, Latin America, Asia-Pacific, the Middle East and Africa (full list in the input form).
  • languageCode: optional, defaults to the country's main language. A language the data source doesn't offer for that country stops the run with a clear message; only the $0.012 start fee is charged.
  • topKeywords: 0 (traffic only) or 10 to 1,000 keywords per domain. Default 10.
  • keywordType: paid (default here: Google Ads keywords with the ad text) or organic (SEO keywords). Same price per keyword.
  • minSearchVolume, maxPosition, excludeKeywords (optional filters): keep only keywords with at least this monthly volume, at this position or better, and without these words (up to 6, e.g. your brand). The data source applies them, so keywords left out are neither returned nor billed. With a filter set, organicPositions, organicTrafficValueUsd and paidTrafficCostUsd stay null (the source would compute them on the kept keywords only).

Output example

{
"domain": "moz.com",
"found": true,
"country": "US",
"languageCode": "en",
"organicTraffic": 43296.58,
"organicKeywords": 22778,
"paidTraffic": 7.98,
"paidKeywords": 2,
"organicTrafficValueUsd": null,
"organicPositions": null,
"topKeywordsType": "paid",
"paidTrafficCostUsd": 223.65,
"topKeywords": [
{
"keyword": "moz pro free trial",
"position": 1,
"url": "https://moz.com/moz-pro-free-trial",
"estimatedTraffic": 1.46,
"searchVolume": 90,
"cpcUsd": 27.24,
"keywordDifficulty": 12,
"searchIntent": "transactional",
"adTitle": "The Ultimate SEO Tool - Moz - Free 7-Day Trial",
"adDescription": "Outrank rivals with Moz Pro - the ultimate SEO tool. See how Gemini & ChatGPT rank you. Stop losing traffic. Build your SEO strategy with Moz Pro now. Get started for free today! SERP Analysis."
}
],
"observedAt": "2026-10-18T22:29:15.131Z",
"schemaVersion": "1.0"
}

Pricing

Pay per result, no subscription. Each run costs $0.012 to start. See the Pricing tab for current prices:

  • one event per domain with data: $0.006 (FREE) / $0.005 (BRONZE) / $0.0045 (SILVER) / $0.004 (GOLD);
  • one event per top keyword returned: $0.003 (FREE) / $0.002 (BRONZE and above).

Domains without data, duplicates and invalid entries are never billed. Input mistakes cost only the $0.012 start fee. The run never spends more than the maximum cost you set: it returns fewer top keywords, then stops processing domains, before reaching it.

Keywords are only looked up for domains that run Google Ads (with keywordType: "organic": that rank organically), and never more than the domain has: a site advertising on 3 keywords returns (and is billed) 3. Lists where most domains have no data, or only sites with a handful of keywords, stop early with a clear warning in the run log and the summary: the remaining domains are not looked up and not charged, and some small sites may come back without keywords (billed as traffic-only rows).

Free Apify plan: each run analyses up to 2 domains with up to 10 top keywords each, 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~ppc-competitor-keywords/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"domains": ["semrush.com", "nike.com"], "country": "US", "topKeywords": 10, "keywordType": "paid"}'

n8n, Make, Zapier: use the Apify integration and pick plainrows/ppc-competitor-keywords as the Actor; map the dataset items to your sheet, CRM or database.

AI agents (MCP): add https://mcp.apify.com?tools=plainrows/ppc-competitor-keywords to Claude, Cursor or any MCP client. The agent gets a typed tool with the input and output schemas of this page and pays per result.

What this is not

  • Ad keywords, positions and spend are estimates from Google search results sampled by the data provider, not the advertiser's Google Ads account data. Ads that run rarely may be missing.
  • Traffic figures are estimates of Google search traffic (paid and organic), not total website visits.
  • No ad history over years and no ad copy for display, YouTube or Shopping ads: search ads only, as seen now.
  • Not affiliated with Google, SpyFu, Semrush or Ahrefs.

Run summary

Each run stores a summary in the key-value store (OUTPUT): domains submitted, found, not found, billed, keywords billed, the keyword type, duplicates removed, invalid entries with the reason, and anything skipped because of the free-plan or budget limit (skippedBudgetLimit) or an early stop (skippedUncoveredCost: domains not looked up; keywordsSkippedUncoveredCost: domains returned without top keywords).

FAQ

Which keywords does my competitor buy on Google Ads? Enter its domain (or many, up to 5,000 per run), keep keywordType on paid and run. Each keyword comes with the ad position, landing page, ad title and ad text, search volume and CPC.

How much does a competitor spend on Google Ads? paidTrafficCostUsd estimates what its Google Ads traffic would cost per month at the keywords' CPC. It is an estimate from search results, useful to compare advertisers with each other, not the exact budget.

Can I see a competitor's ads in another country? Yes: 94 countries (full list in the input form). Run once per country you care about.

Can I get its SEO keywords too? Yes: set keywordType to organic and run again: the keywords that bring the site the most organic traffic, with position, URL, volume, CPC and difficulty. Same price per keyword.

Can I get one row per keyword (Excel, CSV, Google Sheets)? Yes. In the run's Output tab, open the Ranking keywords view: one row per keyword with its domain, ad title and ad text, ready to export. From the API, add view=keywords (or unwind=topKeywords) to the dataset items URL, for example https://api.apify.com/v2/datasets/DATASET_ID/items?view=keywords&format=csv. Same data, same price: only the layout changes.

Do I need a SpyFu, Semrush or Google Ads account? No. The data comes from a commercial SEO data provider; you pay per domain with data and per keyword, 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.