Rotten Tomatoes Scraper - Tomatometer & Audience Score Data avatar

Rotten Tomatoes Scraper - Tomatometer & Audience Score Data

Pricing

from $4.45 / 1,000 titles

Go to Apify Store
Rotten Tomatoes Scraper - Tomatometer & Audience Score Data

Rotten Tomatoes Scraper - Tomatometer & Audience Score Data

Rotten Tomatoes scraper for movie and TV ratings, by title or URL. Each row holds the Tomatometer and Popcornmeter with review counts and averages, the critics consensus, cast and crew, genres, runtime, release dates, US box office and poster. A single season works too. $4.60 per 1,000 titles.

Pricing

from $4.45 / 1,000 titles

Rating

0.0

(0)

Developer

Dami's Studio

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

a day ago

Last modified

Share

Rotten Tomatoes scraper for film and TV titles or Rotten Tomatoes URLs, one row per title: the Tomatometer and the Popcornmeter with their review counts, average ratings and fresh-rotten splits, the critics consensus, 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.

InputFilm or TV titles, or Rotten Tomatoes URLs
OutputOne row per title: both scores with counts and averages, consensus, genres, rating, runtime, dates, US box office, credits, poster, ids
Ceiling10,000 titles per run
Account neededNone, and no API key
Price$4.60 per 1,000 titles on the Free plan, a little less on paid plans. The free plan's $5 a month covers about 1,000
Using an AI agent?
Actordami_studio/rotten-tomatoes-scraper
Set one fieldsearchQueries, labelled "Titles to look up" in the Console
Cap the billmaxTotalChargeUsd on the run, for example 0.10: it never charges past that
MCP, one linkhttps://mcp.apify.com/?tools=fetch-actor-details,dami_studio/rotten-tomatoes-scraper
How oftenWeekly, or daily in a film's first weeks

🔍 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 data you get from each Rotten Tomatoes title

What you getField
Tomatometer, its sentiment and Certified Fresh flagtomatometer, tomatometerSentiment, tomatometerCertifiedFresh
Critic average, review count and fresh-rotten splitcriticsAverageRating, criticReviewCount, criticsFreshCount, criticsRottenCount
Top critics' score and counttopCriticsScore, topCriticsReviewCount
Popcornmeter, audience average, counts and liked splitaudienceScore, audienceAverageRating, audienceReviewCount, audienceRatingCountText, audienceLikedCount, audienceNotLikedCount
Whether the Popcornmeter carries its certified badge, and which audience it counts (VERIFIED or ALL)audienceCertified, audienceScoreType
The critics consensus and the synopsiscriticsConsensus, synopsis
Genres, age rating, language and runtimegenres, contentRating, originalLanguage, runtime, runtimeMinutes
Release, rerelease, streaming and air dates, US box office, as the site writes themreleaseDateTheaters, rereleaseDateTheaters, releaseDateStreaming, airDate, boxOfficeGrossUsa
The same dates as YYYY-MM-DD and box office as a number of dollarsreleaseDateTheatersIso, releaseDateStreamingIso, boxOfficeGrossUsaUsd
The release line in the page header, like "In Theaters Dec 18" or "Now Playing"releaseStatusText
Directors, writers, producers, creators, distributor, studiosdirectors, writers, producers, creators, distributor, productionCompanies
Sound mix and aspect ratiosoundMix, aspectRatio
Actor names, as a plain listcast
The top of the credits, with profile linkscastAndCrew
Optional: the people on the title's Cast & Crew page, with credit, character and profile linkfullCastAndCrew
Movie or TV, and the show's name on a season rowisMovie, seriesTitle
TV only: network and seasonsnetwork, numberOfSeasons, seasons
Poster, review page links and the site's idsposterUrl, criticReviewsUrl, audienceReviewsUrl, emsId, rtId

▶️ How to scrape Rotten Tomatoes

  1. Open Rotten Tomatoes Scraper and click Try for free.
  2. Put titles into Titles to look up, one per line, or paste links 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.

Run it with no titles and no URLs and you get one labelled sample row, which is not charged.

