{
  "openapi": "3.0.1",
  "info": {
    "title": "YouTube Channel Email & Sponsor Lead Scraper API",
    "description": "Find YouTube creator emails, phones, websites, socials, engagement signals, sponsor history, and lookalike channels from URLs or niche searches.",
    "version": "1.1",
    "x-build-id": "X9wdKm0C0YNTm9iej"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/trakk~youtube-channel-email-sponsor-leads/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-trakk-youtube-channel-email-sponsor-leads",
        "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/trakk~youtube-channel-email-sponsor-leads/runs": {
      "post": {
        "operationId": "runs-sync-trakk-youtube-channel-email-sponsor-leads",
        "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/trakk~youtube-channel-email-sponsor-leads/run-sync": {
      "post": {
        "operationId": "run-sync-trakk-youtube-channel-email-sponsor-leads",
        "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",
        "required": [
          "scrapeType"
        ],
        "properties": {
          "scrapeType": {
            "title": "🧭 How should we find creators?",
            "enum": [
              "channelContacts",
              "keywordDiscovery",
              "lookalikeDiscovery"
            ],
            "type": "string",
            "description": "Choose one discovery workflow. The relevant list below will be used as your starting point.",
            "default": "channelContacts"
          },
          "channels": {
            "title": "🔗 YouTube channels or videos",
            "maxItems": 1000,
            "type": "array",
            "description": "Paste channel URLs, @handles, channel IDs, or video URLs. Used by the direct channel mode. At most 1000 per run.",
            "items": {
              "type": "string"
            }
          },
          "searchQueries": {
            "title": "🔍 Keywords or niches",
            "maxItems": 200,
            "type": "array",
            "description": "Add one focused creator niche per line. Used by keyword discovery. At most 200 per run.",
            "items": {
              "type": "string"
            }
          },
          "seedChannels": {
            "title": "🧬 Example channels",
            "maxItems": 25,
            "type": "array",
            "description": "Add creators whose topics should be used to discover similar channels. At most 25 per run.",
            "items": {
              "type": "string"
            }
          },
          "lookalikeQueriesPerSeed": {
            "title": "🧠 Topic searches per example",
            "minimum": 1,
            "maximum": 6,
            "type": "integer",
            "description": "How many focused searches to derive from each example channel. More searches reach further from the seed. Leave empty to follow the selected depth."
          },
          "maxChannelsPerQuery": {
            "title": "📌 Candidates per keyword",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "Maximum channel candidates collected from each keyword or derived topic before deduplication. Leave empty to follow the selected depth."
          },
          "maxResults": {
            "title": "📦 Maximum creators to save (up to 5,000)",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Global result limit for this run after duplicates are removed. Creators dropped by the filters are replaced from further search pages, so a filtered run still aims at this number instead of stopping early. Rows are written as they are found, so a run that is stopped or times out keeps everything it had saved. Above about 1,000 the run can take several hours — raise the run's timeout in Run options to match, and give the search a lead memory name so you can continue it across runs instead.",
            "default": 50
          },
          "leadMemoryName": {
            "title": "🧠 Lead memory name",
            "type": "string",
            "description": "Give your search a name, for example my-fitness-outreach, and reuse it on every run that belongs to it. The Actor remembers which creators it has already delivered under that name and skips them before fetching anything, so you can keep adding keywords without paying twice for the same creator. Leave empty for a one-off run. Note that resurrecting an old run repeats its original input and ignores later edits to the task, so this is the way to extend a search with new keywords."
          },
          "region": {
            "title": "🌍 YouTube search region",
            "enum": [
              "US",
              "GB",
              "CA",
              "AU",
              "DE",
              "FR",
              "ES",
              "IT",
              "NL",
              "PL",
              "BR",
              "MX",
              "AR",
              "IN",
              "ID",
              "JP",
              "KR",
              "TW",
              "PH",
              "TH",
              "VN",
              "TR",
              "UA",
              "CZ",
              "SE",
              "NO",
              "DK",
              "FI",
              "ZA",
              "AE"
            ],
            "type": "string",
            "description": "Country used to localize search results and channel pages.",
            "default": "US"
          },
          "regionFilter": {
            "title": "🎯 How exact should the region be?",
            "enum": [
              "localized",
              "strict"
            ],
            "type": "string",
            "description": "Localized discovery uses the selected YouTube market but keeps relevant channels from any country. Strict country match keeps only channels that publicly declare the selected country; channels with no published country are excluded.",
            "default": "localized"
          },
          "contactFilter": {
            "title": "🎯 Which creators should be saved?",
            "enum": [
              "allChannels",
              "contactableOnly",
              "emailOnly"
            ],
            "type": "string",
            "description": "Keep every matching creator, or save only leads with a public contact method. \"Creators with an email\" keeps creators that published an address; while Validate email domains is on, an address whose domain cannot receive mail is rejected too. Rejected creators are replaced from the remaining search results.",
            "default": "contactableOnly"
          },
          "emailBlacklist": {
            "title": "🚫 Addresses to skip",
            "type": "array",
            "description": "Addresses or whole domains that must never be saved as a creator's contact. One per line, either a full address (help@skool.com) or a bare domain (skool.com), which also covers its subdomains. Use this for the support desks of platforms your creators happen to use. The Actor already skips the common ones (merch shops, tip jars, course and community platforms); this field is for the rest, and for addresses that are real but useless to you.",
            "items": {
              "type": "string"
            }
          },
          "enrichmentDepth": {
            "title": "⚡ How much detail do you need?",
            "enum": [
              "fast",
              "balanced",
              "deep"
            ],
            "type": "string",
            "description": "Fast is a light channel and single-video scan. Balanced adds public websites, profiles, email checks and pinned comments, and reads 5 recent videos. Deep reads 20 recent videos, which is what finds sponsorship history: on the same creators it returns sponsor evidence for 29% of them against 16% on Balanced. Email coverage is almost the same on both (roughly 44-49%), because an address that is not published anywhere cannot be found by looking harder. Choose Deep when you need to know who already takes paid integrations; choose Balanced when you only need contacts.",
            "default": "balanced"
          },
          "minSubscribers": {
            "title": "📈 Minimum subscribers",
            "minimum": 0,
            "type": "integer",
            "description": "Creators below this subscriber count are excluded. Use 0 for no minimum.",
            "default": 0
          },
          "maxSubscribers": {
            "title": "📉 Maximum subscribers",
            "minimum": 0,
            "type": "integer",
            "description": "Creators above this subscriber count are excluded. Use 0 for no maximum.",
            "default": 0
          },
          "minAverageViews": {
            "title": "👀 Minimum average recent views",
            "minimum": 0,
            "type": "integer",
            "description": "Creators below this average across analyzed recent videos are excluded.",
            "default": 0
          },
          "activeWithinDays": {
            "title": "📅 Uploaded within the last N days",
            "minimum": 0,
            "maximum": 3650,
            "type": "integer",
            "description": "Use 0 to keep creators regardless of their latest upload date.",
            "default": 0
          },
          "minSponsorReadinessScore": {
            "title": "🤝 Minimum Sponsor Readiness Score",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Keep creators scoring at or above this value. Use 0 to disable the filter.",
            "default": 0
          },
          "recentVideosToScan": {
            "title": "🎬 Recent videos to analyze",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Used to discover contacts, calculate activity and views, and identify sponsor signals. Leave empty to follow the selected depth."
          },
          "videoEnrichmentTimeoutSecs": {
            "title": "⏱️ Video analysis budget per creator",
            "minimum": 5,
            "maximum": 90,
            "type": "integer",
            "description": "Maximum total seconds for recent video details and the pinned comment. Partial data is retained. Values above 30 apply on Deep only; lighter depths clamp to 30."
          },
          "scanPinnedComment": {
            "title": "📌 Scan the newest video's pinned comment (legacy)",
            "type": "boolean",
            "description": "Kept for saved tasks and API callers that send true/false. Use pinnedCommentScanning instead."
          },
          "pinnedCommentScanning": {
            "title": "📌 Scan the newest video's pinned comment",
            "enum": [
              "auto",
              "on",
              "off"
            ],
            "type": "string",
            "description": "Creators often park the business address in a pinned comment. \"Follow the selected depth\" is the same as not setting it: Fast leaves it off, Balanced and Deep turn it on.",
            "default": "auto"
          },
          "scanWebsites": {
            "title": "🌐 Scan linked websites (legacy)",
            "type": "boolean",
            "description": "Kept for saved tasks and API callers that send true/false. Use websiteScanning instead."
          },
          "websiteScanning": {
            "title": "🌐 Scan linked websites",
            "enum": [
              "auto",
              "on",
              "off"
            ],
            "type": "string",
            "description": "The business address is usually published on the creator's own site, not on YouTube. \"Follow the selected depth\" is the same as not setting it: Fast leaves it off, Balanced and Deep turn it on.",
            "default": "auto"
          },
          "followSocialProfiles": {
            "title": "📱 Scan public social and link-in-bio pages (legacy)",
            "type": "boolean",
            "description": "Kept for saved tasks and API callers that send true/false. Use socialProfileScanning instead."
          },
          "socialProfileScanning": {
            "title": "📱 Scan public social and link-in-bio pages",
            "enum": [
              "auto",
              "on",
              "off"
            ],
            "type": "string",
            "description": "Linktree, Beacons and public profiles are the other place an address lives. \"Follow the selected depth\" is the same as not setting it: Fast leaves it off, Balanced and Deep turn it on.",
            "default": "auto"
          },
          "validateEmails": {
            "title": "✅ Validate email domains (legacy)",
            "type": "boolean",
            "description": "Kept for saved tasks and API callers that send true/false. Use emailValidation instead."
          },
          "emailValidation": {
            "title": "✅ Validate email domains",
            "enum": [
              "auto",
              "on",
              "off"
            ],
            "type": "string",
            "description": "Checks the domain can receive mail. A domain check, not a mailbox check. \"Follow the selected depth\" is the same as not setting it: Fast leaves it off, Balanced and Deep turn it on.",
            "default": "auto"
          },
          "maxExternalLinks": {
            "title": "🔗 Linked destinations per creator",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Maximum external websites or public profiles inspected for each creator. Leave empty to follow the selected depth."
          },
          "maxWebsitePages": {
            "title": "📄 Pages per linked website",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Maximum relevant pages inspected on each linked website. Leave empty to follow the selected depth."
          },
          "websiteScanTimeoutSecs": {
            "title": "⏱️ Website scan budget per creator",
            "minimum": 5,
            "maximum": 60,
            "type": "integer",
            "description": "Maximum total seconds for linked websites and profiles. Contacts found before the deadline are retained. Values above 30 apply on Deep only; lighter depths clamp to 30."
          },
          "maxConcurrency": {
            "title": "⚡ Creators processed in parallel",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Leave empty and the Actor picks a width that suits the depth you chose — 16 for Deep, 10 for Balanced, 8 for Fast. Deep waits on far more lookups per creator, so it benefits most from running wide. Set a number only to override that, for example when a custom proxy is rate-limited."
          },
          "requestsPerMinute": {
            "title": "⏱️ Source requests per minute",
            "minimum": 60,
            "maximum": 3000,
            "type": "integer",
            "description": "How fast the Actor may read from YouTube. Leave empty to follow the selected depth — 1,200 for Balanced and Deep, 900 for Fast. Measured: the source answers 950/minute with the same retry rate it gives 550, and going above that adds nothing. Lower it only if you bring a rate-limited proxy of your own."
          },
          "maxRetries": {
            "title": "🔁 Maximum request attempts",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Attempts allowed for temporary connection errors and retryable responses. Leave empty to follow the selected depth."
          },
          "requestTimeoutSecs": {
            "title": "⌛ Request timeout in seconds",
            "minimum": 10,
            "maximum": 90,
            "type": "integer",
            "description": "Maximum total time allowed for an individual request. Leave empty to follow the selected depth."
          },
          "proxyConfiguration": {
            "title": "🌐 Proxy configuration",
            "type": "object",
            "description": "Apify datacenter proxy is enabled by default to reduce expensive residential fallback traffic. You can disable or replace it.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}