Nimbryxo Studio

Google Ads Advertiser Creative History Scraper

Look up an advertiser's ad history on the Google Ads Transparency Center by URL, name, or domain, with ad format, preview media, and first/last shown dates per creative.

Input schema

Input fields, types, required flags, descriptions, defaults, and prefills come from the published definition. Prefill examples are distinct from defaults.

FieldTypeRequiredDescription
modestringrequiredWhich kind of lookup to run.
advertiserUrlstringoptionalAdvertiser or creative URL from adstransparency.google.com (mode=advertiser or creative).
advertiserIdstringoptionalGoogle advertiser ID starting with AR (mode=advertiser or creative).
Show all input fields
FieldTypeRequiredDescription
modestringrequiredWhich kind of lookup to run.
advertiserUrlstringoptionalAdvertiser or creative URL from adstransparency.google.com (mode=advertiser or creative).
advertiserIdstringoptionalGoogle advertiser ID starting with AR (mode=advertiser or creative).
domainstringoptionalDomain to search across every advertiser Google links to it (mode=domain), e.g. nike.com.
searchQuerystringoptionalBrand name or keyword resolved through Google's advertiser suggestions (mode=search).
startUrlsarrayoptionalAdditional advertiser or creative URLs (mode=advertiser or creative), as {url} request-list objects.
creativeIdstringoptionalGoogle creative ID starting with CR (mode=creative). Also provide advertiserId or advertiserUrl.
regionstringoptionalOnly return ads shown in this country. 'anywhere' applies no region filter. Required when political is enabled.
formatstringoptionalRestrict to one creative format. Leave empty for all formats.
platformstringoptionalRestrict to one Google surface. Leave empty for all platforms.
politicalbooleanoptionalReturn only political or issue ads. Google requires a country region for this filter.
startDatestringoptionalClient-side date filter applied to the fetched slice. Leave empty for no lower bound.
endDatestringoptionalClient-side date filter applied to the fetched slice. Leave empty for no upper bound.
maxAdsPerAdvertiserintegeroptionalPer-advertiser cap (1-1000). The run also stops at maxItems.
maxItemsintegeroptionalTotal ads to emit across all targets (1-1000).
includeDetailsbooleanoptionalFetch per-creative detail and preview content for copy, media and region stats. Disable for a faster list-only run.
proxyConfigurationobjectoptionalOptional proxy override. The actor uses an Apify automatic proxy by default.

Download the published input schema

