91Wheels Scraper: Bikes, Scooters, Prices & Dealers avatar

91Wheels Scraper: Bikes, Scooters, Prices & Dealers

Pricing

from $22.00 / 1,000 bike or scooter models

Go to Apify Store
91Wheels Scraper: Bikes, Scooters, Prices & Dealers

91Wheels Scraper: Bikes, Scooters, Prices & Dealers

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.

Pricing

from $22.00 / 1,000 bike or scooter models

Rating

0.0

(0)

Developer

RecordsData

RecordsData

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

RecordsData

91Wheels Scraper: Bikes, Scooters, Prices and Dealers in India

91Wheels Scraper is an Apify Actor that extracts motorcycle and scooter data from 91wheels.com, an Indian vehicle portal: 530 models (432 on sale), ex-showroom and on-road prices for 1,053 cities, variant spec sheets and dealer showrooms. It needs no login and no proxy, and exports JSON, CSV or Excel.

Export the result as JSON, CSV, Excel, XML or HTML, or read it through the Apify API. Every figure on this page was measured on 2026-10-19.

What can you scrape from 91Wheels?

  • Bike and scooter models: one row per model with brand, body type, fuel, engine size, power and torque as text and as numbers, efficiency, top speed, weight, dimensions, the ex-showroom price range, rating, review count, key features, brochure link and photos. 530 models: 381 motorcycles and 149 scooters, 432 on sale and 98 upcoming with an expected launch date.
  • Variants: one row per variant with the full specification sheet (up to 70 fields: brakes, suspension, frame, wheels, lighting, console, connectivity, battery and range for electric models) and the ex-showroom price. 947 variants were on sale on 2026-10-19.
  • On-road prices: one row per variant and city with ex-showroom price, RTO charges, insurance, TCS where the site lists it (premium bikes), and the total on-road price. 1,053 cities are priced.
  • Dealers: authorised showrooms by brand and city with address, pincode and coordinates. More than 19,000 showrooms across 46 brands, 9,570 of them for TVS alone. The phone number of a showroom comes only when you switch it on.
  • Monitoring: a scheduled run returns only rows you have not collected before, plus a price-change row when a known price moved.

Why use this actor?

  • Filters the site applies for you: brand, model name, motorcycle or scooter, body type, fuel, ex-showroom price range and on-sale or upcoming status.
  • No depth cap: the whole catalogue is reachable, 530 models, 947 variants and 9,570 TVS showrooms were each read in one pass.
  • Typed output: prices, engine sizes and weights are numbers, dates are ISO 8601, power comes with a number in PS next to the original text, and the column order is stable.
  • Cleaned source data: units are converted (kW, bhp and HP to PS), impossible values such as a 3 kg motorcycle are dropped instead of repeated, and & used by the site in place of a comma is repaired.
  • Honest errors: an unknown brand, model or city ends with one free error row that says what was not found (brands come with the closest names). It never returns another place.
  • Light on memory: runs in 256 MB and works without a browser or a proxy.

How to scrape 91Wheels in four steps

  1. Create a free account at console.apify.com and open the actor.
  2. Choose What to collect: models, variants, on-road prices, dealers or addresses.
  3. Add brands, models or cities and any filter such as body type, fuel or price, then set Maximum items.
  4. Click Start, then download the dataset from the Storage tab.

A minimal input that returns every Royal Enfield and Hero cruiser or commuter under 2 lakh rupees:

{
"mode": "models",
"makes": ["Royal Enfield", "Hero"],
"bodyTypes": ["cruiser", "commuter"],
"priceTo": 200000,
"maxItems": 100
}

On-road prices of one model in three cities:

{
"mode": "on-road-prices",
"makes": ["Honda"],
"models": ["Activa"],
"cities": ["Mumbai", "Pune", "Bangalore"],
"maxItems": 200
}

Input

The form has 19 fields; the main ones are:

FieldTypeDefaultMeaning
modestringmodelsmodels, variants, on-road-prices, dealers or urls
maxItemsinteger50Maximum rows (free plans: 10)
makes / modelsarrayemptyBrand and model names as on the site, not case sensitive; empty means all
vehicleTypesselectbothMotorcycles, scooters or both
citiesarrayemptyCities to price (on-road prices) or to list (dealers)
bodyTypes / fuelTypeselectany10 body types (motorcycles only); petrol, electric or CNG
priceFrom / priceTointeger0Ex-showroom price range in INR (0 means no limit)
modelStatusselectavailableOn sale, upcoming or both
includeModelDetailsbooleantrueOne extra page per model for top speed, weight, warranty, counts, key features and brochure
includeContactDetailsbooleanfalseShowroom phone numbers (dealers mode)
startUrlsarrayempty91wheels.com addresses (urls mode)
onlyNew / trackPriceChanges / stateKey / resetSeenmixedoffMonitor mode and its memory
proxyConfigurationobjectnoneOnly for networks that need a proxy

