{
  "openapi": "3.0.1",
  "info": {
    "title": "Competitor Ad Monitor: Google Ads Transparency & Domain Check",
    "description": "Competitor ad monitor for Google Ads: schedule it daily or weekly and get only the new ads, with an alert through Apify integrations. Bulk check domains running Google ads: one row per domain, yes or no, with its advertisers. By brand, domain or advertiser ID: dates, days shown, EU reach.",
    "version": "0.7",
    "x-build-id": "MM78gvklZ0kbVrTyn"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/solidfetch~google-ads-transparency-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-solidfetch-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/solidfetch~google-ads-transparency-scraper/runs": {
      "post": {
        "operationId": "runs-sync-solidfetch-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/solidfetch~google-ads-transparency-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-solidfetch-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": {
          "mode": {
            "title": "What to get",
            "enum": [
              "ads",
              "domainCheck",
              "advertisers"
            ],
            "type": "string",
            "description": "Ads: every ad of the brands, domains or advertiser IDs below, charged per ad. Domain check: one row per domain in \"Domains\" saying whether it advertises on Google, with up to 5 advertisers, the rounded ad count, the most recent shown date and the formats seen, charged per domain. Domain check uses only Domains and Country. Advertiser lookup: one row per advertiser account that matches a name in \"Brand or advertiser names\" or runs ads for a domain in \"Domains\", with its ID, country, rounded ad count and the account the Ads mode would pick, charged per advertiser. Advertiser lookup uses only names, Domains and Country.",
            "default": "ads"
          },
          "advertiserNames": {
            "title": "Brand or advertiser names",
            "type": "array",
            "description": "One search per name, for example Nike, Allegro, Temu. The actor picks the matching advertiser with the most ads, or the brand's domain when the ads run under another legal name. Names that differ only in case or punctuation are searched once. Advertiser lookup: every advertiser whose name contains the name, up to 500 names and domains per run. To paste a column from a spreadsheet, use \"Names as text\" below.",
            "items": {
              "type": "string"
            }
          },
          "advertiserNamesText": {
            "title": "Names as text",
            "type": "string",
            "description": "The same as \"Brand or advertiser names\", pasted as one text: one name per line, or names separated by commas when there is no line break. A name with a comma goes on its own line. Meant for tools such as Clay and Google Sheets that send a whole column as one value."
          },
          "domains": {
            "title": "Domains",
            "type": "array",
            "description": "Ads: one search per domain, ads from every advertiser that sends traffic there, for example nike.com. Domain check: the list of domains to check, up to 1,000 per run, one row each with your value in \"input\". Advertiser lookup: the advertisers whose ads lead to the domain. Full URLs work too; the scheme, path and www. are removed, internationalised names are saved as punycode and duplicates are checked once. IP addresses, e-mail addresses and names without a public suffix are not domains: domain check returns a free row with an error for them. To paste a column from a spreadsheet, use \"Domains as text\" below.",
            "items": {
              "type": "string"
            }
          },
          "domainsText": {
            "title": "Domains as text",
            "type": "string",
            "description": "The same as \"Domains\", pasted as one text: separated by line breaks, spaces, commas or semicolons. Meant for tools such as Clay and Google Sheets that send a whole column as one value."
          },
          "advertiserIds": {
            "title": "Advertiser IDs",
            "type": "array",
            "description": "Advertiser IDs (AR followed by 20 digits) or advertiser page URLs from the Transparency Center. All IDs are searched together. An ID that is not valid is skipped and saved as a free row with the reason; the valid ones are still searched.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Transparency Center URLs",
            "type": "array",
            "description": "Links copied from adstransparency.google.com: an advertiser page or a creative page (that advertiser is searched, joined with the IDs above) and a domain search page (that domain is searched). A link with a country (region=PL) sets Country when it is empty. Anything else is skipped and saved as a free row.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "region": {
            "title": "Country",
            "type": "string",
            "description": "Country code (ISO 3166-1, e.g. US, PL, DE) or English country name (e.g. Poland, United Kingdom). Leave empty for all countries. Domain check: whether the domain has ads shown in this country. Advertiser lookup: the best match prefers an advertiser from this country, and a domain lists the advertisers of ads shown here."
          },
          "dateFrom": {
            "title": "Shown from",
            "type": "string",
            "description": "Only ads shown at some point on or after this date (YYYY-MM-DD). An ad that started earlier and still ran after it is included. For ads that are new since a date, use onlyNewSinceLastRun."
          },
          "dateTo": {
            "title": "Shown until",
            "type": "string",
            "description": "Only ads shown at some point on or before this date (YYYY-MM-DD)."
          },
          "shownInLastDays": {
            "title": "Shown in the last N days",
            "minimum": 1,
            "maximum": 364,
            "type": "integer",
            "description": "Only ads shown at some point in the last N days, today included (1 to 364). This is not the same as ads that started in that window; for new ads use onlyNewSinceLastRun. Use it instead of the two dates in saved tasks and schedules, so the range moves with every run."
          },
          "format": {
            "title": "Ad format",
            "enum": [
              "ALL",
              "TEXT",
              "IMAGE",
              "VIDEO"
            ],
            "type": "string",
            "description": "Filter by ad format.",
            "default": "ALL"
          },
          "platform": {
            "title": "Platform",
            "enum": [
              "ALL",
              "SEARCH",
              "YOUTUBE",
              "SHOPPING",
              "MAPS",
              "PLAY"
            ],
            "type": "string",
            "description": "Only ads Google showed on this platform: Google Search, YouTube, Google Shopping, Google Maps or Google Play.",
            "default": "ALL"
          },
          "videoLinks": {
            "title": "YouTube links for video ads",
            "type": "boolean",
            "description": "Adds videoUrl and thumbnailUrl to video ads by reading one preview file per video ad. When left empty, it is on for the Video format and off for the others."
          },
          "previewImages": {
            "title": "Pictures for image ads",
            "type": "boolean",
            "description": "Fills imageUrl for image ads that Google only shows through a preview, by reading one preview file per such ad (about 0.2 MB each, 4 at a time). Turn it off for the fastest run. When left empty, it is on.",
            "default": true
          },
          "maxAds": {
            "title": "Max ads per search",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Each name, the ID list and each domain stop after this many ads. Ads found by an earlier search are not saved or charged again. When left empty, each search stops at 100 ads and the log says so. Set it when you start the actor from Clay, Make or another tool, together with the maximum cost per run."
          },
          "onlyWithProducts": {
            "title": "Only ads with product data",
            "type": "boolean",
            "description": "Keep only shopping ads that come with product titles and prices. Other ads are skipped before saving, so they are not charged. Max ads then counts the ads kept.",
            "default": false
          },
          "adDetails": {
            "title": "EU ad details (impressions, targeting, countries)",
            "type": "boolean",
            "description": "Adds impressionsMin, impressionsMax, targeting and regionStats (per-country first and last shown dates and impression ranges) by reading each ad's detail page. Google publishes impressions and targeting for ads shown in the EU and a few other European countries. Costs one extra request per ad, so runs take longer.",
            "default": false
          },
          "downloadCreatives": {
            "title": "Download the ad images",
            "type": "boolean",
            "description": "Saves the image of each ad (the archived ad image or the picture from its preview) as a file in the run's key-value store and adds its link as creativeFileUrl. Video ads keep their YouTube link, the video itself is not downloaded. Each stored file is charged as one creative-file event on top of the ad. Files over 5 MB and failed downloads are skipped and not charged.",
            "default": false
          },
          "onlyNewSinceLastRun": {
            "title": "Only ads new since the last run",
            "type": "boolean",
            "description": "For scheduled runs: save only ads this search has not returned before. The first run saves every matching ad as the baseline. Ads seen by earlier runs are skipped and not charged. Google lists the most recently shown ads first, so Max ads per search is how deep each run looks.",
            "default": false
          },
          "monitorName": {
            "title": "Monitor name",
            "type": "string",
            "description": "Optional. Runs with the same name share the list of ads already seen. Leave empty to get one list per search: the names, domains, IDs, country and format. Letters, digits and !-_.'() only."
          },
          "includeLastShownChanges": {
            "title": "Also ads whose last-shown date moved",
            "type": "boolean",
            "description": "Also save ads seen before whose last-shown date is later than in the last run, that is ads still running. These rows have changeType lastShownChanged and previousLastShown.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Google answers with a CAPTCHA page when one IP sends many requests. The actor then switches to a new proxy IP and retries. With the default Apify Proxy, the first CAPTCHA moves the run to Apify residential proxy when the run has access to it. Apify Proxy is recommended.",
            "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
                  },
                  "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}