To scrape IMDb, give a scraper title URLs, a chart, a list, an advanced-search URL or plain keywords, and let it save each movie or show with its rating, votes, genres, runtime, cast, directors, plot and box office. On Scrape.ly that's the IMDb Scraper: no login, no browser, about a cent per title, and a thousand titles in well under a minute.
This guide covers the fields you get, the no-code steps, the same job in curl, Python, Node.js and through an AI agent, a real run from 26 October 2026 for "blade runner", and what IMDb's Conditions of Use say, which matters more here than for most sites.
What data you can scrape from IMDb
The IMDb Scraper saves one row per title: movies, TV series, mini-series, episodes, shorts, video games and similar. The main fields:
| Field | What it holds |
|---|---|
id, url, title, originalTitle | IMDb ID (tt…), page URL, title and original-language title |
type, typeLabel, year, endYear, releaseDate | Kind of title and its dates |
rating, ratingCount, metascore | IMDb rating, number of votes and Metacritic score |
topRank, popularityRank | Chart rank and current popularity rank, when ranked |
runtime, runtimeMinutes, certificate | Length and age rating (R, TV-MA …) |
genres, keywords, plot, tagline | Genres, optional plot keywords, plot summary and tagline |
directors, writers, creators, stars | Main credits by name |
cast | Credited cast with IMDb name IDs and character names |
countries, languages | Countries of origin and spoken languages |
budget, grossWorldwide, openingWeekendUs | Money fields as amount and currency, when IMDb lists them |
prestigiousAward, awardWins, awardNominations | Summary for the headline award (Oscar, Emmy …) |
series, seasons, episodeCount, posterUrl | Episode and season data, and the poster image |
title has no year suffix (use year), and genres, directors and stars are arrays. Person pages, user reviews, trivia, showtimes and full credits aren't part of this Actor.
How to scrape IMDb without code
- Open the Actor's page in the Scrape.ly Store.
- Pick the preset Blade Runner titles, 5 results. "Try this input" loads it in the console. This is the exact input of our run:
{
"searchQueries": ["blade runner"],
"maxItems": 5,
"maxCastMembers": 5
}- Change the keyword, or paste IMDb URLs, and click Start.
- Open the Titles view and export JSON, CSV, Excel or HTML.
The fields that matter most:
startUrls: title pages or bare IDs (tt0111161), charts such as Top 250 or Most Popular, lists (/list/ls…), advanced-search URLs and find pages.searchQueries: keywords, one per line.titleTypes,genres,minYear,maxYear,minRating,minVotes: filters. With no URLs or keywords, the filters alone run an IMDb advanced search, as in the Top 1990s drama movies preset.maxItems,maxItemsPerInput: the cap for the run and for each input. Duplicates found by two inputs are saved, and charged, once.maxCastMembers,includeKeywords,expandEpisodes: how much detail per title.expandEpisodesturns every series into all of its episodes, as in the Breaking Bad with episodes preset.
Scrape IMDb with the API
Create a token under Settings → API & Integrations in the dashboard and export it as SCRAPELY_TOKEN. Our run took 7 seconds, so the synchronous endpoint returns the titles in one call:
curl -X POST "https://api.scrape.ly/v2/actors/echofield~imdb-scraper/run-sync-get-dataset-items" \
-H "Authorization: Bearer $SCRAPELY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"searchQueries": ["blade runner"], "maxItems": 5, "maxCastMembers": 5}'The call waits up to 45 seconds and returns a JSON array; ?format=csv gives CSV. A thousand titles take 15 to 45 seconds, and 10,000 about 3 to 4 minutes, so for big jobs start the run with POST /v2/actors/echofield~imdb-scraper/runs, poll /v2/actor-runs/RUN_ID?waitForFinish=60 and read /v2/actor-runs/RUN_ID/dataset/items. A sync call that times out answers 408 while the run keeps going, so don't call again. The Actors API docs cover each step.
Python (pip install scrapely-client-python). This script runs a filter-only search, highly rated sci-fi movies with at least 100,000 votes, and prints them best first:
import os
from scrapely_client import ScrapelyClient
client = ScrapelyClient(os.environ["SCRAPELY_TOKEN"], api_url="https://api.scrape.ly")
run = client.actor("echofield/imdb-scraper").call(
run_input={
"titleTypes": ["movie"],
"genres": ["Sci-Fi"],
"minRating": 7.5,
"minVotes": 100000,
"sortBy": "rating",
"maxItems": 20,
"maxCastMembers": 0,
}
)
print(run.status) # SUCCEEDED, FAILED, ABORTED or TIMED-OUT
for t in client.dataset(run.default_dataset_id).iterate_items():
gross = (t.get("grossWorldwide") or {}).get("amount")
gross_text = f"${gross / 1e6:,.0f}M" if gross else "n/a"
print(f'{t["rating"] or "-":>4} {t["ratingCount"] or 0:>9,} {t["year"]} {t["title"]:40.40} gross {gross_text}')Twenty titles cost 20 × $0.01002 = $0.20 at list price.
Node.js (npm install scrapely-client):
import { ScrapelyClient } from 'scrapely-client';
const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN, baseUrl: 'https://api.scrape.ly' });
const run = await client.actor('echofield/imdb-scraper').call({
startUrls: [{ url: 'https://www.imdb.com/chart/tvmeter/' }],
maxItems: 10,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.map((t) => [t.listPosition, t.title, t.rating, t.ratingCount]));The Python client docs cover paging through large datasets; the JavaScript client works the same way.
With an AI agent (MCP)
Scrape.ly runs a hosted MCP server at https://mcp.scrape.ly. In Cursor, add it to ~/.cursor/mcp.json:
{
"mcpServers": {
"scrapely": {
"url": "https://mcp.scrape.ly",
"headers": { "Authorization": "Bearer YOUR_TOKEN" }
}
}
}In Claude Code, run claude mcp add --transport http scrapely https://mcp.scrape.ly and sign in with /mcp. Add ?actors=echofield/imdb-scraper to the URL to expose only this tool. Then ask: "Use scrapely to get IMDb's 10 most popular TV shows right now with rating, votes and genres, and tell me which genre shows up most." The agent calls call-actor and get-actor-output; our run below was started over MCP as well. The MCP docs list the other clients.
A real run: everything IMDb finds for "blade runner"
We ran the preset on 26 October 2026. It saved 5 titles in 7 seconds from 3 requests (22 KB), and its list price was $0.0501. Directors are listed as IMDb credits them, in their professional capacity:
| Title | Year | Type | Rating | Votes | Runtime | Genres | Directors |
|---|---|---|---|---|---|---|---|
| Blade Runner | 1982 | Movie | 8.1 | 895,127 | 1h 57m | Action, Drama, Sci-Fi, Thriller | Ridley Scott |
| Blade Runner 2049 | 2017 | Movie | 8.0 | 773,911 | 2h 44m | Action, Drama, Mystery, Sci-Fi, Thriller | Denis Villeneuve |
| Blade Runner 2099 | 2026 | TV Mini Series | — | 0 | — | Action, Drama, Mystery, Sci-Fi, Thriller | — |
| Blade Runner: Black Lotus | 2021 | TV Series | 6.3 | 4,144 | — | Animation, Action, Drama, Mystery, Sci-Fi, Thriller | — |
| 2036: Nexus Dawn | 2017 | Short | 6.9 | 9,725 | 6m | Short, Sci-Fi, Thriller | Luke Scott |
2026-10-26T14:25:28.783Z [Scrapely] Container started (setup 0.9 s)
2026-10-26T14:25:29.953Z [scrapely.actor] INFO [Scrapely] Initializing API storage for run 0e718110b2354c2ea
2026-10-26T14:25:30.113Z [scrapely.proxy_configuration] INFO Platform proxy access check succeeded.
2026-10-26T14:25:30.113Z [scrapely.actor] INFO Inputs 1, limit 5, filters none.
2026-10-26T14:25:33.937Z [scrapely.actor] INFO [Status message]: Saved 5 titles from 1 of 1 inputs. Reached the limit of 5.
2026-10-26T14:25:34.025Z [scrapely.actor] INFO Done. Saved 5 titles from 1 of 1 inputs. Reached the limit of 5. requests=3 bytes=22366 group=DATACENTER
2026-10-26T14:25:34.889Z [Scrapely] Container state: status=exited exitCode=0 oomKilled=falseWhat the five records show:
- A keyword search finds the whole franchise. Two films, a 2026 mini-series, an anime series and a 2017 short, each with its type, so you can filter to movies with one field.
- The sequel made more, the original rates higher. Blade Runner (1982) had a $28 million budget and $41.8 million in worldwide gross; Blade Runner 2049 cost $150 million and grossed $287.3 million. On ratings the original still leads, 8.1 from 895,127 votes against 8.0 from 773,911, and on Metascore too, 84 against 81.
- Popularity is a different signal. 2049 ranked 197 on IMDb's popularity chart, the new Blade Runner 2099 series 227 before it had a single rating, and the 1982 film 375. Rating tells you reputation;
popularityRanktells you who's being looked up this week. - Awards come summarized. The original had 2 Oscar nominations and no wins; 2049 won 2 Oscars.
- Empty means unknown, not zero. Blade Runner 2099 has
rating: null, no runtime and no director credited yet. Series rows carry no budget. Plan your columns for nulls.
What it costs
The Actor charges one event: $0.01002 per title saved ($10.02 per 1,000), with no start fee and platform usage (compute and proxy) included. Titles that fail a filter, duplicates and unknown IDs are free. Prices checked on 26 October 2026.
- Our run: 5 titles × $0.01002 = $0.0501 at list price. Our account was billed $0.0401 after its plan's 20% Store discount.
- The Top 250 movies: 250 × $0.01002 = $2.51.
- A weekly Most Popular TV check: 100 titles × 4 weeks = $4.01 a month.
The Free plan's $5 of monthly credit covers 499 titles. Set a maximum charge per run and the run stops cleanly when it reaches it; see pricing for plans.
What to watch out for
- Titles only. Person pages, user reviews, trivia, showtimes and the full credits list aren't included, and
caststops at 250 members per title, the most IMDb returns. - 10,000 results per search. That's IMDb's cap. For filter searches that match more, the Actor splits the search by release date; titles without a release date are skipped, and the order across slices becomes newest first.
- Some advanced-search options are ignored. Plot text, companies, filming locations, sound mixes and colors aren't supported; the run log notes it when it drops one.
- Money fields are mostly for films. Budget and box office appear when IMDb lists them, and unreleased titles have no rating.
- English text. Titles known only under another name may be found only by that name, so search for the local title if a keyword misses.
- Use the license that matches your use. For commercial products, read the next section before you collect anything.
Is it legal to scrape IMDb?
The Actor reads IMDb's public title data without logging in, and the rows hold facts about published films and shows. IMDb's own rules are strict, though, and you should read them before you start. Its Conditions of Use grant a license "to access and make personal and non-commercial use of the IMDb Services", and under "Robots and Screen Scraping" state: "You may not use data mining, robots, screen scraping, or similar data gathering and extraction tools on this site, except with our express written consent." They add that IMDb content "may not be reproduced, duplicated, copied, sold, resold, visited, or otherwise exploited for any commercial purpose without express written consent of IMDb", and point to IMDb's licensing department for permission.
IMDb offers two official routes. Its non-commercial datasets are daily TSV files for "personal and non-commercial use", and its help page on using IMDb data in software says the data "must be taken only from the datasets made available". For commercial use there's the IMDb API on AWS Data Exchange, which needs an AWS account and a subscription. If IMDb data powers a product you sell, license it.
Privacy is simpler than on social sites: the Actor collects no user reviews or reviewer names, and cast and crew appear in their credited, professional capacity. This is general information, not legal advice. Before any commercial use, get advice from a lawyer for your case.
Why Scrape.ly for IMDb data
- More fields than the free datasets. IMDb's seven non-commercial TSV files cover titles, alternative titles, crew, episodes, principals, ratings and names. They don't include plots, Metascores, certificates, budgets, box office or posters; the Actor's rows do.
- Exactly the slice you need. Instead of downloading whole TSV files and joining them on IDs, ask for one chart, one list, a keyword or a filter search and get finished rows in seconds.
- No markup to chase. Classic tutorials such as 33rd Square's parse generated class names like
sc-7ab21ed2-1with BeautifulSoup. The Actor reads IMDb's public data endpoint over plain HTTP, with no selectors, no browser and no CAPTCHA. - Ready for pipelines and agents. Schedule a weekly chart run, push rows to a sheet or webhook, or let an agent call it over MCP. Pair it with the Letterboxd Scraper for another view of film audiences, and see our guides to social media scraping and YouTube scraping for trailers and fan reaction.
FAQ
Does IMDb have an API?
Yes, for licensed use. The IMDb API is a GraphQL API available only through AWS Data Exchange, and it needs an AWS account and a subscription. For personal and non-commercial projects, IMDb publishes daily TSV datasets instead.
Can you scrape IMDb with Python?
Yes. Install scrapely-client-python, call echofield/imdb-scraper with keywords, URLs or filters, and iterate over the dataset, as in the sci-fi example above. The scraping runs in the cloud, so your script needs no requests, BeautifulSoup or browser code.
How do I scrape the IMDb Top 250?
Put https://www.imdb.com/chart/top/ in startUrls and set maxItems to 250. Each row carries listPosition and topRank. The full chart costs $2.51 at list price.
Can I scrape every episode of a TV series?
Yes. Turn on expandEpisodes and every series the run finds expands into all of its episodes, with season and episode numbers. Episodes count toward maxItems, so raise it for long-running shows.
Can I scrape IMDb reviews?
Not with this Actor. It covers titles, and it doesn't collect user reviews or reviewer names. Ratings, vote counts and Metascores are included for every title that has them.
How much does it cost to scrape IMDb?
$0.01002 per title, platform usage included, with no start fee: $10.02 per 1,000 titles. Our 5-title run cost $0.0501 at list price.




