5 providers · from $0.09 per call · $0.000 markup

Keyword research API: Google search volume, CPC and competition for a list of keywords

Hand your agent a list of keywords and get a figure back for each one: average monthly searches, the competition level and the top of page bid range. 5 providers answer through one treg.to key: a twentieth of a cent per keyword on the cheapest row, a flat rate per request on another, each at the provider's own rate with no markup. Google's own row is free on your connected Google Ads account and never metered, and it answers with a number per keyword rather than the bucket the Keyword Planner screen shows you. It is the row the research behind these pages runs on.
$1.00 of free credit on every new team · no provider signup · no card
3 of 5 endpoints on this page are live-verified against the provider.
compared on this page
DataForSEOSemrushSE RankingSerpstat
The economics

What 100 of these actually costs

instead of
$208/mo
Semrush $139/mo + Serpstat $69/mo, at list
you pay
$9.00
100 × $0.09 at DataForSEO, metered per call

Subscription figures are provider list prices recorded in treg.to’s own catalog grid; per-call prices are what treg.to charges today, with $0.000 added.

Try it

What’s the best way to ask ChatGPT?

1Set your agent up, once
in your agent's chat
set up treg — https://treg.to/llms.txt
2Ask for the job
the prompt
Using treg, get the average monthly searches, competition and top of page bid for these 200 keywords in the US in English, show me the price per provider first, batch them into as few calls as the provider allows, and sort the table by volume with the ones that returned no data listed separately.
works in
ChatGPTClaudeClaude CodeCodexCursorGemini CLI

Why this prompt works

Batch, do not loop

One row charges a flat rate per request for up to a thousand keywords. Sending them one at a time on that row multiplies the bill by a thousand for the same answer.

Name the country and language

Volume is per market. A keyword measured across everywhere is a number that describes nowhere, and every row here wants the market stated.

Ask for the price per provider first

The rows meter in three different ways: per request, per keyword returned, and free on your own account. treg.to prints each before the call.

Keep the empty rows visible

Google returns nothing for some ordinary words, and a provider that drops them quietly leaves you reading a shorter list than you sent.

Why treg.to

Why go through treg.to

One key, not 9 accounts

treg.to holds the provider keys. Neither you nor the agent sees them.

Price before the call

The provider's own rate, $0.000 markup, from a prepaid balance.

No subscription, no seats

Charged per call. $1.00 free per new team, no card to start.

Your own keys are free

Already pay Hunter? Register it and those calls are never metered.

Switch by changing a word

Another provider is a different word in the prompt, not a new integration.

Nothing to integrate

No SDK, no OAuth dance per vendor, no seats.

Behind the scenes

What ChatGPT sees before it calls

treg.to does not choose for you. It hands ChatGPT this comparison, with the price shown before any call, and ChatGPT picks. Or you tell it how: "cheapest", "most reliable", "the one that takes what I have", or a provider by name.

Which keyword research API is cheapest?

Cheapest per call

DataForSEODataForSEO at $0.09

Cheapest per result

SerpstatSerpstat at $0.0005

Those units are not interchangeable: one call can return many results, so compare on the unit you will actually be billed in.

Which keyword data provider is the most reliable?

ProviderSuccessMedianSample
SerpstatSerpstat100%1.3s603 calls
DataForSEODataForSEO100%260ms1446 calls
SE RankingSE Ranking99%1.5s141 calls
Google Ads97%388ms91 calls
Measured on treg.to traffic: real calls, real inputs, and sample sizes differ by provider. Live reliability, not a controlled benchmark.

How do the keyword data providers compare?

ProviderPriceAcceptsSuccess rateVerified
SerpstatSerpstat$0.0005 per resultmethod, params, id, params.keywords, params.se, params.withIntents100% (603 calls)unverified
SE RankingSE Ranking$0.00179 per resultsource, keywords, sort, sort_order, history_from, history_to99% (141 calls)2026-07-31
DataForSEODataForSEO$0.09 per callkeywords, location_code, language_code, search_partners, date_from, date_to100% (1446 calls)2026-07-28
Google Adsfree, your own accountcustomer_id, keywords, geoTargetConstants, language, keywordPlanNetwork, historicalMetricsOptions97% (91 calls)2026-07-28
SemrushSemrushno dollar rate publishedtype, phrase, database, display_date, export_columns, export_escapenot yet measuredunverified

Run one

the cheapest verified call
treg call dataforseo.google.keywords.volume --data '[{"keywords":["coffee"],"location_code":2840,"language_code":"en"}]'

Swap the id for any provider above. All 5 endpoints behind this job, with their parameters and captured responses, are on the Google Keyword Data shelf.

How these numbers are made

PricesEach provider’s own published rate, converted to US dollars for one chargeable event of the unit they bill in. treg.to adds $0.000. Where a provider bills in credits, the conversion uses the rate on their public pricing page, last checked 2026-07-31.
Success ratetreg.to’s own served calls over the last 30 days: 2xx counts as a success, 5xx and timeouts as a failure. A 4xx is excluded, because it usually means the caller sent bad parameters and one bad query should not make a healthy endpoint look broken.
What this is notA controlled benchmark. These are real calls with real inputs, so sample sizes and the difficulty of what was asked differ by provider. Treat the rates as live reliability, not a like-for-like test.
VerifiedThe date treg.to last called the endpoint end to end and confirmed the shape of its response and the price it charged.
From the field

