# PakWheels Scraper - Pakistan Used Cars (`normdata/pakwheels-scraper`) Actor

Scrape PakWheels, Pakistan's biggest car marketplace: make, model, version, year, price in PKR, km, fuel, engine, gearbox, city and all photos, with 35+ filters. Add Details for PakWheels inspection scores, auction sheet, chassis number, features and seller comments.

- **URL**: https://apify.com/normdata/pakwheels-scraper.md
- **Developed by:** [Norm Data](https://apify.com/normdata) (community)
- **Categories:** E-commerce
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.20 / 1,000 cars

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

![Norm Data](https://raw.githubusercontent.com/FabriAV/normdata/refs/heads/main/assets/banner_norm2.png)

## 🚗 PakWheels Scraper - Pakistan Used Cars

Extract used cars from **PakWheels**, Pakistan's biggest car marketplace, with about 75,000 cars from dealers and private sellers. For each car you get the **make, model, version, year, price in PKR (as a number and as shown, like "PKR 30.5 lacs"), km, fuel, engine size, transmission, city, Japanese auction grade, photo count, featured and managed-by-PakWheels flags, last update and all photos**. Turn on **Details** to also get the **PakWheels inspection rating, per-part scores and report link, the verified auction sheet (km, date, link), chassis number, every feature (also by group), the seller's comments, area and province, registration city, color, assembly and body type**. It collects **1,000 cars in about 8 seconds** (about 50 seconds with Details) with no proxy, has **35+ filters**, and can run on a schedule to send you **only new ads**.

> 👉 **Try it now:** press **Start**. The ready-made input gives you 10 cars in a few seconds.<br>
> 💰 **$0.0135 per car** on the Free plan (10 cars per run), from $0.0124 on paid plans. [See pricing](#-pricing)

### ✨ Why this scraper?

> - **Fast**<br>
>   1,000 cars in about 8 seconds without Details, about 50 seconds with them.
>
> - **Every filter the site has**<br>
>   Including several makes, models and cities in one run, and filters no other PakWheels actor offers: make origin, categories, drive train, doors, seats, auction sheet verified, featured, auctioned, video and sunroof.
>
> - **Inspection and auction data**<br>
>   The PakWheels inspection rating out of 10, the score of each part (body, engine, suspension, interior, AC), the report link and date; the auction grade, auction km, auction date and sheet link; the chassis number.
>
> - **Clean, typed data**<br>
>   Prices in rupees as numbers ("PKR 1.2 crore" becomes 12000000), km, engine and year are numbers, "Call for price" ads have no fake number in `price`, and featured ads that repeat on every page are saved once.
>
> - **All photos**<br>
>   In every row, full size.
>
> - **Nothing to set up**<br>
>   No proxy, no login.
>
> - **Apify platform**<br>
>   Schedule runs, get only new cars, export to Excel or CSV, use the API, or connect Google Sheets, Zapier and Make.

### ⚖️ How it compares

Based on each Actor's public input options and description (November 2026).

| Capability | This actor | [shahidirfan](https://apify.com/shahidirfan/Pakwheels-Scraper) | [oswaldocarabano](https://apify.com/oswaldocarabano/pakwheels-scraper) |
|---|:--:|:--:|:--:|
| Make, model, city, price and year filters | **yes** | yes | yes |
| Several makes, models or cities in one run | **yes** | no | no |
| km, engine, transmission, fuel, body, color, assembly, registration, seller type | **yes** | no | yes |
| Make origin, categories, drive train, doors, seats, provinces | **yes** | no | no |
| Auction sheet verified, featured, auctioned, video, sunroof filters | **yes** | no | no |
| Inspection rating | **yes** | no | yes |
| Inspection score per part, report link and date | **yes** | no | no |
| Auction sheet: km, date, link, and chassis number | **yes** | no | no |
| Features and seller comments | **yes** | no | features |
| Dealer directory and private seller names | no | no | **yes** |
| Bikes and parts | no (cars) | **yes** | no |
| Only new ads on a schedule | **yes** | no | no |
| Needs a proxy | **no** | proxy setting | proxy setting |

### 🚀 How to scrape PakWheels

1. Create a free Apify account.
2. Pick the filters you need, or keep the ready-made input.
3. Click **Start**.
4. Download the cars as Excel, CSV or JSON from the **Output** tab.

### 💰 Pricing

#### How much does it cost to scrape PakWheels?

You pay a one-time **$0.0035** per run, plus a price for each car saved (and for each add-on you turn on):

| Charged for | Free | Bronze | Silver | Gold+ |
| --- | --- | --- | --- | --- |
| **Car**: One used car from PakWheels: make, model, version, year, price, km, specs, city and all photos. | 0.0135 | 0.0124 | 0.0113 | 0.0102 |
| **Car details**: Extra per car, only with Details on: inspection report and scores, auction sheet, chassis number, features and seller comments. | 0.0068 | 0.006 | 0.0053 | 0.0046 |

Example: 1,000 cars cost about **$12.4** on Bronze. No proxy or compute costs on top.

### 📦 What data you get

| Field | Description |
| --- | --- |
| `imageUrl` | Main photo. |
| `id` | PakWheels ad number. |
| `title` | Make, model, year and version, as on the site. |
| `make`, `model`, `version` | Make, model and version as PakWheels lists them. |
| `year` | Model year. |
| `price`, `priceText`, `currency` | Price in rupees (null for "Call for price"), the price as shown (like "PKR 30.5 lacs") and the currency. |
| `mileageKm` | Kilometers driven. |
| `fuelType` | Petrol, Diesel, Hybrid, Electric, CNG, LPG and so on. |
| `engineCc` | Engine displacement in cc. |
| `transmission` | Automatic or Manual. |
| `bodyType` | *(Details)* Sedan, Hatchback, SUV, Crossover, Mini Van and so on. |
| `color` | *(Details)* Exterior color. |
| `assembly` | *(Details)* Local or Imported. |
| `registeredIn` | *(Details)* City or province of registration, or Un-Registered. |
| `area` | *(Details)* Neighborhood of the car. |
| `city` | City where the car is. |
| `province` | *(Details)* Province where the car is. |
| `auctionGrade` | Japanese auction grade of imported cars, like 4.5 or R. |
| `auctionMileageKm` | *(Details)* Km on the verified auction sheet. |
| `chassisNumber` | *(Details)* Chassis number (the site masks part of it on some ads). |
| `inspectionRating` | *(Details)* PakWheels inspection rating out of 10. |
| `description` | *(Details)* The seller's text, line breaks kept. |
| `photosCount` | Number of photos. |
| `featured` | Paid featured ad (search rows only). |
| `managedByPakWheels` | PakWheels sells the car for the owner. |
| `features` | *(Details)* Equipment like ABS, Sun Roof, Navigation System or Cruise Control. |
| `featuresByGroup` | *(Details)* The same features in the site groups. |
| `inspectionScores` | *(Details)* Inspection score in % per part: Exterior & Body, Engine/Transmission/Clutch, Suspension/Steering, Interior, AC/Heater. |
| `images` | All photos, full size (on searches a new ad may miss a photo the site is still processing; Details reads them all). |
| `url` | Ad page on PakWheels. |
| `inspectionReportUrl` | *(Details)* Full PakWheels inspection report. |
| `auctionSheetUrl` | *(Details)* Verified auction sheet page. |
| `updatedAt` | When the ad was last updated (from "Updated 2 hours ago" on searches; the day for ad links). |
| `inspectionDate`, `auctionDate` | *(Details)* Inspection day and auction day (YYYY-MM-DD). |
| `scrapedAt` | When this row was saved. |
| `error` | Only present when a row failed. The fields that loaded are still there. |

Fields marked *Details* only appear when that add-on is on.

#### Example row (trimmed)

```json
{
  "imageUrl": "https://cache4.pakwheels.com/ad_pictures/1522/toyota-yaris-hatchback-g-1-0-2020-152230535.webp",
  "id": "12050565",
  "title": "Toyota Yaris Hatchback 2020 G 1.0",
  "make": "Toyota",
  "model": "Yaris Hatchback",
  "version": "G 1.0",
  "year": 2020,
  "price": 4550000,
  "priceText": "PKR 45.5 lacs",
  "currency": "PKR",
  "mileageKm": 60956,
  "fuelType": "Petrol",
  "engineCc": 996,
  "transmission": "Automatic",
  "bodyType": "Hatchback",
  "color": "Blue",
  "assembly": "Imported",
  "registeredIn": "Punjab",
  "area": "Shadbagh",
  "city": "Lahore",
  "province": "Punjab",
  "auctionGrade": "4",
  "auctionMileageKm": 65000,
  "chassisNumber": "KSP********613",
  "inspectionRating": 8.6,
  "description": "Documents available\nPrevious owner card & Bill of landing not check by pakwheels\nPakWheels inspected car\nInspection report attached\nNumber plates available\n2nd Owner\nToken Tax ...",
  "photosCount": 14,
  "featured": true,
  "managedByPakWheels": true,
  "features": ["Front Fog Lights", "DRLs", "Infotainment System"],
  "featuresByGroup": { "Exterior": ["Front Fog Lights", "DRLs"], "Interior": ["Infotainment System", "Front Speakers", "Rear Speakers"], "Safety & Security": ["ABS", "Air Bags", "Traction Control"], "Comfort & Convenience": ["Ventilated Seats", "Power Mirrors", "Climate Control"] },
  "inspectionScores": { "Exterior & Body": 64, "Engine/Transmission/Clutch": 100, "Suspension/Steering": 87, "Interior": 87, "AC/Heater": 100 },
  "images": [
    "https://cache4.pakwheels.com/ad_pictures/1522/toyota-yaris-hatchback-g-1-0-2020-152230535.webp",
    "https://cache2.pakwheels.com/ad_pictures/1522/toyota-yaris-hatchback-g-1-0-2020-152230536.webp",
    "https://cache2.pakwheels.com/ad_pictures/1522/toyota-yaris-hatchback-g-1-0-2020-152230537.webp"
  ],
  "url": "https://www.pakwheels.com/used-cars/toyota-yaris-hatchback-2020-for-sale-in-lahore-12050565",
  "inspectionReportUrl": "https://www.pakwheels.com/carsure-reports/cae55b4df531776610db8f25b350e84b",
  "updatedAt": "2026-11-06T15:11:00.000Z",
  "inspectionDate": "2026-09-26",
  "auctionDate": "2023-11-23",
  "scrapedAt": "2026-11-06T23:11:45.591Z"
}
```

### ⚙️ Input

| Section | What it's for |
| --- | --- |
| **Maximum results** | Always first, caps the whole run. Empty means no limit. |
| **What to scrape** | Makes, models, cities, provinces, keyword and sort. |
| **Details (add-on)** | Add details. |
| **Filters** | Minimum price (PKR), maximum price (PKR), year from, year to, minimum km, maximum km, minimum engine size (cc), maximum engine size (cc), transmission, fuel, body type, color, assembly, registered in, seller, make origin, category, drive train, doors, seats, PakWheels inspected only, auction sheet verified only, managed by PakWheels only, featured ads only, auctioned only, with photos only, with video only and sunroof only. |
| **Monitoring** | Only new cars and monitor name. |
| **Links** | Links instead of the fields above. Filters are ignored with links. |

#### Input examples

**Every Toyota Corolla and Honda Civic in Lahore and Karachi, with inspection and features:**

```json
{
  "models": ["Toyota Corolla", "Honda Civic"],
  "cities": ["lahore", "karachi"],
  "includeDetails": true
}
```

**Automatic cars from 2018 between 30 and 60 lacs, under 80,000 km, cheapest first:**

```json
{
  "transmission": "automatic",
  "minYear": 2018,
  "minPrice": 3000000,
  "maxPrice": 6000000,
  "maxMileageKm": 80000,
  "sort": "price-asc"
}
```

**Imported Japanese cars with a verified auction sheet, with grade and auction km:**

```json
{
  "assembly": "imported",
  "origin": ["japanese"],
  "auctionSheetVerified": true,
  "includeDetails": true
}
```

**PakWheels inspected SUVs from dealers in Islamabad:**

```json
{
  "bodyTypes": ["suv"],
  "cities": ["islamabad"],
  "sellerType": "dealer",
  "inspectedOnly": true,
  "includeDetails": true
}
```

**New ads every day (schedule this run):**

```json
{
  "onlyNew": true,
  "monitorName": "daily-ads"
}
```

**Links (filters are ignored):**

```json
{
  "startUrls": [
    { "url": "https://www.pakwheels.com/used-cars/search/-/mk_toyota/ct_lahore/" },
    { "url": "https://www.pakwheels.com/used-cars/honda-civic-2022-for-sale-in-karachi-12103950" }
  ],
  "includeDetails": true
}
```

### 🔗 Related scrapers

> - [8891 Scraper](https://apify.com/normdata/auto8891-scraper): Taiwan Used Cars: Prices, Mileage, Dealers.
> - [CRautos Scraper](https://apify.com/normdata/crautos-scraper): Costa Rica Used Cars & Seller Phones.
> - [Mobile.bg Scraper](https://apify.com/normdata/mobile-bg-scraper): Bulgaria Used Cars & Seller Phones.
> - [Moteur.ma Scraper](https://apify.com/normdata/moteur-ma-scraper): Morocco Used Cars & Seller Phones.

### ❓ FAQ and troubleshooting

#### Is there a PakWheels API? Do I need an API key?

> PakWheels has no public data API for this. This Actor works as a PakWheels API alternative: it reads the public pages and gives you clean JSON, CSV or Excel, with no API key, no login and no code to maintain. You can also call it from your own code with the Apify API, or from an AI agent through MCP:
> `claude mcp add --transport http apify "https://mcp.apify.com?tools=normdata/pakwheels-scraper"`

#### Why do I get only 10 cars?

> On the Apify free plan each run saves up to 10 results, so you can try it before paying. Any paid plan removes the limit.

#### How many cars are there?

> About 75,000 used cars as of November 2026.

#### Are prices in rupees?

> Yes, as a number in `price` (lacs and crores turned into rupees), and as shown in `priceText`.

#### Do I get the seller's phone number?

> No. PakWheels shows it only to logged-in users, and this Actor does not log in.

#### Few or no results

> Write models with their make ("Honda Civic", "Suzuki Alto"); the log says which names were skipped. Loosen a filter if nothing matches.

#### A make was skipped

> PakWheels cannot mix a whole make with models of other makes in one search: pick that make's models too, or run it on its own. The log says so.

#### Is this an official PakWheels tool?

> No. It is independent and not affiliated with PakWheels. It reads only data PakWheels publishes on its public pages, at a moderate pace. Use the data in line with PakWheels's terms and the laws that apply to you.

### 📧 Contact

Need a scraper for a different site, or found something wrong with this one? norm.data.scrapers@gmail.com

# Actor input Schema

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

Stop after this many cars in total. Leave empty for no limit. The Apify Free plan is always capped at 10.

## `makes` (type: `array`):

Car makes (87 on PakWheels, most ads first; type to search).

## `models` (type: `array`):

Make and model, like Honda Civic, Toyota Corolla or Suzuki Alto.

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

City where the car is (100 cities, most ads first).

## `provinces` (type: `array`):

Province where the car is.

## `keyword` (type: `string`):

Words to search in the ads, like "sunroof", "first owner" or "genuine".

## `sort` (type: `string`):

Order of results. Default: recently updated first.

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

PakWheels inspection rating, scores and report link, auction sheet (km, date, link), chassis number, features (also by group), seller comments, area and province, registration, color, assembly and body type.

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

Only cars from this price, in rupees (10 lacs = 1,000,000).

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

Only cars up to this price, in rupees.

## `minYear` (type: `integer`):

Only cars made in this year or later.

## `maxYear` (type: `integer`):

Only cars made in this year or earlier.

## `minMileageKm` (type: `integer`):

Only cars with at least this many kilometers.

## `maxMileageKm` (type: `integer`):

Only cars with at most this many kilometers.

## `minEngineCc` (type: `integer`):

Only cars with at least this displacement.

## `maxEngineCc` (type: `integer`):

Only cars with at most this displacement.

## `transmission` (type: `string`):

Automatic or manual.

## `fuelTypes` (type: `array`):

Engine type.

## `bodyTypes` (type: `array`):

Body style.

## `colors` (type: `array`):

Exterior color.

## `assembly` (type: `string`):

Assembled in Pakistan or imported.

## `registeredIn` (type: `array`):

City or province where the car is registered (Un-Registered for new imports).

## `sellerType` (type: `string`):

Individuals or dealers only.

## `origin` (type: `array`):

Country of the make.

## `categories` (type: `array`):

PakWheels model categories, like Luxury, Family cars, Jeep, Old or Urgent sale.

## `driveTrain` (type: `array`):

FWD, RWD, AWD or 4x4.

## `doors` (type: `array`):

Number of doors.

## `seats` (type: `array`):

Seating capacity.

## `inspectedOnly` (type: `boolean`):

Only cars with a PakWheels inspection report.

## `auctionSheetVerified` (type: `boolean`):

Only imported cars whose Japanese auction sheet PakWheels verified.

## `managedByPakWheels` (type: `boolean`):

Only cars PakWheels sells for the owner.

## `featuredOnly` (type: `boolean`):

Only paid featured ads.

## `auctionedOnly` (type: `boolean`):

Only cars from PakWheels auctions.

## `withPhotoOnly` (type: `boolean`):

Only ads with photos.

## `withVideoOnly` (type: `boolean`):

Only ads with a video.

## `sunroof` (type: `boolean`):

Only cars with a sunroof.

## `onlyNew` (type: `boolean`):

Skip cars saved by earlier runs with the same monitor name.

## `monitorName` (type: `string`):

Runs with the same name share their history. Use a different name for each schedule.

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

PakWheels used-car searches (https://www.pakwheels.com/used-cars/search/-/mk_toyota/ct_lahore/) or car ads (https://www.pakwheels.com/used-cars/honda-civic-2022-for-sale-in-karachi-12103950).

## Actor input object example

```json
{
  "maxItems": 10,
  "models": [
    "Toyota Corolla"
  ],
  "includeDetails": true
}
```

# Actor output Schema

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

No description

# 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 = {
    "maxItems": 10,
    "models": [
        "Toyota Corolla"
    ],
    "includeDetails": true
};

// Run the Actor and wait for it to finish
const run = await client.actor("normdata/pakwheels-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 = {
    "maxItems": 10,
    "models": ["Toyota Corolla"],
    "includeDetails": True,
}

# Run the Actor and wait for it to finish
run = client.actor("normdata/pakwheels-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 '{
  "maxItems": 10,
  "models": [
    "Toyota Corolla"
  ],
  "includeDetails": true
}' |
apify call normdata/pakwheels-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,normdata/pakwheels-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/8EjdPuEpDjcBXnPSg/builds/jQo6LjxpvU4spYSr9/openapi.json
