ActorStack.dev
E-commerceLead generationv0.1.4updated 30 September 2026

PakWheels Scraper — Pakistan Used Cars, Prices & Dealers

No login. No cookies. No browser.

Extracts used-car listings from PakWheels.com, Pakistan's largest car marketplace, with the price in PKR parsed from the site's lakh and crore text, plus the PakWheels inspection score where a car has one. A second mode exports the dealer directory with business phone, address and rating.

oswaldocarabano/pakwheels-scraper

input.json
{
  "city": "lahore",
  "make": "toyota",
  "model": "corolla",
  "yearFrom": 2018,
  "priceTo": 6000000,
  "maxItems": 300,
  "scrapeDetails": true
}
Version
v0.1.4
Memory
512 MB
Browser
none
Proxy
None needed; falls back on its own if refused

Short answer

The PakWheels Scraper extracts used-car listings from PakWheels.com, Pakistan's largest car marketplace with about 84,500 live ads on 23 September 2026, into up to 82 typed fields per row. Measured on 1,279 unique listings from 13 searches on 30 September 2026, make, model, year, mileage, city and seller type were filled on 100%, and the PKR price on 99.5% — the rest are "Call for price" ads, returned as null rather than guessed. An optional detail page adds the description, colour, registration city and feature list. Seller phone numbers are never collected because PakWheels shows them only to signed-in users. Pricing is $0.0009 per listing and $0.00009 per detail page.

Key points

  • The PakWheels Scraper filled make, model, year, mileage, fuel, transmission, city and seller type on 100% of 1,279 unique listings from 13 searches, measured 30 September 2026.
  • PakWheels prints prices as lakh and crore text; the PakWheels Scraper returns an integer PKR price that matched the text on 435 of 435 priced cards checked.
  • "Call for price" ads — 0.5% of the sample — return `price: null` with `price_on_call: true` rather than an invented number.
  • Private individuals posted about 87% of 84,486 PakWheels ads on 23 September 2026, and their names are withheld by default.
  • Seller phone numbers are never collected, because PakWheels serves them only to signed-in users and the PakWheels Scraper never signs in.
  • A thousand listings cost $0.90, or $0.99 with detail pages, and error rows and duplicates are never charged.
On this page11 sections

What it does

Extracts used-car listings from PakWheels.com, Pakistan's largest car marketplace, with the price in PKR parsed from the site's lakh and crore text, plus the PakWheels inspection score where a car has one. A second mode exports the dealer directory with business phone, address and rating.

output — one row
{
  "record_type": "listing",
  "listing_id": 11988742,
  "url": "https://www.pakwheels.com/used-cars/proton-saga-2022-for-sale-in-karachi-11988742",
  "title": "Proton Saga 2022 1.3L Ace A/T",
  "make": "Proton",
  "model": "Saga",
  "version": "1.3L Ace A/T",
  "year": 2022,
  "price": 2470000,
  "currency": "PKR",
  "price_text": "PKR 24.7 lacs",
  "mileage_km": 28000,
  "fuel_type": "Petrol",
  "engine_cc": 1299,
  "transmission": "Automatic",
  "city": "Karachi",
  "seller_type": "dealer",
  "image_count": 18,
  "color": "Red",
  "body_type": "Sedan",
  "registered_in": "Karachi",
  "assembly": "Local",
  "city_area": "Zamzama",
  "features_flat": ["ABS", "Air Bags", "Cruise Control", "..."],
  "seller_member_since": "2020-01-18",
  "seller_phone_verified": true
}

Why this one

Lakh and crore parsed, and checked

PakWheels shows prices as "PKR 24.7 lacs". The PakWheels Scraper returns `price` as an integer in rupees alongside `price_text`, and the parse was validated against the expected value on 435 of 435 priced cards, not merely checked for being non-null.

The inspection report when a car has one

PakWheels inspects some cars itself. The search row carries the inspection score out of 10 — 8.0% of the 1,279-listing sample had one — and the detail page adds the full report with per-category scores.

A search URL can be pasted as-is

Apply filters on pakwheels.com and paste the address bar into `searchUrl`, or use the discrete filters — city, make, model, year, price, mileage, engine size, seller type and more — each verified against the live site to actually narrow the results.

