Google Ads Scraper avatar

Google Ads Scraper

Pricing

$5.00 / 1,000 results

Go to Apify Store
Google Ads Scraper

Google Ads Scraper

Scrape advertiser data, ad creatives, impressions, audience targeting, and ad media from the Google Ads Transparency Center.

Pricing

$5.00 / 1,000 results

Rating

0.0

(0)

Developer

Ayen Data

Ayen Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

11 hours ago

Last modified

Share

Google Ads Transparency Center Scraper

Scrape advertiser data, ad creatives, impressions, audience targeting, and ad media from the Google Ads Transparency Center. This Apify actor turns Google's public ad disclosures into clean, structured JSON — perfect for competitive intelligence, brand monitoring, ad spend research, and political ad transparency analysis.


Key Features

  • Scrape ads by advertiser ID, creative ID, or domain
  • Filter by region, platform (YouTube, Search, Display, Maps, Shopping, Play), format (Image, Video, Text), and date range
  • Extract audience targeting signals (demographic, geographic, contextual, topics, customer lists)
  • Retrieve impression ranges per country and platform
  • Collect ad creatives: preview URLs, headlines, body text, images, and video links
  • Optional: download media (images and videos) into the Key-Value Store
  • Optional: use cookies to access age-restricted ad creatives
  • Optional: write every ad straight into a Notion database — readable by AI agents via Notion's MCP server
  • Optional: append every ad as a new record in an Airtable base — duplicate a ready-made template in one click

Why Use This Actor

  • ✅ Audit competitor ad creatives, copy, and creative trends at scale
  • ✅ Monitor brand impersonation, affiliate ads, and reseller activity
  • ✅ Build datasets for political ad transparency, market research, and academic studies
  • ✅ Track ad longevity (first shown / last shown) and reach by geography
  • ✅ Skip the manual click-through — get structured JSON ready for BI tools

Input

The actor accepts the following input parameters:

FieldTypeDescriptionRequired
startUrlsarrayList of Google Ads Transparency Center URLs (advertiser search, creative detail, or domain search).
cookiesarrayOptional cookies (JSON) for accessing age-restricted creatives.
maxItemsintegerMaximum number of creatives to scrape per advertiser search URL.
proxyConfigurationobjectApify proxy configuration. Defaults to no proxy.
downloadMediabooleanIf true, downloads previews and variant media into the Key-Value Store and adds storage keys to the output items.
notionConnectorstringApify MCP Connector authorized to Notion. Every scraped ad becomes a page in the chosen database. See Notion Output.
notionDatabaseIdstringTarget Notion database ID. Required when notionConnector is set.
airtableConnectorstringApify MCP Connector authorized to Airtable. Every scraped ad becomes a record in the chosen table. See Airtable Output.
airtableBaseIdstringTarget Airtable base ID (starts with app…). Required when airtableConnector is set.
airtableTableIdstringTarget Airtable table ID (starts with tbl…). Required when airtableConnector is set.

Supported Start URL Formats

  • Advertiser search: https://adstransparency.google.com/advertiser/<advertiserId>?region=<region>
  • Creative detail: https://adstransparency.google.com/advertiser/<advertiserId>/creative/<creativeId>?region=<region>
  • Domain search: https://adstransparency.google.com/?region=anywhere&domain=<domain>

Optional URL query parameters: region, platform, format, topic, start-date, end-date.

Example Input

{
"startUrls": [
{
"url": "https://adstransparency.google.com/advertiser/AR10852394170916536321?region=anywhere&platform=YOUTUBE&start-date=2022-01-01&end-date=2024-12-31&format=IMAGE"
},
{
"url": "https://adstransparency.google.com/advertiser/AR10852394170916536321/creative/CR11104657906815991809?region=anywhere&platform=YOUTUBE&start-date=2022-01-01&end-date=2024-12-31&format=IMAGE"
},
{
"url": "https://adstransparency.google.com/?region=anywhere&domain=binance.com"
}
],
"maxItems": 500,
"downloadMedia": true,
"proxyConfiguration": {
"useApifyProxy": false
}
}

Output

Each ad creative is pushed as a single item to the dataset. Example:

