{
  "openapi": "3.0.1",
  "info": {
    "title": "BookMyShow Scraper - Movies, Events & Showtimes",
    "description": "Scrape BookMyShow movies and live events by city, category or URL. Extract genres, languages, posters, synopsis, cast, show dates and cinema showtimes. Includes incremental monitoring, resume support and MCP export.",
    "version": "0.1",
    "x-build-id": "DJpS57jpo7YzZQIOq"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/abotapi~bookmyshow-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-abotapi-bookmyshow-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/abotapi~bookmyshow-scraper/runs": {
      "post": {
        "operationId": "runs-sync-abotapi-bookmyshow-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/abotapi~bookmyshow-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-abotapi-bookmyshow-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "required": [
          "mode"
        ],
        "properties": {
          "mode": {
            "title": "Mode",
            "enum": [
              "search",
              "url",
              "showtimes"
            ],
            "type": "string",
            "description": "Search walks a city and category listing (movies, events, plays, sports, activities). URL mode reads the exact BookMyShow pages you paste. Showtimes mode returns one row per showing (cinema, time, seat-category prices, availability) for the movies and dates you choose.",
            "default": "search"
          },
          "city": {
            "title": "City",
            "type": "string",
            "description": "Search mode: the city slug, for example mumbai, national-capital-region-ncr, bengaluru, hyderabad, chandigarh, ahmedabad, pune, chennai, kolkata, kochi (the top ten on the site). Any other city slug from the site works too.",
            "default": "mumbai"
          },
          "category": {
            "title": "Category",
            "enum": [
              "movies",
              "events",
              "plays",
              "sports",
              "activities"
            ],
            "type": "string",
            "description": "Search mode: which listing to walk in the city.",
            "default": "movies"
          },
          "languages": {
            "title": "Languages",
            "type": "string",
            "description": "Movies only: comma-separated language codes, for example hindi, english, tamil, telugu, malayalam, marathi, gujarati, punjabi, kannada, assamese, korean. Unknown codes are dropped rather than silently ignored."
          },
          "genres": {
            "title": "Genres",
            "type": "string",
            "description": "Movies only: comma-separated genre codes, for example action, drama, comedy, thriller, romantic, horror, sci-fi, animation, biography. Unknown codes are dropped rather than silently ignored."
          },
          "formats": {
            "title": "Formats",
            "type": "string",
            "description": "Movies only: comma-separated format codes, for example 2d, 3d, 4dx, imax-2d, 4dx-3d, epiq, mx4d, ice-3d. Unknown codes are dropped rather than silently ignored."
          },
          "urls": {
            "title": "BookMyShow links",
            "type": "array",
            "description": "URL mode: BookMyShow pages to read, one per line. Movie pages (/movies/...) and live-show pages (/events/...) are one record each; per-day showtimes pages (buytickets links) are one record per showing; city explore links (/explore/...) are walked like search mode. Multi-value supported.",
            "default": [
              "https://in.bookmyshow.com/explore/movies-mumbai",
              "https://in.bookmyshow.com/explore/events-mumbai",
              "https://in.bookmyshow.com/explore/plays-mumbai",
              "https://in.bookmyshow.com/explore/sports-mumbai",
              "https://in.bookmyshow.com/explore/activities-mumbai",
              "https://in.bookmyshow.com/explore/movies-mumbai?languages=hindi",
              "https://in.bookmyshow.com/explore/home/mumbai",
              "https://in.bookmyshow.com/movies/mumbai/clayface/ET00496545",
              "https://in.bookmyshow.com/movies/bengaluru/clayface/ET00496545",
              "https://in.bookmyshow.com/explore/upcoming-movies-mumbai",
              "https://in.bookmyshow.com/events/acrylic-painting-workshop/ET00499618",
              "https://in.bookmyshow.com/movies/mumbai/clayface/buytickets/ET00496545/20261110",
              "https://in.bookmyshow.com/movies/mumbai/clayface/buytickets/ET00496545",
              "https://in.bookmyshow.com/events/amit-kumar-live-in-mulund/et675ifet4",
              "https://in.bookmyshow.com/buytickets/clayface-mumbai/movie-mumbai-ET00496545-MT/20261111",
              "https://www.bookmyshow.com/explore/events-bengaluru"
            ],
            "items": {
              "type": "string"
            }
          },
          "eventCodes": {
            "title": "Movie codes (showtimes mode)",
            "type": "array",
            "description": "Showtimes mode: BookMyShow codes in any letter case, one per line, up to 25: ET followed by digits (movies, for example ET00451914) or the site's non-numeric form of ET plus 8 letters or digits; a full BookMyShow link containing a code also works. Showings are read from the movie showtimes pages, so use movie codes. Leave empty to use the top movies of the City's listing (see Movies to read). Ignored in search and URL mode.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "maxMovies": {
            "title": "Movies to read (showtimes mode)",
            "minimum": 1,
            "maximum": 25,
            "type": "integer",
            "description": "Showtimes mode with no movie codes: how many movies from the City's Now Showing listing to read, in listing order. 1 to 25.",
            "default": 3
          },
          "dateMode": {
            "title": "Date mode (showtimes mode)",
            "enum": [
              "AUTO_DISCOVER",
              "EXPLICIT_DATES",
              "DATE_RANGE"
            ],
            "type": "string",
            "description": "AUTO_DISCOVER reads today and the following days until the days run out (see Days ahead and Empty-day stop). EXPLICIT_DATES reads exactly the dates you list. DATE_RANGE reads every day from From date to To date inclusive; with no To date it reads the first day plus the 3 days after it (4 days).",
            "default": "AUTO_DISCOVER"
          },
          "dates": {
            "title": "Dates (explicit dates mode)",
            "type": "array",
            "description": "Explicit dates mode: dates as YYYY-MM-DD, one per line, up to 14. Past dates are skipped (the site only serves today onward).",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "fromDate": {
            "title": "From date (date range mode)",
            "type": "string",
            "description": "Date range mode: first day, YYYY-MM-DD. Defaults to today when empty or in the past."
          },
          "toDate": {
            "title": "To date (date range mode)",
            "type": "string",
            "description": "Date range mode: last day, YYYY-MM-DD, inclusive. The range is capped at 14 days. Empty reads the first day plus the 3 days after it (4 days)."
          },
          "maxDaysAhead": {
            "title": "Days ahead (auto discover)",
            "minimum": 1,
            "maximum": 14,
            "type": "integer",
            "description": "Auto discover: how many days after today to read at most. 1 to 14.",
            "default": 3
          },
          "emptyDateStreakLimit": {
            "title": "Empty-day stop (auto discover)",
            "minimum": 1,
            "maximum": 7,
            "type": "integer",
            "description": "Auto discover: stop a movie after this many days in a row with no showings. 1 to 7.",
            "default": 2
          },
          "maxItems": {
            "title": "Max items",
            "minimum": 0,
            "type": "integer",
            "description": "Stop after this many records (0 = no limit; the run then stops when the results run out).",
            "default": 20
          },
          "maxPages": {
            "title": "Max pages per scope",
            "minimum": 0,
            "type": "integer",
            "description": "Upper bound on pages walked per scope. This listing surface arrives in one server-rendered page, so the walk reads exactly that page; the bound exists for consistency and defaults wide open.",
            "default": 0
          },
          "fetchDetails": {
            "title": "Fetch details",
            "type": "boolean",
            "description": "Read each listing row's own page and merge the richer fields: synopsis, duration, censor, release date, formats, cast, director, and for live shows the date, time, venue details, price display and availability. Adds one detail read per returned row (a per-row surcharge applies); rows whose detail page is refused are pushed without the extra fields and never charged. Turn off to return the faster listing-shape rows only.",
            "default": true
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify Proxy settings. By default every run (Console, API or schedule) uses residential India exits: the lane the site reliably serves (measured). The groupless datacenter pool is refused on roughly half its exits.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ],
              "apifyProxyCountry": "IN"
            }
          },
          "resumeFromRunId": {
            "title": "Resume from a previous run",
            "type": "string",
            "description": "Paste a previous run ID or dataset ID to continue a large pull without returning records already collected there."
          },
          "incrementalMode": {
            "title": "Incremental changes for scheduled runs",
            "type": "boolean",
            "description": "Turn this on for daily or recurring monitoring. The first run returns every matching record as NEW. Later runs normally return only NEW, UPDATED and REAPPEARED records. The poster image URL is excluded from change detection (it embeds a live like-count), so a poster churn alone is not an UPDATED row. Turn on Emit unchanged or Emit expired only when you also want those rows returned (and billed).",
            "default": false
          },
          "stateKey": {
            "title": "State key (optional, incremental mode only)",
            "type": "string",
            "description": "Optional. Name this monitoring campaign to keep its state stable, or deliberately share state across differently configured runs. Leave empty to let the actor derive a key automatically from the search and link settings."
          },
          "emitUnchanged": {
            "title": "Emit unchanged records (incremental mode only)",
            "type": "boolean",
            "description": "Off by default. Turn on to also return records that have not changed since the last run, marked UNCHANGED. This returns, and bills, extra rows you already have.",
            "default": false
          },
          "emitExpired": {
            "title": "Emit expired records (incremental mode only)",
            "type": "boolean",
            "description": "Off by default. Turn on to also return records that were present in a previous run but are no longer found, marked EXPIRED. Only produced once a run has fully scanned the tracked search.",
            "default": false
          },
          "ignoreFieldsForChanges": {
            "title": "Ignore fields when detecting changes (incremental mode only)",
            "type": "array",
            "description": "Field names that must not count as a change in incremental mode, one per entry. Use dotted paths for nested values (for example showtimes.availability). A record whose only differences are in these fields stays UNCHANGED. The returned records still carry the live values. Leave empty to track every field.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "mcpConnectors": {
            "title": "Pipe results into your apps (optional)",
            "type": "array",
            "description": "Optionally send results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize one under Apify, Settings, API & Integrations, then select it here. Notion gets a rich page-per-item export; other connectors get a best-effort write or digest. Leave empty to skip; never changes the dataset output.",
            "items": {
              "type": "string"
            }
          },
          "notionParentPageUrl": {
            "title": "Notion parent page (Notion connector only)",
            "type": "string",
            "description": "URL or id of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors."
          },
          "maxNotifyListings": {
            "title": "Max items to export per connector",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Cap on items written to each connector per run. Does not affect the dataset.",
            "default": 50
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}