View complete JSON
{
  "description": "Scrape Google Ads Transparency Center ads by advertiser URL or ID, domain, brand or keyword search, or a single creative.",
  "properties": {
    "advertiserId": {
      "description": "Google advertiser ID starting with AR (mode=advertiser or creative).",
      "editor": "textfield",
      "title": "Advertiser ID",
      "type": "string"
    },
    "advertiserUrl": {
      "description": "Advertiser or creative URL from adstransparency.google.com (mode=advertiser or creative).",
      "editor": "textfield",
      "prefill": "https://adstransparency.google.com/advertiser/AR16735076323512287233",
      "title": "Advertiser URL",
      "type": "string"
    },
    "creativeId": {
      "description": "Google creative ID starting with CR (mode=creative). Also provide advertiserId or advertiserUrl.",
      "editor": "textfield",
      "title": "Creative ID",
      "type": "string"
    },
    "domain": {
      "description": "Domain to search across every advertiser Google links to it (mode=domain), e.g. nike.com.",
      "editor": "textfield",
      "title": "Domain",
      "type": "string"
    },
    "endDate": {
      "description": "Client-side date filter applied to the fetched slice. Leave empty for no upper bound.",
      "editor": "textfield",
      "nullable": true,
      "title": "Shown on or before (YYYY-MM-DD)",
      "type": "string"
    },
    "format": {
      "description": "Restrict to one creative format. Leave empty for all formats.",
      "editor": "select",
      "enum": [
        "TEXT",
        "IMAGE",
        "VIDEO"
      ],
      "enumTitles": [
        "Text",
        "Image",
        "Video"
      ],
      "nullable": true,
      "title": "Ad format",
      "type": "string"
    },
    "includeDetails": {
      "default": true,
      "description": "Fetch per-creative detail and preview content for copy, media and region stats. Disable for a faster list-only run.",
      "prefill": true,
      "title": "Include creative details",
      "type": "boolean"
    },
    "maxAdsPerAdvertiser": {
      "default": 20,
      "description": "Per-advertiser cap (1-1000). The run also stops at maxItems.",
      "maximum": 1000,
      "minimum": 1,
      "prefill": 1,
      "title": "Max ads per advertiser",
      "type": "integer"
    },
    "maxItems": {
      "default": 50,
      "description": "Total ads to emit across all targets (1-1000).",
      "maximum": 1000,
      "minimum": 1,
      "prefill": 1,
      "title": "Max items",
      "type": "integer"
    },
    "mode": {
      "default": "advertiser",
      "description": "Which kind of lookup to run.",
      "editor": "select",
      "enum": [
        "advertiser",
        "domain",
        "search",
        "creative"
      ],
      "enumTitles": [
        "Advertiser (URL or AR... ID)",
        "Domain (all advertisers linked to a domain)",
        "Search (brand or keyword)",
        "Creative (single ad URL or ID)"
      ],
      "prefill": "advertiser",
      "title": "Mode",
      "type": "string"
    },
    "platform": {
      "description": "Restrict to one Google surface. Leave empty for all platforms.",
      "editor": "select",
      "enum": [
        "PLAY",
        "MAPS",
        "SEARCH",
        "SHOPPING",
        "YOUTUBE"
      ],
      "enumTitles": [
        "Google Play",
        "Google Maps",
        "Google Search",
        "Google Shopping",
        "YouTube"
      ],
      "nullable": true,
      "title": "Platform",
      "type": "string"
    },
    "political": {
      "default": false,
      "description": "Return only political or issue ads. Google requires a country region for this filter.",
      "prefill": false,
      "title": "Political and issue ads only",
      "type": "boolean"
    },
    "proxyConfiguration": {
      "default": {
        "useApifyProxy": true
      },
      "description": "Optional proxy override. The actor uses an Apify automatic proxy by default.",
      "editor": "proxy",
      "prefill": {
        "useApifyProxy": true
      },
      "title": "Proxy configuration",
      "type": "object"
    },
    "region": {
      "default": "anywhere",
      "description": "Only return ads shown in this country. 'anywhere' applies no region filter. Required when political is enabled.",
      "editor": "select",
      "enum": [
        "anywhere",
        "AL",
        "DZ",
        "AS",
        "AD",
        "AO",
        "AQ",
        "AG",
        "AR",
        "AM",
        "AU",
        "AT",
        "AZ",
        "BH",
        "BD",
        "BB",
        "BY",
        "BE",
        "BZ",
        "BJ",
        "BT",
        "BO",
        "BA",
        "BW",
        "BR",
        "BN",
        "BG",
        "BF",
        "BI",
        "KH",
        "CM",
        "CA",
        "CV",
        "BQ",
        "CF",
        "TD",
        "CL",
        "CN",
        "CX",
        "CC",
        "CO",
        "KM",
        "CK",
        "CR",
        "CI",
        "HR",
        "CW",
        "CY",
        "CZ",
        "CD",
        "DK",
        "DJ",
        "DM",
        "DO",
        "EC",
        "EG",
        "SV",
        "GQ",
        "ER",
        "EE",
        "SZ",
        "ET",
        "FM",
        "FJ",
        "FI",
        "FR",
        "PF",
        "TF",
        "GA",
        "GE",
        "DE",
        "GH",
        "GR",
        "GD",
        "GU",
        "GT",
        "GG",
        "GN",
        "GW",
        "GY",
        "HT",
        "HM",
        "HN",
        "HU",
        "IS",
        "IN",
        "ID",
        "IQ",
        "IE",
        "IL",
        "IT",
        "JM",
        "JP",
        "JE",
        "JO",
        "KZ",
        "KE",
        "KI",
        "KW",
        "KG",
        "LA",
        "LV",
        "LB",
        "LS",
        "LR",
        "LY",
        "LI",
        "LT",
        "LU",
        "MG",
        "MW",
        "MY",
        "MV",
        "MT",
        "ML",
        "MH",
        "MR",
        "MU",
        "MX",
        "MD",
        "MC",
        "MN",
        "ME",
        "MA",
        "MZ",
        "MM",
        "NA",
        "NR",
        "NP",
        "NL",
        "NC",
        "NZ",
        "NI",
        "NE",
        "NG",
        "NU",
        "NF",
        "MK",
        "MP",
        "NO",
        "OM",
        "PK",
        "PW",
        "PA",
        "PG",
        "PY",
        "PE",
        "PH",
        "PN",
        "PL",
        "PT",
        "QA",
        "CG",
        "RO",
        "RW",
        "SH",
        "KN",
        "LC",
        "PM",
        "VC",
        "WS",
        "SM",
        "ST",
        "SA",
        "SN",
        "SC",
        "SL",
        "SG",
        "SX",
        "SK",
        "SI",
        "SB",
        "SO",
        "ZA",
        "GS",
        "KR",
        "ES",
        "LK",
        "SR",
        "CH",
        "SE",
        "TJ",
        "TZ",
        "TH",
        "BS",
        "GM",
        "TL",
        "TG",
        "TK",
        "TO",
        "TT",
        "TN",
        "TR",
        "TM",
        "TV",
        "UG",
        "UA",
        "AE",
        "GB",
        "US",
        "UY",
        "UZ",
        "VU",
        "VA",
        "VE",
        "VN",
        "YE",
        "ZM",
        "ZW",
        "BM",
        "BV",
        "IO",
        "VG",
        "KY",
        "TW",
        "YT",
        "FO",
        "FK",
        "GF",
        "PS",
        "GI",
        "GL",
        "GP",
        "HK",
        "IM",
        "MO",
        "MQ",
        "MS",
        "AW",
        "PR",
        "RE",
        "AI",
        "EH",
        "SJ",
        "TC",
        "UM",
        "VI",
        "WF"
      ],
      "enumTitles": [
        "Anywhere (no filter)",
        "Albania (AL)",
        "Algeria (DZ)",
        "American Samoa (AS)",
        "Andorra (AD)",
        "Angola (AO)",
        "Antarctica (AQ)",
        "Antigua and Barbuda (AG)",
        "Argentina (AR)",
        "Armenia (AM)",
        "Australia (AU)",
        "Austria (AT)",
        "Azerbaijan (AZ)",
        "Bahrain (BH)",
        "Bangladesh (BD)",
        "Barbados (BB)",
        "Belarus (BY)",
        "Belgium (BE)",
        "Belize (BZ)",
        "Benin (BJ)",
        "Bhutan (BT)",
        "Bolivia (BO)",
        "Bosnia and Herzegovina (BA)",
        "Botswana (BW)",
        "Brazil (BR)",
        "Brunei (BN)",
        "Bulgaria (BG)",
        "Burkina Faso (BF)",
        "Burundi (BI)",
        "Cambodia (KH)",
        "Cameroon (CM)",
        "Canada (CA)",
        "Cape Verde (CV)",
        "Caribbean Netherlands (BQ)",
        "Central African Republic (CF)",
        "Chad (TD)",
        "Chile (CL)",
        "China (CN)",
        "Christmas Island (CX)",
        "Cocos Islands (CC)",
        "Colombia (CO)",
        "Comoros (KM)",
        "Cook Islands (CK)",
        "Costa Rica (CR)",
        "Ivory Coast (CI)",
        "Croatia (HR)",
        "Curacao (CW)",
        "Cyprus (CY)",
        "Czech Republic (CZ)",
        "DR Congo (CD)",
        "Denmark (DK)",
        "Djibouti (DJ)",
        "Dominica (DM)",
        "Dominican Republic (DO)",
        "Ecuador (EC)",
        "Egypt (EG)",
        "El Salvador (SV)",
        "Equatorial Guinea (GQ)",
        "Eritrea (ER)",
        "Estonia (EE)",
        "Eswatini (SZ)",
        "Ethiopia (ET)",
        "Micronesia (FM)",
        "Fiji (FJ)",
        "Finland (FI)",
        "France (FR)",
        "French Polynesia (PF)",
        "French Southern Territories (TF)",
        "Gabon (GA)",
        "Georgia (GE)",
        "Germany (DE)",
        "Ghana (GH)",
        "Greece (GR)",
        "Grenada (GD)",
        "Guam (GU)",
        "Guatemala (GT)",
        "Guernsey (GG)",
        "Guinea (GN)",
        "Guinea-Bissau (GW)",
        "Guyana (GY)",
        "Haiti (HT)",
        "Heard Island (HM)",
        "Honduras (HN)",
        "Hungary (HU)",
        "Iceland (IS)",
        "India (IN)",
        "Indonesia (ID)",
        "Iraq (IQ)",
        "Ireland (IE)",
        "Israel (IL)",
        "Italy (IT)",
        "Jamaica (JM)",
        "Japan (JP)",
        "Jersey (JE)",
        "Jordan (JO)",
        "Kazakhstan (KZ)",
        "Kenya (KE)",
        "Kiribati (KI)",
        "Kuwait (KW)",
        "Kyrgyzstan (KG)",
        "Laos (LA)",
        "Latvia (LV)",
        "Lebanon (LB)",
        "Lesotho (LS)",
        "Liberia (LR)",
        "Libya (LY)",
        "Liechtenstein (LI)",
        "Lithuania (LT)",
        "Luxembourg (LU)",
        "Madagascar (MG)",
        "Malawi (MW)",
        "Malaysia (MY)",
        "Maldives (MV)",
        "Malta (MT)",
        "Mali (ML)",
        "Marshall Islands (MH)",
        "Mauritania (MR)",
        "Mauritius (MU)",
        "Mexico (MX)",
        "Moldova (MD)",
        "Monaco (MC)",
        "Mongolia (MN)",
        "Montenegro (ME)",
        "Morocco (MA)",
        "Mozambique (MZ)",
        "Myanmar (MM)",
        "Namibia (NA)",
        "Nauru (NR)",
        "Nepal (NP)",
        "Netherlands (NL)",
        "New Caledonia (NC)",
        "New Zealand (NZ)",
        "Nicaragua (NI)",
        "Niger (NE)",
        "Nigeria (NG)",
        "Niue (NU)",
        "Norfolk Island (NF)",
        "North Macedonia (MK)",
        "Northern Mariana Islands (MP)",
        "Norway (NO)",
        "Oman (OM)",
        "Pakistan (PK)",
        "Palau (PW)",
        "Panama (PA)",
        "Papua New Guinea (PG)",
        "Paraguay (PY)",
        "Peru (PE)",
        "Philippines (PH)",
        "Pitcairn Islands (PN)",
        "Poland (PL)",
        "Portugal (PT)",
        "Qatar (QA)",
        "Republic of the Congo (CG)",
        "Romania (RO)",
        "Rwanda (RW)",
        "Saint Helena (SH)",
        "Saint Kitts and Nevis (KN)",
        "Saint Lucia (LC)",
        "Saint Pierre and Miquelon (PM)",
        "Saint Vincent (VC)",
        "Samoa (WS)",
        "San Marino (SM)",
        "Sao Tome and Principe (ST)",
        "Saudi Arabia (SA)",
        "Senegal (SN)",
        "Seychelles (SC)",
        "Sierra Leone (SL)",
        "Singapore (SG)",
        "Sint Maarten (SX)",
        "Slovakia (SK)",
        "Slovenia (SI)",
        "Solomon Islands (SB)",
        "Somalia (SO)",
        "South Africa (ZA)",
        "South Georgia (GS)",
        "South Korea (KR)",
        "Spain (ES)",
        "Sri Lanka (LK)",
        "Suriname (SR)",
        "Switzerland (CH)",
        "Sweden (SE)",
        "Tajikistan (TJ)",
        "Tanzania (TZ)",
        "Thailand (TH)",
        "Bahamas (BS)",
        "Gambia (GM)",
        "Timor-Leste (TL)",
        "Togo (TG)",
        "Tokelau (TK)",
        "Tonga (TO)",
        "Trinidad and Tobago (TT)",
        "Tunisia (TN)",
        "Turkey (TR)",
        "Turkmenistan (TM)",
        "Tuvalu (TV)",
        "Uganda (UG)",
        "Ukraine (UA)",
        "United Arab Emirates (AE)",
        "United Kingdom (GB)",
        "United States (US)",
        "Uruguay (UY)",
        "Uzbekistan (UZ)",
        "Vanuatu (VU)",
        "Vatican City (VA)",
        "Venezuela (VE)",
        "Vietnam (VN)",
        "Yemen (YE)",
        "Zambia (ZM)",
        "Zimbabwe (ZW)",
        "Bermuda (BM)",
        "Bouvet Island (BV)",
        "British Indian Ocean Territory (IO)",
        "British Virgin Islands (VG)",
        "Cayman Islands (KY)",
        "Taiwan (TW)",
        "Mayotte (YT)",
        "Faroe Islands (FO)",
        "Falkland Islands (FK)",
        "French Guiana (GF)",
        "Palestine (PS)",
        "Gibraltar (GI)",
        "Greenland (GL)",
        "Guadeloupe (GP)",
        "Hong Kong (HK)",
        "Isle of Man (IM)",
        "Macau (MO)",
        "Martinique (MQ)",
        "Montserrat (MS)",
        "Aruba (AW)",
        "Puerto Rico (PR)",
        "Reunion (RE)",
        "Anguilla (AI)",
        "Western Sahara (EH)",
        "Svalbard and Jan Mayen (SJ)",
        "Turks and Caicos (TC)",
        "US Minor Outlying Islands (UM)",
        "US Virgin Islands (VI)",
        "Wallis and Futuna (WF)"
      ],
      "prefill": "anywhere",
      "title": "Region",
      "type": "string"
    },
    "searchQuery": {
      "description": "Brand name or keyword resolved through Google's advertiser suggestions (mode=search).",
      "editor": "textfield",
      "title": "Search query",
      "type": "string"
    },
    "startDate": {
      "description": "Client-side date filter applied to the fetched slice. Leave empty for no lower bound.",
      "editor": "textfield",
      "nullable": true,
      "title": "Shown on or after (YYYY-MM-DD)",
      "type": "string"
    },
    "startUrls": {
      "default": [],
      "description": "Additional advertiser or creative URLs (mode=advertiser or creative), as {url} request-list objects.",
      "editor": "requestListSources",
      "items": {
        "properties": {
          "url": {
            "description": "Advertiser or creative URL from adstransparency.google.com.",
            "title": "URL",
            "type": "string"
          }
        },
        "required": [
          "url"
        ],
        "type": "object"
      },
      "prefill": [],
      "title": "Start URLs",
      "type": "array"
    }
  },
  "required": [
    "mode"
  ],
  "schemaVersion": 1,
  "title": "Google Ads Transparency Scraper Input",
  "type": "object"
}

