YouTube Movies & TV Catalog Scraper avatar

YouTube Movies & TV Catalog Scraper

Under maintenance

Pricing

Pay per usage

Go to Apify Store
YouTube Movies & TV Catalog Scraper

YouTube Movies & TV Catalog Scraper

Under maintenance

Scrapes YouTube's Movies & TV storefront for any region into a structured, daily-refreshed catalog: titles, credits, genres, full audio/subtitle language lists, direct links and availability.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Midar

Midar

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

16 days ago

Last modified

Share

Turns YouTube's Movies & TV storefront into a structured, daily-refreshable dataset — no official API for this exists. Point it at a region and get back every title currently listed there: names, credits, genres, full audio and subtitle language lists, direct links and live availability.

Why this instead of scraping the page yourself

  • No browser needed. Talks to YouTube's internal data API directly, so runs are fast and cheap.
  • Region-correct by construction. YouTube keys its entire catalog off the request's IP — including using different video IDs for the same film in different countries. This actor pairs the region parameter with a matching proxy automatically, a trap that's easy to get wrong by hand.
  • Full language lists, not summaries. Most scrapes stop at "English (+19 more)". This one reads the labelled per-title language table and returns every dubbed audio track and every subtitle language by name — with machine-translated subtitles kept separate from human-authored ones.
  • Stateful. Re-running the actor doesn't just re-scrape from scratch: it tracks which titles it has already seen, adds new releases, and re-checks older titles to catch ones that quietly dropped out of the catalog.

What you get (one record per title)

{
"youtubeId": "SttkHPYZAQo",
"title": "Project Hail Mary",
"originalTitle": "Project Hail Mary",
"year": 2026,
"genre": "Action & Adventure",
"genres": ["Action & Adventure", "Sci-Fi", "Drama"],
"directors": ["Christopher Miller", "Phil Lord"],
"cast": ["Ryan Gosling", "Sandra Hüller", "..."],
"studio": "MGM TVOD",
"durationSeconds": 9383,
"ageRating": "PG-13",
"offerType": "Buy or rent",
"directLink": "https://www.youtube.com/watch?v=SttkHPYZAQo",
"thumbnailUrl": "https://i.ytimg.com/vi_webp/SttkHPYZAQo/movieposter.webp",
"available": true,
"audioLanguages": ["English", "French (France)", "German", "..."],
"subtitleLanguages": ["English", "German", "Spanish", "..."],
"autoSubtitleLanguages": [],
"hasCzechAudio": false,
"hasCzechSubtitles": false
}

See the Output tab for the complete field reference.

A note on prices

YouTube hides numeric buy/rent prices from logged-out requests entirely — there's no way around that without a personal account's session, which this actor deliberately never uses (a shared credential would put every user's traffic on one Google account and risk it getting banned). offers is therefore always empty and priceRequiresAuth is always true. Everything else — catalog, credits, languages, live availability — is complete.

Input

FieldDefaultNotes
glUSRegion code. Must match the proxy country — see below.
hlenInterface language for titles/labels.
enrichDetailstrueFetch each title's page for credits, languages, synopsis.
recheckAvailabilitytrueRe-check known titles to catch ones removed from sale.
recheckIntervalDays5Spreads re-checks across runs instead of hitting everything every time.
forceRecheckAllfalseOne-off full refresh, ignoring the interval.
seedVideoIdsExtra YouTube video IDs to track alongside the storefront.
proxyConfigurationApify ProxyUse a proxy in the same country as gl. A mismatch silently returns the wrong region's catalog rather than erroring.

Running it daily

Add an Apify Schedule (e.g. once a day). Each run publishes a full snapshot to the dataset and persists its own catalog state, so new releases get added and stale/removed titles get flagged automatically over time.

Limitations

  • Prices are not available (see above).
  • YouTube's internal API can change its response shape without notice; parsing is defensive, but if a run ever returns near-zero results, that's the most likely cause — please open an issue.