# Changelog of Boxofficemojo Scraper (`normdata/boxofficemojo-scraper`) Actor

- **URL**: https://apify.com/normdata/boxofficemojo-scraper/changelog.md
- **Full Actor documentation**: https://apify.com/normdata/boxofficemojo-scraper.md

## Changelog

### 2026-09-14 (3)

- **Real bug found by Fabri, fixed:** chart rows carried fields from all three real chart shapes at
  once (year-domestic/year-worldwide/all-time), so every row showed several always-null fields
  belonging to the *other* two shapes - regardless of `includeMovieDetails`. `genre`/`budget`/
  `running_time` were also always carried as `null` on the year-domestic chart even though confirmed
  live to never have a value there (0/200 real rows) at all. Fixed: `normalizeChartRow` now returns
  only the fields the requested shape actually has - a bare chart row has zero null fields. Real
  budget/genre/runtime now come only from `includeMovieDetails` or movie mode, never as dead nulls.
- 43 unit tests, 98 `expect()` calls.

### 2026-09-14 (2)

- **Real usability issues found by Fabri, fixed before any wider use:**
  - The free-plan demo (`mode: "movie"`, one title) only ever produced 1 row despite promising a
    10-row sample, since movie mode is a lookup (one row per title queried), not a bulk listing.
  - Movie mode itself had no way to get several movies' full financials without typing every title
    in one by one - there was no bulk/discovery path into the richer movie-mode data.
  - `dataset_schema.json`'s `url` field was declared `"format": "text"` instead of `"format":
    "link"`, so it rendered as plain text instead of a clickable link in the dataset table view.
- **Fix: new `includeMovieDetails` option on chart mode.** Looks up each chart row's own real title
  text and merges in full movie-mode fields (budget, distributor, MPAA, genres, ROI, country
  breakdown) - a whole year's top movies with full financials from one request, no titles ever typed
  in. Billed as its own `movie-details-fetched` event per successfully-enriched row, mirroring the
  same real-extra-cost reasoning as Yandex Realty Scraper's `includePriceHistory`.
  - Free-plan demo preset switched to `chart` + `includeMovieDetails: true` (10 rows, current year,
    domestic) - now genuinely demonstrates both modes' data with zero manual title entry.
  - `url` format fixed to `"link"`.
- 42 unit tests, 93 `expect()` calls (up from 35/75) covering the new merge logic and demo preset.
- Verified live end to end: the new default demo preset run against the real site returns 10 real,
  fully-enriched current-year rows with correct budget/MPAA/IMDb ID/worldwide totals.

### 2026-09-14

- Initial build: movie mode (financials + real per-country international breakdown) and chart mode
  (year/all-time, domestic/worldwide).
- Confirmed live, contrary to the initial assumption, that `/year/{year}/` has no real `?area=`
  toggle - it silently returns identical domestic-only data for every value tried. The real
  worldwide yearly chart is a separate URL path, `/year/world/{year}/`, with its own column set.
  Fixed before shipping rather than assumed.
- **Real bug found and fixed before shipping:** domestic/international/worldwide totals were
  originally derived by summing the per-country breakdown table. Titles with theatrical re-releases
  (verified on several real classics) render an "All Releases" aggregate page whose per-country table
  is entirely absent, so every total came back `null` for any such title. Fixed by reading the page's
  own "Domestic / International / Worldwide" summary block directly - confirmed present and correct
  on both single-release and multi-release pages, including matching real, independently-known
  figures (Inside Out 2, Dark Knight, Shawshank Redemption, The Lion King (1994), Inception).
  `international_grosses` (the per-country detail) is kept separately and can legitimately be empty
  on a multi-release title without affecting the headline totals.
- 26 unit tests, 63 `expect()` calls, against real saved fixtures (a single-release title, a
  multi-release/re-release title, both year-chart shapes, both all-time-chart areas).
- Full live field audit: movie mode (18 fields) and chart mode (22 fields) diffed to zero
  discrepancy against `dataset_schema.json`.
