# AutoTempest Scraper (`normdata/autotempest-scraper`) Actor

Scrape AutoTempest: used cars from Cars.com, eBay Motors, Carvana, TrueCar, CarsDirect, Cars & Bids, Hemmings and more in one run. VIN, price, mileage, dealer, title status, price history and price drops, days on market. Every filter, nationwide or by ZIP.

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

## Pricing

from $16.00 / 1,000 car saveds

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)

## 🚗 AutoTempest Scraper

Extract used car listings from **AutoTempest**, the search engine that covers the big US car marketplaces at once: **Cars.com, eBay Motors, Carvana, TrueCar, CarsDirect, CarGurus, Autotrader, Cars & Bids, Hemmings, PrivateAuto** and more. One run searches all of them, nationwide or around a ZIP code, and gives you one clean table.

Each car comes with:

- **VIN**, year, make, model, trim, **price**, mileage and **title status** (clean, salvage, rebuilt, lemon).
- Seller type (dealer or private), **dealer name**, city, state, ZIP and distance from your ZIP.
- **Price history**: first price, price change in $ and %, and whether the price dropped.
- Date listed, first seen and **days on market**.
- Auction data: current bid, number of bids and when the auction ends.
- Source marketplace, description, photo and the link to the original listing.

### 🎯 Who uses it?

#### 🏪 Car dealers and wholesalers

Find underpriced cars and motivated sellers across every marketplace: price drops, long days on market, private sellers. Check what competing dealers ask for the same model.

#### 💰 Flippers and private buyers

Get every Tacoma, 911 or Miata under your budget within 200 miles, from every site, in one list. Schedule it and get only new listings.

#### 📊 Market researchers, lenders and insurers

Track asking prices, mileage, days on market and price cuts for any make, model and year range, by state or nationwide.

#### 📞 Lead generation

Build lists of car dealers by area, with the models they stock and their prices.

### ✨ What it does

- **Type the car.** "Toyota Camry", "Ford F-150", "Porsche 911", "Land Rover Defender" or just "BMW". Several in one run, each its own search. Words after the model ("Honda Civic Type R") narrow the search.
- **Or paste AutoTempest links** with all their filters.
- **Where:** nationwide, statewide, within 25 to 1,000 miles (or any custom radius) of a US ZIP or Canadian postal code, or anywhere in the US and Canada.
- **Pick the sources:** Cars.com, eBay Motors, Carvana, other dealer sites (TrueCar, CarsDirect, CarGurus and more), enthusiast auctions (Cars & Bids and more), Hemmings, CarSoup. All by default.
- **Every AutoTempest filter:**
  - Year, price and mileage ranges.
  - Body style, fuel, drivetrain, transmission, cylinders, doors, exterior and interior color.
  - Title status: clean, salvage, rebuilt, lemon or any branded title.
  - Dealers or private sellers, auctions or fixed price, listed in the last N days, with photos only.
  - 10 sort orders: best match, newest, oldest, lowest and highest price, lowest and highest mileage, newest and oldest model year, nearest.
- **Extra filters:** words the title must or must not contain, VIN only, **price drops only**.
- **One row per car.** The same car (same VIN) is often listed on several sites. It's saved once, from the first source (you can turn this off).
- **New listings only.** For scheduled runs: saves only cars listed since the last run of the same search.

### 🏆 Why this scraper

- **Fast.** About 1,000 cars in 10 seconds, all sources at once.
- **Complete.** No page limit: leave the maximum empty and it collects the whole search, every source to the end.
- **Mixed sources.** Even a small run returns cars from every marketplace, not just the first one.
- **Ready to analyse.**
  - Prices, mileage, bids and distance are numbers. Dates are ISO.
  - Price history comes as a list, plus first price, change and change % already calculated.
  - Tracking junk is stripped from links.
- **No proxy needed.** Nothing extra to set up or pay for.

### ⚖️ How it compares

Based on each Actor's public input options (October 2026).

| Capability | This actor | crawlerbros | illuminating_knighthood | automation-lab | ecomscrape | lulzasaur |
|---|:--:|:--:|:--:|:--:|:--:|:--:|
| Make and model by name | **yes** | yes | yes | yes | no (keyword) | yes |
| Several vehicles in one run | **yes** | no | no | no | no | no |
| AutoTempest links | **yes** | no | no | yes | yes | no |
| ZIP and radius | **yes** | yes | yes | yes | yes | ZIP only |
| Statewide, nationwide, US and Canada | **yes** | yes | no | no | no | no |
| Year, price and mileage ranges | **yes** | yes | yes | yes | no | no |
| Body, fuel, drive, cylinders, doors, colors | **yes** | yes | drive only | no | no | no |
| Transmission | **yes** | no | yes | no | no | no |
| Title status (salvage, rebuilt...) | **yes** | yes | yes | no | no | no |
| Dealer or private seller | **yes** | no | no | no | no | no |
| Auctions or fixed price | **yes** | no | no | no | no | no |
| Listed in the last N days | **yes** | yes | no | no | no | no |
| Choose sources | **yes** | no | no | no | no | yes |
| Title must / must not contain | **yes** | no | no | no | no | no |
| Price drops only, VIN only | **yes** | no | no | no | no | no |
| Skip the same car on other sites | **yes** | no | no | no | no | no |
| New listings only (monitoring) | **yes** | no | no | no | no | no |
| Sort orders | 10 | 11 | 5 | 10 | none | 7 |

### 📦 What data you get

| Field | Description |
| --- | --- |
| `id`, `url` | AutoTempest listing ID and the original listing page. |
| `vin`, `title`, `year`, `make`, `model`, `trim` | The car. |
| `price` | Asking price in USD (Buy It Now on eBay). |
| `currentBid`, `bids`, `isAuction`, `auctionEndsAt` | Auction data, when it's an auction. |
| `mileage`, `titleStatus` | Odometer in miles; `Clean`, `Salvage`, `Rebuilt`, `Lemon`... |
| `sellerType`, `dealerName` | `Dealer` or `Private`, and the dealer's name. |
| `city`, `state`, `zip`, `country`, `distanceMiles` | Where the car is. Distance is filled when you search by ZIP. |
| `postedAt`, `firstSeenAt`, `daysOnMarket` | When it was listed, first seen by AutoTempest, and days since. |
| `firstPrice`, `priceChange`, `priceChangePercent`, `priceDropped`, `priceHistory` | Price history: every date, price and mileage AutoTempest recorded. |
| `source`, `sourceSite`, `sourceCode` | "Cars.com", "cars.com", `cm`. |
| `feesIncluded`, `pendingSale` | Price includes fees; sale pending. |
| `description` | Listing summary as shown on AutoTempest. |
| `image`, `thumbnail`, `hasPhotos` | Main photo. |
| `searchedFor` | Which of your vehicles or links found it. |
| `scrapedAt` | When the row was collected (UTC). |

#### Example row (trimmed)

```json
{
  "id": "cm-d674a0d4-2812-4337-ad45-158f1f26864e",
  "vin": "4T1G11AK5NU012345",
  "title": "2022 Toyota Camry SE",
  "year": 2022,
  "make": "Toyota",
  "model": "Camry",
  "trim": "SE",
  "price": 23990,
  "isAuction": false,
  "mileage": 31250,
  "titleStatus": "Clean",
  "sellerType": "Dealer",
  "dealerName": "Sunrise Toyota",
  "city": "Atlanta",
  "state": "GA",
  "zip": "30301",
  "country": "US",
  "distanceMiles": 4.2,
  "postedAt": "2026-09-12T00:00:00.000Z",
  "firstSeenAt": "2026-09-12T00:00:00.000Z",
  "daysOnMarket": 23,
  "firstPrice": 25490,
  "priceChange": -1500,
  "priceChangePercent": -5.9,
  "priceDropped": true,
  "priceHistory": [
    { "date": "2026-09-12T00:00:00.000Z", "price": 25490, "mileage": 31250 },
    { "date": "2026-09-28T00:00:00.000Z", "price": 23990, "mileage": 31250 }
  ],
  "source": "Cars.com",
  "sourceSite": "cars.com",
  "sourceCode": "cm",
  "url": "https://www.cars.com/vehicledetail/...",
  "searchedFor": "Toyota Camry",
  "scrapedAt": "2026-10-05T14:02:11.000Z"
}
```

### 💡 Use cases

#### 🔔 New Toyota Tacomas under $30,000 within 100 miles of Denver, every hour

```json
{ "vehicles": ["Toyota Tacoma"], "zip": "80202", "radius": "100", "maxPrice": 30000, "onlyNew": true, "maxItems": null }
```

Schedule it: each run saves only the cars listed since the last one.

#### 📉 Price drops on Porsche 911s nationwide

```json
{ "vehicles": ["Porsche 911"], "priceDropsOnly": true, "sortBy": "newest", "maxItems": null }
```

#### 🛠️ Salvage and rebuilt Teslas for parts or repair

