JioHotstar Scraper - Movies, Shows, Sports & Episodes avatar

JioHotstar Scraper - Movies, Shows, Sports & Episodes

Pricing

from $1.70 / 1,000 catalog records

Go to Apify Store
JioHotstar Scraper - Movies, Shows, Sports & Episodes

JioHotstar Scraper - Movies, Shows, Sports & Episodes

Scrape the JioHotstar catalog by content type or URL. Extract shows, movies, episodes, sports, clips and live content, with one structured record per catalog URL including title, show name, content IDs and source URL.

Pricing

from $1.70 / 1,000 catalog records

Rating

0.0

(0)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

11 days ago

Last modified

Categories

Share

JioHotstar Catalog Scraper

Scrape the JioHotstar catalog (hotstar.com, India's streaming platform) by catalog type or pasted content URL. The actor reads the catalog the platform itself publishes: one record per content URL, carrying the row kind (show, movie, episode, sport page, clip, channel, genre or language landing), the display titles shown in the URL, the show id and the content id. Sitemap mode walks one catalog dataset at a time (tens of thousands of rows per map file on the episode surface); URL mode turns any pasted catalog URL into its record. Recurring change tracking is first-class.

Why This Scraper?

  • One record per catalog URL with the kind, humanized title, show title, show id and content id, straight from the URLs the platform itself publishes for the index.
  • Walks the catalog by type: Episode, Shows, Movie, Sport landings, live pages, clips, channels, genres and languages are all selectable.
  • Reads the catalog anonymously: no account, no session, no cookie jar.
  • Every record is a stable, resolvable URL, so downstream consumers can fetch metadata or join against their own systems.
  • Recurring incrementalMode watch: the first run returns everything as NEW, later runs return only what the platform added (NEW) or dropped (EXPIRED) from the mapped catalog.
  • Resume from a previous run id to continue a long, capped crawl.
  • Optional MCP connector export to Notion, Linear, Airtable or Apify.

Scope and limits (read before running)

  • The catalog lane is ANONYMOUS and walking it needs no login.
  • Playback, personal rows (watchlist, continue-watching) and content metadata behind the platform's session gate (descriptions, durations, reviews) are OUT OF SCOPE: the platform's own pages carry an empty template for automated readers, and the session layer that unlocks the rich metadata is a phone-OTP-style signup that this actor does not fake (machine-blocked, same verdict class as other phone-OTP-gated platforms). If a temp-email signup ever gets accepted, the rich metadata lane can be folded in as a future attempt on top of the same record ids.
  • Keyword search is NOT a mode: the site's own robots.txt disallows its search paths, so search-by-keyword is not part of this actor's scope. Use the site's search page in a browser instead, then paste the URL here (URL mode accepts any catalog URL on hotstar.com's in tree).

Data You Get

Sample shape: values are illustrative placeholders, not from a live listing.

fieldexample value
recordId1000158864
kindepisode
titleEpisode Title Example
showTitleSample Show Name
showId7326
contentId1000158864
urlhttps://www.hotstar.com/in/shows/sample-show/0000/episode-title-example/0000/watch
scrapedAt2026-01-01T00:00:00Z
changeTypeNEW
changedFields[]
firstSeenAt2026-01-01T00:00:00Z
lastSeenAt2026-01-01T00:00:00Z

How to Use

Walk the episode surface by default (10 catalog maps, 50,000 URLs each, sliced by Max items):

{
"mode": "sitemap",
"mapType": "EPISODE",
"maxItems": 50
}

A different catalog type:

{
"mode": "sitemap",
"mapType": "SHOWS",
"maxItems": 100
}

Paste catalog URLs (URL mode; every pasted URL returns its one record):

{
"mode": "url",
"urls": [
"https://www.hotstar.com/in/shows/sample-show/0000",
"https://www.hotstar.com/in/movies/sample-movie/0000"
]
}

Daily change watch of a mapped catalog surface:

{
"mode": "sitemap",
"mapType": "EPISODE",
"maxItems": 0,
"incrementalMode": true,
"emitExpired": true
}

Input Parameters

parametertypedefaultdescription
modeselectsitemapsitemap walks the site's own published catalog lists. url processes pasted catalog URLs.
mapTypeselectEPISODESitemap mode only: which catalog dataset to walk (EPISODE, SHOWS, MOVIE, SPORT, CLIPS, CHANNELS, GENRES, LANGUAGES and the rest of the site's own list).
urlsstringListemptyURL mode only: hotstar catalog URLs. Each pasted URL returns one record.
maxItemsinteger20The single cap: stop after collecting this many records. 0 = unlimited.
maxPagesinteger0Cap on how many catalog map files (each up to 50,000 rows) to download per run. 0 = no map limit, the run then stops at Max items.
resumeFromRunIdstringemptyContinue ONE interrupted run from its previous run id or dataset id.
incrementalModebooleanfalseRecurring monitoring of the same catalog walk: later runs return only NEW and EXPIRED rows instead of the full snapshot.
stateKeystringOptional name for the incremental state, so two differently configured walks never mix state.
emitUnchangedbooleanfalseIncremental mode only: also return rows that have not changed, marked UNCHANGED. Returns, and bills, extra rows.
emitExpiredbooleanfalseIncremental mode only: also return rows the previous run tracked that are no longer in the mapped catalog. Only after a complete uncapped scan. Bills extra synthetic rows.
mcpConnectorsmcpConnectorOptional side channel export.
notionParentPageUrlstringNotion connector only.
maxNotifyListingsinteger50Cap on records written to each connector.
proxyproxydefaultLeave the default: the catalog answers an India connection, so the default pins an India exit.

Output Example

Sample shape, values are illustrative placeholders, not from a live listing.

{
"recordId": "1000158864",
"url": "https://www.hotstar.com/in/shows/sample-show/7326/sample-episode/1000158864/watch",
"kind": "episode",
"title": "Sample Episode",
"showTitle": "Sample Show",
"showId": "7326",
"contentId": "1000158864",
"scrapedAt": "2026-01-01T00:00:00Z"
}

Notes

  • Playback is out of scope, always: the actor reads catalog entries only, and never mints a session for the player route or any personal row.
  • Content metadata (description, duration, episode list) is not part of this actor: the catalog pages serve an empty template to automated readers and the metadata lane is session-gated. If a signup lane ever propagates a reusable session, a rich metadata lane on the same record ids is a future attempt.
  • The single catalog cap is Max items; when it cuts a walk short the next run can resume (Resume from a previous run) instead of re-scanning what is already there.

Send results into your apps (MCP connectors)

Optional: the run PIPEs a condensed summary per record (title, kind, URL) into a connector you authorize under Apify, Settings, API & Integrations. Notion gets a page per record under the parent page you set in notionParentPageUrl; the other connectors get a best-effort write or digest; each connector NEVER receives the full record, only a summary, and the complete record always stays in the dataset. Set mcpConnectors in the input to switch it on, and maxNotifyListings to cap how many records flow per run.

This never changes what the dataset returns: with no connector selected the export code never runs and behaviour is identical.