{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Ads Advertiser Check & Transparency Scraper",
    "description": "Check if a domain runs Google Ads, identify advertiser accounts, or export current creatives from Google's Ads Transparency Center. Search by domain, brand, advertiser ID, or public URL; filter by country, format, surface, and date; track when domains start or stop advertising. JSON/CSV/API/MCP.",
    "version": "0.1",
    "x-build-id": "RSVkQMpddNffzgsfF"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/brenton8907~google-ads-transparency-center/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-brenton8907-google-ads-transparency-center",
        "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/brenton8907~google-ads-transparency-center/runs": {
      "post": {
        "operationId": "runs-sync-brenton8907-google-ads-transparency-center",
        "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/brenton8907~google-ads-transparency-center/run-sync": {
      "post": {
        "operationId": "run-sync-brenton8907-google-ads-transparency-center",
        "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": "Domains",
            "type": "array",
            "description": "Landing-page domains, e.g. nike.com. Returns every ad whose landing page is on that domain, across all advertisers that use it.",
            "items": {
              "type": "string"
            }
          },
          "advertiserIds": {
            "title": "Advertiser IDs",
            "type": "array",
            "description": "Google advertiser IDs (start with AR…, from a Transparency Center URL). Fastest and most precise way to pull one advertiser's ads.",
            "items": {
              "type": "string"
            }
          },
          "queries": {
            "title": "Brand / advertiser names",
            "type": "array",
            "description": "Free-text brand or company names, e.g. 'Nike', 'Allbirds'. Resolved to advertiser IDs via the Transparency Center suggestion API (best match first; set 'Max advertisers per query' to include more).",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Transparency Center URLs",
            "type": "array",
            "description": "Paste adstransparency.google.com URLs (advertiser pages, search pages with ?domain= or ?text=). Parsed into the equivalent query.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "mode": {
            "title": "Mode",
            "enum": [
              "ads",
              "advertisers"
            ],
            "type": "string",
            "description": "'Ads' lists creatives. 'Advertiser check' is the cheap enrichment mode: for each domain/name, return the advertiser(s) found and how many ads they run, without listing the ads. Ideal for 'is this company running Google Ads?' at scale.",
            "default": "ads"
          },
          "region": {
            "title": "Region",
            "type": "string",
            "description": "ISO 3166-1 alpha-2 country code (US, GB, DE, …) or ANYWHERE. Restricts results to ads shown in that country.",
            "default": "ANYWHERE"
          },
          "format": {
            "title": "Ad format",
            "enum": [
              "ALL",
              "TEXT",
              "IMAGE",
              "VIDEO"
            ],
            "type": "string",
            "description": "Only ads of this format.",
            "default": "ALL"
          },
          "surface": {
            "title": "Platform / surface",
            "enum": [
              "ALL",
              "SEARCH",
              "YOUTUBE",
              "SHOPPING",
              "MAPS",
              "PLAY"
            ],
            "type": "string",
            "description": "Where the ad was shown.",
            "default": "ALL"
          },
          "dateFrom": {
            "title": "Shown from (YYYY-MM-DD)",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "type": "string",
            "description": "Only ads active on or after this date. Google keeps roughly 12 months of history."
          },
          "dateTo": {
            "title": "Shown until (YYYY-MM-DD)",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "type": "string",
            "description": "Only ads active on or before this date."
          },
          "maxAdsPerQuery": {
            "title": "Max ads per query",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Cap per domain / advertiser / keyword. 40 ads per request. Google stops paginating at roughly 1,000 per query.",
            "default": 200
          },
          "maxAdvertisersPerQuery": {
            "title": "Max advertisers per name/domain query",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "When a brand name or domain resolves to several advertiser accounts, how many to include (best match first).",
            "default": 3
          },
          "includeDetails": {
            "title": "Include full ad details",
            "type": "boolean",
            "description": "One extra request per ad. Adds the countries each ad ran in (every row) and all creative rendering variations (most rows). Per-country impression ranges and surfaces (Search/YouTube/…) are added only where Google publishes them, which is EU-served and political ads. Billed as enriched record.",
            "default": false
          },
          "onlyNewAds": {
            "title": "Only newly observed ads (monitor mode)",
            "type": "boolean",
            "description": "Remember creative IDs between runs (named key-value store) and output only ads not observed before in Google's capped result window. Because Google can reorder that window, an older creative may appear for the first time; use first_shown to distinguish launches.",
            "default": false
          },
          "monitorStoreName": {
            "title": "Monitor store name",
            "type": "string",
            "description": "Named key-value store that holds seen creative IDs. Use different names for different watchlists.",
            "default": "ads-transparency-monitor"
          },
          "trackChanges": {
            "title": "Track started/stopped advertising between runs",
            "type": "boolean",
            "description": "Advertisers mode. Remembers each domain's state in a named key-value store and adds activity_change (first_check, started, stopped, still_active, still_inactive), previous_check and state_since to every row. Uses is_actively_advertising (an ad shown in the last 30 days), so 'stopped' is reported about 30 days after a domain's last ad, not the day it stops. 'started' is reported on the first new ad. Free: no extra charge.",
            "default": false
          },
          "changeStoreName": {
            "title": "Change-tracking store name",
            "pattern": "^[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$",
            "maxLength": 63,
            "type": "string",
            "description": "Named key-value store holding each domain's last state. Letters, digits and hyphens (not at the start or end), at most 63 characters. Use one name per list you track. Parallel runs may share a store: a run never overwrites a newer observation, though two runs finishing within seconds of each other on the same domain can still race, so give overlapping lists their own names if that matters.",
            "default": "ads-advertiser-check-state"
          },
          "includeRaw": {
            "title": "Include raw API objects",
            "type": "boolean",
            "description": "Attach the untouched upstream record under 'raw'.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Google throttles by IP. Apify proxy (default) rotates exit IPs on rate limits. Residential proxies are not needed.",
            "default": {
              "useApifyProxy": true
            }
          },
          "requestDelaySeconds": {
            "title": "Delay between requests (s)",
            "minimum": 0.2,
            "maximum": 10,
            "type": "number",
            "description": "Pacing to stay under Google's per-IP rate limit. Lower is faster but risks 429s (which are retried with a fresh session).",
            "default": 1.5
          }
        }
      },
      "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}