{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Ads Transparency Scraper — Ads, Creatives & Contacts",
    "description": "Scrape the Google Ads Transparency Center: get every ad an advertiser runs on Google by domain, advertiser ID or brand name — creative ID, format, image/preview URL, first and last shown, days active, regions — plus the advertiser's website email, phone and socials. No login.",
    "version": "0.1",
    "x-build-id": "l4mV7w20FrPPbF8gA"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapersdelight~google-ads-transparency-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapersdelight-google-ads-transparency-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/scrapersdelight~google-ads-transparency-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapersdelight-google-ads-transparency-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/scrapersdelight~google-ads-transparency-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapersdelight-google-ads-transparency-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "domains": {
            "title": "Advertiser domains",
            "type": "array",
            "description": "Bare domains whose ads you want, e.g. hellofresh.com or nike.com (no https://, no path — the Actor strips them if you paste a URL). The Transparency Center matches ads whose landing page is on that domain, so ONE domain can return SEVERAL advertiser accounts (nike.com returns Nike, Inc. and Nike Retail BV). This is the most precise way to target a company and the only one that guarantees a domain for the contact enrichment.",
            "default": [
              "hellofresh.com"
            ],
            "items": {
              "type": "string"
            }
          },
          "advertiserIds": {
            "title": "Advertiser IDs",
            "type": "array",
            "description": "Transparency Center advertiser IDs — the AR… token in an advertiser page URL, e.g. AR16735076323512287233 (Nike, Inc.). Use this when you already know the exact advertiser account and want only its ads. The ads of an advertiser ID carry no landing domain, so contact enrichment on this route only works when the ad preview exposes one.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "queries": {
            "title": "Brand / advertiser names",
            "type": "array",
            "description": "Free-text advertiser names, e.g. \"HelloFresh\" or \"Nike\". Each name is resolved through the Transparency Center's own autocomplete into up to \"Max advertisers per name\" advertiser accounts (verified accounts first), and every one of those is walked. Name search is fuzzy — \"nike\" also matches \"nikey\" — so prefer a domain when you have one.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "maxAdvertisersPerQuery": {
            "title": "Max advertisers per name",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "How many advertiser accounts a brand-name query may expand into. The autocomplete returns up to 10 candidates; the Actor keeps the ones that are verified or whose name starts with your query first. 3 is right for a brand, 10 for a market sweep (\"plumber\").",
            "default": 3
          },
          "startUrls": {
            "title": "Transparency Center URLs (optional)",
            "type": "array",
            "description": "Paste URLs copied from adstransparency.google.com — an advertiser page (https://adstransparency.google.com/advertiser/AR…?region=US), a domain search (https://adstransparency.google.com/?domain=nike.com&region=US) or a single creative (…/advertiser/AR…/creative/CR…). The advertiser ID, domain, creative ID and region are parsed out automatically; a region in the URL overrides the Region field for that URL.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "region": {
            "title": "Region",
            "enum": [
              "ANYWHERE",
              "US",
              "GB",
              "CA",
              "AU",
              "DE",
              "FR",
              "ES",
              "IT",
              "NL",
              "BE",
              "CH",
              "AT",
              "SE",
              "NO",
              "DK",
              "FI",
              "IE",
              "PT",
              "PL",
              "CZ",
              "HU",
              "RO",
              "GR",
              "TR",
              "IL",
              "AE",
              "SA",
              "IN",
              "SG",
              "MY",
              "TH",
              "PH",
              "ID",
              "VN",
              "JP",
              "KR",
              "TW",
              "HK",
              "NZ",
              "ZA",
              "NG",
              "KE",
              "EG",
              "BR",
              "MX",
              "AR",
              "CL",
              "CO",
              "PE"
            ],
            "type": "string",
            "description": "The country whose ad inventory to search — the same dropdown as the Transparency Center. An ad is returned when it was shown in that country. ANYWHERE returns ads shown in any country. Measured 2026-08-22: the same domain returned different row sets for US, GB and ANYWHERE, so set this deliberately.",
            "default": "US"
          },
          "adFormat": {
            "title": "Ad format",
            "enum": [
              "ALL",
              "TEXT",
              "IMAGE",
              "VIDEO"
            ],
            "type": "string",
            "description": "ALL (default) returns every format. TEXT = Search text ads, IMAGE = display/image ads, VIDEO = YouTube video ads. Google applies this filter inside the search, so a format you do not want is never fetched or billed.",
            "default": "ALL"
          },
          "lastShownAfter": {
            "title": "Last shown on or after (YYYY-MM-DD)",
            "pattern": "^(\\d{4}-\\d{2}-\\d{2})?$",
            "type": "string",
            "description": "Keep only ads whose LAST shown date is on or after this day — i.e. ads that are still live or were live recently. Results come back newest-last-shown first, so the Actor stops paging a target as soon as it passes this date, which makes a tight window cheap. Leave empty for no lower bound.",
            "default": ""
          },
          "firstShownAfter": {
            "title": "First shown on or after (YYYY-MM-DD)",
            "pattern": "^(\\d{4}-\\d{2}-\\d{2})?$",
            "type": "string",
            "description": "Keep only ads that were LAUNCHED on or after this day — new creatives. Applied per row; it does not shorten paging because results are ordered by last-shown, not first-shown. Leave empty for no bound.",
            "default": ""
          },
          "includeRegionDetail": {
            "title": "Fetch per-region reach and variations for every ad",
            "type": "boolean",
            "description": "OFF (default) returns what the search page carries: ids, advertiser, format, preview/image URL, first/last shown, days active. ON makes one extra request per ad and adds regionsShown (every country the ad ran in, each with its own last-shown date), regionCount, variationCount and variations (every A/B creative variant with its own preview URL). Same price per ad either way — it costs time, not money. Measured 2026-08-22: 40 ads → 40 detail calls in ~15 s on the datacenter rung.",
            "default": false
          },
          "enrichAdvertiserContacts": {
            "title": "Find the advertiser's website contact (email, phone, socials)",
            "type": "boolean",
            "description": "ON (default) opens the advertiser's own website — the searched domain, or the landing domain read from the ad preview — and reads the public contact details off the homepage and its contact/about pages: email addresses, phone numbers (tel: links), LinkedIn / Facebook / Instagram / X / YouTube / TikTok profiles. Business contact data only (info@, sales@, the office number) — no people lookups. Charged on its own success-billed event ONCE PER ADVERTISER DOMAIN and ONLY when an email or a phone is found; a site with nothing public, a dead domain or a blocked fetch costs nothing and the columns stay null. This is what turns \"who is advertising\" into a lead you can write to.",
            "default": true
          },
          "onlyNewAds": {
            "title": "Monitor mode — return only ads not seen in earlier runs",
            "type": "boolean",
            "description": "ON remembers every creative ID this Actor has delivered in a named key-value store (see \"Monitor memory name\") and returns only creatives it has never delivered before. The first run seeds the memory and returns everything; a scheduled daily or weekly run then returns just the newly launched ads — and is billed only for those. Pair with an Apify Schedule for a standing new-ad watch on a competitor.",
            "default": false
          },
          "monitorStoreName": {
            "title": "Monitor memory name",
            "type": "string",
            "description": "Name of the key-value store that holds the seen-creative memory for Monitor mode. Use a different name per watch (e.g. monitor-hellofresh, monitor-nike) so their histories do not mix. Only used when Monitor mode is on.",
            "default": "google-ads-transparency-monitor"
          },
          "maxAdsPerTarget": {
            "title": "Max ads per target",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Stop walking a single domain / advertiser / name after this many ads. The Transparency Center pages 40 ads at a time, so 40 = one request, 400 = ten. Big brands run thousands of creatives; this is the knob that keeps a competitor sweep affordable. 40 ads = $0.08.",
            "default": 40
          },
          "maxItems": {
            "title": "Max ads in total",
            "minimum": 1,
            "type": "integer",
            "description": "Hard cap on unique ad rows delivered across every target in the run — your cost ceiling: 200 = $0.40, 1,000 = $2.00, 10,000 = $20.00. Duplicate creatives (the same ad reached through two targets) are dropped before billing and do not count.",
            "default": 200
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Measured 2026-08-22 through Apify: direct, datacenter and RESIDENTIAL rungs all returned HTTP 200 with a full 40-creative page, and the paginated second page too — so the default is the CHEAP datacenter rung. A request that fails its datacenter retries is retried ONCE through RESIDENTIAL automatically (capped per run), so you do not need to set residential yourself.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}