Dealer directory as a second output

`outputType: dealers` returns the PakWheels dealer directory — about 2,080 showrooms nationally, or one of 31 city directories — with the business phone the directory publishes.

Use cases

  • Price dealer or import stock against every comparable ad in Lahore, Karachi, Islamabad or another city.
  • Track Pakistani used-car prices by make, model, year and city over time.
  • Estimate residual values by model year and mileage for lending, insurance or leasing.
  • Build a list of Pakistani car showrooms with business phone and address from the dealer directory.

Input

Every field has a default, and the defaults are deliberately small so a first run is cheap enough to inspect before you commit to a sweep. This table mirrors the Actor's own input schema field for field.

FieldDefaultWhat it does
outputTypestringlistingsWhat to scrape`listings` or `dealers`.
searchUrlstring—PakWheels search URLA search pasted from pakwheels.com. When set, the filters below are ignored.
citystring(all Pakistan)CityAs in PakWheels URLs: `lahore`, `karachi`, `islamabad`…
make / modelstring(all)Make and modelURL spelling: `toyota`, `corolla`.
yearFrom / yearTo, priceFrom / priceTo, mileageFrom / mileageTo, engineCcFrom / engineCcTointeger—Numeric rangesPrice in PKR: 1 lakh = 100,000; 1 crore = 10,000,000.
transmission / engineType / assemblystringanyVehicle filtersGearbox, powertrain, and locally assembled or imported.
sellerTypestringanySeller typepersonal data`individual` or `dealer`. With `any`, the cap is shared in proportion to each type's share.
onlyInspectedbooleanfalseOnly PakWheels-inspected carsAbout 2,700 ads when measured.
sortBystringnewestSort bypersonal dataAnything but `newest` sends a `sortby=` parameter that PakWheels' robots.txt disallows.
maxItemsinteger100Maximum resultsAbout 25 listings per results page.
scrapeDetailsbooleanfalseOpen each ad (detail page)Adds description, colour, body, registration, features, inspection report and seller block. One extra request per listing.
includePrivateSellerContactbooleanfalseInclude private sellers' namespersonal dataOff by default. Phone numbers are never collected regardless.
maxConcurrencyinteger4Parallel requestsMeasured safe: 55 of 55 requests succeeded at up to 6.5 per second.

Output and fill rates

A field being in the schema is not the same as it having a value. The percentages below were counted on real runs; the sample sizes are in Measurements. Anything not listed here is not promised.

FieldFilledMeaning
listing_idinteger100%PakWheels ad reference, stable across runs.
url / titlestring100%Public URL and card title.
make / modelstring100%e.g. Toyota / Corolla.
versionstring94.1%e.g. Altis Grande 1.8.
yearinteger100%Model year.
mileage_kminteger100%Odometer in km.
engine_ccinteger97.8%Displacement in cc.
priceinteger99.5%Asking price in PKR, parsed from `price_text`. Null on "Call for price" ads.
fuel_type / transmissionstring100%Petrol, Diesel, Hybrid, Electric…; Automatic or Manual.
citystring100%City of the ad.
seller_typestring100%`individual` or `dealer`.
is_featured / is_managed_by_pakwheelsboolean100%True on 45.5% and 7.6% of rows.
inspection_ratingnumber8%PakWheels inspection score out of 10, on inspected cars only.
images / image_countstring[] / integer99.5%Every photo URL; median 11, max 115.
updated_at_approxdatetime100%ISO approximation of "Updated 3 days ago", with its precision.
descriptionstring98.6%Detail page only (n = 294). Phone numbers masked on private listings.
color / body_type / registered_in / assemblystring100%Detail page only.
featuresobject97.6%Detail page only. Full feature list by group; median 18 per car.
city_areastring76.5%Detail page only. Neighbourhood, e.g. DHA.
seller_member_sincedate71.4%Detail page only. Seller account age.
seller_namestringnot measuredWithheld for individual sellers unless `includePrivateSellerContact` is on; always present for showrooms.

Every key is always present. A field that exists but is empty comes back as explicit null, so a parser never has to guess.

Datasets

