# BikeWale Scraper — India Bike Prices, On-Road Prices & Specs (`yugenox/bikewale-scraper`) Actor

Scrape BikeWale new bikes and scooters in India: ex-showroom price of every version, on-road price by city (RTO, insurance, EMI), full specs and features, colours, ratings, launch dates, upcoming and discontinued models. By brand, all brands, or model URLs. No login.

- **URL**: https://apify.com/yugenox/bikewale-scraper.md
- **Developed by:** [Yugenox Corp](https://apify.com/yugenox) (community)
- **Categories:** Automation, E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.80 / 1,000 bikes

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?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## BikeWale Scraper: India bike prices, on-road prices and specs

Scrape **bikewale.com** for every new motorcycle and scooter sold in India. For each model you get the **ex-showroom price of every version**, the **on-road price in the cities you choose** (ex-showroom, RTO, insurance and EMI), the **full spec sheet and feature list**, colours, owner ratings, launch dates, and BikeWale's verdict with pros and cons. Upcoming models come with their expected price and launch date. Discontinued models are available if you want them.

Pick brands such as `Honda`, `Royal Enfield` or `Ather`, scrape **every brand** at once, or paste BikeWale model URLs. You don't need a login, cookies or a browser.

### What you get

| | |
|---|---|
| **Model** | Brand, model, status (launched, upcoming, discontinued), motorcycle or scooter, body style, petrol or electric, image, BikeWale URL |
| **Prices** | Starting ex-showroom price, price of the most expensive version, every version with its own price, expected price range for upcoming models |
| **On-road prices** | For each city you choose: ex-showroom price, RTO, insurance and other charges, total on-road price and EMI for every version. Starting on-road prices in BikeWale's top 8 cities are included too |
| **Specs** | Displacement, power, mileage (owner-reported and ARAI), top speed, range (EVs), kerb weight, seat height, tank size, transmission, emission standard, plus the **full spec sheet** and **feature list** section by section |
| **Ratings** | Average rating, number of ratings and reviews, and the average score for each aspect (comfort, performance, value for money and others) |
| **Content** | Colours with hex codes and images, gallery images, BikeWale's verdict, pros and cons, summary, manufacturer brochure PDF |
| **Dates** | Launch date, expected launch date (upcoming models), date discontinued |

### How to use it

1. Add one or more **brands** (for example `Honda`, `Royal Enfield`, `TVS`, `Bajaj`, `Ather`, `Hero MotoCorp`), or turn on **All brands**, or paste **BikeWale URLs** (brand pages, model pages or price-in-city pages).
2. Optionally add **cities** for on-road prices, for example `Mumbai`, `Bangalore` or `Delhi`.
3. Optionally filter by **price range**, **petrol or electric**, **motorcycles or scooters**, and choose whether you want **launched**, **upcoming** and **discontinued** models.
4. Set **Max bikes** and run it.

Turn off **Include full details** if you only need a fast price list. That mode makes one request per brand instead of one per model.

#### Input examples

Every Royal Enfield and Honda model, with on-road prices in two cities:

```json
{
  "brands": ["Royal Enfield", "Honda"],
  "cities": ["Mumbai", "Bangalore"],
  "maxItems": 200
}
```

Every electric scooter under ₹1.5 lakh, from every brand:

```json
{
  "allBrands": true,
  "fuelType": "electric",
  "vehicleType": "scooter",
  "maxPrice": 150000,
  "maxItems": 0
}
```

Upcoming launches only, as a fast list:

```json
{
  "allBrands": true,
  "statuses": ["upcoming"],
  "includeDetails": false,
  "maxItems": 0
}
```

Specific models:

```json
{
  "startUrls": [
    "https://www.bikewale.com/royalenfield-bikes/classic-350/",
    "https://www.bikewale.com/honda-bikes/sp-125/price-in-pune/"
  ]
}
```

### Output example

This is a real row from 1 October 2026, shortened. Every row has every field. Fields that need the model page are `null` when **Include full details** is off.

```json
{
  "modelId": 1334,
  "name": "Honda SP 125",
  "brand": "Honda",
  "model": "SP 125",
  "status": "launched",
  "vehicleType": "motorcycle",
  "bodyStyle": "Commuter Bikes",
  "isElectric": false,
  "fuelType": "Petrol",
  "price": 90634,
  "priceMax": 97479,
  "priceText": "₹ 90,634 onwards",
  "priceLabel": "Avg. Ex-Showroom price",
  "currency": "INR",
  "launchDate": "2019-11-14",
  "rating": 4.6,
  "ratingCount": 4572,
  "reviewCount": 1037,
  "ratingBreakdown": { "Design and styling": 4.58, "Reliability": 4.34, "Comfort": 4.5 },
  "displacementCc": 123.94,
  "powerBhp": 10.72,
  "mileageOwnerReportedKmpl": 63,
  "topSpeedKmph": 100,
  "kerbWeightKg": 116,
  "fuelTankLitres": 11,
  "transmission": "5 Speed Manual",
  "emissionStandard": "BS6 Phase 2B",
  "versionCount": 2,
  "versions": [
    { "versionId": 19059, "name": "Drum", "price": 90634, "priceText": "₹ 90,634", "keySpecs": { "Front Brake Type": "Drum", "Wheel Type": "Alloy" } },
    { "versionId": 19061, "name": "Disc", "price": 97479, "priceText": "₹ 97,479", "keySpecs": { "Front Brake Type": "Disc", "Wheel Type": "Alloy" } }
  ],
  "colors": [{ "name": "Matte Marvel Blue Metallic", "hex": "#01549A", "imageUrl": "https://imgd.aeplcdn.com/664x374/n/a1f8chb_1866037.jpg?q=80" }],
  "specifications": {
    "Power & Performance": { "Displacement": "123.94 cc", "Max Power": "10.72 bhp @ 7500 rpm", "Max Torque": "10.9 Nm @ 6000 rpm" }
  },
  "features": { "Instrument Cluster": { "Instrument Console": "4.2 \" TFT Display", "GPS & Navigation": "No" } },
  "onRoadPriceTopCities": [{ "city": "Mumbai", "onRoadPrice": 107711 }, { "city": "Delhi", "onRoadPrice": 104205 }],
  "cityPrices": [
    { "city": "Mumbai", "version": "Drum", "exShowroomPrice": 90298, "rto": 11231, "insurance": 6182, "insuranceType": "Insurance (Zero Depreciation)", "otherCharges": [], "onRoadPrice": 107711, "emiPerMonth": 3695, "emiTenureMonths": 36, "downPayment": 5386 }
  ],
  "verdict": "The Honda SP 125 is a no non-sense commuter that offers decent performance and good fuel efficiency. …",
  "pros": ["125cc engine offers excellent refinement", "Great fuel efficiency", "Offers comfortable ride"],
  "cons": ["Disc brake variant is priced quite high", "Misses out on some modern features", "Conservative styling"],
  "imageUrl": "https://imgd.aeplcdn.com/664x374/n/cw/ec/43482/sp-125-right-side-view-8.jpeg?isig=0&q=80",
  "brochureUrl": "https://imgd.aeplcdn.com/f/brochure/7/1334/7w90i7m.pdf",
  "url": "https://www.bikewale.com/honda-bikes/sp-125/",
  "detailsFetched": true,
  "source": "brand",
  "searchBrand": "Honda",
  "position": 1,
  "scrapedAt": "2026-10-01T22:58:00.000Z"
}
```

Upcoming models carry `expectedPriceMin`, `expectedPriceMax` and `expectedLaunchDate` instead of a price and a launch date.

### Use cases

- **Price tracking**: schedule a weekly run to follow ex-showroom and on-road prices of every version, and to catch price changes after launches or tax changes.
- **Dealer and showroom research**: compare on-road prices of competing models in your city, with the RTO and insurance split.
- **Market analysis**: get every model and version in one dataset, with segment, engine size, power, mileage and price.
- **EV market tracking**: list every electric scooter and motorcycle with its range, top speed and price.
- **Launch calendars**: get upcoming models with their expected prices and launch dates.
- **Content and comparison sites**: get specs, features, colours, images and pros and cons.

### FAQ

**Do I need a BikeWale account, cookies or a login?** No. The scraper reads the same public pages any visitor sees. It never logs in, and it needs nothing from you except brands, URLs or the "All brands" switch.

**How fast is it?** A brand's whole model list takes one request, about a second. With **Include full details** on (the default), each model takes one more request: roughly 30 models in 10 to 15 seconds. Each city you add costs one more request per model.

**How many bikes can I get?** Every model BikeWale lists: about 60 brands and around 500 launched and upcoming models, plus discontinued ones if you include them. **Max bikes** is shared fairly between your brands. Set it to 0 to get everything.

**Which cities work?** Any city that has a BikeWale price page: the big ones such as Mumbai, Delhi, Bangalore, Pune, Hyderabad, Chennai, Kolkata and Lucknow, and many smaller towns (Navi Mumbai, Dombivali and others). Spellings such as `Bengaluru` are converted to BikeWale's own. If BikeWale has no prices for a city, the run skips it, doesn't charge for it, and says so in the status message.

**Why is the price empty for some models?** Upcoming models have no price yet. You get `expectedPriceMin` and `expectedPriceMax` when BikeWale publishes an estimate. Discontinued models show their last price once their model page is read.

**What does a run cost?** There is a small fee per run. On top of that, you pay per bike saved, per model page read for full details, per city price breakdown and per brand page read. Bikes that your filters skip are never charged, and neither are brands, model URLs or cities that BikeWale doesn't have. See the Pricing tab.

**Which proxy should I use?** Keep the default (Apify Proxy, datacenter). It comes with every Apify plan, including the free one. If BikeWale refuses datacenter IPs for a while, the run switches to residential proxies when your account has them, and carries on without them when it doesn't.

**Is it legal to scrape BikeWale?** This Actor only collects publicly available data: manufacturer catalogue information that anyone can see on BikeWale without an account, such as model names, versions, prices, specifications, features, colours, average ratings and BikeWale's own reviews. Collecting publicly available data is generally legal, but you're responsible for how you use it. The scraper doesn't collect personal data: it never reads individual user reviews, reviewer names or dealer contact people, only average ratings. You must still follow privacy laws such as GDPR, India's DPDP Act, PIPEDA and CCPA, as well as BikeWale's terms. If you're unsure, check with a lawyer. More on this: [Is web scraping legal?](https://blog.apify.com/is-web-scraping-legal/)

**Does it access any private data?** No. Everything comes from pages BikeWale shows to any visitor without logging in. It never uses a login, never touches user accounts, and follows the site's robots.txt.

This Actor is not affiliated with, endorsed by, or sponsored by BikeWale or its owners. BikeWale is a trademark of its owner.

# Actor input Schema

## `brands` (type: `array`):

Brands to scrape, as BikeWale names them, e.g. "Honda", "Royal Enfield", "TVS", "Bajaj", "Ather". Company names such as "Hero MotoCorp" or "OLA Electric" work too. Every model of each brand is listed (popular models first).

## `allBrands` (type: `boolean`):

Scrape every brand on BikeWale (about 60). Max bikes is shared fairly between brands.

## `startUrls` (type: `array`):

Optional: BikeWale brand pages (bikewale.com/honda-bikes/), model pages (bikewale.com/honda-bikes/sp-125/) or price-in-city pages (bikewale.com/honda-bikes/sp-125/price-in-mumbai/). A model URL always returns the full model data.

## `maxItems` (type: `integer`):

Maximum number of models for the whole run, shared fairly between your brands (a brand with fewer models leaves its share to the others). 0 = everything.

## `includeDetails` (type: `boolean`):

Open each model's page for every version with its own price, the full spec sheet and feature list, colours, on-road prices in BikeWale's top cities, the BikeWale verdict with pros and cons, and the brochure. Turn off for a fast price list (one request per brand).

## `cities` (type: `array`):

Optional: Indian cities, e.g. "Mumbai", "Bangalore", "Delhi", "Pune". Each model gets the on-road price of every version in each city, broken down into ex-showroom price, RTO and insurance, with the EMI BikeWale shows. One extra request per model and city.

## `statuses` (type: `array`):

Launched models (on sale now), upcoming models (expected price and launch date) and discontinued models.

## `minPrice` (type: `integer`):

Only models whose starting ex-showroom price (expected price for upcoming models) is at least this, in rupees. Empty = no minimum.

## `maxPrice` (type: `integer`):

Only models whose starting ex-showroom price is at most this, in rupees, e.g. 100000 for bikes under ₹1 lakh. Empty = no maximum.

## `fuelType` (type: `string`):

Electric or petrol models only.

## `vehicleType` (type: `string`):

Motorcycles or scooters only (BikeWale's body style).

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

Apify Proxy (datacenter) is the default and comes with every Apify plan. If BikeWale refuses datacenter IPs for a while, the run switches to residential proxies when your account has them.

## Actor input object example

```json
{
  "brands": [
    "Honda"
  ],
  "allBrands": false,
  "maxItems": 20,
  "includeDetails": true,
  "statuses": [
    "launched",
    "upcoming"
  ],
  "fuelType": "any",
  "vehicleType": "any",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

All scraped models.

## `run` (type: `string`):

Status and statistics for this run.

## `report` (type: `string`):

RUN_REPORT: how the run ended, counts, requests and proxy use.

# 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 = {
    "brands": [
        "Honda"
    ],
    "maxItems": 20,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("yugenox/bikewale-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 = {
    "brands": ["Honda"],
    "maxItems": 20,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("yugenox/bikewale-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 '{
  "brands": [
    "Honda"
  ],
  "maxItems": 20,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call yugenox/bikewale-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,yugenox/bikewale-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/7BaTZf6ZN0j30pReI/builds/rrx8VawminBcURy0G/openapi.json