What people actually struggle with

SEO tooling threads are seeded on an industrial scale: of the ~180 Reddit and X posts read in August 2026, three near identical six week bake off posts landed on the same recommendation in the same house style, two subreddits in the results were review farms, and one post ran word for word from two different accounts. These five are people with a spreadsheet and a problem.

The screen answers in buckets

“It keeps showing me ranges such as 100-1k. This is very hard for me to guess for any good decision I wish to make.” r/googleads

What this page can do about it: The free row on this page is the same Keyword Planner data through the API, and it answers with a figure per keyword rather than a range. That figure is Google's own rounded number, so treat it as a rank rather than a count.

The export rounds everything to nothing

“when i export in CSV it's either 50, 500, 5000 or 50000 for all results” r/googleads

What this page can do about it: That is the data quality floor the API is worth having for. Every row here returns a per keyword field an agent can sort, join and put in a table, which the export cannot give you at any spend level.

The bid estimate and the invoice are different numbers

“Keyword planner says Low competition keyword top page bid high range is 0.03 cent. Why am I paying 1.28?” r/PPC, 8 points

What this page can do about it: No provider on this page fixes that, and any page that says otherwise is selling. The bid fields are an estimate of an auction. Use them to rank keywords against one another, and take what you actually pay from your own campaign data.

Twenty thousand keywords is not a spreadsheet job

“there are like 20,000 keywords, so it's not something a standard VLOOKUP will work for” r/SEO

What this page can do about it: This is the case per call pricing is for. A flat per request row batches up to a thousand keywords at a time, so twenty thousand is twenty calls at a rate printed before the first one, with no plan to be on.

The tools do not know about traffic you are already getting

“lately we've been seeing a lot of traffic in Google Search Console from keywords that don't even exist in the tools we're using” r/SEO

What this page can do about it: Which is the honest limit of every row here. These are models of demand, not records of it. Your own Search Console data is the one source that is actually counting, and it is a free own account row in this same catalog.

The detail

What actually differs

The Google Ads row is free, and it is the real thing.

It runs on your team's connected Google Ads account, is never metered by treg.to, counts only against the developer token's own daily operation limit, and it returns a figure per keyword rather than the range the Keyword Planner screen shows. The figure is Google's own rounded number and not a raw count. The cost of this row is not money, it is access: Google's flow pushes you towards creating a campaign on the way in, and the developer token is its own approval.

The paid rows meter in two different shapes, and the shape decides the bill.

DataForSEO charges a flat rate per request that covers one keyword or a thousand alike, so batching is the whole game; the catalog uses the rate card's price rather than the lower one on the public pricing page, because the rate card is what the account is actually charged. Serpstat and SE Ranking charge per keyword returned, and Serpstat bills its one credit minimum even when a keyword comes back empty. Semrush charges API units with no published dollar rate, so the page prints no price for it and it runs on your own Semrush plan.

The numbers will not agree, and no row here is ground truth.

Each provider models Google's data its own way, so the same keyword comes back with different volumes on different rows, and Search Console will show you clicks on queries that none of them list at all. The bid range is an estimate of an auction rather than the auction: practitioners regularly report paying many times the figure, or a fraction of it. Use these fields to rank keywords against each other and take your real cost from your own campaign data. treg.to puts the rows side by side; the agent picks, and treg.to never routes or fails over between them.

Background

What is a keyword research API?

It is a call that takes a list of keywords and returns what an advertiser's data set knows about each one: roughly how many times a month people search it, how contested it is, and what advertisers are paying at the top of the page. The reason people want it as an API rather than a screen is volume and shape. The Keyword Planner screen shows bucketed ranges to accounts that are not spending, its CSV export collapses everything to a handful of round numbers, and neither is something you can join onto twenty thousand rows. Every provider here answers per keyword, in a response an agent can put in a table.

Questions

Before you start

Is this the same data as Google Keyword Planner?

The Google Ads row is, on your own connected account, and it answers with a figure per keyword instead of the range the screen shows. The other rows are each provider's own model of the same underlying signal, which is why their numbers differ from Google's and from each other.

Do I need a Google Ads account?

Only for the free row, which runs on your own connection and is never metered. The paid rows need nothing of yours: they run on treg.to's key and bill from your team's prepaid balance at the provider's rate with $0.000 added, so a list of keywords does not require a developer token or an ad campaign.

Why do the volume numbers differ between providers?

Because none of them is counting searches. Each one models Google's published signal in its own way, and this page will not crown one, because there is no ground truth to crown it against. Pull the same list from two rows for a few cents and treat the disagreement as the error bar.

How much does ten thousand keywords cost?

It depends entirely on which row and how you batch. A flat per request row covering up to a thousand keywords is ten calls; a per keyword row is ten thousand chargeable results however you send them; the Google Ads row is free and bounded by a daily operation limit instead. treg.to prints each rate before the call so the agent can say the number first.