# BookMyShow Showtimes Scraper (`monknwarriors/bookmyshow-showtimes-scraper`) Actor

Finds every showtime for a movie across the cinemas in a city - dates, times, theatres, and ticket price ranges - even though BookMyShow releases each cinema's schedule on its own timetable.

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

## Pricing

from $0.50 / 1,000 showtime founds

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

## BookMyShow Movie Showtimes & Cinema Schedule Scraper

Find every showtime for a movie across the cinemas in a city — dates, times,
theatres, and ticket price ranges — without knowing in advance how far ahead
BookMyShow has released its schedule.

Built for cinema analysts, distributors tracking a release's rollout, and
anyone who wants to monitor showtimes and prices across a whole city instead
of checking cinema by cinema.

### Why "how many days ahead" isn't a setting here

BookMyShow doesn't release every cinema's schedule on the same timetable —
one chain might have showtimes up two weeks out, another only three days.
Rather than ask you to guess a number of days, this Actor's default mode
looks forward day by day and stops on its own once it stops finding new
showtimes. You can still give it exact dates or a date range if you already
know what you want.

### What you get

One row per showtime:

```json
{
  "event_title": "Second Innings",
  "region_name": "Mumbai",
  "venue_name": "PVR Dynamix Mall Juhu Mumbai",
  "show_datetime_ist": "2026-09-06T22:15:00+05:30",
  "min_price": 280.0,
  "max_price": 640.0,
  "price_class_count": 3,
  "price_classes": "RECLINER 640: 4 | PRIME 380: 61 | CLASSIC 280: 120",
  "session_attributes": "DOLBY ATMOS",
  "seat_layout_url": "https://in.bookmyshow.com/movies/mumbai/seat-layout/ET00512345/PVJH/48213/20260906"
}
```

(Example only — movie title, prices and codes are illustrative, not real listings.)

The dataset is **flat** — the per-category detail is one readable
`price_classes` column (`<category> <price>: <seats free>`, pipe-separated),
not a nested `categories` array, so it opens cleanly in Excel / CSV.

Every row also carries a `seat_layout_url` — paste that straight into the
**BookMyShow Cinema Seat Availability & Occupancy Scraper** to see exactly
which seats are free for that showtime.

### Don't know which movie to track? Leave Movies empty

You don't have to look up a movie code before running this Actor. Leave the
**Movies** field empty and it automatically discovers whatever BookMyShow is
currently recommending in each city — no code needed. Use **Currently-showing
movies per city** to control how many.

### Inputs at a glance

| Field | Required | What it does |
|---|---|---|
| Cities | ✓ | Short BookMyShow city names — BookMyShow covers well over a thousand towns and cities, not just major metros. Majors: `mumbai`, `national-capital-region-ncr` (Delhi-NCR), `bengaluru`, `hyderabad`, `chandigarh`, `ahmedabad`, `pune`, `chennai`, `kolkata`, `kochi` |
| Movies | – | BookMyShow movie codes. **Leave empty to automatically track whatever's currently showing** in each city instead of naming specific movies |
| Which dates to check | – | Find every date automatically (default), exact dates, or a range |
| Cinema detail lookup | – | Leave on Automatic — this is what makes prices available |

Full field list and defaults are in the Input tab.

### Pricing

This Actor uses **pay-per-event pricing** — you're charged per showtime
found, not for compute time or for empty searches. A date with no showtimes
yet, or a cinema BookMyShow couldn't be reached for, costs nothing. See the
Pricing tab for the current rate.

### Good to know

- Data reflects **public showtime and pricing information** shown to any
  BookMyShow visitor — no login or personal data is accessed.
- This Actor is **not affiliated with, endorsed by, or sponsored by
  BookMyShow**. It's an independent tool for aggregating publicly displayed
  showtime information.
- Schedules and prices change as cinemas update them — treat each run as a
  snapshot at the time it ran, not a live feed.
- Some fields (language, format, censor rating, cinema chain, ticket prices)
  are only filled in when BookMyShow's per-cinema lookup succeeds for that
  showtime — that's the default and normal case.
- You're responsible for using the data in a way that complies with
  BookMyShow's Terms of Service and 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

## `citySlugs` (type: `array`):

Which cities to check. Use the short city name from that city's BookMyShow web address — you can find it by opening BookMyShow, picking a city, and reading the address bar. BookMyShow covers well over a thousand towns and cities, not just the major ones, so type any city's slug even if it isn't listed here. The major metros are: mumbai, national-capital-region-ncr (Delhi-NCR), bengaluru, hyderabad, chandigarh, ahmedabad, pune, chennai, kolkata, kochi.

## `eventCodes` (type: `array`):

The BookMyShow code for each movie, found in its BookMyShow web address (the part that looks like ET00505635). Leave this empty to automatically track whatever's currently showing in each city instead of naming specific movies — see "Currently-showing movies per city" below to limit how many.

## `maxRecommendedMoviesPerCity` (type: `integer`):

Only used when Movies is left empty. Caps how many of BookMyShow's currently-recommended movies are checked per city, so a run doesn't grow unbounded.

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

BookMyShow does not release every cinema's schedule at once, so there's no single fixed number of days to check. "Find every date automatically" keeps looking day by day until it stops finding new showtimes — this is the right choice for most people.

## `maxDaysAhead` (type: `integer`):

A safety limit for "Find every date automatically", so a run can't keep going forever.

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

For "Find every date automatically" — once this many days in a row have no showtimes listed yet, the scraper assumes the schedule isn't released any further and stops.

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

Used only with "Only these exact dates". Each date as YYYYMMDD, e.g. 20260906.

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

Used only with "Every date in a range". YYYYMMDD, e.g. 20260906.

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

Used only with "Every date in a range". YYYYMMDD, e.g. 20260920.

## `fetchVenueDetail` (type: `string`):

Leave this on Automatic — it looks up each cinema individually, which is what makes ticket prices and language/format available on every row. "Never" is much faster but returns showtimes with no price information at all, since BookMyShow only exposes prices through that per-cinema lookup.

## `proxyConfiguration` (type: `object`):

Leave this on the default (Residential, India) — BookMyShow expects requests to come from an Indian IP address and blocks ones that don't. This actor only fetches small JSON responses (no images or video), so proxy usage stays low even on Residential.

## Actor input object example

```json
{
  "citySlugs": [
    "ahmedabad"
  ],
  "maxRecommendedMoviesPerCity": 5,
  "dateMode": "AUTO_DISCOVER",
  "maxDaysAhead": 30,
  "emptyDateStreakLimit": 2,
  "fetchVenueDetail": "AUTO",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "IN"
  }
}
```

# Actor output Schema

## `showtimes` (type: `string`):

The default dataset — one row per showtime: movie, cinema, date, time, ticket price range, and a ready-to-use seat-layout link.

## `showtimesCsv` (type: `string`):

The same data as a spreadsheet-friendly CSV file.

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

Which cities, movies and dates were checked, how many showtimes were found for each, and any errors encountered.

# 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 = {
    "citySlugs": [
        "ahmedabad"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("monknwarriors/bookmyshow-showtimes-scraper").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 = { "citySlugs": ["ahmedabad"] }

# Run the Actor and wait for it to finish
run = client.actor("monknwarriors/bookmyshow-showtimes-scraper").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 '{
  "citySlugs": [
    "ahmedabad"
  ]
}' |
apify call monknwarriors/bookmyshow-showtimes-scraper --silent --output-dataset

```

## MCP server setup

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

```

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/pQM7pcUwbuA7JPUZu/builds/IIAf1jcvOoF3hIzK7/openapi.json
