# Indian Boxoffice Tracker (`monknwarriors/indian-boxoffice-tracker`) Actor

Real-time tracking of  movie ticket sales, box office collections, advance bookings, occupancy trends and theatrical performance across India's cinema market. Explore live insights by movie, language, city, state, cinema chain and release format with continuously updated trade dat

- **URL**: https://apify.com/monknwarriors/indian-boxoffice-tracker.md
- **Developed by:** [Monk N Warriors](https://apify.com/monknwarriors) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $50.00 / 1,000 movie day trackeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Indian Movie Box Office & Advance Booking Tracker

Track advance bookings and same-day box office performance for the Indian
movies you care about — shows, occupancy, gross revenue, and a city/cinema-
chain breakdown, delivered together in one place and updated daily for as
long as a title keeps running.

Built for trade analysts, distributors and exhibitors tracking a release's
rollout, and anyone who wants structured, per-movie box-office numbers
instead of checking a tracking site by hand every day.

### How to use it

1. Tell it which movies you want (a title is enough — "Mirzapur" catches
   every language and format release of "Mirzapur: The Movie").
2. Leave dates on **Exact dates** with `today`, or pick your own dates —
   see **Which dates to check** below.
3. Run it.

Don't know exactly which movies to track, or just want the full picture for
a date? Leave **Movies to track** empty and every movie with data that day
comes back.

### What you get

For every (movie, date) tracked, you get **one summary row, a city
breakdown, a cinema-chain breakdown, and every individual showtime** — all
together in the same dataset:

- **One summary row** — advance pre-sales and actual same-day results side
  by side for the whole movie.
- **One row per city** and **one row per cinema chain** — the same
  advance-vs-actual comparison, broken down.
- **One row per showtime** — venue, time, seats sold, gross, and a
  corrected occupancy percentage for every individual show that day.

All four share one flat column set (a value that doesn't apply to a row is
blank, never nested), so the dataset opens cleanly in Excel / CSV. In the
Apify Console, **filter the `row_type` column** (`SUMMARY`,
`CITY_BREAKDOWN`, `CHAIN_BREAKDOWN`, `SESSION`) to focus on one of the four
— the aggregate columns are blank on `SESSION` rows and the per-show
columns are blank on the rest, by design.

#### Example summary row

```json
{
  "row_type": "SUMMARY",
  "show_date": "20260907",
  "movie_title": "Mirzapur: The Movie", "format": "2D", "language": "Hindi",
  "advance_shows": 10259, "advance_gross": 48361354.49, "advance_occupancy_pct": 9.34,
  "actual_shows": 7111, "actual_gross": 75470274.25, "actual_occupancy_pct": 22.18
}
```

#### Example city breakdown row

```json
{
  "row_type": "CITY_BREAKDOWN",
  "show_date": "20260907",
  "movie_title": "Mirzapur: The Movie", "format": "2D", "language": "Hindi",
  "city": "Mumbai", "state": "Maharashtra",
  "advance_shows": 510, "advance_gross": 3261646.0, "advance_occupancy_pct": 9.96,
  "actual_shows": 344, "actual_gross": 3981776.0, "actual_occupancy_pct": 20.55
}
```

#### Example showtime row

```json
{
  "row_type": "SESSION",
  "show_date": "20260907",
  "movie_title": "Mirzapur: The Movie",
  "venue": "Ajanta Cinema Cinex: Borivali (W) Newly Renovated",
  "city": "Mumbai", "time": "12:00 PM",
  "total_seats": 334, "sold": 23, "occupancy_pct": 6.89, "gross": 4140.0,
  "source": "BOOKMYSHOW"
}
```

`source` reflects which of the two booking platforms feeding this data sold
that particular showtime's tickets — `BOOKMYSHOW` or `DISTRICT` — not where
this Actor gets its own data from.

### Which dates to check

- **Exact dates (default)** — say exactly which dates, or use the word
  `today` instead of a real date to always mean whatever day the run
  happens to execute on.
- **Every date in a range** — a start and end date (either can also be
  `today`).
- **Find every available date automatically** — scans backward and forward
  from today and keeps every date with data for your tracked movies,
  stopping once it runs several empty days in a row in a direction. Good
  for a movie you don't know the exact release date for, or for building a
  complete day-by-day history by re-running the actor daily.

Advance-booking data is only available a short window ahead of today, and
historical data only goes back so far — a date outside that window simply
returns nothing for it, at no cost to you.

### A note on movie titles

Some titles appear as more than one separate entry in the source data —
different language or format editions (`Mirzapur: The Movie` in Hindi,
Telugu, and Dolby Cinema all show up separately, correctly, since they're
genuinely different releases), but occasionally also true near-duplicates
of the very same release (e.g. `"4 Idiots"` and `"4 Idiots (Tamil)"` have
been observed as two separate entries for what looks like the same movie).
This Actor doesn't silently guess which duplicates to merge — it delivers
what the source reports, with `known_aliases` populated where a link
between title spellings is already known. If you're aggregating totals
across dates, check for this before summing.

### A note on occupancy

The source's own occupancy figure is not reliable (confirmed always reading
as unreasonably low or zero even for clearly busy shows). Every occupancy
number in this Actor's output — summary and session-level alike — is
computed directly from seats sold and total seats instead.

