{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Ads Video Transcript Scraper — YouTube Ads to Text",
    "description": "Google Ads Transparency Center video ads as transcripts with the first-3s hook and advertiser metadata, one row per ad — by advertiser, domain, YouTube ad URL or chained dataset. From $8.00 per 1,000 video ad transcripts, 3 min included, no start fee. Removed and music-only ads are uncharged rows.",
    "version": "1.0",
    "x-build-id": "bUGrZPYcr6xBduzON"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/steadyfetch~google-ads-video-transcript-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-steadyfetch-google-ads-video-transcript-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/steadyfetch~google-ads-video-transcript-scraper/runs": {
      "post": {
        "operationId": "runs-sync-steadyfetch-google-ads-video-transcript-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/steadyfetch~google-ads-video-transcript-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-steadyfetch-google-ads-video-transcript-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": {
          "advertisers": {
            "title": "Advertisers",
            "type": "array",
            "description": "Advertiser names (e.g. \"HelloFresh\"), Ads Transparency Center advertiser IDs (AR…), or advertiser page links (adstransparency.google.com/advertiser/AR…) — the actor finds their video ads and transcribes them. Finding advertisers is never charged, and neither is a removed, music-only or media-less ad. A Facebook Ad Library advertiser belongs in steadyfetch/facebook-ads-transcript-scraper. Leave everything empty and click Start and the run is a 3-ad sample (HelloFresh's US video ads, charged like any run) — the fastest way to see real output.",
            "items": {
              "type": "string"
            }
          },
          "domains": {
            "title": "Advertiser domains",
            "type": "array",
            "description": "Verified advertiser domains (e.g. \"nike.com\") — spans every advertiser registered on that domain.",
            "items": {
              "type": "string"
            }
          },
          "videoUrls": {
            "title": "Ad video URLs, IDs, or ad page links",
            "type": "array",
            "description": "YouTube watch URLs (https://www.youtube.com/watch?v=…), bare 11-character video IDs, or Ads Transparency Center ad page links copied from your browser (adstransparency.google.com/advertiser/AR…/creative/CR…) — pasted ad pages are looked up and transcribed directly. A direct audio or video FILE on any other host is not read here — that goes to our media transcriber (apify.com/steadyfetch/media-transcriber), pasted into its \"Media URLs\" field; a link here that is neither a YouTube nor a Transparency Center one comes back as an uncharged row saying so.",
            "items": {
              "type": "string"
            }
          },
          "datasetId": {
            "title": "Dataset ID (chain a scraper run)",
            "type": "string",
            "description": "The default dataset ID of a finished Google Ads scraper run. The actor deep-scans each row for YouTube ad video links. With Apify's 'Connect actor' integration this is filled automatically."
          },
          "datasetItems": {
            "title": "Dataset items (paste rows)",
            "type": "array",
            "description": "Paste rows from your Google Ads scraper run. The actor deep-scans each row for YouTube video links plus advertiser metadata. Leave it empty to use advertisers, domains or the other inputs instead."
          },
          "watchlistId": {
            "title": "Watchlist name",
            "type": "string",
            "description": "A short name for the list, e.g. `acme-competitors` (letters, numbers and hyphens). The list lives in a named key-value store in your account called `google-ads-video-watch-<name>`, so you can inspect or clear it any time. Leave empty for a one-off run — your account's memory of delivered ads still applies."
          },
          "newAdsOnly": {
            "title": "New ads only",
            "type": "boolean",
            "description": "OFF (default): every ad runs as usual; an ad your account already has comes back from the earlier run, not charged (`repeat: true`), and every row carries `isNew` / `firstSeenAt`. ON: ads already on your watchlist — or, with no list name, already delivered to your account — are skipped before anything is fetched, inside the advertiser walk too: not fetched, not charged, and the run's status line and OUTPUT say how many. Only an ad the actor actually answered counts (a delivered transcript, or a final uncharged no-speech verdict); an ad it could not answer — a removed video, a blocked lookup, an ad your cost cap left out — does not, so the next run tries it again.",
            "default": false
          },
          "region": {
            "title": "Region",
            "type": "string",
            "description": "Two-letter country code for advertiser enumeration (which regional ad inventory to search). Ordinary spellings work (US, us, USA, United States). A region this actor cannot search is never swapped for another market: the advertiser and domain walks stop and return uncharged rows naming this field, the searchable regions and every target they did not search. Ad links you pasted carry their own ad and are transcribed as asked.",
            "default": "US"
          },
          "maxItems": {
            "title": "Max video ads to process",
            "minimum": 1,
            "type": "integer",
            "description": "Safety cap on how many video ads to attempt in one run. Up to 5,000 per run; ask for a bigger number and the run continues at 5,000, with one uncharged row saying so. Every attempted ad counts, including uncharged misses such as music-only videos; rows answered before any attempt (removed ads, media-less creatives, guidance rows) never do. Long videos: the first 3 minutes of every video are included in the transcript price; each started minute beyond that is charged as a \"Long-video minute (surcharge)\" at $0.005 — only when the transcript is delivered.",
            "default": 100
          },
          "maxAdvertisersPerName": {
            "title": "Advertisers to open per name",
            "minimum": 1,
            "type": "integer",
            "description": "How many same-name advertisers each entry in \"Advertisers\" may open. Big brands register several advertiser accounts and share their name with unrelated ones — \"Nike\" matches ten advertisers in the US alone. At 1 (the default) the name resolves to the single advertiser running the most ads in your region; raise it to also search the next-largest namesakes, largest first. This matches advertiser NAMES, not ad text — Google's Transparency Center has no ad-text search. AR… advertiser IDs and domains are unaffected. Finding advertisers is never charged. Up to 10 per name; ask for a bigger number and the run continues at 10, with one uncharged row saying so.",
            "default": 1
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}