District Seat Availability Scraper
Pricing
from $50.00 / 1,000 seat map reads
District Seat Availability Scraper
Reads the live seat map for a District (district.in) movie showtime — every seat's row, number, price class and whether it's booked — and an occupancy summary per showtime.
Pricing
from $50.00 / 1,000 seat map reads
Rating
0.0
(0)
Developer
Monk N Warriors
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
District Cinema Seat Availability & Occupancy Scraper
Read the live seat map for a District (district.in) movie showtime — every seat's row, number, seating class, and whether it's free — plus an occupancy summary for the whole showtime.
Built to pair with the District Movie Showtimes & Cinema Schedule
Scraper: it puts a ready-made seat_layout_ref on every showtime row —
paste that column in here.
What you can do with it
- Measure true occupancy of a showtime, seat by seat, not just a rough count.
- Track how a show fills up over hours or days by re-running on the same showtimes.
- See which rows / classes sell first (front vs back, recliner vs classic).
- Spot block bookings and seating patterns.
- Locate a screen's wheelchair-accessible seats.
Input
| Field | Description |
|---|---|
| Showtimes | The showtimes to read. Paste the seat_layout_ref values — or whole rows — from the District Movie Showtimes Scraper's output. Up to 200 per run. |
| Level of detail | One grain per run: Seat by seat (default), Occupancy by price class, or Occupancy summary. |
| Retries per showtime / Pause between showtimes | Reliability knobs (defaults 2 and 1.5s). |
| Proxy | Residential, India by default — District only serves Indian IPs. |
Minimal input:
{"showtimes": [{"cinemaId": 1023314, "sessionId": "20668", "providerId": 1707,"moviecode": "OB7YWB", "movieFormatCode": "n5N_fTqZr8", "contentId": "181196","cityKey": "mumbai", "sessionDate": "2026-09-08", "screenFormat": "2D"}]}
Output
The dataset is flat — no nested columns — so it opens cleanly in Excel / Google Sheets. Pick one grain with the Level of detail input; the whole dataset is that grain, so every column has data (no empty columns to scroll past):
SEAT_MAP(default) — one row per physical seat: its class, price, row, number and status.OCCUPANCY_BY_CLASS— one row per seating class per showtime: occupied / available per class.OCCUPANCY_SUMMARY— one row per showtime: whole-screen occupancy.
Every row carries the movie / cinema / showtime identity — session_key,
movie_title, …, cinema_address, latitude, longitude, screen_name,
show_datetime_ist — read straight from District's response, so they're
filled even for a bare pipe-string reference. Each showtime's occupancy
also lands in the run's RUN_REPORT.
Two availability numbers — read this
District exposes seat availability two ways and they don't always agree:
- the seat-selection layout — the grid its booking page renders and you
click seats on. This scraper reads it:
seat_status/seat_is_openper seat, tallied intoseats_open/area_seats_open/class_seats_open. - District's own availability badge — the "N seats available" figure on
the showtime list. Carried as the
district_*columns (district_seats_available,district_class_available, …).
For most cinemas they match. For PVR / INOX, District marks the layout
representational (layout_is_representational = true) — the arrangement
may not match the auditorium and the two counts can differ by a handful of
seats. Both are in every row so you can compare and pick whichever your own
spot-check of district.in agrees with.
SEAT_MAP grain — one row per seat
{"row_type": "SEAT","session_key": "district|mumbai|225612|1023314|20693|2026-09-09","movie_title": "Hanuman Ansh","cinema_name": "MovieMax Andheri (E), Mumbai","show_datetime_ist": "2026-09-09T05:50:00+05:30","area_code": "MR", "area_label": "PRIME PLUS ROWS","area_price": 99.0, "area_currency": "INR","phys_row": "N","seat_number": "17","seat_status": "0","seat_kind": "standard","seat_is_open": true,"seat_is_taken": false,"is_accessible": false,"class_seats_open": 40, "class_seats_total": 44,"district_class_available": 40, "district_class_total": 44,"layout_is_representational": true}
| Field | Meaning |
|---|---|
area_code / area_label | Seating class, e.g. CLASSIC ROWS, PRIME ROWS, RECLIINER ROWS. |
area_price / area_currency | The price of this seat's ticket. |
phys_row / seat_number | The seat's row label and number. |
seat_status | District's raw code from the seat layout (see table). |
seat_kind | standard, occupied, wheelchair, wheelchair_companion, accessible, unknown. |
seat_is_open / seat_is_taken | Open (selectable) / taken in District's seat layout. |
is_accessible | Wheelchair / companion seat. |
class_seats_open / class_seats_total | This seat's class, tallied from the layout. |
district_class_available / district_class_total | District's own count for the class — compare with class_seats_open. |
layout_is_representational | true for PVR / INOX (layout approximate — see above). |
Seat status values (from District's messages map):
seat_status | Meaning |
|---|---|
0 | Open in the layout |
1 | Taken in the layout |
1000 | Wheelchair-reserved seat — bookable |
1001 | Wheelchair companion seat — bookable |
1002 | Accessibility seat — bookable |
OCCUPANCY_BY_CLASS grain — one row per class per showtime
{"row_type": "AREA","session_key": "district|mumbai|181196|1023314|20668|2026-09-08","area_code": "QR", "area_label": "PRIME ROWS","area_price": 300.0,"area_currency": "INR","area_in_seat_grid": true,"area_seats_total": 206,"area_seats_taken": 184,"area_seats_open": 22,"area_occupancy_pct": 89.32,"area_status_color": "Y","district_seats_available": 79, "district_seats_total": 206,"layout_is_representational": true}
| Field | Meaning |
|---|---|
area_code / area_label | The seating class. |
area_price / area_currency | Its ticket price. |
area_in_seat_grid | false for a class District priced but didn't return per-seat (PVR "PICTURE PERFECT") — the grid columns are then blank; district_* kept. |
area_seats_total / _taken / _open / _accessible | Tallied from District's seat layout. |
area_occupancy_pct | taken / total for the class, from the layout. |
area_status_color | That class's own fill indicator (G / Y / R / D). |
district_seats_available / district_seats_total | District's own count for the class — compare with the grid columns. |
OCCUPANCY_SUMMARY grain — one row per showtime
{"row_type": "SUMMARY","session_key": "district|mumbai|181196|1023314|20668|2026-09-08","screen_name": "SCREEN 3","seats_total": 330,"seats_taken": 271,"seats_open": 59,"seats_accessible": 2,"occupancy_pct": 82.12,"full_seats_total": 358,"class_count": 5,"classes_missing_from_grid": "PICTURE PERFECT","layout_is_representational": false,"district_seats_total": 358,"district_seats_available": 128,"district_occupancy_pct": 64.25}
| Field | Meaning |
|---|---|
seats_total | Seats in District's returned layout (full_seats_total reconciles any missing class). |
seats_taken / seats_open | Taken / open in the layout. seats_open includes bookable accessibility seats. |
seats_accessible | Wheelchair + companion seats. |
occupancy_pct | seats_taken / seats_total, from the layout. |
full_seats_total | Screen capacity — seats_total plus any class missing from the map. Matches the capacity District states. |
class_count | Number of AREA rows for this showtime. |
classes_missing_from_grid | Comma-separated names of classes District priced but didn't return per-seat. Empty string when none. |
district_seats_total / district_seats_available / district_occupancy_pct | District's own screen badge — compare with the layout counts above. |
screen_name | Auditorium label. |
Also written to the run's key-value store: RUN_REPORT — every
showtime requested, whether it succeeded, its seat count and occupancy, and
the reason for any failure.
Views
- Overview — the run's grain, key columns only (the Console hides the columns that don't apply).
Known limitation: PVR premium tiers
For PVR cinemas, the "PICTURE PERFECT" centre-block class is not
included in the seat map District returns. It still appears as an AREA row
(area_in_seat_grid = false, class and size known, per-seat availability
not) and is named in the SUMMARY row's classes_missing_from_grid. Every
other seat on the screen is covered — typically ~90%+. Non-PVR chains (INOX,
Cinepolis, MovieMax, Citylight, City Gold, …) return the full map.
Notes
- A showtime whose booking window has already closed is reported as a
failure in
RUN_REPORTand is not charged. - Seat data is live at the moment of capture — re-run to track fill-up.
- India only. Keep the proxy on Residential / India.
Pairs with
District Movie Showtimes & Cinema Schedule Scraper — its output has a
seat_layout_ref column ready to paste straight into this Actor's input.