{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Ads Transparency Scraper — $1.50/1k ads",
    "description": "Scrape Google Ads Transparency Center by advertiser domain or AR id. Every row includes headline, description, CTA, creative variations, landing URLs, regions and first/last-shown dates. Optional only-new watch and asset download. $1.50 per 1,000 ads. Public Center only — no Google login.",
    "version": "1.0",
    "x-build-id": "LBIuuHDsOg36fMcq5"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/memo23~google-ads-transparency-scraper-ppe/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-memo23-google-ads-transparency-scraper-ppe",
        "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/memo23~google-ads-transparency-scraper-ppe/runs": {
      "post": {
        "operationId": "runs-sync-memo23-google-ads-transparency-scraper-ppe",
        "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/memo23~google-ads-transparency-scraper-ppe/run-sync": {
      "post": {
        "operationId": "run-sync-memo23-google-ads-transparency-scraper-ppe",
        "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": {
          "searchQuery": {
            "title": "Advertiser domain or ID",
            "type": "string",
            "description": "The advertiser's **domain** (e.g. `temu.com`, `nike.com`) or their **advertiser ID** (e.g. `AR13288476527828631553`) — the scraper auto-detects which. Google's Ads Transparency Center has **no free-text advertiser-name search**, so a bare name like `nike` is tried as `nike.com` (logged as a guess) and a multi-word name is rejected with an explanation. Leave empty to use `Start URLs` instead."
          },
          "domains": {
            "title": "Advertiser domains (batch)",
            "type": "array",
            "description": "Several advertiser domains in one run (e.g. `temu.com`, `nike.com`). Combined with `Advertiser domain or ID` and `Advertiser IDs`. Leave empty if you only use the single field or Start URLs.",
            "items": {
              "type": "string"
            }
          },
          "advertiserIds": {
            "title": "Advertiser IDs (batch)",
            "type": "array",
            "description": "Several `AR…` advertiser IDs in one run. Combined with the single field and the domain list. Example: `AR13288476527828631553`.",
            "items": {
              "type": "string"
            }
          },
          "region": {
            "title": "Region",
            "enum": [
              "anywhere",
              "US",
              "GB",
              "CA",
              "AU",
              "DE",
              "FR",
              "IT",
              "ES",
              "NL",
              "BE",
              "SE",
              "NO",
              "DK",
              "FI",
              "PL",
              "PT",
              "IE",
              "AT",
              "CH",
              "CZ",
              "GR",
              "HU",
              "RO",
              "BG",
              "HR",
              "SK",
              "SI",
              "LT",
              "LV",
              "EE",
              "BR",
              "MX",
              "AR",
              "CL",
              "CO",
              "PE",
              "JP",
              "KR",
              "CN",
              "TW",
              "HK",
              "SG",
              "IN",
              "ID",
              "TH",
              "VN",
              "PH",
              "MY",
              "PK",
              "BD",
              "AE",
              "SA",
              "IL",
              "TR",
              "EG",
              "ZA",
              "NG",
              "KE",
              "MA",
              "NZ",
              "RU",
              "UA",
              "BA",
              "RS",
              "AL",
              "MK",
              "ME"
            ],
            "type": "string",
            "description": "Country the ads were shown in. Defaults to `anywhere` (all regions).",
            "default": "anywhere"
          },
          "format": {
            "title": "Format",
            "enum": [
              "ALL",
              "TEXT",
              "IMAGE",
              "VIDEO"
            ],
            "type": "string",
            "description": "Filter by creative format. Leave `ALL` to include every format.",
            "default": "ALL"
          },
          "platform": {
            "title": "Platform",
            "enum": [
              "ALL",
              "SEARCH",
              "YOUTUBE",
              "MAPS",
              "PLAY",
              "SHOPPING"
            ],
            "type": "string",
            "description": "Filter by Google surface. Leave `ALL` to include every platform.",
            "default": "ALL"
          },
          "dateFrom": {
            "title": "Date from (YYYY-MM-DD)",
            "type": "string",
            "description": "Only include ads first shown on or after this date. Leave empty for no lower bound."
          },
          "dateTo": {
            "title": "Date to (YYYY-MM-DD)",
            "type": "string",
            "description": "Only include ads last shown on or before this date. Leave empty for no upper bound."
          },
          "startUrls": {
            "title": "Start URLs",
            "maxItems": 50,
            "type": "array",
            "description": "Power-user override. If left empty, URLs are built from the single query, domain list, advertiser-ID list, region, format, platform and dates. Direct format: `https://adstransparency.google.com/?region=US&domain=temu.com&format=IMAGE`.",
            "items": {
              "type": "string"
            }
          },
          "onlyNewAds": {
            "title": "Only new ads (watch mode)",
            "type": "boolean",
            "description": "Skip creatives whose CR… id was already delivered to you on a previous run. The first run after enabling this is the baseline (every match). Later runs emit only new creatives and do not bill the repeats. Google has no public 'first seen today' flag — this is our per-account seen set. Default: false.",
            "default": false
          },
          "monitorStateName": {
            "title": "Watch name (independent only-new sets)",
            "type": "string",
            "description": "Name this watch so one account can run several only-new jobs (e.g. `temu-us` vs `nike-de`) without sharing seen ids. Only used when Only new ads is on."
          },
          "advertiserCheck": {
            "title": "Verify advertiser ID before scraping",
            "type": "boolean",
            "description": "When the search query is an AR… advertiser id, call Google's public GetAdvertiserById first. If the id does not exist the run stops with zero billed ads. Domain searches already fail closed when the Transparency Center returns no creatives. Default: false.",
            "default": false
          },
          "maxItems": {
            "title": "Maximum items per crawl",
            "type": "integer",
            "description": "Hard cap on ads written this run. Default 100. Example: 10. Always set this — an uncapped advertiser can return thousands of creatives.",
            "default": 100
          },
          "minDelay": {
            "title": "Min delay for API call",
            "type": "integer",
            "description": "Minimum seconds to wait before the next Transparency Center request. Default 5. Example: 5.",
            "default": 5
          },
          "maxDelay": {
            "title": "Max delay for API call",
            "type": "integer",
            "description": "Maximum seconds to wait before the next Transparency Center request. Default 10. Example: 10.",
            "default": 10
          },
          "maxConcurrency": {
            "title": "Max Concurrency",
            "type": "integer",
            "description": "Maximum number of pages that can be processed at the same time.",
            "default": 10
          },
          "minConcurrency": {
            "title": "Min Concurrency",
            "type": "integer",
            "description": "Minimum number of pages that will be processed at the same time.",
            "default": 1
          },
          "maxRequestRetries": {
            "title": "Max Request Retries",
            "type": "integer",
            "description": "Number of times the crawler will retry a failed request before giving up.",
            "default": 100
          },
          "downloadAssets": {
            "title": "Download assets",
            "type": "boolean",
            "description": "Fetch each variation's image / video bytes and store them in your default key-value store. The original `image` / `videoUrl` is replaced with a public Apify KVS URL; original URLs are preserved as `originalImage` / `originalVideoUrl`.",
            "default": false
          },
          "downloadPreviews": {
            "title": "Download previews",
            "type": "boolean",
            "description": "Fetch the top-level `previewUrl` thumbnail and store it in your default key-value store. Original URL is preserved as `originalPreviewUrl`.",
            "default": false
          },
          "maxAssetSizeKb": {
            "title": "Max asset size (KB)",
            "type": "integer",
            "description": "Skip downloading assets larger than this. Default 10240 (10 MB) — protects against accidental download of multi-GB videos.",
            "default": 10240
          },
          "proxy": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Optional. Leave this empty — the scraper already routes every request through its own built-in residential proxy pool, which is included in the per-ad price. Only set this if you want to force your own proxy instead (for example a specific country exit); doing so overrides the built-in pool and bills the proxy traffic to your account."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}