{
"id": "CR01003845904182018049",
"adId": "CR01003845904182018049",
"advertiserId": "AR16735076323512287233",
"advertiserName": "Nike, Inc.",
"url": "https://adstransparency.google.com/advertiser/AR16735076323512287233/creative/CR01003845904182018049?region=anywhere&platform=YOUTUBE&start-date=2022-01-01&end-date=2024-12-31&format=IMAGE",
"sourceUrl": "https://adstransparency.google.com/advertiser/AR16735076323512287233?region=anywhere&platform=YOUTUBE&start-date=2022-01-01&end-date=2024-12-31&format=IMAGE",
"mediaType": "IMAGE",
"thumbnail": {
"url": "https://displayads-formats.googleusercontent.com/ads/preview/content.js?client=ads-integrity-transparency&obfuscatedCustomerId=1472908606&creativeId=467086381842&uiFeatures=12,54&adGroupId=106856862702&itemIds=4478839147005791752&sig=ACiVB_yR2Lkf_akJ84NtyNnL-6xfLCUxbQ&htmlParentId=fletch-render-17824009664593302713&responseCallback=fletchCallback17824009664593302713",
"key": null
},
"firstShownAt": "20211025",
"lastShownAt": "20240602",
"daysActive": 952,
"impressionsRange": "4000",
"regions": [
"Finland",
"Canada",
"Portugal",
"Mexico",
"Poland",
"Netherlands",
"Puerto Rico",
"Belgium",
"Brazil",
"United States",
"Spain",
"France",
"Sweden",
"Indonesia"
],
"regionBreakdown": [
{
"code": "FI",
"name": "Finland",
"firstShownAt": "2025-09-19T00:00:00.000Z",
"lastShownAt": "2023-12-30T00:00:00.000Z",
"impressions": {
"lowerBound": null,
"upperBound": "1000"
},
"platformStats": [
{
"name": "Google Shopping",
"code": "SHOPPING",
"impressions": {
"lowerBound": null,
"upperBound": "1000"
}
}
]
},
{
"code": "CA",
"name": "Canada",
"firstShownAt": "2025-09-19T00:00:00.000Z",
"lastShownAt": "2025-10-20T00:00:00.000Z",
"impressions": {
"lowerBound": null,
"upperBound": null
},
"platformStats": []
},
{
"code": "PT",
"name": "Portugal",
"firstShownAt": "2025-09-19T00:00:00.000Z",
"lastShownAt": "2024-07-26T00:00:00.000Z",
"impressions": {
"lowerBound": null,
"upperBound": "1000"
},
"platformStats": [
{
"name": "Google Shopping",
"code": "SHOPPING",
"impressions": {
"lowerBound": null,
"upperBound": "1000"
}
}
]
},
{
"code": "MX",
"name": "Mexico",
"firstShownAt": "2025-09-19T00:00:00.000Z",
"lastShownAt": "2026-03-03T00:00:00.000Z",
"impressions": {
"lowerBound": null,
"upperBound": null
},
"platformStats": []
},
{
"code": "PL",
"name": "Poland",
"firstShownAt": "2025-09-19T00:00:00.000Z",
"lastShownAt": "2024-08-05T00:00:00.000Z",
"impressions": {
"lowerBound": null,
"upperBound": "1000"
},
"platformStats": [
{
"name": "Google Shopping",
"code": "SHOPPING",
"impressions": {
"lowerBound": null,
"upperBound": "1000"
}
}
]
}
],
"targeting": [
{
"name": "Demographic info",
"hasIncludedCriteria": true,
"hasExcludedCriteria": false
},
{
"name": "Geographic locations",
"hasIncludedCriteria": true,
"hasExcludedCriteria": false
},
{
"name": "Contextual signals",
"hasIncludedCriteria": false,
"hasExcludedCriteria": false
}
],
"variants": [
{
"textContent": "Paris Saint-Germain 2025/26 Stadium Home Nike Men's Dri-FIT Soccer Replica Jersey in Blue - Size: Large | HJ4593-411 - Nike",
"images": [
"https://encrypted-tbn3.gstatic.com/shopping?q=tbn:ANd9GcT_YTifrzufiJAek1ZcSPHYvrAnnJnY3NSiFOOkd0ZHJxWO5Kkx"
]
},
{
"textContent": "",
"images": []
},
{
"textContent": "",
"images": []
}
],
}

When downloadMedia is enabled, thumbnail.key and variants[].imageStoreKeys will contain Key-Value Store keys pointing at the downloaded files.


Using Cookies (Optional)

Some ad creatives — for example age-restricted content — are only visible to logged-in users. To scrape these:

  1. Install the Cookie-Editor browser extension for Chrome or any Chromium-based browser.
  2. Navigate to the Google Ads Transparency Center and make sure you are signed into your Google account.
  3. Open the Cookie-Editor extension from your browser toolbar and click Export → JSON to copy the cookies to your clipboard.
  4. Paste the copied JSON array directly into the cookies input field in the actor configuration.


Notion Output (Optional)

Push every scraped ad creative into a Notion database as a new, fully-formed page — perfect for building a living competitor catalog, a research log your team actually opens, or a knowledge base your AI agents can query later (more on that below).

Step-by-step setup guide: Notion-connector-setup

Turn it into an AI knowledge base

Notion's MCP server is bidirectional — the same workspace this actor writes to can be read by any AI agent that also connects to Notion via MCP (Claude Desktop, ChatGPT with the Notion connector, custom Anthropic API agents, etc.). That means once your scrape is running on a schedule, you can:

  • Ask Claude: "Which advertisers ran the most YouTube ads in Germany last week?"
  • Ask ChatGPT: "Summarize the messaging trends across all video ads we've collected this month."
  • Have an agent triage: "Tag any new ad mentioning crypto for compliance review."

