Boxofficemojo Scraper avatar

Boxofficemojo Scraper

Pricing

from $3.80 / 1,000 results

Go to Apify Store
Boxofficemojo Scraper

Boxofficemojo Scraper

Get real box office data from Box Office Mojo: yearly and all-time domestic/worldwide charts, full per-movie financials (budget, distributor, MPAA, ROI, and a real country-by-country gross breakdown), or both at once with a whole year's top movies fully priced out - no titles to type in.

Pricing

from $3.80 / 1,000 results

Rating

0.0

(0)

Developer

Norm Data

Norm Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

Norm Data

Box Office Mojo Scraper

Get real box office data from Box Office Mojo with no login: a whole domestic/worldwide chart for one year or all-time, optionally with full per-movie financials added to every row - no titles to type in - or full financials for specific titles you do list.

Here is one real row (chart mode with includeMovieDetails, no title typed by the caller):

{
"rank": 1,
"title": "Inside Out 2",
"imdb_id": "tt22022452",
"domestic_distributor": "Walt Disney Studios Motion Pictures",
"budget": 200000000,
"mpaa": "PG",
"running_time_minutes": 96,
"genres": ["Adventure", "Animation", "Comedy", "Drama", "Family", "Fantasy", "Sport"],
"domestic_gross": 652980194,
"international_total": 1045883622,
"worldwide_total": 1698863816,
"roi": 8.494,
"profit": 1498863816,
"international_grosses": [
{ "country": "United Kingdom", "release_date": "Jun 12, 2024", "opening": 12400000, "gross": 85500000 },
{ "country": "Japan", "release_date": "Aug 1, 2024", "opening": 4200000, "gross": 36685528 }
],
"chart_area": "domestic",
"chart_period": "year",
"scraped_at": "2026-09-14T00:00:00.000Z"
}

What it does

Reads Box Office Mojo's own public pages directly and normalizes them into clean, flat rows.

  • Chart mode returns a full ranking: one year's domestic chart, one year's worldwide chart, or the all-time top 200 for either area. Domestic and worldwide are genuinely different rankings, not the same list with a label swapped. Turn on includeMovieDetails to add full financials to every row automatically - each row's own title is looked up for you, nothing to type in.
  • Movie mode takes a title or an IMDb ID and returns budget, distributor, MPAA rating, genres, running time, domestic/international/worldwide gross, computed ROI and profit, and a real country-by-country international gross breakdown - for specific titles you already know.

Missing source values are returned as null, never invented.

Why this scraper

  • The only one of the three real Box Office Mojo Actors on Apify that does both movie financials and chart rankings - and the only one that can combine them in one request. One competitor only does charts (worldwide, no domestic chart at all). The other only does movie financials, one title at a time (no chart mode at all, so no way to get a whole year's movies without already knowing every title). includeMovieDetails gets a year's top movies with full financials from one request.
  • A real country-by-country international breakdown, not a single number worked out by subtracting domestic from worldwide.
  • Reliable domestic/international/worldwide totals on every title, including classic movies with multiple theatrical re-releases, where an approach built only around the single-release country table returns nothing for the totals.
  • No API key, no login, no browser. Reads only what a normal visitor's page load reads.

How it compares

Checked directly against both real Box Office Mojo scrapers on Apify (their own declared input/output, not a guess):

CapabilityThis actorparseforge/boxofficemojo-world-scrapertrovevault/movie-box-office-tracker
Movie financials (budget, distributor, MPAA, opening, ROI/profit)yesnoyes
Real per-country international breakdownyesnono (derived as a subtraction)
Domestic yearly chartyesnono
Worldwide yearly chartyesyesno
All-time chart, both domestic and worldwideyesworldwide onlyno
Full financials for a whole chart, no titles typed inyesnono (one title at a time only)
Theater count on year chartsyesyesn/a
maxItems capyesyesn/a
Declared Apify dataset schemayesnot documentednot documented

Use cases

  • Film industry analysis. Budget, ROI, and profit across a slate of titles.
  • International distribution research. Real country-level opening and gross figures.
  • Box office journalism and content. A year's chart, or a title's full financial profile, ready to drop into a story or chart.
  • Studio and distributor benchmarking. Compare domestic vs. international performance by title, genre, or distributor.
  • Historical analysis. All-time domestic and worldwide top 200, compared side by side.

Quickstart

A year's top movies with full financials - no titles to type in:

{ "mode": "chart", "period": "year", "year": 2024, "area": "domestic", "includeMovieDetails": true }

A year's domestic chart, bare (just the ranking):

{ "mode": "chart", "period": "year", "year": 2024, "area": "domestic" }

A movie's full financials, by title:

{ "mode": "movie", "titles": ["Inside Out 2", "Dune: Part Two"] }

A movie by direct IMDb ID:

{ "mode": "movie", "imdbIds": ["tt22022452"] }

A year's worldwide chart:

{ "mode": "chart", "period": "year", "year": 2024, "area": "worldwide" }

The all-time worldwide top 200:

{ "mode": "chart", "period": "alltime", "area": "worldwide" }

Input reference

FieldApplies toDescription
maxItemsallCeiling on rows written.
modeallmovie or chart.
titles / imdbIdsmovieFree-text titles (resolved automatically) or direct IMDb IDs.
periodchartyear or alltime.
yearchart, period = yearThe year's chart to pull (1977 onward).
areachartdomestic or worldwide.
includeMovieDetailschartAdds full movie-mode fields to every chart row by looking up each row's own title - no titles typed in. Billed as its own event per row (real extra requests a bare chart pull doesn't need).

