Scrape Google ads — the full sponsored surface of the SERP — as structured JSON. Classic text ads and sponsored shopping cards, each with position, blockPosition (top / middle / bottom), advertiser domain, price, and sitelinks. See exactly who bids on your queries — no official Google API exposes this.
4.8 · 33 reviewsAds are included in every Google SERP call — the result.ads array discriminates plain text ads (type: "RESULT") from shopping-style sponsored cards (type: "SHOPPING_CARD").
import requests
response = requests.post(
"https://api.cloro.dev/v1/monitor/google",
headers={
"Authorization": "Bearer sk_live_your_api_key_here",
"Content-Type": "application/json"
},
json={
"query": "project management software",
"country": "US",
"device": "desktop"
}
)
print(response.json()) {
"success": true,
"result": {
"ads": [
{
"position": 1,
"blockPosition": "top",
"type": "RESULT",
"title": "Project Management Tool — Try It Free",
"url": "https://example.com/landing",
"displayedUrl": "https://www.example.com",
"domain": "example.com",
"description": "Plan, track, and ship work in one place. Trusted by 50,000+ teams. No credit card required.",
"page": 1,
"sitelinks": [
{
"title": "Pricing",
"url": "https://example.com/pricing",
"description": "Plans that scale with your team"
}
]
},
{
"position": 4,
"blockPosition": "middle",
"type": "SHOPPING_CARD",
"title": "PM Software Pro License",
"url": "https://www.google.com/aclk?...",
"category": "Popular products",
"price": {
"value": 12.99,
"currency": "$",
"raw": "$12.99"
},
"oldPrice": {
"value": 19.99,
"currency": "$",
"raw": "$19.99"
},
"store": "Example Store",
"imageUrl": "https://encrypted-tbn0.gstatic.com/shopping?q=...",
"page": 1
}
]
}
} Both ad types share position metadata; shopping-card ads add pricing, store, and image fields.
| Field | Type | Description |
|---|---|---|
| position | number | Position within the ad block (1-indexed). |
| blockPosition | string | Where the ad appeared on the SERP: top / bottom for text-ad blocks, middle for sponsored shopping carousels. |
| type | string | Discriminates plain text ads (RESULT) from shopping-style sponsored cards (SHOPPING_CARD). |
| title | string | Ad title. |
| url | string | Destination URL. For SHOPPING_CARD items this is a Google aclk redirect URL. |
| displayedUrl / domain | string | Formatted URL as displayed, and the advertiser's domain. |
| description | string | Ad copy for text ads; product context for shopping cards. |
| price / oldPrice | object | Structured price for shopping-card ads — numeric value, currency symbol, and the visible raw text; oldPrice surfaces MSRP / pre-discount pricing. |
| store | string | Merchant name attached to a shopping-card ad. |
| imageUrl | string | Hero image URL for shopping-card ads. |
| sitelinks | object[] | Sitelinks under the ad, each with url, title, and description. |
| page | number | SERP page where the ad was found. |
Pick a plan that fits your volume. Price per credit drops as you scale.
Increased concurrency, overages on credits and credit discounts for annual contracts.
Know moreCredit cost per request varies by provider. The figures below are for async/batch requests; sync requests add a +2 credit surcharge.
ChatGPT full response includes query fan-out, ads, and shopping data. Google News uses the same pricing as Google Search.
No. The official Google Ads API manages your own ad campaigns — it can't show you anyone else's ads. This Google ads scraper returns the sponsored results actually rendered on the SERP for any query: every advertiser, their copy, sitelinks, and shopping cards.
Competitive intelligence. The ads array tells you which competitors bid on your branded queries, what copy and sitelinks they run, which shopping cards undercut your pricing, and whether the paid block pushes your organic listing below the fold. None of this exists in any official Google API.
No. Ads are parsed and returned in every base Google SERP call alongside organic results — no include flag, no surcharge.
RESULT entries are the classic text ads in the top/bottom blocks: title, URL, copy, sitelinks. SHOPPING_CARD entries are the sponsored product carousels (often mid-SERP, blockPosition middle) and carry structured price, oldPrice, store, and imageUrl fields instead of ad copy.
Ad auctions run per impression: budgets, dayparting, and rotation mean the ad block genuinely differs call to call. For reliable share-of-voice numbers, sample each query repeatedly across the day and aggregate — pay-per-call pricing keeps high-cadence sampling affordable.
Yes — ad targeting is heavily geo-dependent. Use `location` (canonical Google location name) or `uule` for city-level sampling, and `device: "mobile"` to capture the mobile ad layout, which often differs from desktop.
Ads injected into the AI Overview block are returned separately when you request AI Overview enrichment — see the AI Overview API. The `result.ads` array covers the standard SERP ad blocks.