Names are matched the way the site writes them: Royal Enfield and royalenfield find the same brand, and Activa finds every Activa model. A name the site does not know gets a free error row that says what was not found. In urls mode you can paste brand pages, model pages, variant pages, price pages such as /bikes/royalenfield/classic-350/price-in-pune and dealer pages.

What data do you get?

Every row has a recordType. Fields that do not apply to a record type are left out, never filled with null. The dataset schema has 109 fields.

FieldDescription
recordTypemodel, variant, on-road-price, price-change or dealer
listingId, variantId, modelIdNumbers used by the site
title, url, imageUrlTitle, address on 91wheels.com and cover photo
make, model, variant and their slugsBrand, model and variant
listingType, condition, modelStatussale, new, and available or upcoming (models)
vehicleType, bodyType, fuelType, transmission, driveTypemotorcycle or scooter, body type, fuel, gearbox and final drive
engineSize, engineType, cylinders, coolingType, gearsEngine block (cc)
power, powerPs, torque, torqueNmPower and torque as published and as numbers
fuelEfficiencyKmpl, topSpeedKmph, kerbWeightKg, fuelTankLitresEfficiency, speed, weight and tank
seatHeightMm, groundClearanceMm, wheelbaseMm, lengthMm, widthMm, heightMmDimensions
brakingSystem, frontBrake, rearBrake, frontSuspension, rearSuspension, frameType, wheelTypeChassis (variants)
ledHeadlight, speedometer, console, usbPort, navigation, touchscreenFeatures (variants)
batteryCapacityKwh, batteryType, rangeKm, chargingTime, motorPowerKwElectric models and variants
price, priceMax, priceType, currencyPrice in INR and its type (ex-showroom or on-road)
exShowroomPrice, rtoCharges, insurance, tcs, onRoadPriceOn-road breakdown per variant and city
previousPrice, priceChange, priceChangePct, changeTypePrice-change rows
city, citySlug, region, priceCityCity asked for, its region (state), and the city the site actually priced
address, pincode, latitude, longitude, sellerPhoneDealer rows (phone only with contact details on)
launchedAt, expectedLaunch, variantCount, colorCount, imageCountDates and counts
rating, ratingCount, reviewCountModel rating
description, features, colors, otherSpecifications, brochureUrl, imagesText, lists and links
sourceSite, country, scrapedAt, errorSource, IN, time of the read; error only on a free error row

Sample output

A model row collected on 2026-10-19 (the long description and the photo list are left out here):

{
"imageUrl": "https://images.91wheels.com/assets/b_images/gallery/royalenfield/classic-350/royalenfield-classic-350-0-1768628135.png",
"recordType": "model",
"title": "Royal Enfield Classic 350",
"listingId": "9899",
"url": "https://www.91wheels.com/bikes/royalenfield/classic-350",
"sourceSite": "91wheels.com",
"country": "IN",
"listingType": "sale",
"condition": "new",
"modelStatus": "available",
"vehicleType": "motorcycle",
"make": "Royal Enfield",
"makeSlug": "royalenfield",
"model": "Classic 350",
"modelSlug": "classic-350",
"bodyType": "Cruiser",
"fuelType": "Petrol",
"transmission": "Manual",
"priceCity": "New Delhi",
"engineSize": 350,
"power": "20.48 PS @ 6100 rpm",
"powerPs": 20.48,
"torque": "27 Nm @ 4000 rpm",
"torqueNm": 27,
"fuelEfficiencyKmpl": 35,
"fuelEfficiencyKmplMin": 35,
"fuelEfficiencyKmplMax": 35,
"topSpeedKmph": 115,
"kerbWeightKg": 195,
"seatHeightMm": 805,
"groundClearanceMm": 170,
"wheelbaseMm": 1390,
"fuelTankLitres": 13,
"warranty": "3 Years/30000 Kms",
"price": 188934,
"priceMax": 226069,
"currency": "INR",
"priceType": "ex-showroom",
"launchedAt": "2021-09-01",
"baseVariant": "Redditch Series Single Channel",
"topVariant": "Chrome Series Dual Channel",
"variantCount": 7,
"colorCount": 7,
"imageCount": 46,
"rating": 4.2,
"ratingCount": 2930,
"reviewCount": 1209,
"features": [
"LED Headlamps",
"Turn-by-Turn Navigation",
"USB-C Charging",
"Dual-Channel ABS",
"Semi-Digital Cluster"
],
"brochureUrl": "https://91w.s3.ap-south-1.amazonaws.com/production/assets/brochures/Classic350_brochure.pdf",
"scrapedAt": "2026-10-19T09:17:07.531Z"
}

