JioHotstar Scraper - Movies, Shows, Sports & Episodes
Pricing
from $1.70 / 1,000 catalog records
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
Maintained by CommunityActor 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
incrementalModewatch: 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
intree).
Data You Get
Sample shape: values are illustrative placeholders, not from a live listing.
| field | example value |
|---|---|
| recordId | 1000158864 |
| kind | episode |
| title | Episode Title Example |
| showTitle | Sample Show Name |
| showId | 7326 |
| contentId | 1000158864 |
| url | https://www.hotstar.com/in/shows/sample-show/0000/episode-title-example/0000/watch |
| scrapedAt | 2026-01-01T00:00:00Z |
| changeType | NEW |
| changedFields | [] |
| firstSeenAt | 2026-01-01T00:00:00Z |
| lastSeenAt | 2026-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
| parameter | type | default | description |
|---|---|---|---|
| mode | select | sitemap | sitemap walks the site's own published catalog lists. url processes pasted catalog URLs. |
| mapType | select | EPISODE | Sitemap mode only: which catalog dataset to walk (EPISODE, SHOWS, MOVIE, SPORT, CLIPS, CHANNELS, GENRES, LANGUAGES and the rest of the site's own list). |
| urls | stringList | empty | URL mode only: hotstar catalog URLs. Each pasted URL returns one record. |
| maxItems | integer | 20 | The single cap: stop after collecting this many records. 0 = unlimited. |
| maxPages | integer | 0 | Cap 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. |
| resumeFromRunId | string | empty | Continue ONE interrupted run from its previous run id or dataset id. |
| incrementalMode | boolean | false | Recurring monitoring of the same catalog walk: later runs return only NEW and EXPIRED rows instead of the full snapshot. |
| stateKey | string | Optional name for the incremental state, so two differently configured walks never mix state. | |
| emitUnchanged | boolean | false | Incremental mode only: also return rows that have not changed, marked UNCHANGED. Returns, and bills, extra rows. |
| emitExpired | boolean | false | Incremental 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. |
| mcpConnectors | mcpConnector | Optional side channel export. | |
| notionParentPageUrl | string | Notion connector only. | |
| maxNotifyListings | integer | 50 | Cap on records written to each connector. |
| proxy | proxy | default | Leave 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.