{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Ads Transparency Scraper ($0.90/1K)",
    "description": "Pull every Google ad a competitor runs (Search, YouTube, Shopping, Maps, Play) from the Google Ads Transparency Center, by brand name, domain, or advertiser ID. Only $0.90 per 1,000 ads ($0.72 on Gold). Fast, no browser.",
    "version": "0.1",
    "x-build-id": "ZitFccgrPRyWvEvmr"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/silentsuperpower~google-ads-transparency-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-silentsuperpower-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/silentsuperpower~google-ads-transparency-scraper/runs": {
      "post": {
        "operationId": "runs-sync-silentsuperpower-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/silentsuperpower~google-ads-transparency-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-silentsuperpower-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": {
          "queries": {
            "title": "Advertisers, domains or URLs",
            "type": "array",
            "description": "One per line. Accepts an advertiser name (e.g. <code>Nike</code>), an advertiser ID (<code>AR16735076323512287233</code>), a website domain (<code>nike.com</code>), or any adstransparency.google.com advertiser, domain or creative URL. A creative URL (<code>.../advertiser/AR.../creative/CR...</code>) fetches just that ad, with details.",
            "items": {
              "type": "string"
            }
          },
          "domains": {
            "title": "Domains",
            "type": "array",
            "description": "Optional. Website domains to search, one per line (e.g. <code>nike.com</code>). Same as putting them in the first list; handy when your domains come from another system.",
            "items": {
              "type": "string"
            }
          },
          "advertiserIds": {
            "title": "Advertiser IDs",
            "type": "array",
            "description": "Optional. Advertiser IDs to scrape directly, one per line (<code>AR</code> followed by digits). The most exact way to target one advertiser.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "Optional. adstransparency.google.com links: an advertiser page, a domain search page, or a single creative page (<code>.../advertiser/AR.../creative/CR...</code>, which fetches just that ad with details). You can also add a link to a .txt or .csv file with one query per line.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "urlsFromFile": {
            "title": "Queries from a list or file",
            "type": "string",
            "description": "Optional. Paste a list of names, domains, IDs or URLs (one per line), or paste one link to a public .txt or .csv file. For a CSV the first column is used and a header row is skipped. Private files and Google Sheets that need a login are not supported; publish the sheet as CSV and paste that link."
          },
          "resultType": {
            "title": "What to return",
            "enum": [
              "ads",
              "advertisers"
            ],
            "type": "string",
            "description": "Ads returns every ad creative. Advertisers returns one summary row per matched advertiser with its country, approximate ad count and Transparency Center link, which is the fast way to build a list of companies that advertise on Google.",
            "default": "ads"
          },
          "maxAdsPerQuery": {
            "title": "Max ads per query",
            "minimum": 1,
            "type": "integer",
            "description": "Stop after this many ads for each query (default 100). Big brands run tens of thousands of ads. With \"Only new ads\" on, this limits the new ads returned. Tested up to 10,000 ads per query (a 10,000-ad run takes about 18 minutes); larger values run but are not covered by our reliability tests. The run log and status message say when this limit ended a query.",
            "default": 100
          },
          "maxAdvertisersPerQuery": {
            "title": "Max advertisers per query",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Advertisers mode only. How many matching advertisers to return for each query (default 10). A brand name often matches several advertiser accounts (one per country or subsidiary). For a domain query, advertisers are collected from the first 200 ads of that domain.",
            "default": 10
          },
          "region": {
            "title": "Region shown in",
            "enum": [
              "ANY",
              "DZ",
              "AR",
              "AU",
              "AT",
              "BD",
              "BE",
              "BR",
              "BG",
              "CA",
              "CL",
              "CN",
              "CO",
              "HR",
              "CZ",
              "DK",
              "EC",
              "EG",
              "FI",
              "FR",
              "DE",
              "GH",
              "GR",
              "HK",
              "HU",
              "IN",
              "ID",
              "IE",
              "IL",
              "IT",
              "JP",
              "KZ",
              "KE",
              "LT",
              "MY",
              "MX",
              "MA",
              "NL",
              "NZ",
              "NG",
              "NO",
              "PK",
              "PE",
              "PH",
              "PL",
              "PT",
              "RO",
              "RU",
              "SA",
              "RS",
              "SG",
              "SK",
              "ZA",
              "KR",
              "ES",
              "LK",
              "SE",
              "CH",
              "TW",
              "TH",
              "TR",
              "UA",
              "AE",
              "GB",
              "US",
              "VE",
              "VN"
            ],
            "type": "string",
            "description": "Only ads shown in this country.",
            "default": "ANY"
          },
          "format": {
            "title": "Ad format",
            "enum": [
              "ALL",
              "TEXT",
              "IMAGE",
              "VIDEO"
            ],
            "type": "string",
            "description": "Only ads in this format. Text ads are Google Search ads, archived by Google as screenshots.",
            "default": "ALL"
          },
          "platforms": {
            "title": "Google platforms",
            "type": "array",
            "description": "Only ads shown on these Google platforms. Leave empty for all platforms.",
            "items": {
              "type": "string",
              "enum": [
                "SEARCH",
                "YOUTUBE",
                "SHOPPING",
                "MAPS",
                "PLAY"
              ],
              "enumTitles": [
                "Google Search",
                "YouTube",
                "Google Shopping",
                "Google Maps",
                "Google Play"
              ]
            }
          },
          "dateFrom": {
            "title": "Shown on or after",
            "type": "string",
            "description": "YYYY-MM-DD"
          },
          "dateTo": {
            "title": "Shown on or before",
            "type": "string",
            "description": "YYYY-MM-DD"
          },
          "includeDetails": {
            "title": "Include regions and variations",
            "type": "boolean",
            "description": "Adds the countries each ad ran in (with the last date shown there) and every creative variation. Costs one extra event per ad, only for ads where details were returned. A query stops after 3 refused detail requests in a row; its ads are then saved without details and without the details charge. Runs in parallel while Apify Proxy is carrying the run.",
            "default": false
          },
          "includeAdCopy": {
            "title": "Include ad copy (headline, description, call to action)",
            "type": "boolean",
            "description": "Reads the ad text Google serves with each ad: headline, long headline, description, call to action, display URL, destination URL and business name. It also fetches the ad details, so each ad is charged the details event (no other event is added). Video and display ads usually carry copy; a text ad that Google archived only as a picture has none, so its copy fields stay empty and adCopyStatus says \"image-only\". Nothing is guessed and no pictures are read. Ads only; ignored in advertisers mode.",
            "default": false
          },
          "detailConcurrency": {
            "title": "Detail requests at once",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "How many ad detail lookups run in parallel. Only used while a proxy is active (Apify Proxy switches on by itself if Google rate-limits the run); on a direct connection details are fetched one at a time to avoid blocks.",
            "default": 4
          },
          "includeRawData": {
            "title": "Include raw data",
            "type": "boolean",
            "description": "Adds Google's unprocessed creative array as <code>rawData</code> on every ad (and <code>rawDetails</code> when details are on). Useful if you need a field this Actor does not parse yet.",
            "default": false
          },
          "onlyNewAds": {
            "title": "Only new ads (monitor mode)",
            "type": "boolean",
            "description": "Remembers the ad IDs each query has already returned and gives you only new ones, so a scheduled run is an alert feed. The first run saves every ad it finds and seeds the history. Ads skipped as already seen are never charged. Google does not promise newest-first order, so each query looks through at most the larger of 5,000 ads or twice \"Max ads per query\"; add a \"Shown on or after\" date to keep runs short.",
            "default": false
          },
          "monitorStoreName": {
            "title": "Monitor storage name",
            "type": "string",
            "description": "Name of the key-value store that holds the history for monitor mode (letters, digits and hyphens, 3 to 63 characters). Each query keeps its own record. Use a different name to keep separate monitors apart.",
            "default": "ads-transparency-monitor"
          },
          "advertisersPerName": {
            "title": "Advertisers per name",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "When a query is a name, how many matching advertiser accounts to scrape (brands often have one per country). Only the first 5 matching accounts are tried, and the run stops looking once this many have ads.",
            "default": 1
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Not needed normally. Apify Proxy switches on automatically if Google rate-limits the run (datacenter first, then residential). A proxy you choose here is used for every request, retried on a fresh IP when it fails, and never changed."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}