# The Market Scraper: Classic Car Auction Prices, Bids & Alerts (`getascraper/themarket-scraper`) Actor

Scrape The Market (themarket.co.uk) classic car auctions: live, upcoming and sold lots with current bid, bid count, reserve status, estimate, hammer and final price, mileage, chassis number, photos and description. Filter by make, year or price. Track new lots, bids and results.

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

## Pricing

from $1.25 / 1,000 auction 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

## 🏎️ The Market Scraper: Classic Car Auction Prices, Bids & Alerts

<table width="100%" style="display:table;width:100%;border-collapse:separate;border-spacing:0;margin-bottom:0">
<tr>
<td style="padding:24px 28px;background:#FFF1F2;border:1px solid #FECDD3;border-top:4px solid #BE123C;color:#1C1917;border-radius:10px 10px 0 0">
<span style="font-size:23px;font-weight:800;color:#4C0519;line-height:1.3">Every live, upcoming and sold classic car lot on The Market, with the bids and the result.</span><br>
<span style="font-size:15px;color:#334155;line-height:1.6">Pull current bids, bid counts, reserve status, estimates, hammer prices and final prices from the public themarket.co.uk auctions, together with mileage, chassis number, colours, location, description and photos. Schedule the same run to catch new lots, bids, endings and results.</span>
</td>
</tr>
</table>
<table width="100%" style="display:table;width:100%;border-collapse:separate;border-spacing:0;margin-top:0">
<tr>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #FECDD3;vertical-align:top;border-top:none;color:#1C1917;border-radius:0 0 0 10px">
<strong style="color:#BE123C;font-size:15px">🔨 Bids and results</strong><br>
<span style="color:#334155;font-size:12px">Current bid, bid count, next minimum bid, reserve status, hammer price and final price.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #FECDD3;border-left:none;vertical-align:top;border-top:none;color:#1C1917">
<strong style="color:#BE123C;font-size:15px">📈 Price against estimate</strong><br>
<span style="color:#334155;font-size:12px">Estimate range where the site shows it, and how far each sold lot landed from the middle.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #FECDD3;border-left:none;vertical-align:top;border-top:none;color:#1C1917">
<strong style="color:#BE123C;font-size:15px">🔧 Vehicle facts</strong><br>
<span style="color:#334155;font-size:12px">Mileage, engine size, transmission, fuel, steering, colours, chassis number and location.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #FECDD3;border-left:none;vertical-align:top;border-top:none;color:#1C1917;border-radius:0 0 10px 0">
<strong style="color:#BE123C;font-size:15px">🔔 Change alerts</strong><br>
<span style="color:#334155;font-size:12px">New lots, bid increases, ending soon, sold, withdrawn and removed lots between runs.</span>
</td>
</tr>
</table>

Know what classic cars sell for on The Market, and watch the auctions as they run. This Actor reads the public auction pages and returns one row per lot, with the lot number, a link back to the page and only the facts the page states. Choose live, upcoming or sold lots, narrow them by make, model, year and price, or paste lot and make links. Anything the page does not show is left out, never guessed.

### 👥 Who uses it

- **I deal in classic cars** and need to see what comparable cars actually sold for, with bid counts and reserve outcome, before I price my stock.
- **I value or insure collector cars** and need dated sold prices by make, model and year as evidence for an agreed value.
- **I write about the classic car market** and want a weekly list of results, the biggest sellers and the lots about to end.
- **I bid on classic cars** and want an alert when a make I follow goes live, gets a new bid or enters its last day.

### 🚀 How it works

<table width="100%" style="display:table;width:100%;border-collapse:separate;border-spacing:0;margin-top:0;margin-bottom:0">
<tr>
<td style="padding:16px 14px;width:33%;background:#FFF1F2;border:1px solid #FECDD3;border-radius:10px 0 0 10px;vertical-align:top;color:#1C1917">
<span style="font-size:12px;font-weight:800;color:#BE123C;letter-spacing:1px">STEP 1</span><br>
<span style="font-size:14px;font-weight:700;color:#4C0519">Choose the lots</span><br>
<span style="font-size:12px;color:#334155">Pick live, upcoming, buy now or sold lots, or paste lot and make links from The Market.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#FFF1F2;border:1px solid #FECDD3;border-left:none;vertical-align:top;color:#1C1917">
<span style="font-size:12px;font-weight:800;color:#BE123C;letter-spacing:1px">STEP 2</span><br>
<span style="font-size:14px;font-weight:700;color:#4C0519">Set your filters</span><br>
<span style="font-size:12px;color:#334155">Make, model, year range, price range, no reserve only or ending within a number of hours.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#FFF1F2;border:1px solid #FECDD3;border-left:none;border-radius:0 10px 10px 0;vertical-align:top;color:#1C1917">
<span style="font-size:12px;font-weight:800;color:#BE123C;letter-spacing:1px">STEP 3</span><br>
<span style="font-size:14px;font-weight:700;color:#4C0519">Export or schedule</span><br>
<span style="font-size:12px;color:#334155">Download Excel, CSV or JSON, or schedule the run and receive only what changed.</span>
</td>
</tr>
</table>

