# 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.

## What's the best way to ask ChatGPT?

Setup line (paste into any agent): `set up treg — https://treg.to/llms.txt`

Then ask: "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."

- **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 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 and it picks, or you tell it how.

### Which keyword research API is cheapest?

- Cheapest per call: DataForSEO at $0.09 (`dataforseo.google.keywords.volume`)
- Cheapest per result: Serpstat at $0.0005 (`serpstat.google.keywords.volume`)

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?

- Serpstat: 100% over 603 calls, 1.3s median
- DataForSEO: 100% over 1446 calls, 260ms median
- SE Ranking: 99% over 145 calls, 1.5s median
- Google Ads: 97% over 91 calls, 388ms median

Measured on treg.to traffic; not a controlled benchmark.

### How do the keyword data providers compare?

| Provider | Price | Accepts | Verified |
|---|---|---|---|
| Serpstat | $0.0005 per result | method, params, id, params.keywords, params.se, params.withIntents | unverified |
| SE Ranking | $0.00179 per result | source, keywords, sort, sort_order, history_from, history_to | 2026-07-31 |
| DataForSEO | $0.09 per call | keywords, location_code, language_code, search_partners, date_from, date_to | 2026-07-28 |
| Google Ads | own account, free | customer_id, keywords, geoTargetConstants, language, keywordPlanNetwork, historicalMetricsOptions | 2026-07-28 |
| Semrush | no dollar rate published | type, phrase, database, display_date, export_columns, export_escape | unverified |

Endpoints:

- `dataforseo.google.keywords.volume`: treg call dataforseo.google.keywords.volume --data '[{"keywords":["coffee"],"location_code":2840,"language_code":"en"}]'
- `google-ads.google.keywords.volume`: treg call google-ads.google.keywords.volume --data '{"keywords":["coffee beans"],"geoTargetConstants":["geoTargetConstants/2840"],"language":"languageConstants/1000","keywordPlanNetwork":"GOOGLE_SEARCH"}'
- `semrush.google.keywords.volume`: treg call semrush.google.keywords.volume
- `seranking.google.keywords.volume`: treg call seranking.google.keywords.volume --query source=us --data '{"keywords":["seo platform"]}'
- `serpstat.google.keywords.volume`: treg call serpstat.google.keywords.volume

## 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: https://www.reddit.com/r/googleads/comments/1dodfc3/how_do_i_see_the_exact_monthly_search_volume/)

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: https://www.reddit.com/r/googleads/comments/1dz73xx/important_features_missing_from_keyword_planner/)

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: https://www.reddit.com/r/PPC/comments/1grv58y/google_ads_keyword_planner_says_low_competition/)

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: https://www.reddit.com/r/SEO/comments/1dj6b4z/keyword_api_suggestions/)

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: https://www.reddit.com/r/SEO/comments/1ry5v7o/should_i_trust_tools_on_keyword_search_volume/)

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.


## 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.

## 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

**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.

HTML version: https://treg.to/use-cases/keyword-volume-cpc-and-competition