Your scraper becomes the data pipeline; Notion becomes the queryable memory; the AI becomes the analyst.

Notion writes are best-effort — if a page fails to create, the scrape keeps running and the issue is recorded in the run log so you can fix and re-run only the missing items.


Airtable Output (Optional)

Push every scraped ad creative as a new record in an Airtable base — perfect for tracking competitor ads in a spreadsheet-style view with native filtering, grouping, and team sharing.

One-click base template: Duplicate this Airtable base into your workspace — already wired with all the columns the actor populates.

Step-by-step setup guide: Airtable-connector-setup

How to enable

  1. In your Apify account, open Settings → API & Integrations and connect Airtable.

  2. In Airtable, open the base and table you want to use:

    • The Base ID starts with app... — it's the second path segment of the URL.
    • The Table ID starts with tbl... — it's the third path segment.
  3. In this actor's input, select your connection under Airtable Connector and enter the IDs under Airtable Base ID and Airtable Table ID.

  4. Run the actor — each ad creative becomes a new record with these fields:

    • Name<Advertiser> — <MediaType> (<AdId>)
    • Advertiser, Advertiser ID, Ad ID, Media Type
    • Regions, Impressions Range, First Shown, Last Shown, Days Active
    • Ad URL, Source URL

    If your table doesn't yet have these columns, Airtable will skip the unknown ones. Add columns with these exact names to capture all data.

Records are written in batches at the end of the run, and the run log reports how many were saved vs. failed.


Frequently Asked Questions (FAQ)

Where do I find an advertiser ID?

Open any advertiser page on adstransparency.google.com — the URL contains it, e.g. …/advertiser/AR10303883279069085697. The string starting with AR is the advertiser ID.

Where do I find a creative ID?

Click into a specific ad creative on the transparency site — the URL becomes …/advertiser/<advertiserId>/creative/<creativeId>. The string starting with CR is the creative ID.

How do I scrape all ads from a brand or website?

Use the domain search URL format: https://adstransparency.google.com/?region=anywhere&domain=<your-domain.com>. This returns advertisers running ads for that domain across regions.

Why do some ads return no results or fail with "restricted"?

Certain creatives (for example age-restricted content) are only visible to signed-in users. Provide cookies via the cookies input to scrape them. See the Using Cookies section above.

Why are impressions returned as ranges instead of exact numbers?

Google only publishes impression buckets (e.g. 9,000–10,000). The actor returns the upper bound on the top-level impressionsRange field, and the per-region lower/upper bounds inside regionBreakdown[].impressions — exact impression counts are not available from the source.

Do I need a proxy?

No, the actor works without proxies by default. If you experience rate limiting or want to scrape region-specific data from a particular country, enable Apify Proxy in the input.

Can I download the ad images and videos?

Yes — set downloadMedia to true. Thumbnails and variant media are saved to the run's Key-Value Store, and the storage keys are added to each output item under thumbnail.key and variants[].imageStoreKeys.

How many ads can I scrape per run?

Use maxItems to cap the number of creatives returned per advertiser search URL. There is no hard upper limit — the actor paginates until the limit or the end of results is reached.

Does maxItems apply globally or per URL?

Per start URL. If you pass three advertiser search URLs with maxItems: 50, you can get up to 150 creatives in total.

Can I filter by platform, format, or date range?

Yes — add query parameters directly to your start URL: region, platform (YOUTUBE, SEARCH, DISPLAY, MAPS, SHOPPING, PLAY), format (IMAGE, VIDEO, TEXT), topic, start-date, end-date.

Can I send the scraped ads directly into Notion?

Yes. Connect Notion in your Apify account settings, pick a database, and set notionConnector and notionDatabaseId in the input. Every scraped ad becomes a new page in that database. See Notion Output above for the full column contract and AI-agent integration tips.

Can my AI agent (Claude / ChatGPT) read the Notion database I'm filling?

Yes — Notion's MCP server exposes read tools (notion-search, notion-fetch) alongside the write tools this actor uses. Connect Claude Desktop or ChatGPT to the same Notion workspace via its MCP integration, and your agent can query your collected ad data in natural language. The scraper feeds the knowledge base; the agent does the analysis.

Can I push the ads into Airtable?

Yes. Duplicate the pre-built Airtable base template, connect Airtable in your Apify account settings, then set airtableConnector, airtableBaseId, and airtableTableId in the input. Each ad creative is appended as a new record in the chosen table. See Airtable Output above.


Legal Notice

This actor is an independent tool for collecting publicly available data from the Google Ads Transparency Center. It is not affiliated with, endorsed by, or in any way officially connected with Google LLC or its affiliates.