YouTube Data Scraper Pro
Pricing
Pay per usage
Go to Apify Store
YouTube Data Scraper Pro
Extract, filter, analyze, and monitor publicly accessible YouTube videos, Shorts, channels, playlists, search results, and trending data.
YouTube Data Scraper Pro
Pricing
Pay per usage
Extract, filter, analyze, and monitor publicly accessible YouTube videos, Shorts, channels, playlists, search results, and trending data.
You can access the YouTube Data Scraper Pro programmatically from your own applications by using the Apify API. You can also choose the language preference from below. To use the Apify API, you’ll need an Apify account and your API token, found in API & Integrations in Apify Console.
{ "openapi": "3.0.1", "info": { "version": "0.0", "x-build-id": "VzmTBfs6Aai0sEaxJ" }, "servers": [ { "url": "https://api.apify.com/v2" } ], "paths": { "/acts/mfttt11~youtube-data-scraper-pro/run-sync-get-dataset-items": { "post": { "operationId": "run-sync-get-dataset-items-mfttt11-youtube-data-scraper-pro", "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/mfttt11~youtube-data-scraper-pro/runs": { "post": { "operationId": "runs-sync-mfttt11-youtube-data-scraper-pro", "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/mfttt11~youtube-data-scraper-pro/run-sync": { "post": { "operationId": "run-sync-mfttt11-youtube-data-scraper-pro", "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": { "keywords": { "title": "Search keywords", "maxItems": 1000, "type": "array", "description": "Keywords to search on YouTube. Works with the native country, language, upload date, duration, feature, and sort settings below.", "items": { "type": "string" } }, "searchQueries": { "title": "Advanced search queries", "maxItems": 1000, "type": "array", "description": "Optional per-query settings. Each object requires query and may override maxItems, gl, hl, uploadDate, duration, features, and sort.", "items": { "type": "object", "required": [ "query" ], "properties": { "query": { "title": "Query", "type": "string", "description": "YouTube search query for this entry." }, "maxItems": { "title": "Query result limit", "type": "integer", "description": "Optional per-query discovery limit; the global maximum still applies.", "minimum": 1, "maximum": 100000 }, "gl": { "title": "Query country", "type": "string", "description": "Optional two-letter country override for this query." }, "hl": { "title": "Query language", "type": "string", "description": "Optional YouTube language-code override for this query." }, "uploadDate": { "title": "Query upload date", "type": "string", "description": "Optional native upload-date filter override." }, "duration": { "title": "Query duration", "type": "string", "description": "Optional native duration filter override." }, "features": { "title": "Query features", "type": "array", "description": "Optional native feature filter list.", "items": { "type": "string" } }, "sort": { "title": "Query sort", "type": "string", "description": "Optional native result-order override." } } } }, "gl": { "title": "Country", "type": "string", "description": "Two-letter country code used by YouTube search and the popular feed, for example US, TR, or DE.", "default": "US" }, "hl": { "title": "Language", "type": "string", "description": "YouTube interface/result language code, for example en, tr, de, pt-BR, or zh-CN.", "default": "en" }, "uploadDate": { "title": "Upload date", "enum": [ "all", "hour", "today", "week", "month", "year" ], "type": "string", "description": "Native search filter. Applies to keyword and search-URL discovery.", "default": "all" }, "duration": { "title": "Video duration", "enum": [ "all", "short", "long" ], "type": "string", "description": "Native search duration filter. Exact seconds filters are available under Advanced filters.", "default": "all" }, "features": { "title": "Video features", "enum": [ "all", "4k", "hd", "live", "movie", "cc", "3d", "hdr", "location", "purchased", "subtitles", "vr180", "vr360" ], "type": "string", "description": "Native search feature. It does not filter direct video URLs. CC maps to public subtitle/caption filtering.", "default": "all" }, "sort": { "title": "Sort by", "enum": [ "relevance", "rating", "upload_date", "view_count" ], "type": "string", "description": "Native YouTube search ordering.", "default": "relevance" }, "maxItems": { "title": "Maximum number of results", "minimum": 1, "maximum": 100000, "type": "integer", "description": "Strict global cap for accepted video/Short results. Channel metadata, errors, and the run summary do not consume this cap.", "default": 20 }, "startUrls": { "title": "YouTube URLs", "maxItems": 10000, "type": "array", "description": "Public video, youtu.be, Shorts, search, channel, channel /videos, channel /shorts, playlist, or live URLs. API clients may send URL strings or URL objects.", "items": { "type": "object", "required": [ "url" ], "properties": { "url": { "type": "string", "title": "URL of a web page", "format": "uri" } } } }, "youtubeHandles": { "title": "YouTube handles", "maxItems": 1000, "type": "array", "description": "Channel handles such as @GoogleDevelopers or GoogleDevelopers.", "items": { "type": "string" } }, "getTrending": { "title": "Popular / trending feed", "type": "boolean", "description": "Request YouTube's current public popular feed for the selected country. When no stable Trending feed is exposed, output is explicitly labeled popular_fallback.", "default": false }, "mode": { "title": "Run mode", "enum": [ "auto", "search", "videos", "channels", "playlists", "shorts", "trending" ], "type": "string", "description": "Auto recognizes every supplied source. A specific mode limits processing to that source family.", "default": "auto" }, "includeShorts": { "title": "Include Shorts (compatibility alias)", "type": "boolean", "description": "Legacy compatibility alias. Explicit Shorts mode below takes precedence.", "default": true }, "shortsMode": { "title": "Shorts", "enum": [ "include", "exclude", "only" ], "type": "string", "description": "Post-processing filter across all discovered video sources.", "default": "include" }, "minViews": { "title": "Minimum views", "minimum": 0, "type": "integer", "description": "Post-processing filter for all videos." }, "maxViews": { "title": "Maximum views", "minimum": 0, "type": "integer", "description": "Post-processing filter for all videos." }, "minLikes": { "title": "Minimum likes", "minimum": 0, "type": "integer", "description": "Post-processing filter; hidden like counts follow Missing metric behavior." }, "minSubscribers": { "title": "Minimum subscribers", "minimum": 0, "type": "integer", "description": "Post-processing filter when public subscriber count is available." }, "maxSubscribers": { "title": "Maximum subscribers", "minimum": 0, "type": "integer", "description": "Post-processing filter when public subscriber count is available." }, "minDurationSeconds": { "title": "Minimum duration seconds", "minimum": 0, "type": "integer", "description": "Exact post-processing duration filter." }, "maxDurationSeconds": { "title": "Maximum duration seconds", "minimum": 0, "type": "integer", "description": "Exact post-processing duration filter." }, "publishedAfter": { "title": "Published after", "type": "string", "description": "Exact ISO date lower bound when publish date is available." }, "publishedBefore": { "title": "Published before", "type": "string", "description": "Exact ISO date upper bound when publish date is available." }, "mustContainKeywords": { "title": "Must contain keywords", "maxItems": 100, "type": "array", "description": "Every value must occur in title or description (case-insensitive).", "items": { "type": "string" } }, "mustNotContainKeywords": { "title": "Must not contain keywords", "maxItems": 100, "type": "array", "description": "Reject results containing any value in title or description.", "items": { "type": "string" } }, "missingMetricBehavior": { "title": "Missing metric behavior", "enum": [ "keep", "skip" ], "type": "string", "description": "Keep results with unavailable public metrics, or skip them when a corresponding numeric filter is active.", "default": "keep" }, "detailLevel": { "title": "Detail level", "enum": [ "basic", "standard", "full" ], "type": "string", "description": "Basic is lean; Standard includes normal metadata; Full enables extended structures when requested.", "default": "standard" }, "resultTypes": { "title": "Result types", "type": "array", "description": "Choose primary video/Short records and optional supporting channel/playlist records.", "items": { "type": "string", "enum": [ "video", "short", "channel", "playlist" ], "enumTitles": [ "Videos", "Shorts", "Channels", "Playlists" ] }, "default": [ "video", "short" ] }, "includeDescription": { "title": "Include descriptions", "type": "boolean", "description": "Include public video descriptions.", "default": true }, "includeChannelInfo": { "title": "Include channel info", "type": "boolean", "description": "Include public channel identity and subscriber information when available.", "default": true }, "includeCaptions": { "title": "Caption tracks", "type": "boolean", "description": "Include public caption track metadata; does not automatically fetch transcript text.", "default": false }, "transcriptMode": { "title": "Transcript", "enum": [ "none", "text", "segments" ], "type": "string", "description": "Optional transcript enrichment. Only publicly exposed transcripts are used; no access controls are bypassed.", "default": "none" }, "maxTranscriptCharacters": { "title": "Maximum transcript characters", "minimum": 1, "maximum": 1000000, "type": "integer", "description": "Safety cap per transcript; truncated outputs are labeled.", "default": 100000 }, "includeStreamingData": { "title": "Streaming technical metadata", "type": "boolean", "description": "Optional temporary format metadata. URLs may expire and are not permanent download links.", "default": false }, "includeThumbnails": { "title": "Thumbnails", "type": "boolean", "description": "Include public thumbnail variants and a best-thumbnail URL.", "default": true }, "includeChapters": { "title": "Chapters", "type": "boolean", "description": "Include public video chapters in Full mode when available.", "default": true }, "includeTags": { "title": "Tags and keywords", "type": "boolean", "description": "Include public tags/keywords when available.", "default": true }, "calculateViralScore": { "title": "Calculate viral score", "type": "boolean", "description": "Adds a documented 0–100 derived heuristic; it is not an official YouTube metric.", "default": false }, "channelAnalyticsSampleSize": { "title": "Channel analytics sample", "minimum": 1, "maximum": 100, "type": "integer", "description": "Maximum recent-video sample size for channel performance fields when public data permits calculation.", "default": 10 }, "detectLanguage": { "title": "Detect language", "type": "boolean", "description": "Use lightweight script/keyword detection without a heavy model.", "default": false }, "extractExternalLinks": { "title": "Extract external links", "type": "boolean", "description": "Normalize and deduplicate URLs explicitly present in public text.", "default": false }, "extractPublicContacts": { "title": "Extract public contacts", "type": "boolean", "description": "Extract only emails and social/website URLs explicitly present in public text. No email reveal, guessing, login, or CAPTCHA bypass.", "default": false }, "outputFormat": { "title": "Output format", "enum": [ "nested", "flat" ], "type": "string", "description": "Nested JSON or flat dot-path fields for CSV, Sheets, and Airtable.", "default": "nested" }, "compatibilityMode": { "title": "Compatibility output mode", "enum": [ "none", "reference" ], "type": "string", "description": "Reference keeps public contract aliases such as duration while retaining this product's original extended fields.", "default": "none" }, "fields": { "title": "Output fields", "maxItems": 200, "type": "array", "description": "Optional safe field picker using names such as title, url, views, or channel.name. Leave empty for all fields.", "items": { "type": "string" } }, "outputMapping": { "title": "Safe output mapping", "type": "object", "description": "Optional declarative mapping, for example channelName to $.channel.name. Only safe dot paths are accepted; no code executes." }, "incrementalMode": { "title": "Incremental monitoring", "type": "boolean", "description": "Remember stored video IDs under the chosen state key and emit only new primary results.", "default": false }, "incrementalStateKey": { "title": "Incremental state key", "maxLength": 100, "type": "string", "description": "Namespace that isolates state between Tasks or monitoring jobs.", "default": "default" }, "stopWhenKnownItemFound": { "title": "Stop source at a known item", "type": "boolean", "description": "Useful for newest-first channel monitoring.", "default": false }, "maxVideosPerChannel": { "title": "Maximum videos per channel", "minimum": 1, "maximum": 100000, "type": "integer", "description": "Per-channel discovery cap; global maxItems still wins." }, "maxVideosPerPlaylist": { "title": "Maximum videos per playlist", "minimum": 1, "maximum": 100000, "type": "integer", "description": "Per-playlist discovery cap; global maxItems still wins." }, "maxItemsPerQuery": { "title": "Maximum results per query", "minimum": 1, "maximum": 100000, "type": "integer", "description": "Per-search cap; global maxItems still wins." }, "distributionMode": { "title": "Source distribution", "enum": [ "balanced", "sequential" ], "type": "string", "description": "Balanced rotates between sources; sequential completes sources in their supplied order.", "default": "balanced" }, "duplicateStrategy": { "title": "Duplicate strategy", "enum": [ "merge", "first" ], "type": "string", "description": "Merge preserves discovered source attribution when possible; duplicates are never billed twice.", "default": "merge" }, "outputSort": { "title": "Output sorting", "enum": [ "none", "views_desc", "views_asc", "likes_desc", "publish_date_desc", "views_per_day_desc", "viral_score_desc" ], "type": "string", "description": "Optional global sort. None streams results with constant memory; other choices buffer only the accepted maxItems records.", "default": "none" }, "maxConcurrency": { "title": "Maximum concurrency", "description": "Use auto for adaptive concurrency (reduces after rate limits and cautiously increases while stable), or enter 1–32. Strict maxItems is serialized.", "default": "auto" }, "proxyConfiguration": { "title": "Proxy configuration", "type": "object", "description": "Optional Apify Proxy configuration. Credentials are never logged." }, "cookie": { "title": "Public browsing cookie (optional)", "type": "string", "description": "Optional encrypted public-browsing cookie. It is never logged and must not be used to bypass private, age, login, or other access controls." }, "saveErrors": { "title": "Save source errors", "type": "boolean", "description": "Store sanitized per-source failures in a separate named Dataset.", "default": true }, "debug": { "title": "Debug logging", "type": "boolean", "description": "Log filter reasons without secrets or credentials.", "default": false }, "dryRun": { "title": "Dry run", "type": "boolean", "description": "Discover and process without publishing or billing results. Experimental diagnostic option.", "default": false }, "enableExperimentalFeatures": { "title": "Experimental features", "type": "boolean", "description": "Reserved feature flag. Disabled by default and never changes core behavior unless explicitly enabled.", "default": false }, "customMapFunction": { "title": "Legacy custom map function (disabled)", "type": "string", "description": "Disabled by design: arbitrary JavaScript is unsafe. Use Output fields or Safe output mapping." } } }, "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 } } } } } } } } }}OpenAPI is a standard for designing and describing RESTful APIs, allowing developers to define API structure, endpoints, and data formats in a machine-readable way. It simplifies API development, integration, and documentation.
OpenAPI is effective when used with AI agents and GPTs by standardizing how these systems interact with various APIs, for reliable integrations and efficient communication.
By defining machine-readable API specifications, OpenAPI allows AI models like GPTs to understand and use varied data sources, improving accuracy. This accelerates development, reduces errors, and provides context-aware responses, making OpenAPI a core component for AI applications.
You can download the OpenAPI definitions for YouTube Data Scraper Pro from the options below:
If you’d like to learn more about how OpenAPI powers GPTs, read our blog post.
You can also check out our other API clients: