PakWheels is Pakistan's largest car marketplace — about 84,500 live ads on 23 September 2026. Its public pages give nearly everything a price analyst needs; the work is in reading Pakistani price notation correctly and in knowing which one field is deliberately out of reach.
What PakWheels shows a signed-out visitor
Search results, individual ad pages and the dealer directory are all served without an account. The PakWheels Scraper uses plain HTTP against those pages — no browser, no cookies — and PakWheels answered every measured request from Apify on the first attempt, without a proxy.
Measured on 1,279 unique listings from 13 searches on 30 September 2026 — all of Pakistan, five cities, Honda Civic 2016–2022, Suzukis under 15 lakh, hybrids, EVs, inspected cars, dealers only, private sellers only and a pasted search URL — make, model, year, mileage, fuel, transmission, city and seller type were filled on 100%. engine_cc was 97.8%, version 94.1%, and photos 99.5% with a median of 11 per ad. An earlier sample of 441 listings on 23 September gave the same picture.
Lakh and crore, parsed and checked
PakWheels writes prices the South Asian way: "PKR 24.7 lacs", "PKR 1.15 crore". One lakh is 100,000 rupees; one crore is 10,000,000. A scraper that keeps the text has not extracted a price, and one that parses it carelessly — treating "lacs" as thousands, or dropping the decimal — is wrong by a factor of a hundred with nothing to flag it.
The Actor returns price as an integer in rupees and keeps price_text beside it. The parse was validated against the expected value, not just checked for being present: on 435 of 435 priced cards in the 23 September sample, the integer equalled the text.
{
"title": "Proton Saga 2022 1.3L Ace A/T",
"price": 2470000,
"currency": "PKR",
"price_text": "PKR 24.7 lacs",
"mileage_km": 28000,
"city": "Karachi",
"seller_type": "dealer"
}The same notation appears in the input: priceFrom and priceTo take rupees, so 15 lakh is 1500000.
"Call for price" is a null, not a zero
Some sellers publish no price at all. Those rows — 0.5% of the sample — come back with price: null and price_on_call: true. A zero would be worse than useless in a price dataset: it drags every average down and survives most cleaning steps. The general argument for an honest null over a plausible value is in measured fill rates, not promises.
The PakWheels inspection score
PakWheels inspects some cars itself — about 2,700 ads carried a report when measured — and shows a score out of 10. In the 1,279-listing sample, 8.0% had one, returned as inspection_rating. onlyInspected restricts a run to those cars, and with detail pages on, each comes with the full report: overall rating, date, per-category scores and the report URL. Every inspected car in the 294-page detail sample carried it.
Private sellers and the phone number
Private individuals posted about 87% of 84,486 ads (84% of the 1,279 measured rows). For them, the seller's name is withheld by default and phone numbers typed into descriptions are masked; dealers' showroom names, addresses and opening hours are always included. Pakistan is not in the EU, and the default is the same rule the EU Actors follow, applied by caution — see the five-marketplace comparison for how the five sources differ on this.
The seller's phone number is a different matter. PakWheels serves it only to signed-in users — the endpoint answers 401 without a session — and signing in is a line the Actor does not cross. So no phone number from an ad is ever collected, for dealers or individuals. The dealer directory, which is public, carries each showroom's business phone.
What PakWheels' robots.txt says
Downloaded on 10 October 2026: 7,120 bytes, with 103 Disallow rules in the * group and no global Disallow: /. The search paths, ad pages and dealer directory are not covered. Two rules touch the Actor's neighbourhood: */seller_contact_info, the phone endpoint it never requests, and /*?*sortby=*. Any sortBy other than the default newest sends a sortby= parameter, and the Actor does not filter by robots.txt. Leaving the sort at newest keeps every request outside the disallowed patterns; the reasoning for treating the file as a specification is in robots.txt-compliant scraping.
Running it, and what it costs
Filters use PakWheels' URL spellings — lahore, toyota, corolla — or paste a search URL from the site into searchUrl. A single search pages until PakWheels stops returning new ads; for the whole country, split by city or make.
$0.0009 per listing, $0.00009 per detail page and $0.002 per dealer, plus $0.00001 to start. A thousand listings cost $0.90, or $0.99 with detail pages; on the platform at 512 MB they took 96 seconds. A wrong filter value or an empty search ends green with one uncharged error row saying what to fix.
