An EV two-wheeler brand publishes an ex-showroom price. A prospective buyer in Pune pays a different total than one in Chennai, and neither pays the published number. The gap is not small and it is not constant.
Across a sampled set of cities, the spread between the lowest and highest on-road total for the same variant reaches [DATA: observed on-road price spread for one variant across sampled cities, date stated]. Anyone benchmarking EV two-wheeler pricing from published ex-showroom figures is benchmarking a number that no transaction uses. The number that matters is city-resolved, has multiple components that each vary by state, and steps discontinuously whenever a subsidy scheme changes.
This makes automotive pricing structurally different from retail pricing. In retail, one price per listing per location. Here, one price is a computed stack whose components are exposed by different sources with different reliability, and the stack must be captured component-wise or the series is uninterpretable.
| Component | Varies by | Notes |
|---|---|---|
| Ex-showroom price | Sometimes by state | OEM-set; the published headline |
| Registration charges | State | Some states waive or reduce for EVs |
| Road tax / motor vehicle tax | State | Frequently exempted for EVs, at varying levels |
| Insurance | Insurer, IDV, add-ons | Third-party component regulated; own-damage and add-ons vary |
| Central subsidy / incentive | Scheme rules, battery capacity or vehicle criteria | Changes by notification; time-bounded |
| State subsidy / incentive | State scheme | Varies widely; some states none |
| Handling / logistics charges | Dealer | Often not itemised; sometimes disputed |
| Accessories, extended warranty, AMC | Dealer | Frequently bundled into quoted on-road price |
| Charger / installation | OEM policy | Included or extra |
| Green cess or local levies | City or state | Present in some jurisdictions |
Two implications. First, an on-road price is meaningless without the state attached. Second, a single on-road total hides which component moved, so a price change of a given size cannot be attributed to the OEM, the state, or the dealer.
Capture components. Derive totals. Never collect only the total.
Most OEM sites and dealer sites expose pricing through a city or state selector, and that selector is the collection mechanism.
The approach:
Sources disagree for real reasons. An OEM page may show a price excluding a subsidy that the dealer applies at billing. An aggregator may use a stale subsidy assumption. Do not reconcile these into one authoritative figure. Store all of them with the source attached, and let the user choose which basis they are working on.
Naming across EV two-wheeler brands is inconsistent in a way that makes cross-brand comparison hard without a mapping layer.
The same commercial idea is expressed as a trim name by one brand, a battery-capacity suffix by another, and a range figure by a third. Some brands sell one model with multiple battery packs; others sell separate models that are physically near-identical. Removable and fixed battery configurations are sometimes variants and sometimes distinct models.
Build a canonical variant record:
| Field | Type | Notes |
|---|---|---|
| oem_key | string | Controlled |
| model_key | string | Your canonical model identity |
| variant_name_raw | string | As published |
| variant_key | string | Your canonical variant identity |
| battery_capacity_kwh | float | Usable where stated, else nominal, flagged |
| battery_capacity_basis | enum | usable / nominal / not_stated |
| battery_removable | boolean | |
| battery_count | integer | Some models ship two packs |
| claimed_range_km | float | |
| range_test_basis | enum | idc / arai / eco_mode / real_world_claim / not_stated |
| motor_power_peak_kw | float | |
| top_speed_kmph | float | |
| charger_type_included | string | |
| variant_successor_of | string, nullable | Links model-year refreshes |
range_test_basis matters more than it appears. Comparing an IDC-cycle range against a claimed eco-mode range is not a comparison. When the basis is not stated, say so rather than assuming.
For cross-brand comparability, define a comparison_tier derived from battery capacity band and top speed class, since those determine the regulatory category and the practical use case. Document the derivation. Comparing on price alone across tiers produces the same error as comparing appliance prices across capacities.
This is the single most important design point for an EV price series.
Incentive schemes change by notification. When a central scheme's per-kWh rate changes or its cap moves, effective prices across the whole market step on a specific date. When a state introduces or withdraws an incentive, prices in that state step. These are not gradual trends and they are not OEM pricing decisions.
A price series without subsidy context is unreadable. Someone will look at a chart, see a level shift, and attribute it to competitive action.
Maintain a separate scheme reference table, joined to price records by date and state:
| Field | Notes |
|---|---|
| scheme_id, scheme_name | |
| jurisdiction_level | central / state |
| state | Null for central |
| effective_from, effective_to | Dates |
| basis | per_kwh / flat / percentage_of_ex_showroom |
| rate_value | As published |
| cap_amount | Where applicable |
| eligibility_criteria_raw | Verbatim |
| notification_reference | Source document reference |
| recorded_at | When you captured it |
Then every price record carries applicable_scheme_ids and a subsidy_applied_flag describing whether the observed price appeared to be net of incentive. Any chart generated from this data should render scheme change dates as vertical markers. Without them the chart will be misread every time it is shown.
Also keep both price_net_of_subsidy and price_gross_of_subsidy series. The first is what a buyer pays. The second is what the OEM decided. They answer different questions and mixing them makes both unanswerable.
Coverage is not pricing and should not live in the same table. EV two-wheeler purchase decisions are strongly influenced by service access, and network presence is publicly listed.
A network record:
| Field | Type |
|---|---|
| oem_key | string |
| outlet_name_raw | string |
| outlet_type | enum: sales / service / sales_and_service / experience_centre |
| address_raw | string |
| city, district, state, pincode | string |
| latitude, longitude | float, nullable |
| geocode_confidence | enum |
| phone_raw | string |
| listed_at_source | string |
| first_seen, last_seen | date |
| status | active / not_listed_current_period |
Track first-seen and last-seen rather than deleting rows. Network expansion and contraction is the finding, and a table that only holds the current state cannot show it. Report outlets per state, outlets per million population where you have a stated population source, and the ratio of service to sales points — which is the number that distinguishes a brand building for ownership from one building for acquisition.
Geocode with a recorded confidence level. Dealer addresses in India are frequently imprecise, and a coverage map built on low-confidence geocodes will place outlets in the wrong district.
Availability signals in this category are weaker than in retail but not absent. Capture what is published rather than inferring.
Collectable signals include booking status (open, closed, waitlist), stated delivery or waiting period in weeks where shown, variant-level availability on booking flows, colour availability, and whether a test ride slot can be booked in a given city. Each is a separate field with an explicit not_stated option.
The common mistake is treating absence of a waiting period statement as immediate availability. It is not. It is absence of information, and the field should say so.
OEM competitor benchmarking. Component-wise on-road price against the competitive tier, by state, with subsidy effects separated from pricing actions. This is the only way to tell whether a rival cut price or a state changed its scheme.
Dealer groups and distributors. Local price position against nearby competing brands, and a view of where rival networks are expanding before it is announced.
Financing and insurance. On-road price distributions by state and variant feed loan-to-value assumptions and product design. The insurance component itself is a data need.
Market research and consultants. Network coverage, variant proliferation and price-tier movement, all observed, with denominators stated. Not an estimate of share — a measurement of what is listed, priced and served, city by city.
Actowiz Solutions collects city-resolved EV two-wheeler pricing with component-wise breakdowns, canonical variant and battery mapping, and timestamped subsidy scheme references. Dealer and service network coverage is delivered as a separate geocoded dataset with first-seen and last-seen tracking.
A: Because registration, road tax, insurance, central and state incentives, and dealer handling charges all sit between it and what a buyer pays, and each varies by state. On-road price is city-resolved and must be captured component-wise.
A: As timestamped step functions from a separate scheme reference table joined by date and state. Price records should carry applicable scheme IDs, and both net-of-subsidy and gross-of-subsidy series should be maintained.
A: Because they have different grains and different update rhythms. Network records need first-seen and last-seen tracking to show expansion and contraction, which a table holding only current state cannot do.
You can also reach us for all your mobile app scraping, data collection, web scraping, and instant data scraper service requirements!
Our web scraping expertise is relied on by 4,000+ global enterprises including Zomato, Tata Consumer, Subway, and Expedia — helping them turn web data into growth.
Watch how businesses like yours are using Actowiz data to drive growth.
From Zomato to Expedia — see why global leaders trust us with their data.
Backed by automation, data volume, and enterprise-grade scale — we help businesses from startups to Fortune 500s extract competitive insights across the USA, UK, UAE, and beyond.
We partner with agencies, system integrators, and technology platforms to deliver end-to-end solutions across the retail and digital shelf ecosystem.
Use this web data RFP checklist to define scope, sources, fields, SLA, QA and pricing models, then score vendors fairly.
Sensitive Skin Skincare Product Data API helps brands track cleansers, serums, moisturizers, and sunscreens with structured product data.
German marketplace data report 2026: online retail size, Amazon.de, Otto, Kaufland and Zalando price signals, PAngV rules and peak seasons.
Whether you're a startup or a Fortune 500 — we have the right plan for your data needs.