{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Ads Transparency Scraper - Ad Library & Creatives",
    "description": "Scrape any advertiser's live ads from the Google Ads Transparency Center — text, image, and video creatives across 50+ countries.",
    "version": "0.1",
    "x-build-id": "zi3PGYMPxJa3hufGa"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/s-r~google-ads-transparency/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-s-r-google-ads-transparency",
        "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/s-r~google-ads-transparency/runs": {
      "post": {
        "operationId": "runs-sync-s-r-google-ads-transparency",
        "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/s-r~google-ads-transparency/run-sync": {
      "post": {
        "operationId": "run-sync-s-r-google-ads-transparency",
        "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": {
          "domain": {
            "title": "Domain",
            "type": "string",
            "description": "Advertiser domain to look up (e.g. \"redable.nl\"). One of domain, search, or advertiser_id is required."
          },
          "search": {
            "title": "Free-text search",
            "type": "string",
            "description": "Brand or advertiser name when you do not know the exact domain. Only one lookup term is ever used: domain wins, then this, then advertiser_id, so filling in Domain as well means this box is ignored. The winner is sent to Google's advertiser-suggestion endpoint and the advertisers it returns are the ones whose ads get fetched."
          },
          "advertiser_id": {
            "title": "Advertiser ID",
            "type": "string",
            "description": "Direct advertiser lookup. Used as the lookup term only when both Domain and Free-text search are empty, because domain and search take priority over it. With Creative ID also filled in the run takes a different path altogether: one detail request, one row, and region, format, dates and Number of ads are all ignored."
          },
          "creative_id": {
            "title": "Creative ID",
            "type": "string",
            "description": "Fetch one named creative and nothing else. Advertiser ID must be set as well, the run rejects the input without it. On this path no search or paging happens and the other filters do not apply: Region only ends up in the deeplink, format, dates and Number of ads are not used at all."
          },
          "region": {
            "title": "Region",
            "enum": [
              "",
              "AR",
              "AU",
              "AT",
              "BE",
              "BR",
              "BG",
              "CA",
              "CL",
              "CO",
              "HR",
              "CY",
              "CZ",
              "DK",
              "EG",
              "EE",
              "FI",
              "FR",
              "DE",
              "GR",
              "HK",
              "HU",
              "IN",
              "ID",
              "IE",
              "IL",
              "IT",
              "JP",
              "LV",
              "LT",
              "LU",
              "MY",
              "MT",
              "MX",
              "NL",
              "NZ",
              "NO",
              "PH",
              "PL",
              "PT",
              "RO",
              "RU",
              "SA",
              "SG",
              "SK",
              "SI",
              "ZA",
              "KR",
              "ES",
              "SE",
              "CH",
              "TW",
              "TH",
              "TR",
              "UA",
              "AE",
              "GB",
              "US",
              "VN"
            ],
            "type": "string",
            "description": "Restrict to one region, or leave on Anywhere. A region filter is a hard narrowing: measured 2026-09-07, nike.com returned 0 ads pinned to US and 20 with no region set.",
            "default": ""
          },
          "format": {
            "title": "Ad format",
            "enum": [
              "",
              "text",
              "image",
              "video"
            ],
            "type": "string",
            "description": "Filter by ad format. Leave empty for all formats.",
            "default": ""
          },
          "start_date": {
            "title": "Start date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "type": "string",
            "description": "Lower bound of the ad's last-shown date, written YYYY-MM-DD. It is converted to a timestamp and sent inside Google's own SearchCreatives request, so Google narrows the result set before any page is walked and the bound really does shorten the run. It applies to the domain and advertiser searches only; a single Creative ID lookup ignores it."
          },
          "end_date": {
            "title": "End date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "type": "string",
            "description": "Upper bound of the ad's last-shown date, written YYYY-MM-DD. Like the lower bound it travels inside Google's own SearchCreatives request rather than being applied to the rows afterwards, and it too is ignored on a single Creative ID lookup. Leave both bounds empty and Google applies no date window."
          },
          "ads_count": {
            "title": "Number of ads",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "How many ad creatives to return. Google serves 100 per page, so higher values walk more pages and take longer.",
            "default": 40
          },
          "detail": {
            "title": "Include per-ad detail",
            "type": "boolean",
            "description": "Fetch impressions, regions, platforms, variations, and spend for every returned creative. Slower but richer.",
            "default": false
          },
          "political": {
            "title": "Political ads only",
            "type": "boolean",
            "description": "Filter to political / election ads (these include spend ranges where available).",
            "default": false
          },
          "page_token": {
            "title": "Page token",
            "type": "string",
            "description": "Continue a previous run from the `_next_page_token` value it wrote on its rows. It only works together with Domain: a run carrying a token skips the advertiser-suggestion step entirely, so a token combined with a brand-name or advertiser-ID search returns nothing. The Actor already walks the pages itself up to Number of ads, so this is only for going past where an earlier run stopped. Leave empty for the first page."
          },
          "max_advertisers": {
            "title": "Advertisers per query",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "When searching by brand name, how many matching advertisers to pull ads from, biggest first. Large brands run one ad account per country, so 1 silently drops the rest.",
            "default": 1
          },
          "platform": {
            "title": "Platform",
            "enum": [
              "",
              "google_maps",
              "google_play",
              "google_search",
              "google_shopping",
              "youtube"
            ],
            "type": "string",
            "description": "Keep only ads that ran on this surface. Google's search API has no platform criterion, so this is applied after the fact and forces detail lookups on, which makes the run slower and costlier per ad.",
            "default": ""
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}