Output schema

Published result links and storage locations. This schema is not an exhaustive contract for every field in a dataset record.

FieldTypeRequiredDescription
adsstringoptionalDataset containing all scraped Google ads with advertiser info, dates, and preview URLs

Download the published output schema

View complete JSON
{
  "actorOutputSchemaVersion": 1,
  "description": "Per-advertiser Google Ads Transparency Center creatives with ad format, preview media, and first/last shown dates.",
  "properties": {
    "ads": {
      "description": "Dataset containing all scraped Google ads with advertiser info, dates, and preview URLs",
      "template": "{{links.apiDefaultDatasetUrl}}/items",
      "title": "Google Ads Data",
      "type": "string"
    }
  },
  "title": "Google Ads Advertiser Creative History Scraper Output"
}

Dataset schema

Published dataset views and any declared field definitions. A view can select only a subset of the returned record fields.

Download the published dataset schema

View complete JSON
{
  "actorSpecification": 1,
  "fields": {
    "properties": {
      "adId": {
        "description": "adId",
        "type": "string"
      },
      "adLibraryUrl": {
        "description": "Transparency Center URL for this creative",
        "nullable": true,
        "type": "string"
      },
      "advertiserCategories": {
        "description": "advertiserCategories",
        "type": "array"
      },
      "advertiserCountry": {
        "description": "Advertiser country code",
        "nullable": true,
        "type": "string"
      },
      "advertiserId": {
        "description": "Google advertiser ID (AR...)",
        "type": "string"
      },
      "advertiserLegalName": {
        "description": "Advertiser legal name when Google exposes it",
        "nullable": true,
        "type": "string"
      },
      "advertiserName": {
        "description": "Advertiser display name",
        "type": "string"
      },
      "advertiserVerified": {
        "description": "Whether Google marks the advertiser as verified",
        "nullable": true,
        "type": "boolean"
      },
      "body": {
        "description": "Text ad body (same as description when only one is exposed)",
        "nullable": true,
        "type": "string"
      },
      "callToAction": {
        "description": "Call-to-action text when exposed",
        "nullable": true,
        "type": "string"
      },
      "creativeId": {
        "description": "Google creative ID (CR...)",
        "type": "string"
      },
      "description": {
        "description": "Text ad description",
        "nullable": true,
        "type": "string"
      },
      "displayDomain": {
        "description": "Display domain shown on the ad",
        "nullable": true,
        "type": "string"
      },
      "firstShown": {
        "description": "First date the ad was shown (YYYY-MM-DD)",
        "nullable": true,
        "type": "string"
      },
      "format": {
        "description": "TEXT, IMAGE or VIDEO",
        "type": "string"
      },
      "headline": {
        "description": "Text ad headline",
        "nullable": true,
        "type": "string"
      },
      "imageUrl": {
        "description": "Image URL for image ads and video posters",
        "nullable": true,
        "type": "string"
      },
      "imageUrls": {
        "description": "imageUrls",
        "type": "array"
      },
      "impressionsMax": {
        "description": "Upper impression bound when Google exposes it",
        "nullable": true,
        "type": "integer"
      },
      "impressionsMin": {
        "description": "Lower impression bound when Google exposes it",
        "nullable": true,
        "type": "integer"
      },
      "landingUrl": {
        "description": "landingUrl",
        "type": "string"
      },
      "lastShown": {
        "description": "Last date the ad was shown (YYYY-MM-DD)",
        "nullable": true,
        "type": "string"
      },
      "platform": {
        "description": "platform",
        "type": "string"
      },
      "platforms": {
        "description": "Platforms Google reports for the creative",
        "nullable": true,
        "type": "array"
      },
      "posterUrl": {
        "description": "Video poster image URL",
        "nullable": true,
        "type": "string"
      },
      "previewUrl": {
        "description": "Preview link or media URL for the creative",
        "nullable": true,
        "type": "string"
      },
      "productBrand": {
        "description": "Shopping/product brand for image creatives",
        "nullable": true,
        "type": "string"
      },
      "productTitle": {
        "description": "Shopping/product title for image creatives",
        "nullable": true,
        "type": "string"
      },
      "regionStats": {
        "description": "regionStats",
        "type": "array"
      },
      "regions": {
        "description": "Country codes returned for the creative",
        "nullable": true,
        "type": "array"
      },
      "scrapedAt": {
        "description": "ISO 8601 timestamp when the record was emitted",
        "type": "string"
      },
      "searchTerm": {
        "description": "Search term or domain that produced this record",
        "nullable": true,
        "type": "string"
      },
      "source": {
        "description": "Data source identifier",
        "type": "string"
      },
      "startUrl": {
        "description": "Input URL that produced this record, when applicable",
        "nullable": true,
        "type": "string"
      },
      "videoUrl": {
        "description": "Direct video URL when Google exposes one; signed and short-lived",
        "nullable": true,
        "type": "string"
      },
      "videoUrlExpiresAt": {
        "description": "videoUrlExpiresAt",
        "type": "string"
      },
      "youtubeUrl": {
        "description": "Stable YouTube link when the creative exposes a video ID",
        "nullable": true,
        "type": "string"
      }
    },
    "type": "object"
  },
  "views": {
    "overview": {
      "display": {
        "component": "table",
        "properties": {
          "advertiserId": {
            "format": "text",
            "label": "Advertiser ID"
          },
          "advertiserName": {
            "format": "text",
            "label": "Advertiser"
          },
          "body": {
            "format": "text",
            "label": "Body"
          },
          "creativeId": {
            "format": "text",
            "label": "Creative ID"
          },
          "displayDomain": {
            "format": "text",
            "label": "Display domain"
          },
          "firstShown": {
            "format": "text",
            "label": "First shown"
          },
          "format": {
            "format": "text",
            "label": "Format"
          },
          "headline": {
            "format": "text",
            "label": "Headline"
          },
          "imageUrl": {
            "format": "link",
            "label": "Image"
          },
          "impressionsMax": {
            "format": "number",
            "label": "Impressions max"
          },
          "impressionsMin": {
            "format": "number",
            "label": "Impressions min"
          },
          "lastShown": {
            "format": "text",
            "label": "Last shown"
          },
          "previewUrl": {
            "format": "link",
            "label": "Preview"
          },
          "regions": {
            "format": "array",
            "label": "Regions"
          },
          "scrapedAt": {
            "format": "text",
            "label": "Scraped at"
          },
          "source": {
            "format": "text",
            "label": "Source"
          },
          "videoUrl": {
            "format": "link",
            "label": "Video"
          },
          "youtubeUrl": {
            "format": "link",
            "label": "YouTube"
          }
        }
      },
      "title": "Ads",
      "transformation": {
        "fields": [
          "advertiserId",
          "advertiserName",
          "creativeId",
          "format",
          "headline",
          "body",
          "displayDomain",
          "firstShown",
          "lastShown",
          "regions",
          "impressionsMin",
          "impressionsMax",
          "previewUrl",
          "imageUrl",
          "videoUrl",
          "youtubeUrl",
          "source",
          "scrapedAt"
        ]
      }
    }
  }
}

