Rotten Tomatoes Scraper
Scrape Rotten Tomatoes movie and TV data: Tomatometer, Popcornmeter, critics consensus, cast, genres, runtime, release dates. No API key needed.
How it works
- 1Open it on Apify
Hit Run on Apify — it opens the tool in the cloud, no install.
- 2Set the inputs
Adjust
searchQueries,startUrls,mediaType(sensible defaults are pre-filled). - 3Click Run
The tool runs on Apify’s cloud and collects the data for you.
- 4Export the results
Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.
Pricing
$0.0046 per title = $4.6 per 1,000
| You are charged for | When | Price |
|---|---|---|
| Title returned | One movie or TV title returned in the dataset, with its scores and metadata. Titles that could not be resolved are not charged. | $0.0046 |
Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-09-20, and they are what you are actually charged.
Inputs
| Field | What it does | Type |
|---|---|---|
searchQueries | One movie or TV title per line. The actor searches Rotten Tomatoes the way its own search box does and reads the best match. When a title has been remade, add the year: "cats 2019" lands on the right page, "cats" may not. | array |
startUrls | Optional. Paste movie pages (https://www.rottentomatoes.com/m/anora), TV series pages (/tv/severance) or a single season (/tv/severance/s02). A /reviews or /cast-and-crew link is fine too, it is trimmed back to the title. Works alongside the field above. | array |
mediaType | Applies to the title search only. Pasted URLs are read as given. | string |
resultsPerQuery | How many search matches to read for each line above. Leave at 1 for a straight lookup. Raise it when a term is genuinely ambiguous and you want the alternatives too. You are charged per title returned. | integer |
maxItems | Hard cap on rows for the whole run, across every search term and URL. You are charged per title returned. | integer |
What you get
A structured dataset — each result includes fields like:
titleyearmediaTypetomatometeraudienceScorecriticsConsensusgenresruntimereleaseDateTheatersurlExport every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.
Related tools in Developer & Research Tools
Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.
GitHub Scraper
Search GitHub repos and users: stars, forks, language, topics, licence, plus user bio, company and followers. No token needed. $0.90 per 1,000 rows.
Stack Overflow / Stack Exchange Scraper
Search Stack Overflow and Stack Exchange by keyword or tag. Score, answer count, views, reputation and body text. $2 per 1,000 questions.
Package Registry Scraper (npm + PyPI)
Get npm and PyPI package metadata as JSON. Version, license, author, repo, keywords and npm monthly downloads. $2 per 1,000 packages.
arXiv Scraper
Search arXiv papers by title, author, abstract or category. Get full abstracts, authors, categories, DOI, dates and PDF links. $2 per 1,000 papers.
OpenAlex Scholarly Works Scraper
Search 250M+ OpenAlex papers with no API key. Get titles, authors, venue, year, citations, DOI, OA links and full abstracts. $2.00 per 1,000 papers.
Crossref Scholarly Works Scraper
Search 150M+ papers on Crossref: DOI, title, authors, journal, publisher, date, citations and abstract. No API key. $1.00 per 1,000 works.
Where this tool sits
- Categories
- Developer & Research Tools
Rotten Tomatoes Scraper: Tomatometer, Popcornmeter and credits for any title
Type film and TV titles, or paste Rotten Tomatoes URLs, and get one row per title: the Tomatometer and the Popcornmeter with their review counts, average ratings and fresh-rotten splits, the critics consensus paragraph, genres, age rating, runtime, release dates, US box office, cast and crew, the poster and the site's own ids.
The critic review texts are not in there. You get the scores, the counts and the consensus, plus a link to the reviews pages if you want to read them yourself.
| Input | Film or TV titles, or Rotten Tomatoes URLs |
| Output | One row per title |
| Ceiling | 2,000 titles per run |
| Account needed | None, and no API key |
| Price | $4.60 per 1,000 titles, flat on every plan |
🍅 What Rotten Tomatoes Scraper does
Give it titles and it searches the site the way its own search box does, then reads the page it lands on. Give it URLs and it reads exactly those. You can do both in one run, and a title that turns up in both is read once.
Titles are the safer input, not slugs. Rotten Tomatoes puts a year in the slug when something has been remade, and not where you would guess. /m/cats is not the 2019 musical, which lives at /m/cats_2019. /m/oppenheimer is not the Nolan film, which is /m/oppenheimer_2023. Casablanca sits at /m/1003707-casablanca. Searching oppenheimer lands on the right one.
Search has the opposite trap. breaking bad on the default setting comes back as *El Camino: A Breaking Bad Movie*, because the film outranks the series in the site's own relevance. Set Movies, TV, or both to TV when you mean the show, or paste /tv/breaking_bad.
📥 What you give it
{
"searchQueries": ["dune part two", "anora", "severance"],
"mediaType": "any",
"resultsPerQuery": 1,
"maxItems": 50
}
Or by URL:
{
"startUrls": [
"https://www.rottentomatoes.com/m/anora",
"https://www.rottentomatoes.com/tv/severance/s02"
]
}
| Field | Default | What it is |
|---|---|---|
searchQueries | none, box starts at dune part two and severance | One title per line. Add the year when a title has been remade: "cats 2019" lands right, "cats" may not. |
startUrls | none | Film pages, TV series pages or a single season like /tv/severance/s02. A /reviews or /cast-and-crew link is trimmed back to the title page, and a bare /m/anora works. |
mediaType | any | any, movies or tv. It steers the search only. Pasted URLs are read as given. |
resultsPerQuery | 1 | Search matches to read per line, up to 20. Raise it when a term is genuinely ambiguous and you want the alternatives too. |
maxItems | 50 | Rows for the whole run, across every search term and URL, up to 2,000. |
proxyConfiguration | none | Optional. Leave it alone unless you need the run to exit from a specific network of your own. |
📤 What you get back
A real row from a recent run, with the synopsis, the cast list and the poster URL cut short:
{
"url": "https://www.rottentomatoes.com/m/dune_part_two",
"slug": "dune_part_two",
"path": "/m/dune_part_two",
"mediaType": "Movie",
"isMovie": true,
"title": "Dune: Part Two",
"seriesTitle": null,
"year": 2024,
"tomatometer": 92,
"tomatometerSentiment": "POSITIVE",
"tomatometerCertifiedFresh": true,
"criticsAverageRating": 8.4,
"criticReviewCount": 466,
"criticsFreshCount": 429,
"criticsRottenCount": 37,
"topCriticsScore": 87,
"topCriticsReviewCount": 78,
"audienceScore": 95,
"audienceSentiment": "POSITIVE",
"audienceAverageRating": 4.7,
"audienceReviewCount": 2244,
"audienceRatingCountText": "5,000+ Verified Ratings",
"audienceLikedCount": 7468,
"audienceNotLikedCount": 412,
"criticsConsensus": "Visually thrilling and narratively epic, Dune: Part Two continues Denis Villeneuve's adaptation of the beloved sci-fi series in spectacular form.",
"synopsis": "\"Dune: Part Two\" will explore the mythic journey of Paul Atreides as he unites with Chani and the Fremen...",
"genres": ["Sci-Fi", "Adventure", "Action", "Fantasy", "Drama"],
"contentRating": "PG-13",
"originalLanguage": "English",
"runtime": "2h 46m",
"runtimeMinutes": 166,
"releaseDateTheaters": "Mar 1, 2024, Wide",
"rereleaseDateTheaters": null,
"releaseDateStreaming": "Apr 16, 2024",
"airDate": null,
"boxOfficeGrossUsa": "$282.0M",
"directors": ["Denis Villeneuve"],
"creators": [],
"writers": ["Denis Villeneuve", "Jon Spaihts"],
"producers": ["Mary Parent", "Cale Boyter", "Denis Villeneuve", "..."],
"distributor": "Warner Bros. Pictures",
"productionCompanies": ["Legendary Pictures"],
"network": null,
"soundMix": ["Dolby Atmos", "Dolby Digital"],
"aspectRatio": null,
"castAndCrew": [
{ "name": "Denis Villeneuve", "role": "Director", "url": "https://www.rottentomatoes.com/celebrity/denis-villeneuve" },
{ "name": "Timothée Chalamet", "role": "Paul Atreides", "url": "https://www.rottentomatoes.com/celebrity/timothee_chalamet" }
],
"numberOfSeasons": null,
"seasons": [],
"posterUrl": "https://resizing.flixster.com/Wk685cwvPp6E6fAnFc1noRRCtX0=/164x246/v2/...",
"criticReviewsUrl": "https://www.rottentomatoes.com/m/dune_part_two/reviews",
"audienceReviewsUrl": "https://www.rottentomatoes.com/m/dune_part_two/reviews/verified-audience",
"emsId": "cecd223d-a20d-3268-bbef-9a4c847c673d",
"rtId": "771566273",
"searchQuery": "dune part two",
"position": 1,
"scrapedAt": "2026-09-20T02:35:10.721Z"
}
| Field | What it is |
|---|---|
tomatometer, audienceScore | The two percentages. criticsAverageRating is out of 10 and audienceAverageRating out of 5, which is how the site keeps them. |
castAndCrew | The half-dozen people the title page puts in its Cast & Crew strip, each with a profile link. Not the full ensemble. |
directors, writers, producers, creators, distributor, productionCompanies | Complete, because they come from the page's own credits table. |
releaseDateTheaters, boxOfficeGrossUsa | As the site writes them: "Mar 1, 2024, Wide", "$282.0M". Not ISO dates, and box office is US gross only. |
seasons, numberOfSeasons, network | TV rows. seasons is a list of links, and this does not follow them on its own. |
searchQuery, position | Which of your lines found this row and where it ranked, so you can join back to your list. |
TV series pages carry an averaged score and no consensus. That is how the site presents them. Ask for one season, /tv/severance/s02, and you get a real Tomatometer, a real review count and that season's consensus.
🧾 Reading the output
| Row | How to spot it | Charged |
|---|---|---|
| A title | _sample and _diagnostic both absent | yes |
| The sample row | _sample: true | no |
| A diagnostic | _diagnostic: true and an errorCode | no |
Run it with no titles and no URLs and you get the one sample row. Every diagnostic row carries a hint alongside its code.
| Code | What it means |
|---|---|
NO_MATCH | The search found nothing for that term. Try the title as the site writes it, and add the year for a remake. |
NOT_FOUND | The URL is a 404. Usually the slug: a remade title carries its year. |
BAD_URL | Not a Rotten Tomatoes film or TV address. |
NOT_A_TITLE_PAGE | The address redirected to a list or a franchise hub rather than a title. |
NOT_SCORED_YET | The page exists but has no Tomatometer or Popcornmeter yet. Unreleased titles and stub pages look like this. |
SEARCH_FAILED | The site search was unreachable for that term. Re-running usually clears it. |
BLOCKED | The site would not serve that page this run. Re-running usually clears it. |
PARSE_FAILED | The page came back in a shape this could not read. Worth reporting. |
One bad title never stops the rest, and a diagnostic row never fails the run.
▶️ How to run it
1. Open Rotten Tomatoes Scraper and click Try for free. 2. Put titles into Titles to look up, one per line, or paste addresses into Rotten Tomatoes URLs. 3. Set Movies, TV, or both if a title is ambiguous. 4. Set Maximum titles, then click Start. 5. Download the dataset as JSON, CSV or Excel, or read it from the Apify API.
💰 How much does it cost?
$4.60 per 1,000 titles. Flat on every Apify plan, no volume tiers.
You pay per title row delivered. Diagnostic rows, a title the site has no match for, a page with no scores yet, a duplicate across your two input fields, and the sample row are all free.
💡 What people use it for
- Running a watchlist weekly and diffing on
tomatometerandcriticReviewCountto watch a score
settle after release.
- Pulling scores for a catalogue of titles to sit beside your own data.
- Comparing the critic score against the audience score across a genre or a studio.
- Checking a season at a time on a returning series, rather than the averaged series score.
- Grabbing consensus paragraphs and posters to build a listing page.
🚧 What it does not do
- No individual critic reviews. Scores, counts, the split and the consensus, yes. The quotes
from each named critic, no. criticReviewsUrl and audienceReviewsUrl point at those pages.
castAndCrewis the top of the credits. A 60-name ensemble is not in there.- TV series pages have an averaged score and no consensus. Ask for a season instead.
- Some titles simply have no scores, and come back as an uncharged
NOT_SCORED_YETrow rather
than a row full of nulls.
- Dates and box office arrive as the site writes them, not as ISO dates or numbers. Box office
is US gross, and missing on most TV and on anything without a wide US release.
- Search is a search, not an exact-match lookup. One line in, the best match out. Use the URL
when you need a guarantee.
- No episodes, showtimes or streaming prices.
seasonsgives you links to go deeper, and
nothing follows them for you.
🧭 Which ratings scraper do you need?
| If you want | Use |
|---|---|
| Critic and audience scores for film and TV | This one |
| IMDb ratings, credits and title data | IMDb Scraper |
| Book ratings and reviews | Goodreads Books Scraper |
| Game listings, prices and reviews | Steam Scraper |
❓ Questions people ask
Is there a public Rotten Tomatoes API? Not a self-serve one. This reads the public site and needs nothing from you but the titles.
Do I need a login? No. No account, no cookie, no key.
How do I look up one season rather than the whole show? Paste the season address, like https://www.rottentomatoes.com/tv/the_last_of_us/s01. Searching the show name gives you the series page and its averaged score.
What happens when a title does not exist? You get an uncharged diagnostic row with NO_MATCH or NOT_FOUND and a hint about the usual cause. The run still finishes.
Can I run it on a schedule? Yes. Scores and review counts move, so a weekly pass over a watchlist is the common use. scrapedAt is on every row for diffing.
Is scraping Rotten Tomatoes legal? These are public title pages. The site's terms govern what you may do with the content, so read them against your plan. Apify's write-up on scraping and the law is a starting point, and we are not lawyers.
🆘 If something breaks
Open the Issues tab on the actor page. Send the run ID and the titles or URLs you used. The errorCode on the diagnostic row usually names the problem on its own.