### 🔍 What does it do?

- Returns one row per lot: title, year, make, model, status, current bid, bid count, reserve status, end time (UTC and UK time), location and main image.
- Reads every lot page by default, adding description, key facts, mileage, engine size, transmission, fuel, steering, colours, chassis number, registration, seller type, video link, followers and the bid history (amount and time only).
- Shows hammer price, final price and the buyer's premium for sold lots, and compares the sold price with the estimate midpoint when the site shows an estimate.
- Filters before saving, so you only pay for lots that match: make, model, year range, price range, no reserve, ending soon and search words.
- Lists the whole results archive, newest first, or only one make.
- Keeps a named history of a search and marks each lot as new lot, went live, bid increase, estimate change, ending soon, sold, withdrawn, status change, unchanged or removed.
- Reads public pages only. No account, no login, no bidder or seller names.

Prices are in the currency the lot is listed in, normally pounds sterling. Fields such as estimates, mileage or chassis number appear only on lots where the page shows them.

### 💡 Input

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| Lot, make or list links | array of URLs | No | A lot page, a make page such as /auctions/ferrari, or the live, coming soon or results lists. When set, only these links are read. |
| Auction status | array | No | Live, upcoming, buy now offers or sold results. Used when no links are given. |
| Make / Model contains | string | No | Keep one make (as written on the site) and models whose name contains the text. |
| Year from / Year to | integer | No | Model year range. |
| Minimum price / Maximum price | number | No | Range in pounds, applied to the current bid or the sold price. |
| No reserve only | boolean | No | Keep only lots the site marks as no reserve. |
| Ending within (hours) | integer | No | Keep only live lots that close within this many hours. |
| Search words | string | No | Words that must all appear in the title, tagline, registration or location. |
| List data only | boolean | No | Skip the individual lot pages for a faster run with list-level fields. |
| Track changes between runs | boolean | No | Compares with the previous run of the same monitor and labels every lot. |
| Monitor name | string | No | Keeps the history of one monitor. Use one name per search you track. |
| Only save changes | boolean | No | Saves only new, changed or removed lots, so you pay for changes only. |
| Ending soon window (hours) | integer | No | How close to its end a live lot counts as ending soon. |
| Maximum lots | integer | No | How many lots to save in this run. Free plans are limited to 25. |

### 📊 Data table

| Field | Type | Description |
| --- | --- | --- |
| `lotId`, `lotNumber`, `url` | string, integer | Lot identifier, lot number and the lot page. |
| `title`, `year`, `make`, `model`, `tagline` | string, integer | Lot name and the year, make and model as the site lists them. |
| `status` | string | live, upcoming, buy_now, sold, withdrawn or ended. |
| `auctionStartsAt`, `endsAt`, `endsAtUk`, `endingSoon` | string, boolean | Bidding opens and closes (UTC and UK time), and whether a live lot closes inside your window. |
| `currentBid`, `bidCount`, `nextMinimumBid`, `currency` | number, string | Highest bid so far, number of bids and the next bid needed. |
| `reserveStatus`, `noReserve` | string, boolean | no_reserve, reserve_met, reserve_close or reserve_not_close, as the site shows it. |
| `estimateLow`, `estimateHigh`, `startingPrice`, `buyNowPrice` | number | Estimate range (only when the site displays it), starting price and buy now offer. |
| `hammerPrice`, `finalPrice`, `buyersPremium`, `buyersPremiumPercent`, `soldAfterAuction` | number, boolean | Sold lots: top bid, the final price shown, the premium between them, and whether the sale closed after the auction. |
| `hammerVsEstimatePercent` | number | Sold price against the estimate midpoint, when an estimate is shown. |
| `sellerType`, `location`, `country`, `countryCode`, `countryOfRegistration`, `registration` | string | Trade or private seller flag, where the car is and how it is registered. |
| `chassisNumber`, `mileage`, `mileageUnit`, `mileageText`, `engine`, `engineCc`, `transmission`, `fuelType`, `steering`, `exteriorColour`, `interiorColour` | string, number | Vehicle facts as stated on the lot page. |
| `keyFacts`, `summary`, `description`, `descriptionSections` | string, array | The seller write-up and key facts. |
| `imageUrl`, `images`, `imageCount`, `galleryPhotoCount`, `videoUrl` | string, array, integer | Photos on the lot page, the size of the full gallery and the video link. |
| `watchCount`, `commentCount`, `bids` | integer, array | Followers, comments and the bid history (amount and time). |
| `changeType`, `changedFields`, `previousStatus`, `previousBid`, `bidChange`, `previousBidCount`, `previousEstimateLow`, `previousEstimateHigh`, `previousEndsAt`, `firstSeenAt`, `changeDetectedAt`, `missingReason` | various | Change tracking fields, present when tracking is on. |
| `scrapedAt` | string | When the lot was read. |

