SFOLN

Catalogue / Ad intelligence

Google Ads Transparency Scraper

sfoln/google-ads-transparency · Social media, Lead generation, Ecommerce On request

List the ads any advertiser runs on Google from the Ads Transparency Center, by name, advertiser ID or domain: creative ID, advertiser, preview link and, optionally, format, image and first/last shown dates. $1.50 per 1,000 ads + $0.004 per request.

About

What it does

Google Ads Transparency Scraper lists the public ads any company runs on Google (Search, YouTube, Display, Play, Maps, Shopping) from the Google Ads Transparency Center – by advertiser name, advertiser ID (AR…) or website domain – and returns one dataset record per ad creative: creative ID, advertiser ID and name, public preview link and, optionally, format, image and first/last shown dates. Filter by region, platform, format, political topic and date range. Built for competitive intelligence, agencies, brand-safety teams and AI agents.

Price

Price per delivered record

EventPricePer 1,000Charged for
Google ad
google-ad
$0.0015$1.5 / 1,000Charged once per ad (creative) record delivered from the Google Ads Transparency Center (recordType ad). Duplicates, query summary rows and failed requests are not charged.
Transparency Center request
google-ads-query
$0.004$4 / 1,000Charged once per upstream request: the advertiser-name search (when you pass a name) and every page of ads fetched. A search that matched no advertiser, or a page without new ads, is charged only when the upstream provider billed it. Failed requests are not charged.
Ad details page
google-ad-details
paid plans only
$0.12$120 / 1,000Optional (includeAdDetails). Charged once per ads page requested with ad details (format, preview URL, advertiser name, first/last shown). The upstream bills 25 credits for such a page; a page without new ads is charged only when the provider billed its details.

Apify free plan: up to 10 items per run. Paid plans have no per-run cap; set maxTotalChargeUsd to cap spend.

Run

Call it from code, an agent or the Console

This API is private on Apify for now. Email us and we will publish it for you, usually within two working days. The calls below work once it is public. contact@sfoln.com

curl · synchronous run, rows in the response
curl -X POST "https://api.apify.com/v2/actors/sfoln~google-ads-transparency/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"advertisers":["lululemon.com"],"maxAdsPerQuery":10}'
mcp.json · hosted Apify MCP server
{
  "mcpServers": {
    "apify": {
      "type": "http",
      "url": "https://mcp.apify.com?tools=sfoln/google-ads-transparency"
    }
  }
}
asynchronous run · for large batches
POST https://api.apify.com/v2/actors/sfoln~google-ads-transparency/runs?maxTotalChargeUsd=1
GET  https://api.apify.com/v2/actor-runs/{runId}            # until status is SUCCEEDED
GET  https://api.apify.com/v2/datasets/{defaultDatasetId}/items?format=json

Authenticate with an Apify API token. MCP clients can instead sign in with OAuth when prompted. Example prompt for an agent: List 20 Google ads that lululemon.com runs in the United States and describe their formats and when they were last shown.

Input

Input fields

List public ads from the Google Ads Transparency Center by advertiser name, advertiser ID or website domain. Each query returns one dataset record per ad plus one summary record.

FieldTypeDefaultMeaning
advertisers *arrayrequiredAdvertisers (names, IDs or domains)
Advertiser names (searched in the Transparency Center), advertiser IDs (AR…) / adstransparency.google.com advertiser or ?domain= URLs, or website domains (e.g. lululemon.com), one per line. Accounts on the Apify free plan can process up to 10 advertisers per run.
maxAdsPerQueryinteger50Max ads per query
Maximum ads returned per advertiser name, ID or domain (1–500). Range 1–500.
regionstring—Region
Optional 2-letter country code (US, GB, AU…). Limits ads to that region and is used for advertiser-name search (which otherwise defaults to US). Empty = anywhere.
maxAdvertisersPerNameinteger1Advertisers per name
When you pass a name, how many matching advertiser accounts to list ads for (the ones with the most ads first, 1–5). Each costs at least one extra page. Range 1–5.
includeAdDetailsbooleanfalseInclude ad details (costly)
Ask for format, preview URL, advertiser name and first/last shown dates on every ad. The upstream bills 25× for these pages, so each ads page adds one google-ad-details event ($0.12).
formatstring—Ad format
Optional filter by creative format. One of "text", "image", "video".
platformstring—Platform
Optional filter by Google platform. One of "google_search", "youtube", "google_play", "google_maps", "google_shopping".
topicstring"all"Topic
All ads, or political ads only (political requires a region). One of "all", "political".
startDatestring—Shown from (YYYY-MM-DD)
Optional start of the date range.
endDatestring—Shown until (YYYY-MM-DD)
Optional end of the date range.
maxQueriesinteger100Max queries
Safety cap on advertisers processed in this run. Range 1–1000.
concurrencyinteger4Concurrency
Queries processed in parallel (1–8). Range 1–8.
itemTimeoutSecsinteger600Time limit per query (seconds)
Pagination for one advertiser name, ID or domain stops cleanly shortly before this limit (60–3600). Raise it for very large per-query limits. Range 60–3600.
includeRawbooleanfalseInclude raw upstream response
Attach the unmodified upstream ad object to each ad record under `raw` (larger output).
Example input
{
  "advertisers": [
    "lululemon.com"
  ],
  "maxAdsPerQuery": 10
}

