# IMDB Reviews Scraper (`maximedupre/imdb`) Actor

Collect IMDb reviews from title review-page URLs. Get title details and people profiles from URLs or a keyword search, with available ratings, cast, credits, and dates.

- **URL**: https://apify.com/maximedupre/imdb.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** Developer tools, Automation, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.85 / 1,000 title details

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### 🎬 IMDb data for film research

Film researchers, catalog teams, and developers can collect IMDb title details, people profiles, and user reviews in structured rows. Find titles and people with IMDb URLs or one keyword search. Collect reviews from title review-page URLs. Use available ratings, cast, credits, review text, and dates to study films and audience feedback.

- Collect title and rating data with **[IMDb Scraper](https://apify.com/maximedupre/imdb/examples/imdb-scraper)** for your film catalog.
- Use **[IMDb Movie Scraper](https://apify.com/maximedupre/imdb/examples/imdb-movie-scraper)** to gather movie details for comparison.
- Save audience feedback with **[IMDb Reviews Scraper](https://apify.com/maximedupre/imdb/examples/imdb-reviews-scraper)** for review analysis.
- Look up people and career credits with **[IMDb Actor Scraper](https://apify.com/maximedupre/imdb/examples/imdb-actor-scraper)**.
- Find titles or people by keyword with **[IMDb Search Scraper](https://apify.com/maximedupre/imdb/examples/imdb-search-scraper)**.

#### 📦 Titles, people, and review rows

Each row has a `recordType`: `title`, `person`, or `review`. Fields appear when IMDb provides them. Title rows can include release details, genres, plots, ratings, cast, crew, companies, budgets, box office, awards, media links, and other title facts. Person rows can include birth details, a biography, professions, known-for titles, and credits. Review rows contain review text and can include ratings, authors, dates, vote counts, and spoiler flags.

The first eligible occurrence of each source item is saved. Later matches through another submitted URL are ignored and do not rewrite the saved row.

#### ▶️ Choose IMDb URLs or a keyword

1. Choose **IMDb URLs** or **Keyword search**.
2. Add URLs for titles, people, title review pages, searches, advanced searches, genres, or lists. For keyword search, enter one search phrase and choose titles, people, or both.
3. For title keyword results, choose a title category or keep all categories.
4. Set `maxItems` for a stop point. Leave it empty to return all available results until the source is exhausted.
5. Run the Actor and open the collected rows from the Output tab.

Only fields for your chosen method are used. Run separate searches when you need different keywords or category settings.

#### ⚙️ Input

**Input fields**

| Field | Type | What it does |
| --- | --- | --- |
| `discoveryMethod` | string | Required. Choose `urls` or `keyword`. The form starts with `urls`. |
| `startUrls` | array of objects | IMDb title, person, title review-page, search, advanced-search, genre, or list URLs. Each object has a `url`. Review-page URLs collect reviews; search, genre, and list URLs find titles and people. Used for `urls`. |
| `keyword` | string | Name or words to search for on IMDb. Required for `keyword`. |
| `entityCategory` | string | For keyword search, choose `titles`, `people`, or `all`. Default: `titles`. |
| `titleCategory` | string | Title filter for keyword search: `all`, `movie`, `tvSeries`, `tvEpisode`, `tvMiniSeries`, `tvMovie`, `tvSpecial`, `tvShort`, `short`, `video`, `videoGame`, `musicVideo`, `podcastSeries`, or `podcastEpisode`. Default: `all`. Ignored when searching only for people. |
| `maxItems` | integer | Optional positive limit across all submitted URLs or the keyword search. Each title, person, or review counts as one result. Leave it empty to return all available results until the source is exhausted. The form pre-fills `1`; there is no fixed upper bound. |

**Successful default input**

This public input is from a successful run:

```json
{
  "discoveryMethod": "urls",
  "startUrls": [
    {
      "url": "https://www.imdb.com/title/tt0111161/"
    }
  ],
  "entityCategory": "titles",
  "titleCategory": "all",
  "maxItems": 1
}
```

#### 🧾 Output

The `results` output link opens the dataset. The tables below cover the three row shapes. Nested fields use dotted paths; fields inside arrays describe each array entry. Optional source fields can be absent.

**Title rows**

| Field | Type | What it does |
| --- | --- | --- |
| `recordType` | string | Always `title`. |
| `imdbId` | string | IMDb title ID. |
| `title` | string | Title shown by IMDb. |
| `originalTitle` | string | Title in its original language. |
| `alternativeTitles` | array of objects | Other titles listed by IMDb. |
| `alternativeTitles.title` | string | Alternative title. |
| `alternativeTitles.country` | string | Country where the title is used. |
| `alternativeTitles.language` | string | Language of the title. |
| `alternativeTitles.note` | string | IMDb's note about the title. |
| `titleType` | string | IMDb title category. |
| `releaseYear` | integer | First release year. |
| `endYear` | integer | Last series year, when listed. |
| `releaseDates` | array of objects | Listed release dates. |
| `releaseDates.date` | string | Date as listed by IMDb. |
| `releaseDates.country` | string | Country or region of release. |
| `releaseDates.note` | string | IMDb's note about the release. |
| `runtimeMinutes` | number | Runtime in minutes. |
| `certifications` | array of objects | Listed age ratings. |
| `certifications.country` | string | Country or region for the rating. |
| `certifications.rating` | string | Listed certification. |
| `certifications.note` | string | IMDb's note about the certification. |
| `genres` | array of strings | Listed genres. |
| `plot` | string | Plot summary. |
| `plotKeywords` | array of strings | Listed plot keywords. |
| `countriesOfOrigin` | array of strings | Listed countries of origin. |
| `languages` | array of strings | Listed spoken languages. |
| `rating` | number | IMDb aggregate user rating. |
| `voteCount` | integer | Number of votes reported by IMDb. |
| `cast` | array of objects | Cast members and their characters. |
| `cast.imdbId` | string | Person's IMDb ID. |
| `cast.name` | string | Credited person's name. |
| `cast.characters` | array of strings | Characters played by the person. |
| `cast.job` | string | Listed credit or job. |
| `directors` | array of objects | Credited directors. |
| `directors.imdbId` | string | Person's IMDb ID. |
| `directors.name` | string | Credited person's name. |
| `directors.characters` | array of strings | Characters played by the person. |
| `directors.job` | string | Listed credit or job. |
| `writers` | array of objects | Credited writers. |
| `writers.imdbId` | string | Person's IMDb ID. |
| `writers.name` | string | Credited person's name. |
| `writers.characters` | array of strings | Characters played by the person. |
| `writers.job` | string | Listed credit or job. |
| `creators` | array of objects | Credited creators. |
| `creators.imdbId` | string | Person's IMDb ID. |
| `creators.name` | string | Credited person's name. |
| `creators.characters` | array of strings | Characters played by the person. |
| `creators.job` | string | Listed credit or job. |
| `productionStatus` | string | Listed production status. |
| `companies` | array of objects | Companies linked to the title. |
| `companies.name` | string | Company name. |
| `companies.role` | string | Company's role in the title. |
| `companies.imdbId` | string | IMDb company ID. |
| `budget` | object | Budget amount reported by IMDb. |
| `budget.amount` | number | Reported amount. |
| `budget.currency` | string | Currency code. |
| `boxOffice` | array of objects | Listed box-office amounts. |
| `boxOffice.amount` | number | Reported amount. |
| `boxOffice.currency` | string | Currency code. |
| `boxOffice.market` | string | Market covered by the amount. |
| `boxOffice.category` | string | Kind of box-office total. |
| `boxOffice.date` | string | Listed date or period. |
| `awards` | array of objects | Listed wins and nominations. |
| `awards.name` | string | Award or event name. |
| `awards.category` | string | Award category. |
| `awards.year` | integer | Award year. |
| `awards.result` | string | Win or nomination stated by IMDb. |
| `awards.recipients` | array of strings | Credited award recipients. |
| `media` | array of objects | Image and video references. |
| `media.url` | string | Source image or video URL. |
| `media.caption` | string | Caption shown by IMDb. |
| `media.mediaType` | string | `image` or `video`. |
| `trivia` | array of strings | Listed trivia entries. |
| `goofs` | array of strings | Listed goofs. |
| `quotes` | array of strings | Listed quotes. |
| `faqs` | array of objects | Listed questions and answers. |
| `faqs.question` | string | Question shown by IMDb. |
| `faqs.answer` | string | Answer shown by IMDb. |
| `crazyCredits` | array of strings | Listed unusual credits. |
| `alternateVersions` | array of strings | Listed alternate-version details. |
| `soundtracks` | array of objects | Listed soundtrack credits. |
| `soundtracks.title` | string | Song or piece title. |
| `soundtracks.credits` | array of strings | Listed credits for the piece. |
| `recommendations` | array of objects | Related titles recommended by IMDb. |
| `recommendations.imdbId` | string | IMDb ID of the linked title. |
| `recommendations.name` | string | Name or title shown by IMDb. |
| `connections` | array of objects | Listed title connections. |
| `connections.relationship` | string | Connection stated by IMDb. |
| `connections.title` | object | Linked title. |
| `connections.title.imdbId` | string | IMDb ID of the linked title. |
| `connections.title.name` | string | Name or title shown by IMDb. |
| `filmingLocations` | array of strings | Listed filming locations. |
| `technicalSpecifications` | array of objects | Listed technical details. |
| `technicalSpecifications.name` | string | Specification name. |
| `technicalSpecifications.values` | array of strings | Values listed for the specification. |

**Example title row**

This row from a successful run is shortened. Large cast and director arrays use `"..."`; other fields are omitted.

```json
{
  "recordType": "title",
  "imdbId": "tt0903747",
  "title": "Breaking Bad",
  "titleType": "tvSeries",
  "releaseYear": 2008,
  "endYear": 2013,
  "genres": [
    "Crime",
    "Drama",
    "Thriller"
  ],
  "rating": 9.5,
  "voteCount": 2685163,
  "plot": "A chemistry teacher diagnosed with inoperable lung cancer turns to manufacturing and selling methamphetamine with a former student to secure his family's future.",
  "cast": "...",
  "directors": "..."
}
```

**Person rows**

| Field | Type | What it does |
| --- | --- | --- |
| `recordType` | string | Always `person`. |
| `imdbId` | string | IMDb person ID. |
| `name` | string | Person's name shown by IMDb. |
| `birthName` | string | Person's birth name. |
| `birthDate` | string | Listed birth date. |
| `birthPlace` | string | Listed birthplace. |
| `deathDate` | string | Listed death date. |
| `deathPlace` | string | Listed place of death. |
| `biography` | string | Listed biography. |
| `professions` | array of strings | Listed professions. |
| `knownFor` | array of objects | Titles IMDb lists the person as known for. |
| `knownFor.imdbId` | string | IMDb ID of the linked title. |
| `knownFor.name` | string | Name or title shown by IMDb. |
| `credits` | array of objects | Person's career credits. |
| `credits.title` | object | Linked title. |
| `credits.title.imdbId` | string | IMDb ID of the linked title. |
| `credits.title.name` | string | Name or title shown by IMDb. |
| `credits.job` | string | Credited job. |
| `credits.characters` | array of strings | Characters played by the person. |
| `media` | array of objects | Image and video references. |
| `media.url` | string | Source image or video URL. |
| `media.caption` | string | Caption shown by IMDb. |
| `media.mediaType` | string | `image` or `video`. |

**Example person row**

This row from a successful run is shortened. The biography, credits, and media use `"..."`.

```json
{
  "recordType": "person",
  "imdbId": "nm0000033",
  "name": "Alfred Hitchcock",
  "birthName": "Alfred Joseph Hitchcock",
  "birthDate": "1899-08-13",
  "birthPlace": "Leytonstone, London, England, UK",
  "deathDate": "1980-04-29",
  "deathPlace": "Bel Air, Los Angeles, California, USA",
  "biography": "...",
  "professions": [
    "Director",
    "Producer",
    "Writer"
  ],
  "knownFor": [
    {
      "imdbId": "tt0054215",
      "name": "Psycho"
    },
    {
      "imdbId": "tt0052357",
      "name": "Vertigo"
    },
    {
      "imdbId": "tt0053125",
      "name": "North by Northwest"
    },
    {
      "imdbId": "tt0034248",
      "name": "Suspicion"
    }
  ],
  "credits": "...",
  "media": "..."
}
```

**Review rows**

| Field | Type | What it does |
| --- | --- | --- |
| `recordType` | string | Always `review`. |
| `imdbId` | string | IMDb review ID. |
| `titleId` | string | IMDb ID of the reviewed title. |
| `summary` | string | Review heading. |
| `text` | string | Full review text. |
| `rating` | number | Rating given by the reviewer. |
| `author` | object | Reviewer listed by IMDb. |
| `author.name` | string | Reviewer's displayed name. |
| `author.userId` | string | IMDb user ID of the reviewer. |
| `submissionDate` | string | Submission date reported by IMDb. |
| `helpfulVotes` | integer | Helpful votes reported by IMDb. |
| `unhelpfulVotes` | integer | Unhelpful votes reported by IMDb. |
| `containsSpoilers` | boolean | Whether IMDb marks the review as containing spoilers. |

**Example review row**

This complete row is from a successful run:

```json
{
  "recordType": "review",
  "imdbId": "rw6606154",
  "titleId": "tt0111161",
  "summary": "An incredible movie. One that lives with you.",
  "text": "It is no wonder that the film has such a high rating, it is quite literally breathtaking. What can I say that hasn't said before? Not much, it's the story, the acting, the premise, but most of all, this movie is about how it makes you feel. Sometimes you watch a film, and can't remember it days later, this film loves with you, once you've seen it, you don't forget.\n\nThe ultimate story of friendship, of hope, and of life, and overcoming adversity.\n\nI understand why so many class this as the best film of all time, it isn't mine, but I get it. If you haven't seen it, or haven't seen it for some time, you need to watch it, it's amazing. 10/10.",
  "rating": 10,
  "author": {
    "name": "Sleepin_Dragon",
    "userId": "ur15311310"
  },
  "submissionDate": "2021-02-17",
  "helpfulVotes": 659,
  "unhelpfulVotes": 52,
  "containsSpoilers": false
}
```

#### 💳 Pricing

This Actor uses pay-per-event pricing. A paid event applies when a matching title, person profile, or user review is successfully saved to your dataset, including titles and people found through discovery. Check Apify's pricing tab for the current price.

| Event | Charged outcome |
| --- | --- |
| Title details | One title with identifying and descriptive details saved to your dataset. |
| Person profile | One person profile with identifying and career details saved to your dataset. |
| User review | One individual user review saved to your dataset. |

#### 🔌 Integrations

Use the `results` link in the run output to open your dataset. Export the saved rows from Apify or fetch them through the Apify API for your own data workflow.

**Apify tutorial**

https://www.youtube.com/watch?v=bNACk1_S_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

#### ❓ FAQ

##### How do I collect reviews instead of title details?

Choose IMDb URLs and submit a title review-page URL such as `https://www.imdb.com/title/tt0111161/reviews/`. A title URL collects title details; a review-page URL collects audience reviews.

##### Does the title category filter apply to people?

No. It applies to title results in keyword search. It is ignored when you search only for people.

##### What happens if the same title appears through two URLs?

Only the first eligible occurrence is saved. Later matches are ignored and do not add data to that row.

##### What happens if I leave Maximum results empty?

The Actor returns all available results until the source is exhausted. Set a positive `maxItems` value to limit the total number of title, person, and review rows.

##### Will every title have every field?

No. Fields depend on what IMDb provides for that title. The Actor does not promise complete IMDb coverage, and media fields are references rather than downloaded files.

##### Can I use it to research the best movies of all time?

Yes. Submit a supported IMDb list or advanced-search URL for the titles you want to study, then compare available ratings and vote counts. For IMDb Top 250 or IMDb Top 100 research, use a supported list URL or submit the title URLs from your chosen list.

##### Is this the official IMDb website?

No. This is an Apify Actor that collects supported IMDb data. IMDb's website is `https://www.imdb.com/`. You do not need to supply an IMDb login for supported public data.

### 📝 Changelog

**v0.0** (03-10-2026)

- Initial release.

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~imdb/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Related Actors

- **[Letterboxd Film & Reviews Scraper](https://apify.com/maximedupre/letterboxd)**: Compare film details, ratings, and audience reviews from Letterboxd.
- **[Douban Movie Scraper: Reviews](https://apify.com/maximedupre/douban-scraper)**: Add Chinese film and TV ratings, metadata, and public reviews to your research.
- **[IMDB Advanced Scraper](https://apify.com/epctex/imdb-advanced-scraper)**: Explore IMDb title and artist data with search filters and mappings.
- **[IMDb Scraper](https://apify.com/dtrungtin/imdb-scraper)**: Collect IMDb movie, TV, and video game listings for catalog work.
- **[IMDB Reviews Scraper 🎬](https://apify.com/easyapi/imdb-reviews-scraper)**: Collect review text, author details, and helpfulness votes for audience research.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

## `discoveryMethod` (type: `string`):

Use IMDb URLs or search IMDb with a keyword.

## `startUrls` (type: `array`):

Add title, person, title review-page, search, advanced-search, genre, or list URLs. Review-page URLs collect reviews. Search, genre, and list URLs find titles and people.

## `keyword` (type: `string`):

Enter the name or words to search for on IMDb. Required for Keyword search.

## `entityCategory` (type: `string`):

Choose whether the keyword search finds titles, people, or both.

## `titleCategory` (type: `string`):

Choose a title category for Keyword search. This applies to title results and is ignored when searching only for people.

## `maxItems` (type: `integer`):

Stop after this many results across all submitted URLs or the keyword search. Leave blank to collect all available results until the source is exhausted. Each title, person, or review counts as one result.

## Actor input object example

```json
{
  "discoveryMethod": "urls",
  "startUrls": [
    {
      "url": "https://www.imdb.com/title/tt0111161/"
    }
  ],
  "entityCategory": "titles",
  "titleCategory": "all",
  "maxItems": 1
}
```

# Actor output Schema

## `results` (type: `string`):

Open the collected IMDb records.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "discoveryMethod": "urls",
    "startUrls": [
        {
            "url": "https://www.imdb.com/title/tt0111161/"
        }
    ],
    "maxItems": 1
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/imdb").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "discoveryMethod": "urls",
    "startUrls": [{ "url": "https://www.imdb.com/title/tt0111161/" }],
    "maxItems": 1,
}

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/imdb").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "discoveryMethod": "urls",
  "startUrls": [
    {
      "url": "https://www.imdb.com/title/tt0111161/"
    }
  ],
  "maxItems": 1
}' |
apify call maximedupre/imdb --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,maximedupre/imdb"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/Ugbxz0gnZigK9naJy/builds/f4aPpzgrCdLq6dnP8/openapi.json
