Rotten Tomatoes API
A Rotten Tomatoes API that browses the movie grids — streaming at home, in theaters, coming soon — by genre, MPAA rating and streaming service, sorted RT’s own way, and returns one row per movie: title, Tomatometer with its fresh/rotten sentiment and Certified Fresh badge, audience score with Verified Hot, the tile date parsed to ISO with its label, poster at tile and full size, trailer flag and URL. No key.
$0.001 per delivered movie · $2 free every month · Failed runs never billed
$ curl $QD/rottentomatoes_movies/run \
-H "Authorization: Bearer $QD_API_KEY" \
-d '{"list": "at_home", "sort": "popular", "max_results": 30}'
{ "status": "done", "count": 30,
"results": [
{
"id": "…",
"title": "…",
"tomatometer": …,
"tomatometer_sentiment": "…" } ],
"cost": 0.03 }
# 30 movies × $0.001 · nothing delivered, nothing charged
Try it
Rotten Tomatoes movies, running now
Change the input and run it against the live collector — nothing to install, no sign-up.
Run it from your own code, on your own inputs
Same collector, same rows — $2 of free API credit every month, no card.
What a Rotten Tomatoes API does
This reads Rotten Tomatoes’ own browse endpoint — a plain GET that answers without a browser and is the same payload the page renders from; the tiles are built out of exactly these keys, so the DOM can only ever lose fidelity. It was found by reading where the page’s “Load more” button gets its URL. The two obvious alternatives were rejected on evidence: the markup wraps the same numbers in a leading space and a percent sign with the sentiment split onto a sibling element, and the server-rendered schema.org list carries the Tomatometer but not the audience score, exists only on the first page and stops at 28 rows where the endpoint returns 30 and paginates.
Pagination is a cursor, not a page number, and the human browse page silently ignores it — it re-serves page one — so that route cannot paginate at all. The endpoint walked eight pages and 240 rows with zero repeats. The cursor is percent-encoded because base64 padding inside a query value is only legal by tolerance; RT accepts both spellings today, and this is the contract-correct one. The full-size poster was cross-checked against the schema.org image byte for byte.
Limits, in plain numbers
Everything that bounds one run of this collector. No hidden throttles.
Max per run
240 movies
Price
$0.001 / movie
Per 1,000
$1.00
Failed runs
Free zero rows, zero charge
Free every month
$2 no card
Rate limit
60 req/min on the free tier
What one movie looks like
Every delivered movie carries these fields. Nullable means the source did not publish it — the field stays empty instead of being guessed.
| Field | Type | What it holds |
|---|---|---|
rank | integer | 1-based position in Rotten Tomatoes' order for this response. |
id | string · nullable | Rotten Tomatoes media id (emsId) — stable across grids, and the de-duplication key. |
title | string · nullable | Movie title. |
tomatometer | integer · nullable | Tomatometer score 0–100; null when the movie has no critic score yet (0 is a real score). |
tomatometer_sentiment | string · nullable | "positive" (fresh) or "negative" (rotten); null when unrated. |
certified_fresh | boolean | True when Rotten Tomatoes marks the critic score Certified Fresh. |
audience_score | integer · nullable | Audience score 0–100; null when the movie has no audience score yet. |
audience_sentiment | string · nullable | "positive" or "negative" on the audience side; null when unrated. |
verified_hot | boolean | True when Rotten Tomatoes marks the audience score Verified Hot. |
release_date_text | string · nullable | The date line exactly as the tile shows it, e.g. "Streaming Aug 28, 2026" or "Opens Sep 04, 2026". |
release_date_label | string · nullable | What kind of date it is: Streaming, Opens, Opened, Re-releasing or Re-released. |
release_date | string · nullable | That date as ISO YYYY-MM-DD; null when the tile states no parseable date. |
release_year | integer · nullable | Year of release_date — the availability year, NOT the film's production year. |
poster | string · nullable | Poster image as served on the tile (164x246); null when Rotten Tomatoes has no artwork. |
poster_full | string · nullable | Full-size original poster embedded inside the tile URL; null when the URL is not in that nested form. |
has_trailer | boolean | True when Rotten Tomatoes holds a trailer for the movie. |
media_type | string · nullable | Rotten Tomatoes' own type for the row — "Movie" on every grid here. |
url | string · nullable | Movie page URL on rottentomatoes.com. |
Inputs
The whole request. Anything you leave out falls back to the default shown in the catalog.
| Input | Type | Required | What it does |
|---|---|---|---|
list | string | no | Which Rotten Tomatoes movie grid to browse. One of: at_home, in_theaters, coming_soon. |
sort | string | no | Rotten Tomatoes' own ordering. An unknown value is rejected rather than silently ignored. One of: popular, newest, a_z, critic_highest, critic_lowest, audience_highest, audience_lowest. |
genre | string | no | Narrow to one genre. Omit for every genre. One of: action, adventure, animation, anime, biography, comedy, crime, documentary, drama, entertainment, faith_and_spirituality, fantasy, game_show, lgbtq, health_and_wellness, history, holiday, horror, house_and_garden, kids_and_family, music, musical, mystery_and_thriller, nature, news, reality, romance, sci_fi, short, soap, special_interest, sports, stand_up, talk_show, travel, variety, war, western. |
rating | string | no | Narrow to one MPAA rating. One of: g, pg, pg_13, r, nc_17. |
streaming_on | string | no | Narrow to titles on one service — most useful with the at_home list. One of: netflix, prime-video, disney-plus, max, hulu, apple-tv-plus, peacock, paramount-plus, amc-plus, acorn-tv, fandango. |
country | string | no | Proxy exit geo (default us). Rotten Tomatoes serves its US catalogue. |
max_results | integer | no | How many movies to deliver at most (1–240). You pay only for delivered movies. |
Pricing
Rotten Tomatoes API pricing
$0.001 per delivered movie. A run that delivers nothing costs nothing: blocked pages, challenges and retries are on us, and the $2 monthly allowance covers about 2,000 movies before you spend anything.
Pay as you go
- $2 free credit / month
- 60 requests / min
- List unit prices
Starter
- $15 free credit / month
- 300 requests / min
- 10% off unit prices
Growth
- $50 free credit / month
- 600 requests / min
- 20% off unit prices
Scale
- $250 free credit / month
- 1,200 requests / min
- 30% off unit prices
Same wallet, same key and same $2 monthly allowance as every other Data API. Prices are launch pricing read live from the billing config — GET /v1/scraper/collectors returns the price your key actually pays.
Integration
One POST, typed rows
Base URL https://api.quanticdata.io/v1, Bearer auth, the same key as every other Data API. Endpoint: POST /v1/.
curl -X POST https://api.quanticdata.io/v1/scraper/collectors/rottentomatoes_movies/run \
-H "Authorization: Bearer $QD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"list":"at_home","sort":"popular","max_results":30}'
What people build with the Rotten Tomatoes API
Three shapes of work this endpoint was designed around.
Streaming catalog monitoring
What is on Netflix, Prime or Max this week with both scores, re-run to catch arrivals and departures.
Release calendars
Coming-soon and in-theaters grids with the tile date parsed to ISO and labelled, so a “streaming” date is never mistaken for a theatrical one.
Score analytics
Tomatometer and audience score side by side across a genre, with Certified Fresh and Verified Hot as flags.
Rotten Tomatoes API versus rolling your own
The differences that actually cost time when you build this in-house.
| DIY scraper | This collector | |
|---|---|---|
| Source | Tile text with spaces and percent signs | The endpoint the tiles are built from |
| Audience score | Missing from the schema.org list | Present on every row |
| Pagination | The browse page re-serves page one | Cursor pagination, 240 rows without a repeat |
| Dates | A string on the tile | ISO date plus the label saying what kind of date it is |
What people search for
Live autocomplete demand around Rotten Tomatoes movies, pulled with our own Keyword ideas collector.
Sources and standards
The platform documentation and standards this collector is built against — check any claim on this page against the primary source:
Does Rotten Tomatoes have an official API?
Its API is not open to the public. This collector reads the public browse endpoint that powers the site’s own grids and needs no key.
Can I search a title?
Not on this surface: it browses grids — at home, in theaters, coming soon — filtered by genre, rating and service. Title search is a different page.
What do sentiment and the badges mean?
tomatometer_sentiment is fresh or rotten as RT states it, certified_fresh is RT’s badge for critic consensus, and verified_hot is the equivalent audience badge. All three are fields, not parsed icons.
Why is the release date labelled?
Because the tile shows different kinds of dates — streaming date, theatrical date — and the label says which. The ISO parse is delivered beside the original text.
Is there a free Rotten Tomatoes API?
Every account gets $2 of credit every month with no card, which is about 2,000 delivered movies on this endpoint at $0.001 each. It renews monthly, and a run that delivers nothing is never billed — so a failed or blocked attempt does not eat the allowance.
How much does one run cost?
Multiply the rows you actually receive by $0.001. A run capped at 240 movies — the maximum for this collector — costs $0.24 if every row comes back, and less when the source has fewer. Volume tiers take up to 30% off, and GET /v1/scraper/collectors returns the price your key actually pays.
Run the Rotten Tomatoes API now
$2 of free credit every month, no card. Your key returns its own prices from GET /v1/scraper/collectors.