Key-value schema

Published key-value store definitions, when provided by this build.

This definition is not present in the default published build. See the published README for available documentation.

Published README

Read the full published documentation

Google Ads Transparency Advertiser & Creative Scraper

Scrape Google Ads Transparency Center ad creatives for a single advertiser, every advertiser linked to a domain, a brand or keyword search, or one specific creative. Each record carries the advertiser identity, ad format, first and last shown dates, ad copy or product details, media previews, region stats, and impression ranges when Google exposes them. The data is public: no Google account, cookies, or login are required.

What this actor does

  • Four lookup modes: advertiser (URL or AR... ID), domain (all advertisers linked to a domain), search (brand name or keyword), and creative (one ad URL or CR... ID).
  • Server-side filters: country region, ad format (text, image, video), platform (Play, Maps, Search, Shopping, YouTube), and a political toggle for political and issue ads.
  • Complete creative history: cursor pagination at 100 ads per page, up to 1,000 unique ads per run.
  • Rich per-ad detail: headline, description, display domain, Shopping product title and brand, preview image, video poster, YouTube link, region stats, and impression bounds when available.
  • Client-side date filtering: startDate and endDate narrow the fetched slice; Google exposes no date-range parameter for anonymous searches.
  • Clean records: fields that Google does not expose are omitted rather than returned as null, empty strings, or empty arrays.