### 🔄 Change tracking

Switch on "Track changes between runs", pick a monitor name and schedule the same input daily, or hourly for an auction week. The first run records a baseline and marks every lot **new lot**. Later runs mark a lot **went live**, **bid increase** (with the previous bid and the change), **estimate change**, **ending soon** (once, when it enters your window), **sold** (with hammer price and price against estimate), **withdrawn**, **status change**, **unchanged** or **removed**. A lot that left the live and upcoming lists is opened directly, so its result is caught even though it is no longer listed. Turn on "Only save changes" to save and pay for changes only.

### 💰 Pricing

Pricing is pay per lot, with no subscription and no extra charge for lot pages, bid history or change tracking. Empty runs cost nothing, and the discount tiers on your Apify plan apply automatically.

### ⭐ Enjoying The Market Scraper?

<table width="100%" style="display:table;width:100%;border-collapse:separate;border-spacing:0">
<tr>
<td style="padding:20px 24px 14px;background:#FFF1F2;border:1px solid #FECDD3;border-left:5px solid #BE123C;border-radius:10px 10px 0 0;color:#1C1917">
<span style="font-size:20px;letter-spacing:4px">⭐ ⭐ ⭐ ⭐ ⭐</span><br>
<span style="font-size:17px;font-weight:800;color:#4C0519">Got sold prices you can use straight away?</span><br>
<span style="font-size:14px;color:#334155">A rating takes 10 seconds and helps other classic car dealers and valuers find a reliable auction data feed.</span>
</td>
</tr>
<tr>
<td style="padding:0;background:#BE123C;border:1px solid #BE123C;border-left:5px solid #BE123C;border-top:none;border-radius:0 0 10px 10px;text-align:center;color:#FFFFFF">
<a href="https://apify.com/getascraper/themarket-scraper/reviews" style="display:block;padding:13px 16px;color:#FFFFFF;text-decoration:none;font-weight:800;font-size:15px;letter-spacing:0.3px">★&nbsp;&nbsp;Rate this Actor on Apify</a>
</td>
</tr>
</table>

### ✨ Tips

- **Start small.** Run 10 live lots, check the columns, then raise the limit or switch on sold results.
- **Build a price history.** Choose sold lots, set a make and a year range, and export the hammer and final prices.
- **Watch one marque.** Set the make, switch on change tracking and schedule it daily.
- **Catch the last day.** Set "Ending within" to 24 hours and schedule an hourly run with "Only save changes".

### ❓ FAQ

##### Which lots can I collect?

Live lots open for bids, upcoming lots listed before bidding opens, buy now offers after an auction, and sold lots from the public results archive, newest first.

##### What is the final price?

For a sold lot the hammer price is the winning bid and the final price is the total the site shows for the sale, which includes the buyer's premium on lots where one applies. The premium is shown as the difference between them.

##### Are estimates always included?

Only when the lot page displays an estimate. Many lots do not show one, and those rows simply have no estimate fields.

##### Do I get bidder or seller names?

No. Bidder and seller identities are never collected. The bid history lists amounts and times only.

##### Where does the data come from?

From the public auction pages of themarket.co.uk, without any account or login. You are responsible for using the data in line with the site's terms and your local rules.

### 🔗 Other actors

