
PistonHeads Scraper
hipersoft/pistonheads-scraper
Scrape used cars for sale on PistonHeads UK: price, make, model, year, mileage, fuel, gearbox, body, colour, engine size, power, 0-62, owners, seller and dealer phone, location, photos and description. Filter by make, model, price, year. Export CSV/JSON.
Total users
2Monthly users
1Total runs
17Per car
$0.001Last rebuilt
Oct 26, 2026Overview
PistonHeads Scraper extracts used car listings from PistonHeads UK, Britain's favourite marketplace for performance, sports, classic and enthusiast cars with 200,000+ cars for sale. Search by make, model, keyword, price, year, mileage, fuel type, gearbox, body type, colour, drive train, seller type and postcode, and get for every car the price, make, model, year, mileage, fuel, gearbox, body type, colour, engine size, power (bhp), torque, 0-62 mph, fuel economy, gears, doors, seats, drive train, engine layout, previous owners, registration, seller name, dealer phone, seller location, distance, listing date and full photo gallery. Turn on Full description to also get the seller's description and postcode district. Export to CSV, Excel or JSON. Ideal for car dealers, valuation and pricing models, automotive market research and classic car investors.
What does PistonHeads Scraper do?
- 🇬🇧 UK used cars from PistonHeads, the full catalogue of 200,000+ cars.
- 🏎️ Make and model search: Porsche 911, BMW M3, Ferrari, Land Rover Defender, Ford Focus RS…
- 🔎 Keyword search: manual, GT3, M Sport, Clubsport, convertible…
- 💷 Price, year and mileage filters.
- ⛽ Fuel, gearbox, body type, colour and drive train filters.
- 🏪 Dealers or private sellers, with dealer phone numbers.
- 📍 Postcode and radius search with distance to each car.
- ⚙️ Full specs: engine size, bhp, torque, 0-62 mph, mpg, gears, doors, seats, layout, aspiration.
- 👥 Previous owners and registration.
- 🖼️ All photos in full size.
- 📝 Seller's description (optional).
- ↕️ Sort by newest, price, mileage, year or distance.
What data can you scrape from PistonHeads?
| Field | Description |
|---|---|
| Listing | ID, link, title, listing date, featured, badges |
| Car | Make, model, year, mileage, registration, previous owners |
| Price | Price (£), price on application, auction, plus VAT |
| Specs | Fuel, gearbox, body type, colour, engine size, bhp, torque, 0-62, mpg, gears, doors, seats |
| Drive | Drive train, engine layout, aspiration |
| Seller | Name, type (trade/private), location, dealer phone, online retailer, distance |
| Media | Main photo, full photo gallery, photo count |
| Text* | Full description, postcode district |
* With Full description turned on.
Use cases for UK car data
- Car dealers and traders: source stock, monitor competitor dealers and benchmark your prices.
- Valuation and pricing models: build price-by-mileage and price-by-year curves for any model.
- Classic and performance car investors: track asking prices of collectible models over time.
- Automotive market research: measure supply by make, model, fuel type and region.
- Lead generation: compile UK dealers with phone numbers and locations.
- Car buyers: find the best-value example across the whole UK in one spreadsheet.
How to scrape PistonHeads
- Click Try for free to open PistonHeads Scraper in Apify Console.
- Enter makes, optionally models and keywords.
- Set any price, year, mileage, fuel, gearbox or body filters, or a postcode and radius.
- Choose Sort by, set Max cars and click Start.
- Download the cars as CSV, Excel or JSON.
Input
Example input
{
"makes": ["Porsche"],
"models": ["911", "Cayman"],
"priceMax": 60000,
"yearMin": 2005,
"gearbox": ["manual"],
"sortBy": "priceLowToHigh",
"includeDetails": false,
"maxItems": 500
}
| Field | Description |
|---|---|
| Makes | Car makes; empty = all makes. |
| Models | Models of the chosen makes; "911" matches every 911 generation. |
| Keywords | One search per keyword. |
| Minimum / Maximum price | Asking price in £. |
| Year from / to | Registration year range. |
| Maximum mileage | Mileage limit in miles. |
| Fuel types, Gearbox, Body types, Colours, Drive train | Spec filters. |
| Seller type | Any, dealers or private sellers. |
| Postcode, Distance | Search around a UK postcode. |
| Sort by | Newest, relevance, price, mileage, year or distance. |
| Full description | Adds the seller's description and postcode district. |
| Max cars | Stop after this many (0 = no limit). |
Output
Car example
{
"listingId": "21170277",
"url": "https://www.pistonheads.com/buy/listing/21170277",
"title": "2011 PORSCHE 987 CAYMAN R",
"make": "Porsche",
"model": "Cayman 987 [05-12]",
"year": 2011,
"price": 48995,
"currency": "GBP",
"priceOnApplication": false,
"mileage": 30100,
"fuelType": "Petrol",
"gearbox": "Auto",
"bodyType": "Coupe",
"colour": "White",
"engineSizeCc": 3436,
"enginePowerBhp": 330,
"torqueLbFt": 273,
"acceleration0To62": 4.9,
"fuelConsumptionMpg": 30.4,
"gears": 7,
"doors": 2,
"seats": 2,
"driveTrain": "Rear Wheel Drive",
"engineLayout": "Mid Engined",
"aspiration": "Normally Aspirated",
"previousOwners": 2,
"sellerName": "Paul Stephens",
"sellerType": "Trade",
"sellerLocation": "Halstead, United Kingdom",
"listedAt": "2026-10-07T11:00:00Z",
"imageUrl": "https://img.pistonheads.com/processed-advert-images/21170277/29613a22-c94a-4c1b-8874-08370493140d-DSC_0119.jpg",
"photoCount": 5,
"postcodeDistrict": "CO9",
"description": "The Porsche 987 made its global appearance in September 2005…",
"search": "all cars"
}
Output schema
| Field | Type | Description |
|---|---|---|
listingId, url, title, listedAt, featured, badges |
mixed | Listing. |
make, model, year, mileage, registration, previousOwners |
mixed | Car. |
price, currency, priceOnApplication, auction, plusVat |
mixed | Price. |
fuelType, gearbox, bodyType, colour |
string | Main specs. |
engineSizeCc, enginePowerBhp, torqueLbFt, acceleration0To62, fuelConsumptionMpg |
number | Performance. |
gears, doors, seats, driveTrain, engineLayout, aspiration |
mixed | Build. |
sellerName, sellerType, sellerLocation, sellerPhone, sellerId, onlineRetailer, distanceMiles |
mixed | Seller (phone for dealers). |
imageUrl, images, photoCount |
mixed | Photos. |
description, postcodeDistrict |
string | With Full description. |
search, scrapedAt |
string | Source info. |
How much does it cost?
PistonHeads Scraper uses pay-per-car pricing: a small fixed price per car, with automatic discounts on higher Apify plans. See the Pricing tab for the exact price.
More car data
- AutoScout24 Scraper: European used cars.
- Cars & Bids Scraper: US enthusiast car auctions.
- Arabam Scraper: Turkish used cars.
FAQ
Can I scrape the whole PistonHeads catalogue? Yes. Leave all filters empty and set Max cars to 0 to collect all 200,000+ cars.
Why is the price sometimes empty?
Some sellers list cars as "price on application"; priceOnApplication is then true.
Why is the seller phone empty for some cars? Phone numbers are included for dealers (trade sellers) only.
How do I search near me?
Enter your Postcode and a Distance in miles; each car gets distanceMiles.
What formats can I export? CSV, Excel, JSON, XML, HTML and RSS, or read the results through the Apify API.
Can I integrate PistonHeads Scraper with other apps? PistonHeads Scraper can be connected with almost any cloud service or web app thanks to integrations on the Apify platform. It works with Make, Zapier, Slack, Airbyte, GitHub, Google Drive and many more, plus the Apify API, JS/Python clients and MCP. Or use webhooks to trigger an action whenever a run finishes.
Is it legal to scrape PistonHeads? The scraper only collects publicly listed car adverts. You are responsible for using the data in line with PistonHeads' terms and UK GDPR.
Notes
Original clean-room implementation. Returns only public data. Not affiliated with PistonHeads.
Input
| Field | Type | Description |
|---|---|---|
makesMakes | array | Car makes, e.g. Porsche, BMW, Ford, Land Rover. Leave empty for all makes. |
modelsModels | array | Optional models of the makes above, e.g. 911, Cayman, M3, Defender. "911" matches every 911 generation. |
keywordsKeywords | array | Optional keywords, e.g. manual, GT3, M Sport. Each keyword is a separate search. |
priceMinMinimum price (£) | integer | Lowest asking price. |
priceMaxMaximum price (£) | integer | Highest asking price. |
yearMinYear from | integer | Oldest registration year. |
yearMaxYear to | integer | Newest registration year. |
mileageMaxMaximum mileage | integer | Highest mileage in miles. |
fuelTypesFuel types | array | Only these fuel types. |
gearboxGearbox | array | Only these gearbox types. |
bodyTypesBody types | array | Only these body types. |
coloursColours | array | Only these colours. |
driveTrainDrive train | array | Only these drive trains. |
sellerTypeSeller type | string · any, trade, private | Dealers, private sellers or both. Default: "any" |
postcodePostcode | string | Optional UK postcode to search around, e.g. SW1A 1AA. Adds the distance to each car. |
distanceMilesDistance (miles) | integer | Radius around the postcode. Leave empty for the whole UK. |
sortBySort by | string · newest, relevance, priceLowToHigh, priceHighToLow, mileage, yearNewest… | Order of results. Default: "newest" |
includeDetailsFull description | boolean | Also collect the seller's full description and postcode district. Slower. Default: false |
maxItemsMax cars | integer | Stop after this many cars. 0 means no limit (the full catalogue is 200,000+ cars). Default: 200 |
proxyConfigurationProxy configuration | object | Not required for normal use. Default: {"useApifyProxy": false} |
API
curl -X POST "https://api.apify.com/v2/acts/hipersoft~pistonheads-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"makes": [
"Porsche"
],
"maxItems": 50
}'from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("hipersoft/pistonheads-scraper").call(run_input={
"makes": [
"Porsche"
],
"maxItems": 50
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('hipersoft/pistonheads-scraper').call({
"makes": [
"Porsche"
],
"maxItems": 50
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);Pricing
| Event | Price | Paid plans from |
|---|---|---|
| Car One used car listing scraped | $0.001 | $0.0005 |
You pay only for what the run returns. Set a maximum cost per run and it stops cleanly at that limit.
Related scrapers
Carousell Scraper
Scrape Carousell search listings: title, price, condition, location, seller, photo and URL. Requires your own Carousell app token.
242 runs · 2 users · $0.003 / listing scrapedGoogle Flights Scraper
Scrape flight options from Google Flights by route and date: airline, flight number, departure and arrival times, duration, stops, layovers and price. One-way or round-trip, any cabin and currency. For travel and price monitoring.
216 runs · 4 users · $0.004 / flight scrapedPinterest Scraper
Search Pinterest and scrape pins (title, description, destination link, image, pinner, board, saves), boards and users. Fast. For visual research, e-commerce, trend and marketing analysis.
151 runs · 2 users · $0.0034 / item scrapedGoogle Trends Scraper
Scrape Google Trends for any keyword: interest over time, related and rising queries, and interest by region. Per country and timeframe. For SEO, market and trend research. No setup.
139 runs · 6 users · $0.001 / keyword scrapedAliExpress Product Search Scraper
Search AliExpress by keyword and export one clean row per product — title, sale price, original price, image and product URL. Export to JSON, CSV or Excel.
135 runs · 3 users · $0.003 / product scrapedGoogle Maps Scraper
Search Google Maps and scrape places: name, category, full address, city, coordinates, rating, phone, website, Place ID and map link. Fast browser-free via Google's internal endpoint, no setup. For local lead generation and market research.
130 runs · 2 users · $0.005 / place scrapedSend the site and the fields. We build it and you get it first.