Output per ad

  • advertiserId, advertiserName - Google's advertiser ID and display name.
  • advertiserCountry, advertiserLegalName, advertiserVerified - advertiser metadata when Google returns it.
  • advertiserAdCountMin, advertiserAdCountMax - the advertiser's total ad-count range when available.
  • creativeId, adId - Google's unique ID for the creative.
  • format - TEXT, IMAGE, or VIDEO.
  • firstShown, lastShown - first and last dates Google recorded the ad as active (YYYY-MM-DD).
  • headline, description, body - text-ad copy when the creative exposes it.
  • callToAction - call-to-action text when present.
  • displayDomain, landingUrl - display domain, and a full landing URL only when Google exposes one.
  • productTitle, productBrand - Shopping/image ad product details.
  • imageUrl, imageUrls - image creative or Shopping product image URLs.
  • previewUrl - a preview or media link for the creative.
  • posterUrl - video poster image.
  • youtubeUrl - stable YouTube link when the video exposes a YouTube ID.
  • videoUrl, videoUrlExpiresAt - direct video file when Google exposes one; signed, IP-bound, and short-lived.
  • regions, regionStats - country codes and per-region dates/impressions/platform stats for the creative.
  • impressionsMin, impressionsMax - impression bounds when Google returns them.
  • platforms, platform - Google surfaces reported for the creative.
  • adLibraryUrl, sourceUrl - direct Ads Transparency Center links.
  • source - data source identifier (google_ads_transparency).
  • startUrl, searchTerm - the input URL or search term that produced the record, when applicable.
  • recordType, scrapedAt - record type and fetch timestamp.