💰 How much does it cost to scrape Rotten Tomatoes?

$4.60 per 1,000 titles on the Free plan. Paid plans pay a little less: $4.55 on Starter, $4.50 on Scale and $4.45 on Business. On the free plan, the $5 Apify gives you each month covers about 1,000 titles.

You pay per title row delivered, and with Add a row for each season on, each season row is a title row. Reading the Cast & Crew page costs nothing extra. 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 not charged. Set a maximum cost on the run and it stops when it gets there.

📥 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"
]
}
FieldDefaultWhat it is
searchQueriesnone, the form starts with dune part two and severanceOne title per line. Add the year when a title has been remade: "cats 2019" lands right, "cats" may not.
startUrlsnoneFilm 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.
mediaTypeanyany, movies or tv. It steers the search only. Pasted URLs are read as given.
resultsPerQuery1Search matches to read per line, up to 20. Raise it when a term is genuinely ambiguous and you want the alternatives too.
maxItems50Rows for the whole run, across every search term and URL, season rows included, up to 10,000.
expandSeasonsfalseTurn it on and each TV series also gives one row per season, read from that season's own page. The series row stays. Each season row is charged as a title. A season you also pasted is read once.
fullCreditsfalseTurn it on to also read each title's Cast & Crew page into fullCastAndCrew. One more page per title and no extra charge. If that page can't be read, the title still comes back, with fullCastAndCrew: null.
proxyConfigurationnoneOptional, and not needed for a normal run.

📤 What you get back

Real run output

A real row from 17 October 2026, with the synopsis, the producer list, the credits 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-10-17T03:04:15.351Z",
"cast": ["Timothée Chalamet", "Zendaya", "Rebecca Ferguson", "Javier Bardem", "Josh Brolin"],
"audienceCertified": true,
"audienceScoreType": "VERIFIED",
"releaseStatusText": null,
"releaseDateTheatersIso": "2024-03-01",
"releaseDateStreamingIso": "2024-04-16",
"boxOfficeGrossUsaUsd": 282000000
}

With Read the Cast & Crew page on, the row ends with one more field, one entry per person:

"fullCastAndCrew": [
{ "name": "Denis Villeneuve", "role": "Director, Screenwriter, Producer", "character": null, "url": "https://www.rottentomatoes.com/celebrity/denis-villeneuve", "isCast": false, "isCrew": true },
{ "name": "Timothée Chalamet", "role": "Actor", "character": "Paul Atreides", "url": "https://www.rottentomatoes.com/celebrity/timothee_chalamet", "isCast": true, "isCrew": false }
]
FieldHow to read it
tomatometer, audienceScoreThe two percentages. criticsAverageRating is out of 10 and audienceAverageRating out of 5, which is how the site keeps them.
castAndCrewThe half-dozen people the title page puts in its Cast & Crew strip, each with a profile link. Not the full ensemble.
castActor names only, top-billed first. Directors, writers and producers are never in it.
fullCastAndCrewOnly there when you turn on Read the Cast & Crew page. role is the credit, character is filled for cast, and isCast / isCrew say which tab the site files the person under. null when that page could not be read.
directors, writers, producers, creators, distributor, productionCompaniesComplete, because they come from the page's own credits table.
releaseDateTheaters, boxOfficeGrossUsaAs the site writes them: "Mar 1, 2024, Wide", "$282.0M". Box office is US gross only.
releaseDateTheatersIso, releaseDateStreamingIso, boxOfficeGrossUsaUsdThe same values as "2024-03-01" and 282000000. null when the site's text is not a whole date or a dollar figure, so "Dec 2026" stays text only.
releaseStatusTextOnly when the page header shows a release line, like "In Theaters Dec 18". null on most released titles.
audienceScoreTypeVERIFIED when the Popcornmeter on the row is the site's verified-audience score, ALL when it is the all-audience one.
seasons, numberOfSeasons, networkTV rows. seasons is a list of links. Turn on Add a row for each season to get a row for each of them.
searchQuery, positionWhich 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. Or turn on Add a row for each season and get the series row plus one per season.

