# Mecum Auctions Scraper (`normdata/mecum-scraper`) Actor

Mecum Auctions results and upcoming lots: 312,000+ collector cars, motorcycles, tractors and road art since 2012, with sold price or high bid, make, model, year, specs and all photos. Filter by make, model, year, auction, price. VIN, mileage and highlights as an add-on.

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

## Pricing

from $16.00 / 1,000 lots

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)

## 🏁 Mecum Auctions Scraper

Extract lots from **Mecum Auctions**, the world's largest collector car auction house: muscle cars, Corvettes, classics, exotics, trucks, motorcycles, tractors, boats and road art (neon signs, gas pumps, petroliana). Get **auction results** (more than 300,000 lots since 2012, with the sold price or the high bid) or **upcoming lots** with estimates and run dates, in one clean table.

Each lot comes with:

- **Sold price** (with buyer's premium) for sold lots, and the **high bid** for lots that did not sell.
- **Low and high estimate**, when Mecum publishes one.
- Year, make, model, trim, lot series, body style, engine layout, transmission, exterior and interior color (exact paint name and color family).
- Status: sold, unsold, upcoming or no result.
- The auction: name, lot number, run date, start and end dates, collection.
- Labels (No reserve, Main attraction, Feature, Charity), tags, every photo, the lot link, the online bidding link and the auction link.
- Add-on: the full lot page, with the **VIN or serial number**, **odometer reading**, engine and frame numbers, the full engine spec, title type, the **highlights list**, the equipment list, conditions of sale, the lot story, the walkaround video and, for recent and upcoming auctions, the venue, city and state.

### 🎯 Who uses it?

#### 🚗 Collector car dealers and flippers

Pull every Mecum result for a model and year range to price a car before you buy it, or before you consign it.

#### 📊 Valuation guides, price databases and analysts

Feed a market index with clean sold prices, high bids, estimates and dates across 14 years of auctions.

#### 🧾 Appraisers, insurers and lenders

Back an agreed value with comparable Mecum sales, each with its VIN, odometer reading, highlights and lot link.

#### 🔍 Buyers and bidders

Watch upcoming auctions for the cars you want, with No reserve lots and run dates, and get only the new lots on each scheduled run.

### ✨ What it does

- **Past results or upcoming lots.** Past auctions give the sold price or the high bid; upcoming auctions give estimates, run dates and bidding links.
- **Search the way you think:**
  - Search terms ("boss 429", "split window", "hemi cuda", "neon sign"), several per run. Every word must start a word of the title or specs; case doesn't matter.
  - Make, model and model year range.
  - **10 lot types** (Auto, Motorcycle, Road Art, Tractor, Boat, Guitar, Engine, Trailer, Airplane, Other).
  - **Body style, transmission, engine layout, exterior and interior color.**
  - Auction by name ("Kissimmee" for every Kissimmee auction, "Monterey 2025", "Indy").
- **Or paste mecum.com links:** a lot page or a whole auction (every lot in it). The filters are ignored with links.
- **Every useful filter:**
  - Sold, unsold or all lots.
  - **Auction date range**: exact dates, or periods like "6 months" or "2 years".
  - **Price range in USD** (sold price, or high bid for unsold lots).
  - Lot labels (No reserve, Main attraction, Feature, Charity), words to exclude.
  - 6 sort orders: most recent or oldest auction, highest or lowest price, newest or oldest model year.
- **New lots only.** For scheduled runs: saves only lots the same search has not saved before.

### 🏆 Why this scraper

- **Every Mecum auction since 2012.** The whole results archive (over 300,000 lots), not one auction at a time.
- **High bids on unsold lots.** Mecum's "Bid Goes On" lots come with the highest bid, so you see what the market offered even when the car did not sell.
- **VIN and odometer.** The add-on reads the lot page for the VIN or serial number, the odometer reading and the highlights list Mecum's catalogue writers put together.
- **Sorts across the whole archive.** "Highest price" really reads every matching lot first, then saves the top ones.
- **Fast.** About 1,000 lots in under 10 seconds (1,000 with full details in under a minute).
- **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 | [growth-installations Mecum](https://apify.com/growth-installations/mecum-auctions-scraper) | [parseforge Bring a Trailer](https://apify.com/parseforge/bringatrailer-auctions-scraper) | [rastriq CLASSIC.COM](https://apify.com/rastriq/classic-com-scraper) |
|---|:--:|:--:|:--:|:--:|
| Mecum lots | **yes** | yes | no | through an aggregator |
| Whole results archive | **yes, since 2012** | one auction per run | n/a | n/a |
| Sold prices | **yes** | yes | yes | yes |
| High bid on unsold lots | **yes** | no | n/a | no |
| Upcoming lots | **yes** | yes | yes | no |
| Search terms | **several per run** | no | no | no |
| Make, model, year filters | **yes** | no | no | no |
| Body, transmission, engine, color filters | **yes** | no | no | no |
| Auction date range | **yes** | no | no | no |
| Price range | **yes** | no | no | no |
| Sold / unsold filter | **yes** | no | no | no |
| Sort orders | **6** | none | none | none |
| VIN, odometer, highlights | **add-on** | partial VIN | no | no |
| Whole auction links | **yes** | yes (slug) | page links | no |
| New lots only (monitoring) | **yes** | yes | no | no |
| Needs a browser | **no** | yes | no | no |

### 📦 What data you get

| Field | Description |
| --- | --- |
| `image` | Main photo. |
| `lotId`, `lotNumber` | Mecum's lot id and the lot number in the auction (e.g. "S190"). |
| `title`, `year`, `make`, `model`, `trim` | Lot title and vehicle. |
| `lotSeries` | Mecum's one-line pitch, when set (e.g. "1 of 5 Produced with Automatic"). |
| `lotType` | Auto, Motorcycle, Road Art, Tractor, Boat... |
| `status` | `sold`, `unsold` (Mecum's "Bid Goes On"), `upcoming` or `no result`. |
| `price` | Sold price in USD with buyer's premium (sold lots only). |
| `highBid` | Highest bid in USD (unsold lots only). |
| `estimateLow`, `estimateHigh` | Estimate in USD, when Mecum publishes one. |
| `exteriorColor`, `exteriorColorGroup` | Paint name and color family. |
| `interiorColor`, `interiorColorGroup` | Interior and its color family. |
| `engine`, `transmission`, `bodyStyle` | Engine layout (V8, Inline 6...), transmission (Automatic, Manual...), body style. |
| `auction`, `collection` | Auction name and the collection the lot belongs to. |
| `imageCount`, `images` | Number of photos and every photo link. |
| `noReserve` | Sold to the highest bidder whatever the price. |
| `url`, `biddingUrl`, `auctionUrl` | Lot page, online bidding page and auction page. |
| `labels`, `tags` | Mecum labels (No reserve, Main attraction, Feature, Charity) and tags. |
| `runDate`, `auctionStartsAt`, `auctionEndsAt` | Day the lot crossed the block, and the auction dates. |
| `vin`, `odometer`, `odometerUnit` | VIN or serial number and odometer reading in miles or km (add-on). |
| `engineNumber`, `frameNumber`, `engineDetails`, `titleType` | Numbers, the full engine spec and the title type (add-on). |
| `highlights`, `equipment`, `conditionsOfSale`, `story` | Catalogue texts (add-on). |
| `videoUrl` | Walkaround video (add-on). |
| `auctionVenue`, `auctionCity`, `auctionState` | Where the auction is held, for recent and upcoming auctions (add-on). |
| `searchedFor` | Which of your searches or links found it. |
| `scrapedAt` | When the row was collected (UTC). |

Add-on fields only appear when **Full lot details** is on.

#### Example row (trimmed)

```json
{
  "image": "https://res.cloudinary.com/mecum/image/upload/v1763741302/auctions/FL26/1161257/270006.jpg",
  "lotId": "1161257",
  "title": "1971 Plymouth Hemi Cuda Convertible",
  "year": 1971,
  "make": "Plymouth",
  "model": "Cuda",
  "trim": "Hemi",
  "lotSeries": "1 of 5 Produced with Automatic, Restored by Julius Steuer",
  "lotType": "Auto",
  "status": "sold",
  "price": 3300000,
  "highBid": null,
  "estimateLow": 2750000,
  "estimateHigh": 3250000,
  "exteriorColor": "Sno White",
  "exteriorColorGroup": "White",
  "transmission": "Automatic",
  "bodyStyle": "Convertible",
  "lotNumber": "S190",
  "auction": "Kissimmee 2026",
  "collection": "Great Lakes Collection",
  "imageCount": 92,
  "vin": "BS27R1B126869",
  "odometer": 30999,
  "odometerUnit": "miles",
  "engineDetails": "426/425 HP V-8",
  "auctionVenue": "Osceola Heritage Park",
  "auctionCity": "Kissimmee",
  "auctionState": "Florida",
  "url": "https://www.mecum.com/lots/1161257/1971-plymouth-hemi-cuda-convertible",
  "biddingUrl": "https://bidnow.mecum.com/lots/FL0126-S190",
  "videoUrl": "https://vimeo.com/1151387530",
  "labels": ["Main attraction"],
  "tags": ["1970s", "Convertible", "Mopar", "Muscle Car"],
  "highlights": [
    "The first of only twelve Hemi Cuda Convertibles produced in 1971, the final year of production",
    "Only five were equipped with the TorqueFlite automatic transmission"
  ],
  "runDate": "2026-01-17",
  "auctionStartsAt": "2026-01-06",
  "auctionEndsAt": "2026-01-18"
}
```

### 💡 Use cases

#### 📈 Every 1963 to 1967 Corvette Mecum sold

```json
{ "makes": ["Chevrolet"], "models": ["Corvette"], "yearFrom": 1963, "yearTo": 1967, "maxItems": null }
```

#### 🔥 The 500 most expensive lots of the last 2 years

```json
{ "sortBy": "price_high", "dateFrom": "2 years", "maxItems": 500 }
```

#### 🔑 Hemi Cuda and Boss 429 results with VIN and odometer

```json
{ "searchTerms": ["hemi cuda", "boss 429"], "includeDetails": true, "maxItems": null }
```

#### 🏷️ Unsold Porsches with a high bid over $100,000

```json
{ "makes": ["Porsche"], "results": "unsold", "minPrice": 100000, "maxItems": null }
```

#### 🔔 No reserve cars at the next auctions

```json
{ "status": "upcoming", "lotTypes": ["Auto"], "labels": ["No reserve"], "maxItems": null }
```

#### 🏍️ Every lot of one auction

```json
{ "urls": ["https://www.mecum.com/auctions/las-vegas-motorcycles-2026/"], "maxItems": null }
```

### ⚙️ How the input is organised

| Section | What it's for |
| --- | --- |
| **Maximum lots**, **What to scrape**, **Results** | Always first: caps the whole run (empty means no limit), past or upcoming auctions, and sold, unsold or all lots. |
| **What** | Search terms, or links. |
| **Vehicle** | Lot type, make, model, model year, body style, transmission, engine, colors. |
| **Auction** | Auction name, auction date range, lot labels. |
| **Price** | Price range in USD, words to exclude, sort order. |
| **Add-ons** | Full lot details. |
| **Monitoring** | New lots only, with an optional monitor name. |

A lot matching ANY of your search terms is kept; every filter narrows them all. With links, the search terms and filters are ignored.

### 💰 Pricing

Pay-per-event: a one-time **$0.003** when the run starts, plus a price per lot saved to your dataset that drops with your Apify plan. Full lot details are an optional add-on per lot.

| Your Apify plan | Per lot | With full details | 1,000 lots | 1,000 lots with details |
| --- | --- | --- | --- | --- |
| Free | $0.022 | +$0.008 | $22.00 | $30.00 |
| Bronze | $0.020 | +$0.007 | $20.00 | $27.00 |
| Silver | $0.018 | +$0.006 | $18.00 | $24.00 |
| Gold / Platinum / Diamond | $0.016 | +$0.005 | $16.00 | $21.00 |

Lots dropped by your filters 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 lots.

**Speed:** about 1,000 lots in under 10 seconds; 1,000 with full details in under a minute. Price and model year sorts read every matching lot first, so a sort across the whole archive takes a little longer: narrow it with a make, lot type or date range.

### 🚀 Run it

1. Create a free Apify account with $5 in credit.
2. Open the Mecum Auctions Scraper.
3. Type a search term (or keep the prefilled one), pick past or upcoming auctions and your 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 lots only** on, to catch new consignments as Mecum publishes them.

### 🤖 Use with AI agents (MCP)

Give an AI agent live access to Mecum results through the Model Context Protocol:

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

Then prompt it in plain language, for example "what did split window Corvettes sell for at Mecum in the last 3 years?".

### 🔧 Troubleshooting

**A sold lot has no `price`.**
Mecum hides the price of some sold lots. They are kept as sold, with an empty price, and they don't match a price filter.

**`transmission`, `engine` or the color families are empty.**
Mecum records them mostly on lots from 2023 on, and the body style on about half of the cars. The same filters only find lots where Mecum recorded them. The exact paint name is in `exteriorColor` on most cars.

**`vin` is empty.**
Older lot pages (around 2012 to 2014) and most road art have no VIN on Mecum.

**`auctionVenue`, `auctionCity` and `auctionState` are empty.**
Mecum shows them on lot pages of recent and upcoming auctions only.

**A search finds fewer lots than expected.**
Search terms match whole words with no typo matching: "corvete" finds nothing. Use Make and Model for the cleanest results.

**A row has an `error` field.**
Only with the add-on, and only when that lot's page could not be loaded: the base fields are filled, the add-on fields are empty and `error` says why. Rows that worked have no `error`. With the add-on off, its fields are left out of the rows.

**A scheduled "New lots only" run saved nothing.**
Nothing new matched since the last run. Changing terms, links or filters starts a fresh memory; set a **Monitor name** to keep it.

### ❓ FAQ

| Question | Answer |
| --- | --- |
| Do I need a Mecum account? | No. Only public lot data is read. |
| Does the price include the buyer's premium? | Yes, `price` is the sold price Mecum publishes, with premium. `highBid` is the bid only. |
| How far back do results go? | To 2012, every auction in Mecum's online results. |
| Are private sales included? | No. Only auction lots. |
| Is there a result limit? | No. Leave the maximum empty to get everything that matches. |
| Does it need a proxy? | No. |
| Can I track new lots? | Yes. Turn on **New lots only** and schedule the run. |

### 🛡️ Limits & responsible use

This Actor reads only public lot data shown on mecum.com. It never signs in and never bids. Use the data in line with Mecum'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
bun test/verify.mjs
apify run
```

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

# Actor input Schema

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

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

## `status` (type: `string`):

Past auctions are every Mecum auction since 2012 (312,000+ lots) with the sold price or the high bid. Upcoming auctions are the lots already published for the auctions to come.

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

Sold lots, unsold lots (Mecum's "The Bid Goes On": not sold on the block, with the highest bid), or both.

## `searchTerms` (type: `array`):

Words of the lot title or specs, e.g. "boss 429", "split window", "hemi cuda", "gt350", "neon sign". A lot must contain every word of a term (case doesn't matter, no typo matching). Several terms: a lot matching ANY of them is kept.

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

Lot pages (mecum.com/lots/...) or auction pages (mecum.com/auctions/..., every lot of the auction). The filters are ignored with links.

## `lotTypes` (type: `array`):

Keep only these kinds of lots.

## `makes` (type: `array`):

Keep only these makes, Mecum's names, e.g. "Chevrolet", "Ford", "Porsche", "Mercedes-Benz", "Harley-Davidson", "John Deere". Case doesn't matter. A make Mecum never had shows a warning in the log.

## `models` (type: `array`):

Keep only these models, e.g. "Corvette", "Mustang", "Camaro", "911", "Bronco". Combine with Make to avoid other brands' models of the same name.

## `yearFrom` (type: `integer`):

Keep vehicles (or items) from this model year on, e.g. 1960.

## `yearTo` (type: `integer`):

Keep vehicles up to this model year, e.g. 1972.

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

Keep only these body styles. Mecum records it on about half of the cars.

## `transmissions` (type: `array`):

Keep only these transmissions. Mecum records it on most lots from 2023 on, so this filter keeps mostly recent auctions.

## `engines` (type: `array`):

Keep only these engine layouts. Mecum records it on most lots from 2023 on, so this filter keeps mostly recent auctions.

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

Keep only these color families (the exact paint name is in the results). Mecum records it on most lots from 2023 on, so this filter keeps mostly recent auctions.

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

Keep only these interior color families. Mecum records it on most lots from 2023 on, so this filter keeps mostly recent auctions.

## `auctions` (type: `array`):

Keep only these auctions, by name: "Kissimmee" (every Kissimmee auction), "Monterey 2025", "Indy", "Las Vegas Motorcycles", "Gone Farmin'". Every word must match the auction name.

## `dateFrom` (type: `string`):

Keep lots that crossed (or will cross) the block on or after this day. A date like "2024-01-01", or a period like "6 months" or "2 years".

## `dateTo` (type: `string`):

Same format as "Auction date from", e.g. "2024-12-31".

## `labels` (type: `array`):

Keep only lots with ANY of these Mecum labels, e.g. "No reserve" (sold to the highest bidder whatever the price).

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

Sold price (or high bid for unsold lots) at least this.

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

Sold price (or high bid for unsold lots) at most this.

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

Drop lots whose title or specs contain any of these words, e.g. "replica", "tribute", "clone", "sign", "pedal car".

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

Order of the results. Matters most when you set a Maximum. Price and model year sorts leave out lots with no price (or no year).

## `includeDetails` (type: `boolean`):

Add the lot page to every lot: VIN or serial number, odometer reading, engine and frame numbers, the full engine spec, title type, the highlights list, equipment list, conditions of sale, the lot story, walkaround video and, for recent and upcoming auctions, the venue, city and state. Charged as an add-on per lot.

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

For scheduled runs: save only lots this same search has not saved before. The first run saves everything; later runs save just what is new. Kept per search (terms, links and filters).

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

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

## Actor input object example

```json
{
  "maxItems": 10,
  "searchTerms": [
    "corvette"
  ]
}
```

# Actor output Schema

## `lots` (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,
    "searchTerms": [
        "corvette"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("normdata/mecum-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,
    "searchTerms": ["corvette"],
}

# Run the Actor and wait for it to finish
run = client.actor("normdata/mecum-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,
  "searchTerms": [
    "corvette"
  ]
}' |
apify call normdata/mecum-scraper --silent --output-dataset

```

## MCP server setup

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