The Market Scraper — Bonhams Online Car Auctions avatar

The Market Scraper — Bonhams Online Car Auctions

Pricing

from $1.90 / 1,000 results

Go to Apify Store
The Market Scraper — Bonhams Online Car Auctions

The Market Scraper — Bonhams Online Car Auctions

Scrape auction listings from The Market (themarket.co.uk), Bonhams' online auction platform for classic cars. Extract bid prices, estimates, bid counts, reserve status, and auction outcomes. For collector car market tracking.

Pricing

from $1.90 / 1,000 results

Rating

0.0

(0)

Developer

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

3 days ago

Last modified

Share

The Market Scraper — Bonhams Online Car Auctions: Bids, Estimates & Results

The Market Scraper extracts auction data from The Market (themarket.co.uk), the online auction platform for classic and collector cars run by Bonhams. It returns live lots and completed results with current or hammer price, pre-sale estimates, bid counts, reserve status and sold/unsold outcome. Set an optional make and year range, choose how many lots you want, and export JSON, CSV or Excel. Try it first with the default of 10 lots.

Why scrape The Market auctions?

Weekly timed online auctions create a steady stream of price points for collector cars. The Market Scraper helps:

  • Collectors and dealers: track live bids and decide where to bid.
  • Valuation and insurance teams: build comparable sales from completed lots.
  • Auction researchers: analyse reserve-met rates and estimate versus result by segment.
  • Investors and analysts: compare online auction prices with traditional live auctions.

What input does The Market Scraper accept?

ParameterTypeDefaultDescription
makestring, nullableprefill porscheCar make, for example porsche, ferrari, mercedes-benz, jaguar. Leave empty for all makes.
year_mininteger, nullablenoneEarliest model year to include (1886 to 2030).
year_maxinteger, nullablenoneLatest model year to include (1886 to 2030).
max_itemsinteger100 (prefill 10)Maximum listings to extract (1 to 50,000).
max_pagesinteger, nullablenoneMaximum search result pages to process. If empty, max_items is the only limit.
proxyConfigurationobjectprefill Apify ProxyDatacenter proxy by default; change it only if you have problems.

Example: Ferraris from 1960 to 1975, up to 50 lots.

{
"make": "ferrari",
"year_min": 1960,
"year_max": 1975,
"max_items": 50
}

Example: everything available, small test.

{
"max_items": 10
}

The Actor reads two sections of the site. Live lots come from the live auctions page (a single page), and completed results are paginated from the results page. Make and year filters are applied client-side after the pages are read, so a narrow filter can mean that more pages have to be processed before max_items is reached.

What data does The Market Scraper return?

FieldTypeDescription
idstringListing UUID from The Market
listing_typestringactive or completed
urlstringDirect link to the auction lot
titlestringFull listing title, for example "2007 Aston Martin DB9"
brandstringCar make
modelstringCar model
model_yearintegerYear of manufacture
pricenumberCurrent bid (active) or hammer price (completed), in GBP
price_currencystringCurrency code, documented as always GBP
estimate_lownumberLow pre-sale estimate, when available
estimate_highnumberHigh pre-sale estimate, when available
bid_countintegerNumber of bids placed
auction_endstringAuction end date, for example "22 May 2026"
soldstringsold, unsold, or empty for active lots
reserve_statusstringreserve met, reserve not met, no reserve, or empty
image_urlstringListing thumbnail URL
scraped_atdatetimeUTC timestamp of extraction
sourcestringDocumented as always themarket.co.uk

Estimates, reserve status and sold are not present on every lot, so expect empty values. Note that auction_end is a text date, not an ISO timestamp.

Illustrative example of one completed lot (values are made up to show the format, not real data):

{
"id": "00000000-0000-0000-0000-000000000000",
"listing_type": "completed",
"url": "https://themarket.co.uk/example-lot",
"title": "2007 Aston Martin DB9",
"brand": "Aston Martin",
"model": "DB9",
"model_year": 2007,
"price": 21500,
"price_currency": "GBP",
"estimate_low": 20000,
"estimate_high": 25000,
"bid_count": 14,
"auction_end": "22 May 2026",
"sold": "sold",
"reserve_status": "reserve met",
"image_url": "https://themarket.co.uk/example-image.jpg",
"scraped_at": "2026-10-13T10:00:00+00:00",
"source": "themarket.co.uk"
}

How much does it cost to scrape The Market?

The Market Scraper uses pay-per-event pricing:

EventPrice
Actor Start (one event per GB of memory, minimum one)$0.0005
Result (each item in the dataset)$0.0019

Worked example with the default 1,024 MB memory (one start event): 1,000 results = 1,000 × $0.0019 + $0.0005 = $1.9005. The default 100 lots cost $0.1905, and a 10-lot test costs $0.0195. Lower max_items to cap spend, and check the Pricing tab for discounts on your plan.

Speed and run time

The previous documentation estimates about 20 listings per minute. The default run timeout is 300 seconds, so for large max_items values raise the timeout in the run options. For tracking, schedule weekly runs to follow each new auction cycle.

How to run it via API

curl -X POST "https://api.apify.com/v2/acts/rastriq~themarket-scraper/runs?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"make":"porsche","year_min":1990,"max_items":100}'
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("rastriq/themarket-scraper").call(run_input={
"make": "porsche",
"max_items": 100,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["title"], item["price"], item["reserve_status"])

Results can also go to Google Sheets, Make, Zapier or n8n, trigger webhooks on completion, or be called from AI agents through the Apify MCP server.

FAQ

Does it return live and finished auctions? Yes. listing_type is active for live lots and completed for historical results.

Is price the final sale price? For completed lots it is the hammer price in GBP; for active lots it is the current bid. Check sold to separate sold from unsold.

Why are estimates or reserve status empty? They are only filled when the lot shows them.

How do I limit cost? Set max_items, and optionally max_pages.

How far back do results go? This depends on what the results pages of the site show. Use max_pages to read as many pages as you need and check the oldest auction_end in your dataset.

Is it legal? The Actor reads publicly visible auction pages. You are responsible for respecting the site's terms and applicable data rules.

Where do I report problems? Use the Issues tab of the Actor with the run ID.