You budget a SERP crawl at $0.60 per 1,000 keywords, the rate printed on the pricing page. The invoice comes back at thirty dollars.
Nothing went wrong and nobody overcharged you. The DataForSEO SERP API is a prepaid, wholesale API that returns parsed Google results as JSON, and it bills per SERP of ten results rather than per keyword. You paid the advertised rate for a different unit than the one you had in mind.
It is one of the cheapest ways to pull Google results at volume, and one of the easiest to mis-budget, because the thing it bills you for is not the thing you asked for.
The billing unit is a page of ten results, not a keyword and not a request. At $0.60 per 1,000 SERPs on the Standard queue, 1,000 keywords at
depth=100costs $6.00 because each keyword consumes ten units, and adding a singlesite:operator multiplies that again by five, to $30.00. Every step is documented behaviour, which is why the rate card and the invoice can disagree by 50 times without anybody making a mistake.
10
Results in one billed unit
$0.60
Standard queue, per 1K SERPs
×5
Per search operator used
45 min
Documented queue target
We build a Google search results API at FlyByAPIs, so we read competitor rate cards the way other people read contracts, closely and in a bad mood. Everything below comes from DataForSEO’s own pricing page, docs and help centre, checked in August 2026.
By the end you will know exactly what a task costs before you send it, how to wire up both delivery modes in Python, and which billing shape actually suits the job you are doing.
What one SERP actually costs
The base rate depends only on how fast you want the answer. Same data, three speeds.
| Method | Turnaround | Per 1 SERP | Per 1,000 SERPs |
|---|---|---|---|
| Standard queue | ~5 min average | $0.0006 | $0.60 |
| Priority queue | up to ~1 min | $0.0012 | $1.20 |
| Live mode | up to ~6 sec | $0.002 | $2.00 |
Now the sentence that matters, and it is printed right there on their own Google Organic price card : “One SERP of Google Organic SERP API contains 10 search engine results.”
Read that again. DataForSEO’s billing unit is a page of ten results, not a keyword and not a request.
Bottom line:
$0.60 per 1,000 buys you 1,000 pages of ten results. If your job needs the top 100 for each keyword, one keyword consumes ten of those units before any other charge applies.
For a rank tracker checking positions one to ten, that unit is a perfect fit: one keyword is one unit, so 1,000 tracked keywords cost $0.60 on the Standard queue. For anything that needs depth, the maths changes shape entirely.
So the first question to ask any vendor in this category, including us, is what exactly one billed unit contains. When we describe SERP API pricing for our Google endpoint , the unit is one request, and that is the number worth pinning down before you compare anything else.
The 45 minutes hiding under “5 minutes”
Every article about this API repeats that the DataForSEO Standard queue takes about five minutes. That figure is real, and it is an average.
Underneath the same price card sits an asterisk that almost nobody quotes: “The target turnaround time is 45 minutes. Extended processing may occur.”
Five minutes is the average, 45 is the promise
If a user is waiting on the other end of that request, you cannot build against a 45 minute ceiling. Budget the Priority queue or Live mode for anything interactive.
This is not a scandal. It is a queue, and queues have targets. But it does mean the cheap rate carries an operational cost that a per-request rate does not.
The documented target is nine times the five minute figure everybody quotes, so design for the target rather than the average.
It is also the clearest reason to check whether a queue is something you need at all. A synchronous Google search API answers on the spot and has no ready-list to poll, which removes the question rather than answering it.
The multipliers, and how they stack
Here is the part that turns $0.60 into $30. On top of the base rate sit parameters that multiply the cost of a task, and DataForSEO says plainly that “the final price can contain multiple multipliers.”
| Parameter | Effect on the bill |
|---|---|
| site: intitle: inurl: link: filetype: inanchor: info: intext: define: id: | Multiply by 5 for each operator used |
| depth | Multiply for every 10 results requested |
| max_crawl_pages | Multiply per SERP crawled |
| calculate_rectangles | Adds one full base price |
| load_async_overview | Adds one full base price |
| load_async_ai_overview | Adds $0.002, refunded if the element is absent |
| people_also_ask_click_depth | Adds $0.00015 per click |
Take one realistic job: 1,000 keywords on the Standard queue, and watch what three ordinary decisions do to it.
Same 1,000 keywords, same rate card
Plain
$0.60
depth=10, no operators
Add depth
$6.00
depth=100, so ×10
Add an operator
$30.00
plus a site: query, so ×5 again
$30.00 instead of $0.60, same 1,000 keywords. That is fifty times the headline number, and every step of it is documented behaviour.
Nobody hid anything. The rate card describes a metered product, and metered products reward people who read the meter.
The trap is not the price. The trap is assuming a keyword is a unit. On this API a keyword is however many ten-result pages your parameters demand, multiplied by whatever your query syntax triggers.
That site: multiplier is worth dwelling on, because site queries are exactly what you reach for when auditing indexation. A 1,000 page indexation check is one of the most natural jobs in SEO, and it is five times the price of the same volume of plain keywords.
Query syntax is the variable most people forget to price. On our own Google search scraping API an operator changes the results you get back and nothing else, because the meter does not read the query.
Setting it up in Python
Almost every article about this product stops at the pricing. Nobody shows you the wiring, which is a shame, because that is where the real difference between the two modes lives.
Three things to know before the first request:
- Authentication is HTTP Basic with your login and password, not a bearer token.
- The POST body is always a JSON array of task objects, even when you are sending exactly one.
- Both delivery modes return the same schema, so moving a job from Live mode to the queue changes the plumbing around the call, not the parsing inside it.
Live mode, one call
| |
The whole call is that short, and results land in about six seconds at $0.002 a SERP.
Note location_code. It is required unless you send location_name or coordinates, and the codes live behind separate lookup calls to /v3/serp/google/locations and /v3/serp/google/languages. Cache those locally on day one, otherwise you will be making a lookup request every time somebody adds a country.
Two gotchas worth knowing before you debug them:
The keyword field caps at 700 characters, and it decodes percent-encoding. A literal % must be sent as %25 and a literal + as %2B, or your query quietly becomes a different query.
Queue mode, three calls
The cheap rate requires the queue, and the queue requires you to hold state. Three calls, in this order:
- Post the task to
task_post, withpriority: 1for the Standard queue at $0.60 per 1,000 orpriority: 2for Priority at $1.20. - Poll
tasks_readyrather than hammeringtask_get, and set your own timeout against the 45 minute target, not the five minute average. - Collect the result from
task_get/advanced/{id}once that ID appears on the ready list.
| |
Look at what changed. You now need somewhere to persist task IDs, a poller, a retry policy, and a decision about what to tell a user who is still waiting after half an hour.
None of that is a criticism of the design. It is the honest cost of a queue, and it belongs in your estimate next to the per-SERP rate.
100 requests/month free · No credit card required
What it takes to open an account
There is no ongoing free tier. Registration gives you $1 of test credit, and after that the minimum payment is $50 .
One detail deserves credit, and it is rarer than it should be in this market. Their help centre states that once you top up, “the funds will remain on your balance until you spend all of them.” No monthly expiry, no use-it-or-lose-it.
Works in your favour
- ✓ Balance never expires
- ✓ One balance across every API they sell
- ✓ Very deep public documentation
- ✓ ISO 27001 certified, public status page
Plan around it
- ✗ $50 before any real testing
- ✗ Cost varies with query syntax
- ✗ Cheapest tier needs queue plumbing
- ✗ Forecasting needs a spreadsheet
The $50 floor is the part to plan for if you are still evaluating. It is a reasonable ask for a wholesale vendor, and it does mean the trial happens after the purchase order rather than before it. Our Google search API plans run the other way round, with a free tier first and a $19.99 entry plan after.
If you are shopping this category more broadly, our pricing breakdown across ten SERP API providers covers how the other rate cards are structured.
Metered billing versus flat billing
Forget the numbers for a second. The real fork in this decision is the shape of the bill, and there are only two of them.
Metered
The price responds to what you ask for. Depth, operators, extra SERP elements and delivery speed each move the number. You get fine-grained control and you carry the forecasting burden.
Flat
One request is one credit whatever the query contains. You lose the ability to fine-tune spend per call, and you gain a bill you can predict from a single number in your logs.
The FlyByAPIs Google Search API
sits on the flat side, deliberately. A request costs one credit whether the query carries a site: operator or not, and people_also_ask plus people_also_search_for come back in the same response at no extra charge. There is no element to switch on and no surcharge to forget about.
One authenticated GET, and the shape of it is the point:
| |
No task IDs, no poller, no ready-list. Plans start at $19.99 a month, and there are 100 requests a month free if you want to run your integration before paying anybody. The Google Search API request and response fields are documented if you want to check the schema first.
Neither shape is better in the abstract.
Metered wins when your workload is uniform and you can tune it. Flat wins when your queries are varied, your finance team wants a forecast, or you would rather not think about it at all.
Worth saying plainly: if your job is genuinely one keyword, ten results, once a day, on a queue you control, the Standard tier is a very sharp tool and you should use it.
Which one fits your job
Pick the queue
Overnight batch jobs where nothing is waiting on the answer, uniform ten-result depth, and enough volume that plumbing a poller pays for itself.
Pick Live mode
Anything a human or an agent is waiting on. Costs 3.3 times the Standard rate for identical data, and removes the queue entirely.
Pick flat billing
Mixed query shapes, operators in the mix, or a forecast you have to defend. Our real-time Google search results API bills one credit per request regardless.
Pick the full stack
If you need backlinks, on-page and keyword data from one vendor and one balance, DataForSEO's breadth is the honest reason to choose them.
Search results are rarely the only dataset a project needs, which is why we publish the neighbours on the same flat model: Google Maps business data extraction for local work, Amazon product data scraping for retail pricing, Crunchbase company data enrichment for firmographics, job listings search for hiring signals, and a translation API for multi-market pages. Same billing shape across all of them.
Before you send the first task
Run this in your head, or better, in a spreadsheet.
Count SERPs, not keywords
Divide your target depth by ten. That is your real unit count per keyword.
Grep your queries for operators
Every site: or intitle: is a five times multiplier, and they compound with each other.
Price the latency, not just the data
Decide whether your workload survives the 45 minute target before you buy the cheapest tier.
Add the engineering time
Task storage, polling and retries are real hours. Count them once, honestly.
The short version
DataForSEO built a wholesale product and priced it like one. The meter is precise, it is documented, and it rewards anybody who reads it before writing the integration. A perfectly legitimate way to sell data.
The failure mode is not the vendor. It is reading $0.60 per 1,000 as $0.60 per 1,000 keywords, sending a depth=100 job full of site: queries, and finding out at the end of the month.
So do the arithmetic first. If the answer suits you, their rate is genuinely hard to argue with. If you would rather have one number per request and no meter to watch, that is the trade the FlyByAPIs Google search results API is built around, and its free tier of 100 requests a month is there to test it with before any money changes hands.
100 requests/month free · No credit card required
P.S. If you take one habit from this post, make it grepping your keyword list for operators before you queue a job. We have watched that single check turn a scary estimate back into a boring one more than once.
Oriol.