🧾 Reading the output

RowHow to spot itBilled
A title_sample and _diagnostic both absentyes
The sample row_sample: trueno
A diagnostic_diagnostic: true and an errorCodeno

Every diagnostic row carries a hint alongside its code.

CodeWhat it means
NO_MATCHThe search found nothing for that term. Try the title as the site writes it, and add the year for a remake.
NOT_FOUNDThe URL is a 404. Usually the slug: a remade title carries its year.
BAD_URLNot a Rotten Tomatoes film or TV address.
NOT_A_TITLE_PAGEThe link redirected to a list or a franchise hub rather than a title.
NOT_SCORED_YETThe page exists but has no Tomatometer or Popcornmeter yet. Unreleased titles and stub pages look like this.
SEARCH_FAILEDThe site search was unreachable for that term. Re-running usually clears it.
NOT_SERVEDThis request was not served this run. Re-run it later. Runs before 13 October 2026 wrote BLOCKED here.
PARSE_FAILEDThe page came back in a shape this could not read. Worth reporting.
TIME_LIMITThe run reached its time limit before it finished. The titles before it are delivered and charged, and titlesDelivered says how many. Give the run more time to get the rest.
UNEXPECTED_ERRORThe run stopped early on an unexpected error. The results before this row are kept.

One bad title never stops the rest, and a diagnostic row never fails the run, TIME_LIMIT included: a run the time limit stopped before any title came back still ends as succeeded, with an amber status message.

💡 What people use it for

  • Running a watchlist weekly and diffing on tomatometer and criticReviewCount to 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.

🚧 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.
  • castAndCrew is the top of the credits. A 60-name ensemble is not in there unless you turn on Read the Cast & Crew page, and even then you get what that page lists.
  • 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_YET row rather than a row full of nulls.
  • 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. Seasons come back as rows only when you turn on Add a row for each season.
  • It is not an official Rotten Tomatoes tool. Dami's Studio is independent and is not affiliated with or endorsed by Rotten Tomatoes, or by any other company named on this page.

🧭 Which film, TV, music or game scraper do you need?

If you wantUse
IMDb IDs for films, shows and peopleIMDb Search Scraper
Critic and audience scores for a film or showThis one
TV shows, full episode lists and main castTV Show Scraper
Artists, releases, recordings and labels, with their MBIDsMusicBrainz Scraper
Steam games, store details and player reviewsSteam Scraper
Goodreads ratings and rating counts for booksGoodreads Books Scraper
Wikidata Q-ids and claims for the same people and worksWikidata Scraper

❓ Questions people ask

Is there an official Rotten Tomatoes API?

Not one you can sign up for: Rotten Tomatoes reviews each request for its APIs and data feeds through a business proposal form. This reads the public title pages 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 link, like https://www.rottentomatoes.com/tv/the_last_of_us/s01. Searching the show name gives you the series page and its averaged score. Turn on Add a row for each season and the same search gives you the series and each of its seasons.

How do I get a Rotten Tomatoes dataset as a CSV?

Run it on your titles and download the results as CSV or Excel with the run's Export button. It holds today's scores, not a frozen file, up to 10,000 titles a run.

Why does the score differ from the one on the site?

Scores and counts keep moving as reviews come in, most of all in the weeks after a release. A row is a snapshot; scrapedAt says when it was taken.

Can I call it from code or connect it to an AI assistant?

The API tab has code for Python, JavaScript and the CLI. MCP clients like Claude and ChatGPT use https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/rotten-tomatoes-scraper; coding assistants can load our skill file. All three bill your Apify account at the same price.

# pip install apify-client
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("dami_studio/rotten-tomatoes-scraper").call(
run_input={
"searchQueries": ["dune part two"],
"maxItems": 10,
},
max_total_charge_usd=0.10, # the most this run may spend
)
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
if row.get("ok") is False: # free note rows, not results
continue
print((row.get("title") or "")[:80], row.get("tomatometer"), row.get("audienceScore"))

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 the legality of web scraping is a good 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.