Skip to content

How to Scrape IMDb: Titles, Ratings, Cast and Box Office

Scrape IMDb titles by keyword, chart, list, search URL or filters and get rating, votes, Metascore, genres, runtime, cast, directors, plot, budget and box office as clean rows. No-code steps, curl, Python, Node.js and MCP, a real run and what IMDb's terms say.

Published
Reading time
9 min read
Pixel-art robot with an orange >_ on its terminal head pulls a film card with a poster and a gold star rating out of a cinema whose bulb-lit marquee carries the yellow IMDb logo, and drops it into a crate
In this article
  1. What data you can scrape from IMDb
  2. How to scrape IMDb without code
  3. Scrape IMDb with the API
  4. With an AI agent (MCP)
  5. A real run: everything IMDb finds for "blade runner"
  6. What it costs
  7. What to watch out for
  8. Is it legal to scrape IMDb?
  9. Why Scrape.ly for IMDb data
  10. FAQ
  11. Does IMDb have an API?
  12. Can you scrape IMDb with Python?
  13. How do I scrape the IMDb Top 250?
  14. Can I scrape every episode of a TV series?
  15. Can I scrape IMDb reviews?
  16. How much does it cost to scrape IMDb?

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

  1. Open the Actor's page in the Scrape.ly Store.
  2. Pick the preset Blade Runner titles, 5 results. "Try this input" loads it in the console. This is the exact input of our run:
json
{
  "searchQueries": ["blade runner"],
  "maxItems": 5,
  "maxCastMembers": 5
}
  1. Change the keyword, or paste IMDb URLs, and click Start.
  2. 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. expandEpisodes turns 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:

shell
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:

python
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):

javascript
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:

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
Text
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=false

What 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; popularityRank tells 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 cast stops 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.

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-1 with 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.

  • imdb
  • movies
  • tv shows
  • entertainment data
  • python
  • api

About the author

Actor publisher on the Scrape.ly Store

Posts, reels, comments and creator stats, from TikTok and YouTube to Weibo and Bluesky. For social listening, creator research and catching a trend while it is still small. A Scrapely studio.

//Keep reading\\

The internet is full of data.
Start owning yours.

Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes.

No credit card. No setup calls.