```json
{ "vehicles": ["Tesla Model 3", "Tesla Model Y"], "titleStatus": ["salvage", "rebuilt"], "maxItems": null }
```

#### 🤝 Private sellers only, manual Mazda Miatas in California

```json
{ "vehicles": ["Mazda MX-5 Miata"], "zip": "94103", "radius": "state", "sellerType": "private", "transmission": "man", "maxItems": null }
```

#### 🔨 Enthusiast auctions ending soon

```json
{ "vehicles": ["BMW"], "saleType": "auction", "sources": ["te", "eb"], "titleIncludes": ["M3", "M4"], "maxItems": 200 }
```

#### 🔗 Your own AutoTempest search, as it is

```json
{ "urls": ["https://www.autotempest.com/results?make=toyota&model=rav4&zip=98101&radius=300&fuel=hybrid"], "maxItems": null }
```

### ⚙️ How the input is organised

| Section | What it's for |
| --- | --- |
| **Maximum cars** | Always first: caps the whole run, shared across your vehicles. Empty means no limit. |
| **What** | Vehicles ("Make Model"), AutoTempest links and keywords. |
| **Where** | ZIP or postal code and radius (statewide, nationwide or anywhere), and which marketplaces to search. |
| **Filters** | Year, price, mileage, body, fuel, drive, transmission, cylinders, doors, colors, title, seller, sale type, listed in the last N days, photos, sort. |
| **Extra filters** | Title words, VIN only, price drops only, skip the same car on other sites. |
| **Monitoring** | New listings only, with an optional monitor name. |

Links keep their own filters; the form filters apply to your vehicles.

### 💰 Pricing

Pay-per-event: a one-time **$0.003** when the run starts, plus a price per car saved to your dataset that drops with your Apify plan:

| Your Apify plan | Per car | 1,000 cars |
| --- | --- | --- |
| Free | $0.022 | $22.00 |
| Bronze | $0.020 | $20.00 |
| Silver | $0.018 | $18.00 |
| Gold / Platinum / Diamond | $0.016 | $16.00 |

Cars dropped by your filters or skipped as repeats are not charged. There are no proxy costs. New Apify accounts start with $5 in free credit. On the Free plan a run saves up to 10 cars.

**Speed:** about 1,000 cars in 10 seconds.

### 🚀 Run it

1. Create a free Apify account with $5 in credit.
2. Open the AutoTempest Scraper.
3. Type a vehicle (or keep the prefilled one), set a ZIP and filters, then click **Start**.
4. Export the results as CSV, Excel, JSON, or XML from the Dataset tab.

You can also:

- Run it programmatically through the Apify API (`run-sync-get-dataset-items`) or the ApifyClient for JavaScript and Python.
- Schedule it with Apify's built-in Scheduler, with **New listings only** on, to catch new cars every hour or day.

### 🤖 Use with AI agents (MCP)

Give an AI agent live access to US used car listings through the Model Context Protocol:

```
claude mcp add --transport http apify "https://mcp.apify.com?tools=normdata/autotempest-scraper"
```

Then prompt it in plain language to run the scraper and read back the results.

### 🔧 Troubleshooting

**"No such make" in the log.**
Start each vehicle with the make, as AutoTempest spells it: "Mercedes-Benz C-Class", "Land Rover Range Rover", "Ram 1500".

**The radius was ignored.**
A radius or statewide search needs a ZIP code. Without one the run searches nationwide and says so in the log.

**Fewer cars than AutoTempest shows.**
The same car is often listed on several sites. With **Skip the same car on other sites** on (the default) it's saved once. The log says how many repeats were skipped.

**Distance is empty.**
`distanceMiles` is filled only when you search around a ZIP code.

**A scheduled "New listings only" run saved nothing.**
Nothing new was listed since the last run of the same search. Changing vehicles, links, filters or sources starts a fresh memory; set a **Monitor name** to keep it.

### ❓ FAQ

| Question | Answer |
| --- | --- |
| Do I need an AutoTempest account? | No. Only public listings are read. |
| Does it need a proxy? | No. There is an optional proxy setting if you ever need one. |
| Does it cover Canada? | Yes: use a Canadian postal code, or "Anywhere" as the radius. |
| Is there a page limit? | No. Leave the maximum empty to get the whole search. |
| Does it include Craigslist and Facebook Marketplace? | No. AutoTempest only links out to those, without listing data. |
| Can I track new listings? | Yes. Turn on **New listings only** and schedule the run. |

### 🛡️ Limits & responsible use