Input

Field Type Default Description
mode string advertiser advertiser / domain / search / creative.
advertiserUrl string - Advertiser or creative Transparency Center URL (mode=advertiser or creative).
advertiserId string - Google advertiser ID beginning with AR (mode=advertiser or creative).
domain string - Domain to search across all linked advertisers, e.g. nike.com (mode=domain).
searchQuery string - Brand name or keyword resolved through Google's advertiser suggestions (mode=search).
startUrls array [] Additional advertiser or creative URLs as Apify { "url": "..." } request-list objects.
creativeId string - Google creative ID beginning with CR (mode=creative); also set advertiserId or advertiserUrl.
region string anywhere Country where the ad was shown; anywhere applies no filter. Required when political is on.
format string - TEXT, IMAGE, or VIDEO; leave empty for all formats.
platform string - PLAY, MAPS, SEARCH, SHOPPING, or YOUTUBE; leave empty for all platforms.
political boolean false Return only political and issue ads. Requires a country region.
startDate string - Only ads with activity on or after this date (YYYY-MM-DD); applied to the fetched slice.
endDate string - Only ads with activity on or before this date (YYYY-MM-DD); applied to the fetched slice.
maxAdsPerAdvertiser integer 20 Per-advertiser cap, 1-1000. In domain mode it applies to each advertiser found.
maxItems integer 50 Total ads to emit, 1-1000.
includeDetails boolean true Fetch per-creative detail and preview content. Turn off for a faster list-only run.
proxyConfiguration object Apify automatic proxy Optional proxy override; the actor uses an Apify proxy by default.

