Google SERP Scraping Webhooks
Set callbackUrl in the submit request body to receive the result via webhook instead of polling. When parsing completes, the server sends a POST request to that URL with the result payload.
Submit with Callback
curl https://app.scrapering.com/api/parsing/v1/serp-google \
--request POST \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--data '{
"q": "Buy pizza",
"pages": 10,
"callbackUrl": "https://my-server.com/webhook/parsing"
}'Webhook Payload
Make sure your webhook endpoint responds with a
2xxstatus code to acknowledge receipt.
Your endpoint will receive a POST request with the same body as the polling result, plus a scope field:
{
"status": "ready",
"scope": "serp:google",
"requestId": "abaf4ac3-d9e7-43f2-a414-e7d2ca9ff635",
"data": {
"input": {
"original_url": "https://www.google.com/search?q=Buy+pizza&hl=en&gl=us"
},
"organic": [
{
"link": "https://example.com/pizza",
"rank": 1,
"title": "Order Pizza Online",
"description": "Fast delivery. Order now at example.com."
}
],
"related": []
},
"respondedAt": "2026-03-20T10:35:35.866Z"
}
| Field | Type | Description |
|---|---|---|
| status | string | Always "ready" |
| scope | string | Scraper of the task: "serp:google" |
| requestId | string | Task ID returned from the submit endpoint |
| data | object | Task result — the same as data in the polling result |
| respondedAt | string | ISO 8601 timestamp of completion |
A webhook is sent for successful and failed tasks alike — check data to see whether the task succeeded, see API Status Codes. If your endpoint does not answer with 2xx, the request is retried up to two more times, after 1 and 2 seconds. Cancelled tasks and tasks that time out do not trigger a webhook — use the result endpoint for them.
Important! Screenshot is stored for 1 hour after the scrape.
Save the results on your side so you don't lose them.
Next steps
- Creating a task — back to the submit endpoint reference
- Receiving result — polling alternative to webhooks