JustWatch Streaming Availability Scraper
JustWatch Streaming Availability Scraper
Bulk-extracts streaming availability data from JustWatch's public GraphQL API. Returns one flat record per offer — which providers carry each title, in what video format (SD/HD/4K), at what price, with a direct deeplink URL.
Covers Netflix, Amazon Prime Video, Disney+, Max, Hulu, Apple TV+, Peacock, Paramount+, and 200+ more streaming services across 80+ countries.
What it does
Queries the popularTitles endpoint on JustWatch's public GraphQL API (apis.justwatch.com/graphql) for each country you specify. For every title it retrieves all current streaming offers, flattening the result into one record per offer (title × provider × format combination).
Each output record includes:
- Title metadata (name, type, release year, runtime, genres, IMDb/TMDB IDs and scores)
- Provider details (name, JustWatch package ID)
- Offer details (monetization type, format, retail price, currency, deeplink URL)
- Country queried
Use cases
- Streaming catalog analytics — which providers carry which content, by country
- Price tracking — monitor rental/purchase prices across services over time
- Affiliate deeplink monetization — get direct watch-now URLs for any title on any provider
- Availability-change monitoring — detect when titles enter or leave a streaming service
- Content licensing research — identify gaps in streaming coverage by region
Input
| Field | Type | Description | Default |
|---|---|---|---|
country |
string | ISO 3166-1 alpha-2 country code (e.g. US, GB, DE, AU, JP, BR) |
US |
providers |
string[] | Filter by JustWatch provider slug(s). Leave empty for all. nfx=Netflix, prv=Prime Video, dnp=Disney+, hlu=Hulu, hbm=Max, atp=Apple TV+, pct=Peacock, pbk=Paramount+ |
["nfx"] |
monetizationTypes |
string[] | Filter by monetization type(s). Options: FLATRATE, RENT, BUY, FREE, ADS, CINEMA. Leave empty for all. |
[] |
objectTypes |
string[] | Filter by content type. Options: MOVIE, SHOW. Leave empty for both. |
[] |
maxItems |
integer | Max offer records to collect. 0 = unlimited. |
0 |
Output
One record per streaming offer. A popular show may have 15–25 offers (different providers and quality tiers).
{
"title": "Succession",
"object_type": "SHOW",
"jw_entity_id": "ts78125",
"imdb_id": "tt7660850",
"tmdb_id": 76331,
"original_release_year": 2018,
"runtime_minutes": 60,
"genres": "drm",
"imdb_score": 8.9,
"imdb_votes": 501234,
"tmdb_popularity": 142.5,
"country": "US",
"provider_id": "cGF8MjQ=",
"provider_name": "Max",
"monetization_type": "FLATRATE",
"presentation_type": "HD",
"price_amount": null,
"price_currency": "USD",
"deeplink_url": "https://play.max.com/show/..."
}
Monetization types
| Type | Meaning |
|---|---|
FLATRATE |
Included in subscription (no extra charge) |
RENT |
Digital rental — price shown in price_amount |
BUY |
Digital purchase — price shown in price_amount |
FREE |
Free to watch (with or without ads) |
ADS |
Free with ads |
CINEMA |
In theaters |
Presentation types
| Type | Meaning |
|---|---|
SD |
Standard definition |
HD |
High definition |
_4K |
Ultra HD / 4K |
Notes
- One record per offer: a title with 3 providers × 2 formats = 6 records. This is intentional — each offer is independently actionable for affiliate links or price tracking.
- No authentication required: JustWatch's GraphQL API is fully public.
- Rate limiting: a 200ms courtesy delay is applied between page requests.
- Unlimited mode: set
maxItems: 0to crawl the full catalog for a country. The US catalog has ~200,000 titles.