A dealer row (the phone number is added only with Include dealer phone numbers):

{
"imageUrl": "https://91w.s3.ap-south-1.amazonaws.com/production/images/brand-logos/bikes/heromotocorp.jpg",
"recordType": "dealer",
"title": "Fortpoint Hero - Byculla, Byculla West",
"listingId": "8232",
"url": "https://www.91wheels.com/bike-dealers/heromotocorp/mumbai",
"sourceSite": "91wheels.com",
"country": "IN",
"make": "Hero",
"makeSlug": "heromotocorp",
"city": "Mumbai",
"citySlug": "mumbai",
"region": "Maharashtra",
"address": "1B/565, Jetha Compound, Opp. Byculla Railway Station, Dr. B.A. Road, Mumbai - 400012",
"pincode": "400012",
"latitude": 18.985533,
"longitude": 72.835737,
"scrapedAt": "2026-10-19T09:29:59.428Z"
}

An on-road price row:

{
"imageUrl": "https://images.91wheels.com/assets/b_images/gallery/heromotocorp/splendor-plus/heromotocorp-splendor-plus-0-1780550417.png",
"recordType": "on-road-price",
"title": "Hero Splendor Plus Drum Brake OBD2B on-road price in Mumbai",
"listingId": "26971-188",
"variantId": "26971",
"modelId": "5018",
"url": "https://www.91wheels.com/bikes/heromotocorp/splendor-plus/drum-brake-obd2b",
"sourceSite": "91wheels.com",
"country": "IN",
"vehicleType": "motorcycle",
"make": "Hero",
"makeSlug": "heromotocorp",
"model": "Splendor Plus",
"modelSlug": "splendor-plus",
"variant": "Drum Brake OBD2B",
"variantSlug": "drum-brake-obd2b",
"fuelType": "Petrol",
"transmission": "Manual",
"city": "Mumbai",
"region": "Maharashtra",
"priceCity": "Mumbai",
"price": 86919,
"currency": "INR",
"priceType": "on-road",
"exShowroomPrice": 78094,
"rtoCharges": 5467,
"insurance": 3358,
"onRoadPrice": 86919,
"scrapedAt": "2026-10-19T09:29:12.664Z"
}

A variant row carries the full specification sheet, for example for the Hero Splendor Plus Drum Brake OBD2B: 97.2 cc, 1 cylinder, air cooled, 4 gears, 8.01 PS, 8.05 Nm, 112 kg, 785 mm seat height, drum brakes front and rear, alloy wheels, ex-showroom 77,777 INR in New Delhi.

How do on-road prices by city work?

The site keeps a price list for each of its 1,053 price cities. For a town with no list of its own it shows the price of a nearby reference city. The actor keeps this visible: city is the city you asked for and priceCity is the city whose price list was used. An unknown city name is reported, never replaced. Dealers are different: any town with showrooms works, even when it is not in the price-city list.

Monitor new models and repricing

Switch on Only new rows (monitor) and the actor remembers every row it delivered, in a named store of your own account. Scheduled runs with the same Monitor name return only rows it has not delivered before, so you pay only for new rows. Add Report price changes and a model, variant or on-road price that moved comes back as a price-change row with the previous price, the difference and the percentage. Use Forget seen rows to start again.

How does it compare with other Indian bike scrapers?

No other Apify actor targets 91wheels.com, read on 2026-10-19. The closest one covers a neighbouring portal, so this table shows what it returns so you can combine them.

91Wheels Scraperbovi/bikewale-bikes-scraper
Site91wheels.combikewale.com
Models with specsYes, up to 55 fieldsYes, 12 fields
Full variant spec sheetsYes, up to 70 fieldsNo
On-road breakdown per variant and cityYes, 1,053 citiesNo
Dealer showrooms with coordinatesYes, more than 19,000No
Upcoming modelsYesNot stated
Monitoring with price-change rowsYesNo

Run both next to each other if you want to compare the two portals' new-bike prices.

Data quality and limits

  • The actor covers new vehicles. The site has a used vehicle section, but its robots.txt disallows it, so the actor does not read it.
  • Specification values are what the site publishes. A few are clearly wrong at the source (a heavy cruiser listed at 3 kg, a power figure of 24,033 PS). The actor drops values outside a plausible range instead of repeating them, and never guesses a replacement.
  • Fill rates over the whole catalogue: power 81 percent and rating 80 percent of models. Scooters have no body type on the site, so bodyType is filled for 73 percent of models. For the 9,570 TVS showrooms: pincode and coordinates 100 percent, city 97, region 88, street address 85. Upcoming models carry the price the site shows for them (97 of 98 have one) and an expected launch date.
  • Some showrooms have no city on the site (3 percent of TVS), and others sit in towns missing from the price-city list (9 percent of TVS), so their city or region is left out rather than guessed.
  • Photos and brochures are links to the site's own files. They are not downloaded.
  • Names and comments of reviewers and question askers are never output. Dealer e-mail addresses are never output.
  • Free Apify plans are limited to 10 results per run.

