# Quikr Scraper: Used Cars & Bikes in India (`oswaldocarabano/quikr-scraper`) Actor

Scrape Quikr.com used cars and bikes across India: price in INR, make, model, variant, year, km, fuel, owners, insurance date, EMI offers, city, locality, seller type and photos. Optional detail pages add views, verification, specs and dealer name and e-mail. No login.

- **URL**: https://apify.com/oswaldocarabano/quikr-scraper.md
- **Developed by:** [Oswaldo Carabano](https://apify.com/oswaldocarabano) (community)
- **Categories:** E-commerce, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.90 / 1,000 listings

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

## Quikr Scraper: India used cars and bikes data

**Scrape used car and used bike listings from Quikr.com, one of India's
classifieds portals (QuikrCars / QuikrBikes).** All of India or any of the 12
cities Quikr has its own filter for, any brand, with prices in INR.

Every row carries the price, make, model, variant, year, kilometres, fuel type,
number of owners, insurance expiry, **every financing (EMI) offer Quikr shows**,
the city and locality, whether the seller is a private individual or a dealer,
the promotion tier and all photos. Turn on detail pages and you also get view
counts, verification status, the full specification table and the **dealer's
name, e-mail and Quikr profile**. Phone numbers are never collected (see Privacy).

**No login. No session cookies. No browser.** $2.90 per 1,000 listings.

***

### What you can use this for

| If you are… | You want |
|---|---|
| Building an **India used car price dataset** or valuation model | price, year, km, owners, fuel and variant on every row, all of India |
| A **dealer or marketplace** watching the competition | dealer vs private split, promotion tier (platinum / gold / basic), listing date |
| Doing **automotive lead generation** | dealer name, e-mail and Quikr profile from detail pages (100% of dealer ads) |
| Tracking **used bike and scooter prices** by city | the bikes vertical: 3,107 listings in India on 1 Oct 2026 |
| Studying **vehicle financing** | Quikr's EMI offers per ad: months, interest rate and monthly payment |

***

### What actually arrives in a row

**61 data fields per row. A median of 38 come back populated for cars and 36 for
bikes from the search results alone (n = 1,000 each), and 48 for cars / 46 for
bikes when you add detail pages (n = 201 / 153).**

Every percentage below was measured on the actor's own runs on the Apify
platform on **1 Oct 2026**, with its sample size. We do not list a field whose
fill rate we have not measured.

#### Always there — 100% (cars n = 1,000 · bikes n = 1,000)

`listing_id` · `url` · `title` · `brand` · `model` · `km_driven` · `city` ·
`city_id` · `seller_type` · `ad_tier` · `description` · `listed_on` ·
`image_count` · `emi_options` · `attributes` (every raw attribute Quikr attached)

#### Usually there

| Field | Cars | Bikes |
|---|---:|---:|
| `year` | 99.7% | 99.7% |
| `fuel_type` | 99.7% | — |
| `response_limit_reached` | 98.9% | 99.9% |
| `price_inr` · `emi_default_monthly_inr` | 97.7% | 98.4% |
| `locality` | 88.9% | 91.6% |
| `image_url` · `images` | 91.0% | 91.1% |
| `variant` | 87.5% | — |
| `color` | 58.5% | — |
| `body_type` (bike or scooter) | — | 55.7% |
| `insurance_valid_till` | 47.7% | 17.5% |
| `condition` | 30.0% | 19.9% |
| `owners` | 28.4% | 17.1% |
| `posted_via` | 27.4% | 17.7% |
| `is_spotlight` | 8.0% | 12.5% |
| `whatsapp_lead_pack` | 5.6% | 2.3% |

Quikr does not publish variant, fuel type or colour for bikes, so those are
empty on bike rows rather than guessed. `price_inr` is empty when the seller left
the price blank (Quikr shows "0"): **we never report a car as free**.

`latitude` · `longitude` (the exact map pin) are almost only set by private
sellers, so they stay empty unless you turn on `includePrivateSellerContact`:
28% of private car ads carried one in our test (n = 25); dealers 0–2%.

#### Detail pages (`includeDetails: true`)

| Field | Cars (n = 201) | Bikes (n = 153) |
|---|---:|---:|
| `views` · `verified` · `contact_actions` · `detail_attributes` (spec table) · `detail_title` | 100% | 99.3–100% |
| `highlights` | 100% | 98.7% |
| **Dealers:** `seller_name` · `seller_email` · `seller_id` · `seller_profile_url` | 100% (n = 38) | 100% (n = 45) |

Private sellers' name and e-mail come back only with `includePrivateSellerContact`
(100% of private car ads with detail pages in our test, n = 25).

#### Numbers you can compute with

Quikr prints numbers the Indian way. The actor parses them for you and keeps the
original next to it:

| Quikr shows | You get |
|---|---|
| `"10,50,000"` | `price_inr: 1050000` |
| `"1,05,000 kms"` | `km_driven: 105000` and `km_driven_raw` |
| `"2nd Owner"` | `owners: 2` and `owners_raw` |
| `"2027/02/28"` or `"2027-02-28"` | `insurance_valid_till: "2027-02-28"` |
| `"21 Sep 2026"` | `listed_on: "2026-09-21"` |
| `"Before 1995"` | `year: null`, `year_raw: "Before 1995"` |

***

### Example row (shortened)

```json
{
  "listing_id": 375880303,
  "url": "https://www.quikr.com/bikes-scooters/used-2015-tvs-star-city-plus-65000-kms-driven-in-chamrajpet-bangalore/p/375880303",
  "title": "TVS Star City Plus - 2015",
  "category": "bikes",
  "brand": "TVS",
  "model": "Star City Plus",
  "year": 2015,
  "km_driven": 65000,
  "body_type": "Bike",
  "price_inr": 30000,
  "price_display": "30,000",
  "currency": "INR",
  "emi_default_monthly_inr": 1426,
  "emi_options": [
    { "months": 24, "interest_rate_pct": 12.99, "monthly_payment_inr": 1426, "is_default": true },
    { "months": 12, "interest_rate_pct": 12.99, "monthly_payment_inr": 2679, "is_default": false }
  ],
  "city": "Bangalore",
  "locality": "Chamrajpet",
  "seller_type": "individual",
  "ad_tier": "platinum",
  "is_spotlight": true,
  "listed_on": "2026-09-21",
  "image_count": 2,
  "detail_scraped": true,
  "views": 47,
  "verified": true,
  "contact_actions": ["CALL", "CHAT"],
  "seller_email": null
}
```

***

### Input

| Field | Default | Notes |
|---|---|---|
| `category` | `cars` | `cars` or `bikes` |
| `city` | `all-india` | or one of the 12 cities with a Quikr filter |
| `brands` | all | e.g. `["Maruti Suzuki", "Hyundai"]`, checked against Quikr's live brand list |
| `maxResults` | 50 | hard cap, up to 10,000 |
| `includeDetails` | `false` | one extra request per listing, separate event |
| `includePrivateSellerContact` | `false` | see Privacy below |
| `maxConcurrency` | 4 | |

**Getting past Quikr's 1,128-results limit.** A single Quikr search stops
returning new ads after 47 pages (1,128 listings), and past that point it keeps
answering with the same ads forever. When you ask for more than that, the actor
splits the search by brand automatically: the brand counts add up to 1,658 of
1,660 cars and every brand fits under the limit (measured 23 Sep; on 1 Oct a
5,000-listing bike request was split into 28 brand searches automatically). Pagination stops on repeated ad
IDs, so you are never charged twice for the same ad.

**Cities.** Quikr has its own city filter for Ahmedabad, Bangalore, Chandigarh,
Chennai, Coimbatore, Delhi (with Noida, Gurgaon, Greater Noida, Faridabad),
Hyderabad, Kochi, Kolkata, Mumbai (with Thane, Navi Mumbai, Kalyan), Mysore and
Pune. Ads from every other city are included in All of India.

***

### Privacy

**92.2% of Quikr car ads and 94.9% of bike ads are posted by private
individuals** (our 1 Oct 2026 runs, n = 1,000 each). For them, by
default, the actor leaves the name, e-mail, user ID, profile link and exact map
pin empty, and removes phone numbers or e-mails typed into the description.
**Dealers' data is always included.**

Set `includePrivateSellerContact: true` only if you have a lawful basis to
process private individuals' personal data.

**The seller's phone number is never collected**, for anyone: Quikr only reveals
it after a login and one-time-password step, and this actor never logs in.

***

### Pricing

| Event | Price |
|---|---:|
| Actor start | $0.00001 |
| **Listing** | **$0.0029** |
| Detail page (only with `includeDetails`) | $0.0015 |

You are never charged for an error row or a duplicate. When the run reaches the
maximum cost you set, it stops cleanly and says so in the status message: no
listing is delivered without being charged, and none is charged without being
delivered.

***

### Frequently asked questions

**What data can I scrape from Quikr?**
Used car and bike listings: price in INR, make, model, variant, year, km driven,
fuel type, colour, number of owners, insurance validity, EMI offers, city,
locality, seller type, promotion tier, listing date, description and photos.
Detail pages add views, verification, highlights, the specification table and
dealer contact data.

**How many listings are there?**
1,683 used cars and 3,107 used bikes and scooters across India on 1 Oct 2026.
With `maxResults` above 1,128 the actor reaches the whole inventory by splitting
the search by brand.

**Does it need a Quikr account?**
No. No account, no session cookie and no browser: the actor reads the same
public search data the Quikr website loads.

**Can I get the seller's phone number?**
No. Quikr shows it only after a login and OTP step, and this actor never logs in.
For dealers you get the name, e-mail and profile link from the detail page.

**Which cities can I filter on? Quikr cars Bangalore, Quikr bikes Chennai…**
Bangalore, Delhi NCR, Mumbai, Hyderabad, Chennai, Pune, Kolkata, Ahmedabad,
Coimbatore, Kochi, Chandigarh and Mysore have Quikr's own city filter. Used cars
and second hand bikes in any other city (Jaipur, Lucknow, Indore…) come with
All of India; filter them on the `city` column.

**How fast is it?**
On the Apify platform: 1,000 listings in 44 s with 512 MB, and 80 listings with
detail pages in about 30 s.

**Is there a Quikr API?**
Not a public one. This actor is the practical Quikr API for cars and bikes: one
JSON, CSV or Excel row per ad, ready for the Apify API, schedules and webhooks.

**Does it cover Quikr real estate or jobs?**
No. QuikrHomes and QuikrJobs run on separate applications; this actor covers the
cars and bikes verticals.

**How fresh is the data?**
Live. Every search page and every detail page is fetched from Quikr during your
run; `scraped_at` on each row says when.

***

### Support and data removal

Questions, bugs and feature requests: open an issue on the actor page.

**Data removal:** if a listing concerns you, write to **privacy@actorstack.dev**.

***

### Disclaimer

This actor extracts **publicly available** listing data — no login, no session
cookies, no account. You are responsible for how you use the data, including
compliance with India's Digital Personal Data Protection Act and with Quikr's
terms where they apply to you. It is not affiliated with or endorsed by Quikr.

# Actor input Schema

## `category` (type: `string`):

Which Quikr vertical to scrape. Counts measured on 23 Sep 2026. Quikr real estate and jobs run on different applications and are not covered by this actor.

## `city` (type: `string`):

Quikr has its own city filter only for these 12 cities (verified one by one on 23 Sep 2026). Listings from every other city (Lucknow, Jaipur, Noida…) are included in All of India.

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

Only these makes, e.g. Maruti Suzuki, Hyundai, Royal Enfield. Checked against the brand list Quikr shows for your category and city; an unknown brand stops the run with a clear message and nothing is charged. Empty = every brand.

## `maxResults` (type: `integer`):

Hard cap for this run: the actor never delivers or charges more than this. Quikr shows at most 1,128 results per search, so above that the actor automatically splits the search by brand to reach the whole inventory (1,658 of 1,660 cars covered).

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

Adds views, verification, highlights, the specification table and, for dealers, their name, e-mail and Quikr profile from each ad page (never a phone number). One extra request per listing (31x the bytes of a search row), so it is billed as a separate event and is off by default.

## `includePrivateSellerContact` (type: `boolean`):

Off by default. About 92% of Quikr car ads and 95% of bike ads are posted by private individuals (measured 1 Oct 2026). With this off, their name, e-mail, user ID, profile link and exact map pin are left empty, and phone numbers or e-mails typed in their descriptions are removed. Dealers' data is always included. Turn it on only if you have a lawful basis to process private individuals' personal data. The phone number is never collected: Quikr only reveals it after a login step.

## `maxConcurrency` (type: `integer`):

Parallel requests. Quikr answered 12 parallel requests (13.3 requests/s) without a single error or rate limit when measured on 23 Sep 2026; the default of 4 stays well below that.

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

Optional. Quikr answers without a proxy, and the actor switches to an Indian residential IP by itself if it ever starts getting blocked.

## Actor input object example

```json
{
  "category": "cars",
  "city": "delhi",
  "brands": [],
  "maxResults": 30,
  "includeDetails": false,
  "includePrivateSellerContact": false,
  "maxConcurrency": 4,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `listings` (type: `string`):

One row per ad: price, make, model, variant, year, km, fuel, owners, insurance, EMI offers, city, locality, seller type and photos.

## `runSummary` (type: `string`):

Counts of delivered rows, detail pages, errors and requests for this run.

## `errors` (type: `string`):

Every error of the run in plain English (always written, empty when nothing failed).

# 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 = {
    "city": "delhi",
    "maxResults": 30
};

// Run the Actor and wait for it to finish
const run = await client.actor("oswaldocarabano/quikr-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 = {
    "city": "delhi",
    "maxResults": 30,
}

# Run the Actor and wait for it to finish
run = client.actor("oswaldocarabano/quikr-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 '{
  "city": "delhi",
  "maxResults": 30
}' |
apify call oswaldocarabano/quikr-scraper --silent --output-dataset

```

## MCP server setup

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