Example: scrape one advertiser

{
  "mode": "advertiser",
  "advertiserUrl": "https://adstransparency.google.com/advertiser/AR16735076323512287233",
  "maxAdsPerAdvertiser": 50,
  "maxItems": 50,
  "includeDetails": true
}

Example: find every advertiser using a domain, US image ads only

{
  "mode": "domain",
  "domain": "nike.com",
  "region": "US",
  "format": "IMAGE",
  "maxAdsPerAdvertiser": 25,
  "maxItems": 100
}

Example: search a brand, video ads shown in 2024

{
  "mode": "search",
  "searchQuery": "Nike",
  "region": "GB",
  "platform": "YOUTUBE",
  "startDate": "2024-01-01",
  "endDate": "2024-12-31",
  "maxItems": 50
}

Example: inspect one creative

{
  "mode": "creative",
  "advertiserId": "AR16735076323512287233",
  "creativeId": "CR17471063371053793281"
}

Example output

{
  "advertiserId": "AR16735076323512287233",
  "advertiserName": "Nike, Inc.",
  "advertiserCountry": "US",
  "creativeId": "CR17471063371053793281",
  "format": "TEXT",
  "firstShown": "2024-03-09",
  "lastShown": "2026-10-24",
  "headline": "Nike Official Site",
  "description": "Shop the latest Nike styles.",
  "body": "Shop the latest Nike styles.",
  "displayDomain": "nike.com",
  "regions": ["CA"],
  "previewUrl": "https://tpc.googlesyndication.com/archive/simgad/6265887525695880208",
  "adLibraryUrl": "https://adstransparency.google.com/advertiser/AR16735076323512287233/creative/CR17471063371053793281",
  "source": "google_ads_transparency",
  "recordType": "ad",
  "scrapedAt": "2026-10-25T12:00:00+00:00"
}
{
  "advertiserId": "AR16735076323512287233",
  "advertiserName": "Nike, Inc.",
  "creativeId": "CR13237700337168547841",
  "format": "IMAGE",
  "productTitle": "Nike Club Fleece Hoodie",
  "productBrand": "Nike",
  "imageUrl": "https://encrypted-tbn2.gstatic.com/shopping?q=tbn:ANd9GcExample",
  "displayDomain": "nike.com",
  "regions": ["US"],
  "impressionsMin": 1000,
  "impressionsMax": 2000,
  "source": "google_ads_transparency",
  "recordType": "ad",
  "scrapedAt": "2026-10-25T12:00:00+00:00"
}