Use with AI agents (MCP)

Connect the Apify MCP server to Claude, Cursor or another MCP client and this actor appears as a tool: https://mcp.apify.com?tools=RecordsData/91wheels-scraper.

Example prompt: "List the five cheapest electric scooters on sale in India with battery capacity and range." The agent sends { "mode": "models", "vehicleTypes": ["scooter"], "fuelType": "electric", "maxItems": 100 } and sorts the rows by price.

Run it from code

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('RecordsData/91wheels-scraper').call({
mode: 'on-road-prices',
makes: ['TVS'],
models: ['Jupiter'],
cities: ['Chennai'],
maxItems: 20,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.length, items[0].title, items[0].onRoadPrice);

You can also call the actor from the Python client, Make, Zapier or n8n, and schedule it from the Apify Console.

Business use cases

  • Price comparison sites and dealers: keep a table of ex-showroom and on-road prices per city and compare it with competing portals.
  • Market research: track how many models each brand sells per segment, which launches are upcoming and how fast electric scooters grow.
  • Lead generation: build a list of authorised showrooms per brand and city with address and coordinates.
  • Insurance and finance: use the on-road breakdown (RTO, insurance, ex-showroom) to price loans and policies per city.

Beyond business use cases

  • Research: study price spread across Indian cities for the same variant.
  • Personal: compare two bikes side by side before buying.
  • Non-profit: map dealer coverage in smaller states.
  • Experimentation: feed clean specs into a recommendation model.

Frequently Asked Questions

What does the 91Wheels Scraper cover?

It covers the new-vehicle data on 91wheels.com: 530 motorcycle and scooter models (432 on sale and 98 upcoming), 947 variants with specification sheets, on-road prices for 1,053 cities, and more than 19,000 dealer showrooms. It also has a monitor mode that returns only new rows and price changes.

Do I need a proxy, a login or an API key?

No. The actor reads the public data the site's own pages use, so it needs no proxy, browser or 91wheels account. You only need an Apify account to start runs, and the free plan returns up to 10 results per run. A proxy field exists only for networks that require one.

How do I get the on-road price of a bike in my city?

Choose On-road prices, add the brand and model, and put your city in Cities. Each variant comes back with ex-showroom price, RTO charges, insurance and the total (plus TCS on premium bikes, where the site lists it). If the site has no price list for your town, priceCity shows which nearby city it used.

How do I find all electric scooters on sale in India?

Choose Models, set Vehicle types to scooters and Fuel to electric. Each row has battery capacity, range and charging time where the site lists them, plus the ex-showroom price range.

Can I list all dealers of one brand?

Yes. Choose Dealers, add the brand and leave Cities empty. TVS alone has 9,570 showrooms. Add a city to narrow the list, even a small town. Phone numbers come only with Include dealer phone numbers.

Does it return used bikes?

No. The used vehicle section of the site is disallowed in its robots.txt, so the actor does not read it. It returns new and upcoming models, their variants, prices and dealers.

Why does a price differ from what the dealer quotes?

Prices are the ones the site publishes: ex-showroom per variant and an on-road estimate per city. Dealers may add accessories or offers. The site updates prices when manufacturers do, which is why the monitor mode reports changes.

The actor reads publicly visible data, does not log in and skips the paths that robots.txt disallows. It outputs no private data: reviewer names, comments and dealer e-mail addresses are left out. The terms of use of the site restrict copying content and automated access, so check them and the law that applies to you before using the data commercially.

How much does a run cost?

The actor is billed per result and the Pricing tab of the actor page shows the live rate. Error rows, empty searches and rows skipped by the monitor are never charged.

Can I get every model on the site?

Yes. Leave brands and models empty and set Maximum items to 600 or more. Free plans stop at 10 results per run.

What happens with a typo in a brand or city name?

The run ends with one free error row that says what was not found, with the closest brand names for a brand, so you can correct the input. Nothing is silently replaced.

Can I schedule it?

Yes. Create a schedule in the Apify Console with Only new rows switched on, and every run returns only new models, variants and changed prices.

Integrate with any app

The dataset works with Make, Zapier, n8n, Google Sheets, Airbyte, Slack and any tool that reads JSON or CSV. See the Apify integrations page for the full list.

Need help? contact.punkrecordsdata@gmail.com

Disclaimer: this is an independent tool, not affiliated with 91wheels.com. It collects only publicly available data.