### Inputs at a glance

| Field | Required | Description |
|---|---|---|
| Movies to track | – | Leave empty to track every movie instead of specific titles |
| Which dates to check | – | Exact dates (default, supports `today`), a range, or automatic |

Full field list and defaults are in the Input tab.

### Pricing

This Actor uses **pay-per-event pricing** — you're charged once per
(movie, date) pair successfully tracked, whether that produces one showtime
or several thousand. A date with nothing for your tracked movies costs
nothing. See the Pricing tab for the current rate.

### Good to know

- Data is aggregated from publicly accessible booking and box-office
  information across major Indian cinema ticketing platforms — this Actor
  is independently built and is not affiliated with any film studio,
  production house, ticketing platform, cinema chain, or distributor.
- Figures reflect the source data as of the time it was collected —
  advance figures are captured the night before a show date, and same-day
  actuals are a closing snapshot for that date — not a live, second-by-
  second feed. Treat each run as a snapshot, not a live number.
- You're responsible for using the data in a way that complies with
  applicable law in your jurisdiction.

### Questions or issues?

Use the **Issues** tab on this Actor's page, or the developer contact link
on this page, if a run behaves unexpectedly or you'd like a feature added.

# Actor input Schema

## `movieTitles` (type: `array`):

Movie titles to track — match is case-insensitive and matches part of a title, so "Mirzapur" catches every language/format release of "Mirzapur: The Movie". Leave empty to track every movie with data on the selected date(s) instead of specific titles.

## `dateMode` (type: `string`):

"Exact dates" and "Date range" need you to say which dates. "Find every available date automatically" instead scans backward and forward from today and keeps whatever it finds — useful for a movie you don't know the exact release date for, or for building a full day-by-day history over repeated runs.

## `dates` (type: `array`):

Used only with "Exact dates". Each date as YYYY-MM-DD, e.g. 2026-09-06 — or the word "today" to always mean whatever day the run happens to execute on.

## `fromDate` (type: `string`):

Used only with "Every date in a range". YYYY-MM-DD, or "today".

## `toDate` (type: `string`):

Used only with "Every date in a range". YYYY-MM-DD, or "today".

## `maxDaysBack` (type: `integer`):

Used only with "Find every date automatically". A safety limit so a run can't scan indefinitely into the past.

## `maxDaysForward` (type: `integer`):

Used only with "Find every date automatically". A safety limit for scanning into the future — advance-booking data is only ever available a few days ahead of today.

## `emptyDateStreakLimit` (type: `integer`):

Used only with "Find every date automatically". Once this many consecutive days show none of your tracked movies, scanning in that direction stops.

## Actor input object example

```json
{
  "movieTitles": [],
  "dateMode": "EXPLICIT_DATES",
  "dates": [
    "today"
  ],
  "maxDaysBack": 60,
  "maxDaysForward": 7,
  "emptyDateStreakLimit": 3
}
```

# Actor output Schema

## `boxOfficeData` (type: `string`):

The default dataset. Filter row\_type to SUMMARY for the compact per-movie-per-date view, or SESSION for individual showtimes.

## `boxOfficeDataCsv` (type: `string`):

The same dataset as a spreadsheet-friendly CSV file.

## `runReport` (type: `string`):

Which tracked movies had data on which dates, which didn't, and why — one entry per (movie, date) pair checked.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "movieTitles": [],
    "dates": [
        "today"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("monknwarriors/indian-boxoffice-tracker").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "movieTitles": [],
    "dates": ["today"],
}

# Run the Actor and wait for it to finish
run = client.actor("monknwarriors/indian-boxoffice-tracker").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "movieTitles": [],
  "dates": [
    "today"
  ]
}' |
apify call monknwarriors/indian-boxoffice-tracker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,monknwarriors/indian-boxoffice-tracker"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/mOVvBHXGsws0WJQLc/builds/a53CQpjK05O8aBUSt/openapi.json
