SERP API — google_serp
Google organic results as JSON through the native task API. Asynchronous: create a task, then long-poll it. Same key, balance and error format as the native /v1 API.
POST /v1/tasks
| type | "google_serp" | required |
| q | string, 1–400 chars | the search query |
| depth | 10–100, step 10 (default 10) | results to collect = depth/10 Google pages |
| gl | ISO country, e.g. "GB" (default "US") | Google country |
| hl | language, e.g. "en" (default "en") | interface language |
| location | Google Ads canonical name or null | city/region, see GET /v1/serp/locations |
| filter | bool (default true) | false = &filter=0: similar results not folded |
curl -X POST https://api.floweno.com/v1/tasks \
-H "X-API-Key: flw_live_..." -H "Content-Type: application/json" \
-d '{"type":"google_serp","q":"emergency plumber","depth":30,
"gl":"GB","hl":"en","location":"Manchester,England,United Kingdom"}'
# 201
{"task_id":"7f3c2a1e-9b4d-4c6a-8e21-5d0f3b9a7c14","type":"google_serp",
"status":"queued","units":3,"cost_micro":1500,"charged":false,
"progress":null,"result":null, ...}GET /v1/tasks/{task_id}?wait=0..60
While running, progress is {"pages_done": 1, "pages_total": 3}. Pages are fetched one by one at a paced rate: a top-100 can take 10–15 minutes. When done, cost_micro is what was charged (pages actually fetched) and result holds the data. Results stay available for 30 days.
{
"status": "done", "units": 3, "cost_micro": 1000, "charged": true,
"result": {
"schema_version": "1",
"keyword": "emergency plumber", "gl": "GB", "hl": "en",
"location": "Manchester,England,United Kingdom", "device": "desktop",
"pages_requested": 3, "pages_fetched": 2,
"stop_reason": "end_of_results", // depth_reached | end_of_results | error
"fetched_at": "2026-10-09T07:23:35Z",
"items": [
{"type": "organic", "rank_group": 1, "rank_absolute": 1, "page": 1,
"domain": "www.britishgas.co.uk", "title": "...", "description": "...",
"url": "https://www.britishgas.co.uk/plumbing/services.html",
"url_resolved": true, "google_url": "https://www.google.com/goto?url=...",
"breadcrumb": "...", "website_name": "...", "is_video": false}
]
}
}items[].typeis an open set: todayorganic; new types may appear — skip the ones you do not know.urlis the real landing URL. Google only exposes/gotolinks; if one could not be resolved,url_resolvedis false andurlis that link.- Forum-style results may have an empty
domainand awebsite_name.
Billing
One unit = one Google page of 10 results. On create we hold depth/10 pages; on success we charge the pages actually fetched and release the rest; a failed task is never charged.
GET /v1/serp/locations?q=&country=
Google Ads geotargets for the location field (autocomplete). E.g. ?q=manch&country=GB → {"items":[{"canonical_name":"Manchester,Manchester,England,United Kingdom", ...}]}. An unknown location is rejected with ERROR_BAD_PARAMETERS.
SERP errors
On create: ERROR_BAD_PARAMETERS (e.g. unknown location), ERROR_NO_SLOT_AVAILABLE (no capacity right now — retry later), ERROR_ZERO_BALANCE. A failed task has error_code captcha_unsolved, blocked, forbidden or internal; resubmitting is safe and failed tasks are free. SERP is not available on the CapSolver-compatible /createTask.