Output

One record per input item

Records land in the run's dataset; a synchronous call returns them directly. Each has a status (ok is charged; everything else is free) and a charged flag. The run's OUTPUT record totals items and charges.

FieldTypeMeaning
inputstring | objectInput
The input query this record belongs to.
recordTypestringRow type
ad (one per ad, charged google-ad) | query (one summary per query, free).
statusstringStatus
ok | not_found | error | skipped_invalid | skipped_budget | skipped_free_plan
chargedbooleanCharged
Whether this record incurred a pay-per-event charge.
chargedEventstringCharged event
Pay-per-event event charged for this record.
sourcestringSource
Upstream data source (scrapecreators = ScrapeCreators API over the public ad library).
fetchedAtstringFetched at
ISO timestamp.
errorobjectError
code / message when status is not ok.
warningsarrayWarnings
Non-fatal notes (e.g. stopped early).
querystring | nullQuery
Advertiser name, ID or domain the row belongs to.
queryTypestring | nullQuery type
name | advertiserId | domain.
positioninteger | nullPosition
1-based position within the query results.
adIdstring | nullAd (creative) ID
Transparency Center creative ID (CR…).
advertiserIdstring | nullAdvertiser ID
Transparency Center advertiser ID (AR…).
advertiserNamestring | nullAdvertiser
Advertiser name (from ad details or the advertiser search).
formatstring | nullFormat
text | image | video (with ad details).
firstShownstring | nullFirst shown
ISO date first shown (with ad details).
lastShownstring | nullLast shown
ISO date last shown (with ad details).
previewUrlstring | nullPreview URL
Public Transparency Center page of the creative.
imageUrlstring | nullImage URL
Creative image / rendered preview when available.
domainstring | nullDomain
Advertiser domain when known.
regionsarrayRegions
Regions the ad was shown in when reported, otherwise the region filter.
textstring | nullText
Ad text when the upstream returns it (rare).
detailsIncludedboolean | nullDetails included
The page was fetched with includeAdDetails.
resolvedAdvertisersarrayResolved advertisers
Advertiser accounts matched for a name query (summary rows).
advertiserSearchChargedboolean | nullAdvertiser search charged
Name queries: true when the advertiser search was charged one google-ads-query (summary rows).
adsDeliveredinteger | nullAds delivered
Ads delivered for this query (summary rows).
pagesFetchedinteger | nullPages fetched
Ads pages fetched (summary rows).
queryFeesChargedinteger | nullRequest fees charged
google-ads-query events charged (summary rows).
detailFeesChargedinteger | nullDetails fees charged
google-ad-details events charged (summary rows).
adsEstimateinteger | nullAds estimate
Number of ads the Transparency Center estimates for the advertiser(s) (summary rows).
stopReasonstring | nullStop reason
limit | end | budget | max_pages | deadline | error | empty_pages (summary rows).
Example record
{
  "input": {
    "kind": "domain",
    "value": "lululemon.com"
  },
  "recordType": "ad",
  "query": "lululemon.com",
  "queryType": "domain",
  "position": 1,
  "adId": "CR08567627846124568577",
  "advertiserId": "AR01614014350098432001",
  "advertiserName": "lululemon athletica canada inc.",
  "format": "image",
  "firstShown": "2026-03-11T17:08:22.000Z",
  "lastShown": "2026-05-04T17:59:12.000Z",
  "previewUrl": "https://adstransparency.google.com/advertiser/AR01614014350098432001/creative/CR08567627846124568577",
  "imageUrl": null,
  "domain": "lululemon.com",
  "regions": [
    "US"
  ],
  "text": null,
  "detailsIncluded": true,
  "status": "ok",
  "charged": true,
  "chargedEvent": "google-ad",
  "source": "scrapecreators",
  "fetchedAt": "2026-10-14T10:00:00.000Z"
}

Machine-readable

This page for agents