Different record types go to different datasets, so the main table never carries columns that are blank on most rows.

  • defaultOne row per listing, or one row per showroom when `outputType` is `dealers`. One row type per run.billed
  • Error rowsA wrong filter value or an empty search returns one row explaining what to fix. Never charged.never billed

Pricing

Pay per delivered result. Charges are applied as each row is produced rather than in a lump at the end, so an aborted run bills only for what it actually gave you.

EventPriceNotes
apify-actor-startActor start$0.00001Once per run; the platform minimum.
listingListing$0.0009One used-car row: PKR price, make, model, version, year, mileage, engine, fuel, city, seller type, inspection score and photos.
listing-detailDetail page$0.00009Only with "Open each ad" on: description, colour, body, registration, features, inspection report and seller block.
dealerDealer$0.002One showroom from the dealer directory with address, business phone, rating and reviews.

Measurements

Each figure is shown with the method that produced it. A benchmark without a method is a marketing claim wearing a number's clothes.

Listing fill rates

100% on make, model, year, mileage, city and seller type; price 99.5%

n = 1,279 unique listings from 13 searches on the Apify platform, 30 September 2026. A first sample of 441 on 23 September gave the same picture.

Price parse accuracy

435 of 435

Every priced card in the 23 September sample: the integer `price` equalled the lakh or crore text.

Detail-page fill rates

description 98.6%, features 97.6%, colour and body 100%

n = 294 detail pages from six searches, 30 September 2026.

Private-seller share

about 87% of ads

84,486 live ads on 23 September 2026; 84% of the 1,279 measured rows.

Throughput

1,000 listings in 96 s

Apify platform, 512 MB, default settings, 30 September 2026; peak memory 228 MB. 100 listings took 8–25 s.

What it will not do

Stated plainly so you can judge fit before spending anything.

  • Seller phone numbers on ads are never collected: PakWheels serves them only to signed-in users (the endpoint answers 401 without a session).
  • A single search pages until the site stops returning new ads; for the whole country, split by city or make.
  • `inspection_rating` exists only on cars PakWheels inspected: 8.0% of the 1,279-listing sample.
  • PakWheels' robots.txt (checked 10 October 2026) disallows `/*?*sortby=*`. Any `sortBy` other than `newest` sends `sortby=`, and the PakWheels Scraper does not filter by robots.txt.
  • `maxItems` is capped at 100,000 per run.

Privacy

  • Private individuals posted about 87% of 84,486 ads measured on 23 September 2026 (84% of the 1,279 measured rows). Their names are withheld by default and phone numbers typed into descriptions are masked.
  • Pakistan is not in the EU, and the Actor applies the same default as its EU siblings as a matter of caution. `includePrivateSellerContact` turns names on; use it only with a lawful basis.
  • Dealer and showroom names, addresses, opening hours and the directory's business phone are always included.
  • Removal requests: privacy@actorstack.dev

See also the data removal process.

Frequently asked questions

Is there an official PakWheels API?
PakWheels does not offer a public API: the site's JSON endpoints require a signed-in session. The PakWheels Scraper works as an unofficial API instead, called through the Apify API, a client library or a schedule, returning JSON, CSV or Excel.
Can the PakWheels Scraper get a seller's phone number?
No. PakWheels shows ad phone numbers only to signed-in users, and the PakWheels Scraper never signs in. Dealer rows from the directory carry the showroom's business phone, which the directory publishes publicly.
Why is the PakWheels price empty on some rows?
PakWheels ads without a price say "Call for price". The PakWheels Scraper returns `price: null` and `price_on_call: true` rather than a made-up number; they were 0.5% of the 1,279 measured listings.
How does the PakWheels Scraper handle lakh and crore?
PakWheels prints prices such as "PKR 24.7 lacs". The PakWheels Scraper converts them to an integer number of rupees in `price` and keeps the original text in `price_text`; one lakh is 100,000 and one crore is 10,000,000.
What does a PakWheels run cost?
$0.0009 per listing, $0.00009 more per detail page and $0.002 per dealer. A thousand listings cost $0.90, or $0.99 with detail pages, and error rows and duplicates are never charged.

Guides for this Actor