# Used Car Search: Autotrader, CarGurus, Craigslist & Facebook (`quillstone-labs/used-car-search`) Actor

Search 10 used-car sites at once: Autotrader, CarGurus, Craigslist, Facebook Marketplace, CarMax, Carvana, OfferUp, Autolist, Bring a Trailer and ClassicCars.com. Filter by make, model, ZIP, price, year and miles. VIN-merged, fair-price check, new listing alerts.

- **URL**: https://apify.com/quillstone-labs/used-car-search.md
- **Developed by:** [Quillstone Labs](https://apify.com/quillstone-labs) (community)
- **Categories:** E-commerce, Automation, AI
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 car listings

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

## Used Car Search

Search ten used-car sites at once: **Autotrader, CarGurus, Craigslist, Facebook Marketplace, CarMax, Carvana, OfferUp, Autolist, Bring a Trailer and ClassicCars.com**. Enter a make, model and ZIP code, and you get one list of every matching car nearby, from dealers and private sellers. Each car appears once even when several sites list it, with every site's price side by side, and a price check saying whether it's a good deal.

You don't need an account, an API key or a login on any of the sites. A search takes about 10 seconds.

### What you get

| | |
|---|---|
| Ten sites in one search | Autotrader, CarGurus, Craigslist, Facebook Marketplace, CarMax, Carvana, OfferUp and Autolist, plus Bring a Trailer auctions and ClassicCars.com for older and collector cars |
| Duplicates merged | The same car on three sites is one row, matched by VIN, with each site's price and link, so you see who's asking least |
| Price check | Each car compared with Kelley Blue Book's fair price (when known) or with similar cars in your search: *well below typical*, *about typical*, *above typical* |
| Scam and bait flags | Prices far under typical are flagged, and ads where the "price" is really a down payment are called out |
| Dealers and private sellers | Filter to either, or get both |
| Plain answers | A short summary per car, like *2018 Ford F150 Platinum, 61,229 miles: $32,900 at BBC Motorsports in Dallas, TX (2 mi away). Same VIN also listed on CarGurus, Autolist ($33,125). $3,270 below Kelley Blue Book's fair price of $36,170.* |
| Full details | Year, make, model, trim, price, miles, VIN, distance, dealer, city, color, drivetrain, fuel, days listed, photo |
| Excel report | A Cars sheet with prices, price checks and links, and a Sites sheet showing what each site returned |
| Site status | If a site is down or blocking, the others still run and the summary says which one was skipped |
| New listing and price drop alerts | Turn on **Only new cars and price drops** and schedule it: each run returns only cars that are new since the last run, or cheaper than last time |

### Example inputs

Camrys under $20,000 within 50 miles of San Francisco:

```json
{ "make": "Toyota", "model": "Camry", "zipCode": "94103", "maxPrice": 20000 }
```

The best-priced F-150s from 2018 on near Dallas, private sellers only:

```json
{ "make": "Ford", "model": "F-150", "zipCode": "75201", "minYear": 2018, "sellerType": "private", "sortBy": "deal" }
```

Every Honda under 60,000 miles you can go and see within 25 miles, without delivery-only cars:

```json
{ "make": "Honda", "zipCode": "60601", "radiusMiles": 25, "maxMileage": 60000, "includeDelivery": false }
```

A daily alert for new Civics under $15,000 near Chicago, and for price drops (schedule it daily, and connect email, Slack or a webhook in the task's Integrations tab):

```json
{ "make": "Honda", "model": "Civic", "zipCode": "60601", "maxPrice": 15000, "onlyNewAndPriceDrops": true, "watchName": "civic-under-15k" }
```

### Ready-made examples

Open one, enter your ZIP code, and click **Start**:

- [Used Tesla Model 3 deals near you](https://apify.com/quillstone-labs/used-car-search/examples/used-tesla-model-3-deals): every Model 3 for sale nearby, best deals first
- [Used cars under $10,000](https://apify.com/quillstone-labs/used-car-search/examples/used-cars-under-10k): cheap cars for sale near you, from dealers and private sellers
- [New listings and price drop alert](https://apify.com/quillstone-labs/used-car-search/examples/car-price-drop-alert): schedule it and hear about new cars and price cuts

### Who uses it

- **Car buyers** who want every listing in one place instead of checking ten sites.
- **Dealers and flippers** looking for cars priced under market, and watching what competitors ask.
- **Researchers and analysts** tracking used-car prices by model and region.
- **Automated tools and assistants** asked "find me a used RAV4 under $25k near 30301", which need one clean answer instead of ten websites.

### How to use it

1. On the **Input** tab, enter the **Make**, **Model** and **ZIP code**. Leave the model empty to see every model of a make.
2. Set the distance and any filters: years, price, miles, dealer or private seller.
3. Click **Start**.
4. Open the **Output** tab. **Cars** lists every car with its price check. **Excel report** downloads it all as a spreadsheet.

**Tip:** sort by **Best deal** to see the cheapest cars for what they are first.

### Getting alerts for new listings and price drops

1. Set up your search, then turn on **Only new cars and price drops** and give it a **Watch name**, like `civic-under-15k`.
2. Click **Save as a new task**, and on the task's **Schedule** tab run it daily (or hourly).
3. The first run returns every matching car and remembers them. Each later run returns only cars that weren't there before, marked `"watchStatus": "new"`, and cars whose price went down, marked `"price-drop"` with `previousPrice` and `priceDrop`.
4. To be told, add an integration to the task: email, Slack, Google Sheets, Zapier, Make, n8n or a webhook. A run with nothing new returns no cars and costs almost nothing.

The narrower the search, the more reliable the alerts. When a site has more matches than a run reads (**Most cars per site**), the run log and the summary say so; narrow the search with a price, year or mileage limit, or raise that number.

### Getting your results into Excel or Google Sheets

- **Excel report:** every run saves `cars-report.xlsx`, linked as **Excel report** on the Output tab. It opens in Excel, Google Sheets, LibreOffice and Numbers.
- **Other formats:** the **Export** button on the Output tab downloads the results as CSV, JSON, XML or HTML.
- **Google Sheets automatically:** add Apify's Google Sheets integration to a saved task and every run lands in a sheet.

### Using it from your own code

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('quillstone-labs/used-car-search').call({
    make: 'Toyota',
    model: 'Camry',
    zipCode: '94103',
    maxPrice: 20000,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0].explanation);
```

Or in one request, which waits for the run and returns the cars:

```bash
curl -X POST "https://api.apify.com/v2/acts/quillstone-labs~used-car-search/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"make": "Toyota", "model": "Camry", "zipCode": "94103", "maxPrice": 20000}'
```

### Use it from an AI assistant

Claude, Cursor, VS Code and other assistants that support MCP can run this Actor for you. Add this server to your assistant's MCP settings:

```
https://mcp.apify.com?tools=quillstone-labs/used-car-search
```

The first time it connects, a browser window opens so you can sign in to Apify. Then just ask, for example *"Find me a used Toyota Camry under $20,000 near 94103 and tell me which ones are good deals."* Each car comes with a plain-English `explanation` the assistant can pass straight on, and every output field is described, so it knows what each one means. To set up several Actors at once, use Apify's [MCP configurator](https://mcp.apify.com/).

### What a result looks like

```json
{
    "explanation": "2018 Ford F150 Platinum, 61,229 miles: $32,900 at BBC Motorsports in Dallas, TX (2 mi away). Same VIN also listed on CarGurus, Autolist ($33,125). $3,270 below Kelley Blue Book's fair price of $36,170.",
    "title": "Used 2018 Ford F150 Platinum w/ Equipment Group 701A Luxury",
    "year": 2018,
    "make": "Ford",
    "model": "F150",
    "trim": "Platinum",
    "price": 32900,
    "priceRating": "below typical",
    "typicalPrice": 36170,
    "typicalPriceSource": "Kelley Blue Book fair purchase price",
    "priceVsTypical": -3270,
    "priceVsTypicalPercent": -9,
    "mileage": 61229,
    "distanceMiles": 2.45,
    "sellerType": "dealer",
    "sellerName": "BBC Motorsports",
    "city": "Dallas",
    "state": "TX",
    "zip": "75207",
    "sourceName": "Autotrader",
    "url": "https://www.autotrader.com/cars-for-sale/vehicle/790005927",
    "siteCount": 3,
    "alsoListedOn": "CarGurus $32,900; Autolist $33,125",
    "listedOn": [
        { "site": "Autotrader", "price": 32900, "url": "https://www.autotrader.com/cars-for-sale/vehicle/790005927" },
        { "site": "CarGurus", "price": 32900, "url": "https://www.cargurus.com/Cars/inventorylisting/vdp.action?listingId=455958928" },
        { "site": "Autolist", "price": 33125, "url": "https://www.autolist.com/ford-f+150#vin=1FTEW1EG0JFB67246" }
    ],
    "matchedBy": "vin",
    "vin": "1FTEW1EG0JFB67246",
    "condition": "used",
    "exteriorColor": "White Platinum Clearcoat Metal",
    "bodyStyle": "Truck",
    "drivetrain": "4 Wheel Drive",
    "fuelType": "Gasoline",
    "daysListed": 49,
    "siteDealRating": "Great",
    "siteDealRatingFrom": "Autotrader"
}
```

The run's **Search summary** (`SUMMARY` in the key-value store) gives the lowest, median and highest price, and what each site returned.

### How much does it cost?

You pay per car in the results, not for run time, and Apify's platform costs are included. Duplicates are merged before you're charged, so a car listed on three sites costs the same as a car listed on one. The price check, the summary, the Excel report and the site status cost nothing extra. Exact prices are on the **Pricing** tab, and they're lower on Apify's paid plans. To cap what a run can cost, lower **Most cars per site** or set **Max total charge** in the run options.

### FAQ

**Which sites does it search?**
Autotrader, CarGurus, Craigslist, Facebook Marketplace, CarMax, Carvana, OfferUp, Autolist, Bring a Trailer and ClassicCars.com. Choose a subset under **Sites** if you only want some. Autotrader's listings include the cars Kelley Blue Book shows, which come from the same source.

**Why isn't Cars.com, eBay Motors or TrueCar included?**
Those sites block automated searches from cloud servers, so results would be unreliable. Their dealer cars usually appear on Autotrader, CarGurus or Autolist too, so most of the same cars still show up.

**How does it know two listings are the same car?**
Dealer listings carry the VIN, and the same VIN on two sites is the same car. Private sellers rarely post a VIN, so those are matched when the year, price and mileage are all the same, and the row says so (`matchedBy`).

**Where does the price check come from?**
When Autotrader has the car, its Kelley Blue Book fair purchase price. Otherwise the median price of similar cars in the same search: same model, a year either side, similar mileage, and private sellers compared with private sellers. Cars with nothing to compare against have no rating.

**What does "suspiciously low" mean?**
The price is 40% or more under similar cars. That's sometimes a real bargain, but more often a salvage or rebuilt title, a typo, a car with serious problems, or a scam. Ads that mention financing with a very low price usually show the down payment, and are marked "likely a down payment".

**Does it find classic and collector cars?**
Yes. Bring a Trailer auctions and ClassicCars.com are searched too. Collector cars are often bought from across the country and shipped, so cars 25 or more years old from those two sites are included wherever they are; newer cars from them only when they're in your area. For an auction, the price is the current bid and `auctionEndsAt` says when it closes. Set **Newest year** to an older year to search only classics; CarMax and Carvana, which only sell recent cars, are then skipped.

**Why do Facebook Marketplace and OfferUp cars have no distance?**
Those sites only show the city, not where the car is. Marketplace searches its nearest metro area to your ZIP code, and OfferUp its own local area, so their cars are near you but without an exact distance.

**Can it alert me when a new car is listed or a price drops?**
Yes. Turn on **Only new cars and price drops**, save the search as a task and schedule it. Each run then returns only new cars and price drops since the last run with the same watch name. See [Getting alerts](#getting-alerts-for-new-listings-and-price-drops).

**Why did a car I'd seen before come back as new?**
Facebook Marketplace and OfferUp show signed-out visitors a slightly different handful of listings each time, so a car can be missing from one run and back in the next. The watch remembers every car it has seen for 45 days, so this fades after a few runs.

**Can I search outside the US?**
Not yet. All ten sites are searched in their US versions, by US ZIP code.

**Can I get the seller's phone number?**
No. The results include each listing's link, where you contact the seller the way the site allows.

### More from Quillstone Labs

- **[USPTO Trademark Search & Monitor](https://apify.com/quillstone-labs/uspto-trademark-search)**: is a brand name or slogan already taken in the US, sound-alikes included, plus what a company owns, renewal dates and new filings.
- **[App Store & Google Play Reviews Scraper](https://apify.com/quillstone-labs/app-store-google-play-reviews-scraper)**: reviews from both app stores in one run, with the top complaint words and rating trends by week and app version.
- **[TikTok Transcript Scraper](https://apify.com/quillstone-labs/tiktok-transcript-scraper)**: turn TikTok videos into text, with timestamps and English translations.
- **[YouTube Transcript Scraper](https://apify.com/quillstone-labs/youtube-transcript-scraper)**: YouTube videos, Shorts, playlists and channels to text, with SRT subtitles.

### Support

Found a bug, or need a site or field that isn't there? Open an issue on the **Issues** tab and include the input you used. For anything else, like a custom version or a bulk data job, email QuillStoneLabs@yahoo.com.

### Data and fair use

The listings come from public search pages, as shown to any visitor who isn't signed in, and each result links back to the original listing. Use the results to find and compare cars, and contact sellers through the listing's own site. Private listings can include sellers' first names and locations, so treat the output as personal data where your local law does. This Actor is an independent tool and isn't affiliated with, endorsed by or sponsored by any of the sites it searches. Autotrader, Kelley Blue Book, CarGurus, Craigslist, Facebook, CarMax, Carvana, OfferUp, Autolist, Bring a Trailer and ClassicCars.com are trademarks of their respective owners.

# Actor input Schema

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

The car's make, like <code>Toyota</code>, <code>Ford</code> or <code>Mercedes-Benz</code>.

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

The model, like <code>Camry</code>, <code>F-150</code> or <code>Model 3</code>. Leave empty to see every model of the make.

## `zipCode` (type: `string`):

The US ZIP code to search around.

## `radiusMiles` (type: `integer`):

How far from the ZIP code to look. Facebook Marketplace and OfferUp use their own local area instead.

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

Leave empty for any year.

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

Leave empty for any year.

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

In US dollars.

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

In US dollars.

## `maxMileage` (type: `integer`):

Leave empty for any mileage.

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

Dealers, private sellers, or both.

## `condition` (type: `string`):

Used includes certified pre-owned.

## `keywords` (type: `string`):

Extra words to search for, like <code>hybrid</code> or <code>manual</code>. Optional.

## `sites` (type: `array`):

Which sites to search. Leave empty to search all of them.

## `includeDelivery` (type: `boolean`):

Carvana, cars CarMax transfers from a farther store, and collector cars (25+ years old) listed elsewhere in the country. Turn off to see only cars you can go and look at nearby.

## `sortBy` (type: `string`):

<b>Best deal</b> puts the cars furthest below their typical price first.

## `maxResultsPerSite` (type: `integer`):

Caps how many listings are read from each site. Duplicates across sites are merged, so the final count can be lower.

## `onlyNewAndPriceDrops` (type: `boolean`):

Turn into a watch: each run returns only cars the last run with the same watch name didn't show, and cars whose price dropped since. Put it on a schedule (daily, say) for alerts by email, Slack or webhook. The first run returns everything and remembers it. You only pay for the cars returned.

## `watchName` (type: `string`):

Give each saved search its own name, like <code>camry-under-20k</code>. Runs with the same name remember which cars they've already shown you.

## Actor input object example

```json
{
  "make": "Toyota",
  "model": "Camry",
  "zipCode": "94103",
  "radiusMiles": 50,
  "sellerType": "any",
  "condition": "used",
  "includeDelivery": true,
  "sortBy": "price",
  "maxResultsPerSite": 50,
  "onlyNewAndPriceDrops": false,
  "watchName": "default"
}
```

# Actor output Schema

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

No description

## `summary` (type: `string`):

No description

## `report` (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 = {
    "make": "Toyota",
    "model": "Camry",
    "zipCode": "94103"
};

// Run the Actor and wait for it to finish
const run = await client.actor("quillstone-labs/used-car-search").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 = {
    "make": "Toyota",
    "model": "Camry",
    "zipCode": "94103",
}

# Run the Actor and wait for it to finish
run = client.actor("quillstone-labs/used-car-search").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 '{
  "make": "Toyota",
  "model": "Camry",
  "zipCode": "94103"
}' |
apify call quillstone-labs/used-car-search --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,quillstone-labs/used-car-search"
        }
    }
}
```

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/cWhFh1c8Nzob2ZXSO/builds/Oj8XBgnluxUAEWQwT/openapi.json
