{
  "openapi": "3.0.1",
  "info": {
    "title": "91Wheels Scraper: Bikes, Scooters, Prices & Dealers",
    "description": "Scrape 91wheels.com, India's motorcycle and scooter portal: 530 models with specs, 947 variant spec sheets, on-road prices for 1,053 cities, 19,000+ dealer showrooms and upcoming launches, plus monitoring of new models and price changes. No login, no proxy. Export JSON, CSV or Excel.",
    "version": "0.1",
    "x-build-id": "XOHGPRj4srgaVdYdZ"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/recordsdata~91wheels-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-recordsdata-91wheels-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/recordsdata~91wheels-scraper/runs": {
      "post": {
        "operationId": "runs-sync-recordsdata-91wheels-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/recordsdata~91wheels-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-recordsdata-91wheels-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",
        "properties": {
          "mode": {
            "title": "What to collect",
            "enum": [
              "models",
              "variants",
              "on-road-prices",
              "dealers",
              "urls"
            ],
            "type": "string",
            "description": "models = one row per motorcycle or scooter model with specs, price range, ratings and photos. variants = one row per variant with the full spec sheet and ex-showroom price. on-road-prices = one row per variant and city with RTO, insurance and on-road price. dealers = authorised showrooms by brand and city. urls = 91wheels.com addresses you list.",
            "default": "models"
          },
          "maxItems": {
            "title": "Maximum items",
            "minimum": 1,
            "maximum": 1000000,
            "type": "integer",
            "description": "Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000",
            "default": 50
          },
          "makes": {
            "title": "Brands",
            "type": "array",
            "description": "Brand names as written on the site, for example Royal Enfield, Hero, TVS, Bajaj, Honda or Ola Electric. Case does not matter. The brand list is read from the site at run time and an unknown brand is reported with the closest names. Empty means every brand. Used by models, variants, on-road prices and dealers.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "models": {
            "title": "Models",
            "type": "array",
            "description": "Model names, for example Classic 350, Splendor Plus, Activa or Raider 125. A name picks the model with that exact name, or every model that contains all its words. With brands it narrows inside them. Used by models, variants and on-road prices.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "vehicleTypes": {
            "title": "Vehicle types",
            "type": "array",
            "description": "Motorcycles, scooters or both. Empty means both.",
            "items": {
              "type": "string",
              "enum": [
                "motorcycle",
                "scooter"
              ],
              "enumTitles": [
                "Motorcycles",
                "Scooters"
              ]
            },
            "default": []
          },
          "cities": {
            "title": "Cities",
            "type": "array",
            "description": "Indian city names as written on the site, for example Mumbai, Pune, Bangalore or Hyderabad. on-road-prices: each city is priced (empty means New Delhi). models and variants: the first city sets the price shown (empty means New Delhi). dealers: the cities to list (empty means every city); any town with showrooms works, even a small one. An unknown city is reported, it never silently returns another place. The site prices a small town at its nearest price city, and the row says which one in priceCity.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "bodyTypes": {
            "title": "Body types (motorcycles)",
            "type": "array",
            "description": "Only motorcycles of these types (any of them). Scooters have no body type on the site. Empty means all types.",
            "items": {
              "type": "string",
              "enum": [
                "commuter",
                "sports",
                "cruiser",
                "cafe-racer",
                "adventure",
                "tourer",
                "naked",
                "street",
                "dirt",
                "off-road"
              ],
              "enumTitles": [
                "Commuter",
                "Sports",
                "Cruiser",
                "Cafe racer",
                "Adventure",
                "Tourer",
                "Naked",
                "Street",
                "Dirt",
                "Off-road"
              ]
            },
            "default": []
          },
          "fuelType": {
            "title": "Fuel",
            "enum": [
              "any",
              "petrol",
              "electric",
              "cng"
            ],
            "type": "string",
            "description": "Only vehicles with this fuel. Any means all fuels.",
            "default": "any"
          },
          "priceFrom": {
            "title": "Price from (INR)",
            "minimum": 0,
            "maximum": 100000000,
            "type": "integer",
            "description": "Lowest ex-showroom price in rupees. A model is kept when its price range reaches this value. 0 means no lower limit."
          },
          "priceTo": {
            "title": "Price to (INR)",
            "minimum": 0,
            "maximum": 100000000,
            "type": "integer",
            "description": "Highest ex-showroom price in rupees. A model is kept when its price range starts at or below this value. 0 means no upper limit."
          },
          "modelStatus": {
            "title": "Model status (models mode)",
            "enum": [
              "available",
              "upcoming",
              "both"
            ],
            "type": "string",
            "description": "available = models on sale in India. upcoming = announced models with an expected launch date. both = everything. Variants and on-road prices exist only for models on sale.",
            "default": "available"
          },
          "includeModelDetails": {
            "title": "Add full specs, counts and brochure (models mode)",
            "type": "boolean",
            "description": "Reads one extra page per model to add top speed, kerb weight, ground clearance, wheelbase, tank size, warranty, the efficiency range, variant, colour and photo counts, rating and review counts, key features and the brochure link. Turn it off for a faster run with the list data only (rating, description and photos stay).",
            "default": true
          },
          "includeContactDetails": {
            "title": "Include dealer phone numbers",
            "type": "boolean",
            "description": "Adds the business phone number of dealer showrooms (dealers mode). Dealer e-mail addresses and the names or comments of reviewers are never output.",
            "default": false
          },
          "startUrls": {
            "title": "Addresses",
            "type": "array",
            "description": "urls mode. 91wheels.com addresses: a brand page (https://www.91wheels.com/bikes/royalenfield), a model page (/bikes/royalenfield/classic-350 or /scooters/honda/activa-6g), a variant page (/bikes/royalenfield/classic-350/redditch-series-single-channel), a price page (/bikes/royalenfield/classic-350/price-in-pune) or a dealer page (/bike-dealers/heromotocorp/mumbai). Addresses with variant= in them are refused because the site disallows them.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "onlyNew": {
            "title": "Only new rows (monitor)",
            "type": "boolean",
            "description": "Skips every row delivered in an earlier run with the same monitor name, so scheduled runs return only what is new and you pay only for those.",
            "default": false
          },
          "trackPriceChanges": {
            "title": "Report price changes",
            "type": "boolean",
            "description": "Needs Only new rows. A model, variant or on-road price seen before with a different price comes back as a price-change row with the previous price and the change in percent.",
            "default": false
          },
          "stateKey": {
            "title": "Monitor name",
            "type": "string",
            "description": "Name of the memory used by Only new rows. Use one name per saved search. Empty derives a name from your filters.",
            "default": ""
          },
          "resetSeen": {
            "title": "Forget seen rows",
            "type": "boolean",
            "description": "Clears the memory of the monitor name before this run.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Optional. Empty means direct requests, which work. Add a proxy only if your own network needs one."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}