Use cases

  • Competitive ad monitoring - track which creatives a competitor is running and how long they have been live.
  • Creative research - collect text, image, and video ad examples by brand, country, or platform.
  • Media buying intelligence - see which surfaces and regions a brand invests in.
  • Compliance review - check where an advertiser's ads were recorded as shown.
  • Agency reporting - build a prospect's ad history into an audit or pitch deck.
  • Dataset building - export normalised ad creatives for analysis or model training.

Limits and caveats

  • 1,000-ad cap: the actor reads 100 ads per page and stops at 1,000 unique ads per run, even if Google reports more for the advertiser or domain.
  • Date filtering is client-side: Google does not expose an anonymous date-range parameter, so startDate and endDate only filter the slice the actor fetched. It may miss older ads outside that slice.
  • Impressions are partial: impression ranges appear for political/issue ads and some display creatives, not for every ad.
  • Regions are partial: regions reflects the per-creative stats Google returns, which is often one country and sometimes a longer subset. It is not a complete targeting list.
  • Video URLs expire: direct videoUrl links are signed, tied to the resolving IP, and expire in about a day. Use youtubeUrl or posterUrl when you need a stable reference.
  • Copy is conditional: most text ads expose a headline, description, and display domain; some do not. Image and video creatives usually have no text copy.
  • Anonymous results: Google may show fewer ads to logged-out visitors than to signed-in users. This is a source limitation, not a missing filter.
  • Domain results span advertisers: a domain search can return ads from several advertisers (brand owners, regional entities, and agencies). maxAdsPerAdvertiser applies to each one separately.
  • Political ads need a country: Google's political/issue filter requires a concrete region; anywhere is rejected for that mode.

FAQ

What is the difference between the four modes?

advertiser takes an advertiser URL or AR... ID and returns that advertiser's creatives. domain searches all advertisers Google links to a domain. search resolves a brand or keyword to the best-matching advertiser and scrapes it. creative fetches one specific ad by URL or CR... ID.

What is the difference between domain mode and search mode?

Domain mode queries Google by domain and returns ads from every associated advertiser. Search mode uses Google's advertiser suggestions and picks the best match for a name or keyword, which is useful when you do not know the domain.

Why are impressions missing on many ads?

Google only publishes impression ranges for some creatives, mainly political/issue ads and certain display ads. When the field is absent, the source did not return a range; the actor does not estimate it.

How many ads can I get per advertiser?

Up to 1,000 unique ads per run, read 100 at a time. Use maxAdsPerAdvertiser to cap each advertiser and maxItems to cap the whole run.

Do the date filters search Google's full history?

No. Google does not expose a date-range parameter for anonymous searches. The actor filters the ads it fetched using their first and last shown dates. A narrow date window combined with a low maxItems can therefore miss older ads.

Why do some records have no headline or description?

Google's preview content only exposes text copy for some text creatives. Image and video ads generally have no text copy. Missing fields are omitted from the record.

Why does a video URL stop working?

Direct video files are signed to the IP that resolved them and expire quickly. Prefer youtubeUrl for a stable link, or posterUrl for a still image.

Do I need a Google account, cookies, or a proxy?

No account or cookies are needed. The actor uses an Apify proxy automatically; proxyConfiguration is only an optional override.

Is this affiliated with Google?

No. This is an independent third-party actor that reads the publicly accessible Google Ads Transparency Center. It is not affiliated with or endorsed by Google.

Python quickstart

Use a schema-derived input and the Python standard library to start a run. An Apify account and token are required for execution.

Open the step-by-step Python guide →

Source build prhya8gN9RuRfH4g7. Documentation is regenerated from the default published build; private drafts are not included.