This Actor reads only public listings shown on AutoTempest. It never signs in and never contacts sellers. Use the data in line with AutoTempest's and each marketplace's terms.

### 📧 Contact

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

### 🧪 Local development

```powershell
bun install
bun run typecheck
bun test/qa.mjs
apify run
```

Local results are stored in `storage/datasets/default`.

# Actor input Schema

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

Stop after this many cars in total. Leave empty for no limit (every matching car on every source). The Apify Free plan is always capped at 10.

## `vehicles` (type: `array`):

Make, or make and model, one per line, e.g. "Toyota Camry", "Ford F-150", "Porsche 911", "Tesla". Extra words after the model become keywords ("Honda Civic Si"). 122 makes supported. Leave empty to search every make.

## `urls` (type: `array`):

AutoTempest results pages (autotempest.com/results?make=...\&zip=...). Each link keeps its own filters; the filters below apply to Vehicles.

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

Words to look for in the listing, e.g. "manual", "one owner", "sunroof". Applied by AutoTempest.

## `zip` (type: `string`):

US ZIP code (e.g. "90210") or Canadian postal code. Needed for a radius, statewide search or distance sort; also fills Distance on every row.

## `radius` (type: `string`):

How far from the ZIP code. Nationwide needs no ZIP code.

## `customRadiusMiles` (type: `integer`):

Any other distance in miles, e.g. 75. Overrides Search area. Needs a ZIP code.

## `sources` (type: `array`):

Marketplaces to search. Leave empty for all of them.

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

Model year, e.g. 2018.

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

Model year, e.g. 2023.

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

Leave empty for any.

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

Leave empty for no limit.

## `minMiles` (type: `integer`):

Leave empty for any.

## `maxMiles` (type: `integer`):

Leave empty for no limit.

## `bodyStyles` (type: `array`):

Keep only ANY of these.

## `fuel` (type: `array`):

Keep only ANY of these.

## `drive` (type: `array`):

Keep only ANY of these.

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

Manual, automatic or both.

## `cylinders` (type: `array`):

Keep only ANY of these.

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

Keep only ANY of these.

## `exteriorColors` (type: `array`):

Keep only ANY of these.

## `interiorColors` (type: `array`):

Keep only ANY of these.

## `titleStatus` (type: `array`):

Keep only ANY of these. "Branded" covers salvage, rebuilt and lemon.

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

Dealers, private sellers or both.

## `saleType` (type: `string`):

Auctions, fixed-price listings or both.

## `postedWithinDays` (type: `integer`):

Only cars listed in the last N days, e.g. 1 for today's new listings. Leave empty for any.

## `withPhotosOnly` (type: `boolean`):

Keep only listings that have a photo.

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

Order of the results. Matters most when you set a Maximum.

## `titleIncludes` (type: `array`):

Keep only cars whose title contains ANY of these words, e.g. "Type R", "TRD", "Raptor". Not case sensitive.

## `titleExcludes` (type: `array`):

Drop cars whose title contains any of these words, e.g. "salvage", "parts".

## `withVinOnly` (type: `boolean`):

Keep only listings that show a VIN.

## `priceDropsOnly` (type: `boolean`):

Keep only cars whose price went down since they were first listed (uses the listing price history).

## `skipDuplicateVins` (type: `boolean`):

The same car (same VIN) is often listed on several marketplaces. On: save it once, from the first source that returns it. Off: one row per listing.

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

For scheduled runs: save only cars this same search has not saved before. The first run saves everything; later runs save just what was listed since. Kept per search (vehicles, links, filters and sources).

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

Optional. Give "New listings only" a fixed name to keep its memory even after you change the filters.

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

Optional, off by default. AutoTempest works fine without one. Turn it on only if your runs get blocked. Proxy traffic is billed to your Apify account.

## Actor input object example

```json
{
  "maxItems": 10,
  "vehicles": [
    "Toyota Camry"
  ],
  "radius": "country",
  "transmission": "any",
  "sellerType": "any",
  "saleType": "any",
  "withPhotosOnly": false,
  "sortBy": "best",
  "withVinOnly": false,
  "priceDropsOnly": false,
  "skipDuplicateVins": true,
  "onlyNew": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `cars` (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,
    "vehicles": [
        "Toyota Camry"
    ],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("normdata/autotempest-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,
    "vehicles": ["Toyota Camry"],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("normdata/autotempest-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,
  "vehicles": [
    "Toyota Camry"
  ],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call normdata/autotempest-scraper --silent --output-dataset

```

## MCP server setup

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