# Truecar Scraper 🚙 (`shahidirfan/truecar-scraper`) Actor

Extract detailed vehicle data from TrueCar instantly. Gather pricing, model specs, mileage, dealer info, and more from thousands of car listings. Perfect for market analysis, price monitoring, or inventory tracking. Get structured automotive data with ease.

- **URL**: https://apify.com/shahidirfan/truecar-scraper.md
- **Developed by:** [Shahid Irfan](https://apify.com/shahidirfan) (community)
- **Categories:** Automation, Developer tools, E-commerce
- **Stats:** 16 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $0.99 / 1,000 results

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

### What does TrueCar Used Car Scraper do?

TrueCar Used Car Scraper collects public used-car listings from TrueCar and saves them as clean, structured records. Enter a make and model, or paste a TrueCar search URL with its location and year filters, then choose how many listings you want.

Each record can include the VIN, year, make, model, trim, price, mileage, specifications, fuel economy, vehicle history, dealership details, location, and image URLs. The dataset is useful for automotive market research, inventory monitoring, price comparisons, dealership analysis, vehicle sourcing, and data enrichment.

### Why use TrueCar Used Car Scraper?

- **Build structured vehicle datasets** - Collect listing information in a consistent format instead of copying details manually.
- **Monitor prices and inventory** - Run the same search on a schedule to compare prices, mileage, available vehicles, and dealerships over time.
- **Use precise search filters** - Pass a TrueCar search URL to preserve make, model, location, distance, and year filters selected on the website.
- **Get detailed vehicle records** - Capture core vehicle identity, trim and style, pricing signals, mechanical specifications, MPG values, history indicators, dealer information, and image galleries when available.
- **Keep the output clean** - Empty values are removed, and duplicate records are skipped using the VIN or listing ID.
- **Collect results quickly** - The Actor retrieves structured listing data with pagination and saves records in batches as they are collected.
- **Connect your workflow** - Download JSON, CSV, Excel, or XML files, schedule repeat runs, use webhooks, or retrieve datasets through the Apify API.

### What data can you extract from TrueCar?

Each dataset item represents one TrueCar used-vehicle listing. Some fields are optional because TrueCar does not publish every detail for every vehicle.

| Field | Type | Description |
| --- | --- | --- |
| `listing_id` | String | TrueCar listing identifier. |
| `vin` | String | Vehicle identification number. |
| `url` | String | Direct TrueCar listing URL generated from the VIN. |
| `image_url` | String | Primary vehicle image URL. |
| `image_urls` | Array | Available vehicle image URLs. |
| `image_count` | Number | Number of image URLs collected. |
| `year` | Number | Model year. |
| `make` | String | Vehicle manufacturer name. |
| `make_slug` | String | TrueCar make slug. |
| `make_id` | String | TrueCar make identifier. |
| `model` | String | Vehicle model name. |
| `model_slug` | String | TrueCar model slug. |
| `model_id` | String | TrueCar model identifier. |
| `trim` | String | Vehicle trim name. |
| `style` | String | Vehicle style or package name. |
| `style_id` | String | TrueCar style identifier. |
| `drive_type` | String | Drive configuration, such as front-wheel drive. |
| `electric_range` | Number | Electric driving range when available. |
| `price` | Number | Current listing price. |
| `base_msrp` | Number | Base manufacturer suggested retail price. |
| `total_msrp` | Number | Total MSRP when published. |
| `price_exclusion` | String | Price exclusion or pricing condition label. |
| `price_discount_label` | String | Discount label when shown. |
| `subtotal` | Number | Listing subtotal when published. |
| `price_quality` | String | TrueCar market price quality label. |
| `mileage` | Number | Vehicle mileage. |
| `condition` | String | Listing condition, normally `USED`. |
| `body_style` | String | Body style, such as sedan or SUV. |
| `certified_pre_owned` | Boolean | Whether the vehicle is certified pre-owned. |
| `fuel_type` | String | Fuel type. |
| `transmission` | String | Transmission type. |
| `engine` | String | Engine description. |
| `exterior_color` | String | Exterior color. |
| `interior_color` | String | Interior color. |
| `key_features` | Array | Listed equipment and key vehicle features. |
| `mpg_city` | Number | City fuel economy. |
| `mpg_highway` | Number | Highway fuel economy. |
| `mpg_combined` | Number | Combined fuel economy. |
| `accident_count` | Number | Reported accident count when available. |
| `owner_count` | Number | Reported number of previous owners. |
| `is_clean_title` | Boolean | Whether the listing reports a clean title. |
| `dealership_id` | String | TrueCar dealership identifier. |
| `dealership_database_id` | String | Dealer database identifier. |
| `dealership_name` | String | Dealership name. |
| `parent_dealership_name` | String | Parent dealership name when available. |
| `location_city` | String | Dealership city. |
| `location_state` | String | Dealership state abbreviation. |
| `location` | String | Combined city and state label. |
| `is_multi_location` | Boolean | Whether the listing is associated with multiple locations. |
| `tcplus_eligible` | Boolean | TrueCar Plus eligibility flag. |
| `distance_retailing` | Boolean | Whether distance retailing is available. |
| `is_saved` | Boolean | Saved-listing flag returned by TrueCar. |
| `partner_preferred` | Boolean | Partner preference flag returned by TrueCar. |
| `cursor` | String | Pagination cursor for the listing result. |

### How to scrape TrueCar data

1. Open TrueCar and create a used-car search, or decide which make and model you want to collect.
2. In Apify Console, enter a search URL, location, make, or model.
3. Set `results_wanted` to the maximum number of listings you want.
4. Add year limits if needed, or keep the year and location filters in your TrueCar search URL.
5. Run the Actor and review the dataset preview.
6. Download the results or connect the dataset to your spreadsheet, database, webhook, or application.

A complete TrueCar search URL is the best option when you need location, distance, or other filters that are already configured on the site. When a URL includes make and model path segments, those values take priority over the separate `make` and `model` inputs. For a location-only URL such as `listings/location-dallas-tx/`, also provide a valid `make` and optional `model`. Explicit `year_min` and `year_max` values take priority over year parameters in the URL.

### Input Parameters

| Parameter | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `startUrl` | String | No | None | Public TrueCar used-car search URL. Use this to preserve location, distance, make, model, and URL-based year filters. |
| `location` | String | No | None | Optional city and two-letter state, such as `Dallas, TX`. |
| `make` | String | No | None | Optional vehicle make slug, such as `honda`, `toyota`, or `ford`. Combine it with `model`, or use it by itself to search across that make. |
| `model` | String | No | None | Optional vehicle model slug, such as `civic`, `camry`, or `f-150`. It can be used with or without `make`. |
| `year_min` | Integer | No | None | Minimum model year. |
| `year_max` | Integer | No | None | Maximum model year. |
| `results_wanted` | Integer | No | `20` | Maximum number of unique listings to save. The minimum is `1`. |
| `proxyConfiguration` | Object | No | US Residential Proxy | Optional proxy settings. US Residential routing is enabled by default for more consistent collection; users can disable it for direct requests. |

### Usage Examples

#### Basic make and model search

Collect 20 used Chevrolet Malibu listings using the make and model fields.

```json
{
    "make": "chevrolet",
    "model": "malibu",
    "results_wanted": 20
}
```

#### Search by model only

Collect used Malibu listings without specifying a manufacturer.

```json
{
    "model": "malibu",
    "results_wanted": 20
}
```

#### Search in a location

Collect used listings near Dallas, Texas.

```json
{
    "location": "Dallas, TX",
    "results_wanted": 20
}
```

#### Filter by make, model, and year range

Collect used Toyota Camry listings from a specific model-year range.

```json
{
    "make": "toyota",
    "model": "camry",
    "year_min": 2020,
    "year_max": 2023,
    "results_wanted": 50
}
```

#### Use a location-filtered TrueCar URL

Use a public search URL when the search includes a location and other TrueCar filters.

```json
{
    "startUrl": "https://www.truecar.com/used-cars-for-sale/listings/ford/f-150/location-dallas-tx/?yearMin=2020&yearMax=2024",
    "results_wanted": 100
}
```

### Sample Output

The following example shows the shape and level of detail available in one listing record. Optional fields may be omitted when TrueCar does not provide them.

```json
{
    "listing_id": "Q29uc3VtZXJTdW1tYXJ5TGlzdGluZy0xRzFaQzVTVDJSRjE5NzM2OQ==",
    "vin": "1G1ZC5ST2RF197369",
    "url": "https://www.truecar.com/used-cars-for-sale/listing/1G1ZC5ST2RF197369/",
    "image_url": "https://listings-prod.tcimg.net/listings/223574/69/73/1G1ZC5ST2RF197369/001_2026080707.jpg",
    "image_urls": [
        "https://listings-prod.tcimg.net/listings/223574/69/73/1G1ZC5ST2RF197369/001_2026080707.jpg",
        "https://listings-prod.tcimg.net/listings/223574/69/73/1G1ZC5ST2RF197369/002_2026080707.jpg",
        "https://listings-prod.tcimg.net/listings/223574/69/73/1G1ZC5ST2RF197369/003_2026080707.jpg"
    ],
    "image_count": 3,
    "year": 2024,
    "make": "Chevrolet",
    "make_slug": "chevrolet",
    "model": "Malibu",
    "model_slug": "malibu",
    "trim": "LS",
    "style": "LS with 1FL",
    "drive_type": "FRONT_WHEEL_DRIVE",
    "price": 14495,
    "price_quality": "EXCELLENT",
    "mileage": 63026,
    "condition": "USED",
    "body_style": "SEDAN",
    "certified_pre_owned": false,
    "fuel_type": "Gas",
    "transmission": "Automatic",
    "engine": "1.5L Inline-4 Gas Turbocharged",
    "exterior_color": "White",
    "interior_color": "Black",
    "key_features": [
        "Premium Wheels",
        "Apple CarPlay",
        "Android Auto",
        "Blind Spot System",
        "Backup Camera"
    ],
    "mpg_city": 27,
    "mpg_highway": 35,
    "mpg_combined": 30,
    "accident_count": 0,
    "owner_count": 3,
    "is_clean_title": true,
    "dealership_name": "Koons Woodbridge Buick GMC",
    "location_city": "Woodbridge",
    "location_state": "VA",
    "location": "Woodbridge, VA"
}
```

### Tips for best results

- **Use lowercase slugs** - Enter values such as `toyota`, `camry`, `ford`, or `f-150` in the make and model fields.
- **Use a complete search URL for local inventory** - A URL copied after applying a city, ZIP code, distance, price, or year filter gives the most precise search scope.
- **Use the location field for city searches** - Enter a city followed by its two-letter state, such as `Dallas, TX`.
- **Start with 20 listings** - Review the dataset preview before increasing the result limit.
- **Use year fields for broad model-year filtering** - Set `year_min` and `year_max` when you want the same year range regardless of the URL.
- **Expect optional values** - Prices, MSRP values, history indicators, MPG, dealer fields, and images vary by listing.
- **Schedule stable searches** - Reuse the same filtered search URL for recurring price and inventory snapshots.
- **Review duplicates by VIN** - The Actor removes duplicate VINs within a run, which helps when listings appear across pages or locations.

### Integrations and exports

- **Google Sheets** - Export listings for price comparisons, inventory reviews, and team analysis.
- **Airtable** - Create searchable vehicle inventory tables with dealer, location, price, and specification fields.
- **Webhooks** - Send completed run notifications or dataset records to downstream workflows.
- **Make or Zapier** - Add new listings to alerts, CRM workflows, or reporting automations.
- **Apify API** - Retrieve datasets programmatically for dashboards, databases, and internal applications.
- **JSON** - Use structured listing records in scripts, applications, and data pipelines.
- **CSV and Excel** - Analyze vehicle prices, mileage, locations, and dealer inventory in spreadsheets.
- **XML** - Exchange listing data with systems that accept XML feeds.

### Frequently Asked Questions

#### Can I collect listings from a specific city or ZIP code?

Yes. Create the filtered used-car search on TrueCar and paste its public URL into `startUrl`. The Actor preserves supported location information from the URL.

#### Can I search by URL, location, make, or model without providing every field?

Yes. Provide any one of these inputs or combine them. If no vehicle filter is supplied, the Actor collects general used inventory. A complete vehicle URL can also provide the search scope by itself.

#### Can I turn off residential proxy routing?

Yes. Set `useApifyProxy` to `false` in `proxyConfiguration` when you want to use direct requests.

#### Which input takes priority when I provide both a URL and separate filters?

The make and model found in a valid `startUrl` take priority over the separate make and model fields. Explicit `year_min` and `year_max` values take priority over year values in the URL.

#### How many listings can I collect?

Set `results_wanted` to the number of unique listings you need. The Actor paginates through results until it reaches that limit or TrueCar has no more matching listings.

#### Are listings deduplicated?

Yes. The Actor skips duplicate records using the VIN or listing ID before saving them.

#### Why are some fields missing?

TrueCar does not publish the same information for every vehicle. Missing price details, history, dealer fields, MPG values, or images usually mean that the source listing did not provide that value.

#### Can I export TrueCar data to CSV or Excel?

Yes. Apify datasets can be downloaded as CSV, Excel, JSON, XML, and other supported formats after the run finishes.

#### Can I schedule recurring TrueCar searches?

Yes. Create an Apify schedule to refresh a saved make, model, or filtered search URL hourly, daily, weekly, or at another interval.

#### Is this Actor suitable for non-technical users?

Yes. Enter the search fields or paste a public TrueCar URL in Apify Console, choose a result limit, run the Actor, and download the dataset without writing code.

#### Is it legal to scrape TrueCar?

Collecting public web data can be lawful, but you are responsible for complying with applicable laws, TrueCar terms, privacy obligations, and restrictions related to your intended use of the data.

### Related Actors

- [Cars.com Scraper](https://apify.com/shahidirfan/cars-com-scraper) - Collect public Cars.com vehicle listings with prices, mileage, VINs, dealer details, locations, images, and listing URLs.
- [Bid.cars Scraper](https://apify.com/shahidirfan/bid-cars-scraper) - Collect auction vehicle listings with lot details, VINs, bids, damage information, seller data, and images from Bid.cars.
- [Yallamotor Cars Scraper](https://apify.com/shahidirfan/yallamotor-cars-scraper) - Collect used-car listings, prices, specifications, seller details, locations, and images from YallaMotor in the UAE and Egypt.

### Support

For issues, feature requests, or custom Actor work, use the Issues tab on the Actor page or contact the developer through Apify.

### Legal Notice

TrueCar Used Car Scraper is intended for legitimate collection of publicly available vehicle-listing data. Users are responsible for using the data responsibly and complying with applicable laws, TrueCar terms, privacy requirements, and website policies.

# Actor input Schema

## `startUrl` (type: `string`):

Start scraping from a specific Truecar search URL.

## `location` (type: `string`):

Optional city and two-letter state, for example Dallas, TX.

## `make` (type: `string`):

Car make (e.g., Chevrolet, Toyota).

## `model` (type: `string`):

Car model (e.g., Malibu, Camry).

## `year_min` (type: `integer`):

Minimum vehicle year.

## `year_max` (type: `integer`):

Maximum vehicle year.

## `results_wanted` (type: `integer`):

The maximum number of results to collect.

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

Optional. US Residential Proxy is enabled by default; turn it off to use direct requests.

## Actor input object example

```json
{
  "location": "Dallas, TX",
  "make": "chevrolet",
  "model": "malibu",
  "results_wanted": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `overview` (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 = {
    "location": "Dallas, TX",
    "make": "chevrolet",
    "model": "malibu",
    "results_wanted": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("shahidirfan/truecar-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 = {
    "location": "Dallas, TX",
    "make": "chevrolet",
    "model": "malibu",
    "results_wanted": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("shahidirfan/truecar-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 '{
  "location": "Dallas, TX",
  "make": "chevrolet",
  "model": "malibu",
  "results_wanted": 20
}' |
apify call shahidirfan/truecar-scraper --silent --output-dataset

```

## MCP server setup

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