# 🚘Hemming car data scraper US🇺🇸 (`jordan-byte/hemming-car-data-scraper-us`) Actor

the long-running marketplace for classic, collector, and specialty cars. Point it at the "Cars for Sale" listings  and it collects every matching listing - auctions and classifieds alike - with pricing, vehicle details, seller info, and photos.

- **URL**: https://apify.com/jordan-byte/hemming-car-data-scraper-us.md
- **Developed by:** [Jordan Byte](https://apify.com/jordan-byte) (community)
- **Categories:** E-commerce, Automation, Travel
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.25 / 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/platform/actors/running/actors-in-store#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

🏁 **Turn Hemmings.com car listings into clean, structured data in minutes** - no coding, no manual copy-pasting. Get make, model, year, price, VIN, location, seller, and photos for auctions and classifieds, delivered straight to your dataset and ready to plug into your workflow.

### 🔍 What does Hemmings Car Scraper do?

Hemmings Car Scraper collects vehicle listings from [Hemmings.com](https://www.hemmings.com), the long-running marketplace for classic, collector, and specialty cars. Point it at the "Cars for Sale" listings (or a page you've already filtered by make, year, or price on the site) and it collects every matching listing - auctions and classifieds alike - with pricing, vehicle details, seller info, and photos.

Because it runs on the Apify platform, you also get automatic proxy rotation to avoid blocks, one-click scheduling for recurring runs, a REST API and webhooks for integrations, and full run monitoring - all without maintaining any infrastructure yourself. ⚡

### 💼 Why use Hemmings Car Scraper?

- 📊 **Market research** - track pricing and inventory trends for classic and collector vehicles by make, model, or era.
- 🏛️ **Auction tracking** - monitor live auctions, current bids, and reserve status as they change.
- 🎯 **Lead generation** - build lists of vehicles matching a buyer's or restorer's exact criteria.
- 🗂️ **Data enrichment** - pull VINs, pricing, and seller details into your own CRM, spreadsheet, or valuation tool.
- 💰 **Price tracking** - feed listings into a monitoring workflow to catch new arrivals or price changes the moment they happen.

### 🚀 How to use Hemmings Car Scraper

1. Go to the **Input** tab.
2. Leave the default **Start URLs** as-is to cover all "Cars for Sale" listings, or add your own Hemmings.com search page URL.
3. Optionally narrow the results using the **Keyword**, **Make**, **State**, **Year**, and **Price** filter fields.
4. Set **Max items per start URL** to control how many listings to collect, or turn on **Scrape all listings** to collect everything matching your search.
5. Click **Start** and wait for the run to finish.
6. Open the **Dataset** tab to preview, filter, and export your results. ✅

#### 💡 Tip

You don't need to configure filters twice. If you've already applied filters on Hemmings.com and copied the resulting page URL into **Start URLs**, the Actor uses those too - the filter fields on this Actor are there for convenience when you'd rather not leave the Apify Console.

### ⚙️ Input

| Field                   | Type    | Description                                                                                                               |
| ----------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------- |
| `startUrls`             | Array   | One or more Hemmings.com pages to scrape. Defaults to the full "Cars for Sale" listings.                                  |
| `keyword`               | String  | Free-text search term, e.g. a make, model, or "mustang".                                                                  |
| `make`                  | String  | Only return listings for this make, e.g. "Ford".                                                                          |
| `state`                 | String  | Only return listings in this US state (2-letter code), e.g. "NY".                                                         |
| `yearMin` / `yearMax`   | Integer | Only return listings within this model-year range.                                                                        |
| `priceMin` / `priceMax` | Integer | Only return listings within this price range (USD).                                                                       |
| `maxItems`              | Integer | Maximum number of listings to collect per start URL (default: 5). Ignored when **Scrape all listings** is on.             |
| `scrapeAll`             | Boolean | When enabled, collects every listing matching the search instead of stopping at `maxItems`.                               |
| `useCache`              | Boolean | When enabled (default), listings already delivered in a previous run are skipped so repeat runs only return new listings. |
| `proxyConfiguration`    | Object  | Proxy settings. Apify Proxy is enabled by default to keep runs reliable at scale.                                         |

Example input:

```json
{
    "startUrls": [{ "url": "https://www.hemmings.com/classifieds/cars-for-sale" }],
    "make": "Ford",
    "yearMin": 1965,
    "yearMax": 1970,
    "maxItems": 20,
    "scrapeAll": false,
    "useCache": true,
    "proxyConfiguration": { "useApifyProxy": true }
}
```

See the **Input** tab for the full list of options and their defaults.

### 📦 Output

Each listing is saved as one item in the dataset, for example:

```json
{
    "id": 35124,
    "url": "https://www.hemmings.com/listing/1961-jaguar-mk-ii-fort-lauderdale-fl-596568",
    "title": "1961 Jaguar Mark II with Rare Canvas Sunroof",
    "year": 1961,
    "make": "Jaguar",
    "model": "MK II",
    "listingType": "auctions",
    "format": "make_offer",
    "status": "live",
    "price": 29500,
    "currentBid": 29500,
    "priceDisplay": "$29,500",
    "hasReserve": false,
    "reserveMet": true,
    "offerCount": null,
    "vin": "P215495BW",
    "stockNumber": null,
    "location": { "full": "Fort Lauderdale, FL", "city": "Fort Lauderdale", "state": "FL", "country": "usa" },
    "seller": "17 Classic Cars",
    "dealer": {
        "name": "17 Classic Cars",
        "address": "3011 NW 60 St",
        "city": "Fort Lauderdale",
        "state": "FL",
        "postalCode": "33309"
    },
    "imageUrl": "https://thumbor-auction.hmn.com/900x0/filters:format(webp)/4484939/160473170.jpg",
    "isFeatured": false,
    "trending": false,
    "listingDate": "2026-08-07",
    "startDate": "2026-08-07",
    "endDate": null,
    "soldAt": null,
    "scrapedAt": "2026-08-10"
}
```

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel from the **Dataset** tab, or fetch it via the Apify API. 📥

#### 🧾 Data table

| Field                                           | Description                                                         |
| ----------------------------------------------- | ------------------------------------------------------------------- |
| `id` / `vin` / `url`                            | Hemmings listing ID, Vehicle Identification Number, and URL         |
| `title`                                         | Listing headline                                                    |
| `make`, `model`, `year`                         | Core vehicle identification                                         |
| `listingType`, `format`, `status`               | Auction vs. classified, sale format, and current status             |
| `price`, `currentBid`, `priceDisplay`           | Asking price / current bid, as a number and as originally displayed |
| `hasReserve`, `reserveMet`, `offerCount`        | Auction reserve status and offer count, where applicable            |
| `stockNumber`                                   | Seller's stock number, if provided                                  |
| `location`                                      | City, state, and country the vehicle is located in                  |
| `seller`, `dealer`                              | Seller name, and dealer contact details when sold through a dealer  |
| `imageUrl`                                      | Listing photo URL                                                   |
| `isFeatured`, `trending`                        | Whether the listing is featured or trending on the site             |
| `listingDate`, `startDate`, `endDate`, `soldAt` | Key dates for the listing or auction                                |

Field availability can vary between listings, depending on what the seller or auction house provided.

### 💵 Pricing / Cost estimation

How much does it cost to scrape Hemmings car data? Pricing depends on your Apify plan's compute unit rate and the number of listings you request. A small run of a few dozen listings typically finishes in under a couple of minutes and costs a fraction of a compute unit. Start with a low **Max items per start URL** value to estimate cost before scaling up to a full **Scrape all listings** run. Apify's free tier includes monthly platform usage credit, so light or occasional use may cost nothing. 🎉

### 🎯 Tips for better runs

- Keep **Max items per start URL** modest for daily monitoring runs to control cost and run time; turn on **Scrape all listings** only when you need a full inventory snapshot.
- Narrow your search with **Keyword**, **Make**, **Year**, or **Price** filters instead of scraping everything - it's faster and easier to work with.
- Leave **Skip previously scraped listings (cache)** on for scheduled/recurring runs so repeat runs only return new listings.
- Use the Apify **Schedule** feature to re-run this Actor daily or weekly and track how listings and auction bids change over time.
- If a run returns fewer results than expected, Hemmings may have changed its site or increased anti-bot protection - try again shortly, or reach out through the Issues tab.

### ❓ FAQ

**Is this legal?** This Actor only collects publicly visible listing data. You are responsible for using the data in accordance with Hemmings.com's Terms of Service and any applicable laws in your jurisdiction, especially around personal data and commercial use.

**Does this cover both auctions and classifieds?** Yes - the default "Cars for Sale" listings include both, and the `listingType` and `format` fields tell them apart.

**Can I scrape a single listing page directly?** Not currently - individual listing pages are protected against direct automated access. Use the search/filter fields instead to collect the listings you're interested in. If a detail-page version of this Actor would be useful for your workflow, reach out at <sajanbista1030@gmail.com> to discuss a custom build.

**Why did some fields come back empty?** Not every listing includes every field (a private seller may not provide a stock number, for example). The Actor returns `null` for anything that isn't available.

**Found a bug or have a feature request?** Please use the Issues tab on this Actor's page - feedback directly shapes future updates. For a custom version of this scraper tailored to your specific workflow, reach out through the same tab. 🙌

# Actor input Schema

## `startUrls` (type: `array`):

Hemmings.com pages to scrape. The default covers the full "Cars for Sale" listings (auctions and classifieds); use the filter fields below to narrow it down, or paste in a search page URL you've already filtered on the site.

## `keyword` (type: `string`):

Free-text search term, e.g. a make, model, or "mustang". Leave empty to match all listings.

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

Only return listings for this make, e.g. "Ford" or "Chevrolet".

## `state` (type: `string`):

Only return listings located in this US state, using its 2-letter code, e.g. "NY".

## `yearMin` (type: `integer`):

Only return listings from this model year or newer.

## `yearMax` (type: `integer`):

Only return listings up to this model year.

## `priceMin` (type: `integer`):

Only return listings priced at or above this amount.

## `priceMax` (type: `integer`):

Only return listings priced at or below this amount.

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

Maximum number of listings to collect for each start URL. Ignored when "Scrape all listings" is enabled.

## `scrapeAll` (type: `boolean`):

When enabled, the Actor collects every listing matching the search instead of stopping at "Max items per start URL". Useful for a full inventory snapshot. Very broad searches may be capped by the website itself - narrow your search (keyword, make, year, or price range) for full coverage.

## `useCache` (type: `boolean`):

When enabled, the Actor remembers listing IDs across runs and skips ones it has already scraped, saving run time on repeat runs. Turn this off to force a full, fresh re-scrape of every listing every time.

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

Apify Proxy is used by default to keep the run reliable at scale.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.hemmings.com/classifieds/cars-for-sale"
    }
  ],
  "maxItems": 5,
  "scrapeAll": false,
  "useCache": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `listings` (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 = {
    "startUrls": [
        {
            "url": "https://www.hemmings.com/classifieds/cars-for-sale"
        }
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("jordan-byte/hemming-car-data-scraper-us").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 = {
    "startUrls": [{ "url": "https://www.hemmings.com/classifieds/cars-for-sale" }],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("jordan-byte/hemming-car-data-scraper-us").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 '{
  "startUrls": [
    {
      "url": "https://www.hemmings.com/classifieds/cars-for-sale"
    }
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call jordan-byte/hemming-car-data-scraper-us --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,jordan-byte/hemming-car-data-scraper-us"
        }
    }
}

```

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/1fc7tj62tr1jFzLUm/builds/gh2utBnBkPC3ds83f/openapi.json