Output reference (selected)

FieldDescription
imdb_id / title / urlIdentity.
domestic_distributor / budget / mpaa / running_time_minutes / genresMovie profile.
domestic_opening / domestic_gross / international_total / worldwide_totalMovie mode financials.
roi / profitComputed: worldwide_total / budget and worldwide_total - budget.
international_grossesMovie mode: one entry per country with release date, opening, and gross.
rank / total_gross / worldwide_gross / lifetime_grossChart mode ranking fields (which one is populated depends on period/area).
theaters / distributor / release_date / is_estimatedChart mode, year charts.
chart_area / chart_periodWhich chart a row came from.
query / errorSet on an unresolved movie lookup.
scraped_atISO 8601 collection timestamp.

Run via API and CLI

curl -X POST "https://api.apify.com/v2/acts/USERNAME~boxofficemojo-scraper/run-sync-get-dataset-items?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"mode":"movie","titles":["Inside Out 2"]}'
$apify call USERNAME/boxofficemojo-scraper --input '{"mode":"chart","period":"year","year":2024,"area":"domestic"}'

Fetch results

curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"

Billing and limits

  • Pay per result. Billed per row written (one row per movie in movie mode; one row per chart entry in chart mode).
  • includeMovieDetails is billed as a separate event, once per chart row it successfully enriches - it costs real extra requests a bare chart pull doesn't need, so it isn't folded into the base row price. A row it fails to enrich is left as chart-only and not charged for the add-on.
  • No charge on failure. A run that produces zero rows fails with a message and is not billed.
  • An unresolved title/ID still writes one error: "not found" row and is billed as a base row.
  • Free Apify plans run the built-in 10-row sample only.

FAQ and troubleshooting

Do I need an API key? No. Box Office Mojo's own public pages are read directly, with no key and no login.

Why did my title search return "not found"? The title didn't resolve to a real movie. Try adding the release year to the title, or use imdbIds with the exact ID.

What if two different movies share the exact same title? This does happen (remakes, franchise reboots) - add the release year to the title (e.g. "Moana 2016") to disambiguate, or use imdbIds directly for guaranteed precision. This is a real limit of title-based lookup on any service, not something specific to this Actor.

Why does domestic mean something different in movie mode vs. chart mode? In movie mode, domestic_gross is that title's own real domestic total across every theatrical release it's ever had. In chart mode, domestic_gross only appears on a worldwide chart row, showing that title's domestic share of the year being charted.

Why are some international_grosses countries missing for older titles? Box Office Mojo itself only started tracking per-country detail for more recent releases - the domestic/international/ worldwide totals are still real and complete either way, just without a full per-country list on older titles.

Are domestic and worldwide charts the same list? No. They are genuinely different real rankings

  • a title's domestic hit and its worldwide hit are not always the same movie.

How current is the data? Read live from Box Office Mojo on every run. It is not cached.

Is this an official Box Office Mojo/IMDb tool? No. Independent, not affiliated with either. It reads only publicly available pages.

Local development

bun install
bun test # offline: chart/movie parsing, normalization (real fixtures)
bun run src/main.ts # reads storage/key_value_stores/default/INPUT.json