- [Car & Classic Scraper: Auction Hammer Prices, Bids & Listings](https://apify.com/getascraper/carandclassic-scraper) ↗ - Collect classic car listings and auction results from Car & Classic.
- [Nettiauto Scraper: Finnish Used Cars, EV Battery & Price Drops](https://apify.com/getascraper/nettiauto-scraper) ↗ - Track Finnish used car prices and price drops.
- [Carsales.com.au Scraper: Used Car Prices, Deals & Price Drops](https://apify.com/getascraper/carsales-au-cars-scraper) ↗ - Collect Australian used car prices and deals.

# Changelog

This Actor's version history is a separate document: https://apify.com/getascraper/themarket-scraper/changelog.md

# Actor input Schema

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

Optional public links from themarket.co.uk: a single lot page, a make page such as /auctions/ferrari, or the live, coming soon or results lists. When you add links, only those links are read and the auction status choice below is ignored.

## `lotStatus` (type: `array`):

Which lots to collect when no links are given. Live lots are open for bids, upcoming lots are listed before bidding opens, buy now lots are post-auction offers, and sold lots are finished auctions with their results.

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

Keep only one make, written as on the site, for example Ferrari, Aston Martin or Mercedes-Benz. Leave empty for every make.

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

Keep only models whose name contains this text, for example Testarossa or DB. Leave empty for every model.

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

Earliest model year to keep. Leave empty for no lower limit.

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

Latest model year to keep. Leave empty for no upper limit.

## `minPrice` (type: `number`):

Keep lots whose current bid or sold price is at or above this amount. Lots with no bid yet are dropped when a minimum is set.

## `maxPrice` (type: `number`):

Keep lots whose current bid or sold price is at or below this amount. Leave empty for no maximum.

## `noReserveOnly` (type: `boolean`):

Keep only lots that the site marks as no reserve.

## `endingWithinHours` (type: `integer`):

Keep only live lots whose auction ends within this many hours. Leave empty for no limit.

## `searchText` (type: `string`):

Words that must all appear in the lot title, tagline, registration or location, for example RHD manual. Matching happens in the Actor, not on the site.

## `summaryOnly` (type: `boolean`):

Skip the individual lot pages. The run is faster and returns title, status, current bid or sold price, bid count, reserve status, end time and location. Estimates, description, vehicle facts, bid history and all page images need the lot pages.

## `monitor` (type: `boolean`):

Compares each lot with the previous run of the same monitor and labels it new lot, went live, bid increase, estimate change, ending soon, sold, withdrawn, status change or removed. Sold lots show hammer price against estimate.

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

Name that keeps the history of one monitor. Use a different name for each set of links and filters you track.

## `onlyChanges` (type: `boolean`):

Save only lots that are new, changed or removed since the previous run. Unchanged lots are skipped and not charged.

## `endingSoonHours` (type: `integer`):

A live lot counts as ending soon when its auction closes within this many hours. Used for the ending soon flag and monitor label.

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

Highest number of lots to save in this run. Free plans are limited to 25.

## Actor input object example

```json
{
  "startUrls": [],
  "lotStatus": [
    "live",
    "upcoming",
    "sold"
  ],
  "noReserveOnly": false,
  "summaryOnly": false,
  "monitor": false,
  "monitorName": "default",
  "onlyChanges": false,
  "endingSoonHours": 24,
  "maxItems": 10
}
```

# Actor output Schema

## `lots` (type: `string`):

No description

## `runSummary` (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": [],
    "lotStatus": [
        "live",
        "upcoming",
        "sold"
    ],
    "noReserveOnly": false,
    "summaryOnly": false,
    "monitor": false,
    "monitorName": "default",
    "onlyChanges": false,
    "endingSoonHours": 24,
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/themarket-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 = {
    "startUrls": [],
    "lotStatus": [
        "live",
        "upcoming",
        "sold",
    ],
    "noReserveOnly": False,
    "summaryOnly": False,
    "monitor": False,
    "monitorName": "default",
    "onlyChanges": False,
    "endingSoonHours": 24,
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("getascraper/themarket-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 '{
  "startUrls": [],
  "lotStatus": [
    "live",
    "upcoming",
    "sold"
  ],
  "noReserveOnly": false,
  "summaryOnly": false,
  "monitor": false,
  "monitorName": "default",
  "onlyChanges": false,
  "endingSoonHours": 24,
  "maxItems": 10
}' |
apify call getascraper/themarket-scraper --silent --output-dataset

```

## MCP server setup

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