# Google Ads Transparency Scraper (`sfoln/google-ads-transparency`)

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.

- Family: Ad intelligence
- Categories: Social media, Lead generation, Ecommerce
- Availability: on request (private on Apify). Email contact@sfoln.com with subject "Access request: Google Ads Transparency Scraper (sfoln/google-ads-transparency)" before calling; calls fail until it is public.
- JSON: https://www.sfoln.com/actors/google-ads-transparency.json
- MCP: https://mcp.apify.com?tools=sfoln/google-ads-transparency
- REST (sync): POST https://api.apify.com/v2/actors/sfoln~google-ads-transparency/run-sync-get-dataset-items
- REST (async): POST https://api.apify.com/v2/actors/sfoln~google-ads-transparency/runs

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 per delivered record

| Event | Price | Per 1,000 | Charged for |
| --- | --- | --- | --- |
| Google ad (`google-ad`) | $0.0015 | $1.5 / 1,000 | Charged 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,000 | Charged 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,000 | Optional (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. |

Pay-per-event, USD, billed by Apify; no platform usage charge. Only records with status `ok` are charged. Cap a run with `maxTotalChargeUsd`. Apify free plan: up to 10 per run.

## Run

```bash
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 client configuration:

```json
{
  "mcpServers": {
    "apify": {
      "type": "http",
      "url": "https://mcp.apify.com?tools=sfoln/google-ads-transparency"
    }
  }
}
```

Example prompt: List 20 Google ads that lululemon.com runs in the United States and describe their formats and when they were last shown.

## Input

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.

| Field | Type | Default | Meaning |
| --- | --- | --- | --- |
| `advertisers` (required) | array | — | Advertisers (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. |
| `maxAdsPerQuery` | integer | `50` | Max ads per query: Maximum ads returned per advertiser name, ID or domain (1–500). |
| `region` | string | — | 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. |
| `maxAdvertisersPerName` | integer | `1` | Advertisers 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. |
| `includeAdDetails` | boolean | `false` | Include 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). |
| `format` | string | — | Ad format: Optional filter by creative format. One of `"text"`, `"image"`, `"video"`. |
| `platform` | string | — | Platform: Optional filter by Google platform. One of `"google_search"`, `"youtube"`, `"google_play"`, `"google_maps"`, `"google_shopping"`. |
| `topic` | string | `"all"` | Topic: All ads, or political ads only (political requires a region). One of `"all"`, `"political"`. |
| `startDate` | string | — | Shown from (YYYY-MM-DD): Optional start of the date range. |
| `endDate` | string | — | Shown until (YYYY-MM-DD): Optional end of the date range. |
| `maxQueries` | integer | `100` | Max queries: Safety cap on advertisers processed in this run. |
| `concurrency` | integer | `4` | Concurrency: Queries processed in parallel (1–8). |
| `itemTimeoutSecs` | integer | `600` | Time 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. |
| `includeRaw` | boolean | `false` | Include raw upstream response: Attach the unmodified upstream ad object to each ad record under `raw` (larger output). |

Example input:

```json
{
  "advertisers": [
    "lululemon.com"
  ],
  "maxAdsPerQuery": 10
}
```

## Output

One record per input item with `status` (`ok` is charged; `not_found`, `error`, `skipped_*` are free) and `charged`. The run stores an `OUTPUT` summary record.

| Field | Type | Meaning |
| --- | --- | --- |
| `input` | string | object | Input: The input query this record belongs to. |
| `recordType` | string | Row type: ad (one per ad, charged google-ad) \| query (one summary per query, free). |
| `status` | string | Status: ok \| not_found \| error \| skipped_invalid \| skipped_budget \| skipped_free_plan |
| `charged` | boolean | Charged: Whether this record incurred a pay-per-event charge. |
| `chargedEvent` | string | Charged event: Pay-per-event event charged for this record. |
| `source` | string | Source: Upstream data source (scrapecreators = ScrapeCreators API over the public ad library). |
| `fetchedAt` | string | Fetched at: ISO timestamp. |
| `error` | object | Error: code / message when status is not ok. |
| `warnings` | array | Warnings: Non-fatal notes (e.g. stopped early). |
| `query` | string | null | Query: Advertiser name, ID or domain the row belongs to. |
| `queryType` | string | null | Query type: name \| advertiserId \| domain. |
| `position` | integer | null | Position: 1-based position within the query results. |
| `adId` | string | null | Ad (creative) ID: Transparency Center creative ID (CR…). |
| `advertiserId` | string | null | Advertiser ID: Transparency Center advertiser ID (AR…). |
| `advertiserName` | string | null | Advertiser: Advertiser name (from ad details or the advertiser search). |
| `format` | string | null | Format: text \| image \| video (with ad details). |
| `firstShown` | string | null | First shown: ISO date first shown (with ad details). |
| `lastShown` | string | null | Last shown: ISO date last shown (with ad details). |
| `previewUrl` | string | null | Preview URL: Public Transparency Center page of the creative. |
| `imageUrl` | string | null | Image URL: Creative image / rendered preview when available. |
| `domain` | string | null | Domain: Advertiser domain when known. |
| `regions` | array | Regions: Regions the ad was shown in when reported, otherwise the region filter. |
| `text` | string | null | Text: Ad text when the upstream returns it (rare). |
| `detailsIncluded` | boolean | null | Details included: The page was fetched with includeAdDetails. |
| `resolvedAdvertisers` | array | Resolved advertisers: Advertiser accounts matched for a name query (summary rows). |
| `advertiserSearchCharged` | boolean | null | Advertiser search charged: Name queries: true when the advertiser search was charged one google-ads-query (summary rows). |
| `adsDelivered` | integer | null | Ads delivered: Ads delivered for this query (summary rows). |
| `pagesFetched` | integer | null | Pages fetched: Ads pages fetched (summary rows). |
| `queryFeesCharged` | integer | null | Request fees charged: google-ads-query events charged (summary rows). |
| `detailFeesCharged` | integer | null | Details fees charged: google-ad-details events charged (summary rows). |
| `adsEstimate` | integer | null | Ads estimate: Number of ads the Transparency Center estimates for the advertiser(s) (summary rows). |
| `stopReason` | string | null | Stop reason: limit \| end \| budget \| max_pages \| deadline \| error \| empty_pages (summary rows). |

Example record:

```json
{
  "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"
}
```

## Related

- [Ad Library Scraper – Meta, Google & TikTok](https://www.sfoln.com/actors/ad-library-scraper.md) (`sfoln/ad-library-scraper`)
- [Facebook Ads Library Scraper](https://www.sfoln.com/actors/facebook-ads-search.md) (`sfoln/facebook-ads-search`)
- [LinkedIn Ads Library Scraper](https://www.sfoln.com/actors/linkedin-ads-search.md) (`sfoln/linkedin-ads-search`)
- [TikTok Ads Library Scraper](https://www.sfoln.com/actors/tiktok-ads-search.md) (`sfoln/tiktok-ads-search`)
- [Facebook Ad Details Scraper (by Ad ID)](https://www.sfoln.com/actors/facebook-ad-lookup.md) (`sfoln/facebook-ad-lookup`)

Publisher: SFOLN LLC, contact@sfoln.com. Catalogue: https://www.sfoln.com/catalog.json. Agent guide: https://www.sfoln.com/agents.md.
