Proxibid API & Scraper
The Proxibid API turns proxibid.com, a US marketplace where hundreds of auction houses run live webcast and timed online sales, into JSON in seven actions.
🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.
search finds open and upcoming lots by keyword or category path, narrowed by sale type, state and auction house, in four orders, with the source's own match count and facet counts. sold searches the closed-lot archive the same way. auctions and sellers find sale events and auction houses, and catalog lists one auction's lots. detail returns a lot in full: status, current bid, opening and minimum bid, the high bidder as the source masks it, seconds left, reserve state, the house's buyer's premium, location, attribute table, description, photos and payment and pickup terms, or for a closed lot the outcome, the hammer price and whether a floor or an online bidder won. lot_status is a half-kilobyte live bid poll.
One closed lot, two prices that do not agree
Lot 102551528, an excavator in a live webcast sale on 2026-08-22, read on 2026-10-14. The archive and the lot's own feed publish two different figures. This is what each one means and what the API returns.
| where at the source | value | what the API does with it |
|---|---|---|
| closed-lot archive search | $550 | sold row: last_online_bid = 550, hammer_price = null |
| lot record behind the closed page | $550 (not shown on the page) | detail: page_price = 550 |
| the lot's bid feed: next bid | $600 | the archive figure plus one increment |
| the lot's bid feed: hammer price, buyer | $11,000, on site | detail / lot_status: hammer_price = 11000, sold_to = floor, price_mismatch = true |
On live webcast sales the archive keeps the last online bid, not the price the lot sold for: it differed from the hammer price on every live lot we checked (19 of 19, then 5 of 5). On timed online sales the two were equal (6 of 6, then 10 of 10).
Real request and response JSON
Captured from the indexed primary action, search, on .
{
"method": "POST",
"url": "https://api.reefapi.com/proxibid/v1/search",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"query": "excavator"
}
}{
"ok": true,
"meta": {
"api": "proxibid",
"endpoint": "search",
"mode": "live",
"latency_ms": 808,
"record_count": 25,
"bytes": 33573,
"cache_hit": false,
"upstream_requests": 1,
"charged_credits": 2,
"version": "1.0.0",
"request_id": "fcdfbe2c2e1b457a",
"queue_ms": 1.6,
"fetched_at": "2026-10-14T18:57:31.117Z"
},
"data": {
"lots": [
{
"lot_id": "103301913",
"title": "Excavator 12\" Bucket",
"url": "https://www.proxibid.com/asp/LotDetail.asp?lid=103301913",
"description": null,
"bid_count": 1,
"quantity": 1,
"quantity_type": null,
"currency": "USD",
"category": "Excavator Attachments",
"categories": [
{
"code": "[trimmed-depth]",
"name": "[trimmed-depth]"
},
{
"code": "[trimmed-depth]",
"name": "[trimmed-depth]"
},
{
"code": "[trimmed-depth]",
"name": "[trimmed-depth]"
}
],
"attributes": [],
"image_url": "https://images.proxibid.com/AuctionImages/958/300451/CatalogDetail/6d10b41fd13939f4c86db96616babd52708a62c7.jpg",
"country": "US",
"seller": {
"seller_id": "958",
"name": "DeMott Auction Company Inc"
},
"auction": {
"auction_id": "300451",
"type": "live",
"status": "ONLINE",
"starts_at": "2026-10-15T13:00:00Z",
"timezone": "US/Eastern",
"url": "https://www.proxibid.com/asp/catalog.asp?aid=300451"
},
"sale_starts_at": "2026-10-15T13:00:00Z",
"ends_at": null,
"status": "ACTIVE",
"internal_status": "prebid",
"current_bid": 10,
"opening_bid": null,
"price_is": "current_bid"
},
{
"lot_id": "103301909",
"title": "Excavator 12\" Bucket",
"url": "https://www.proxibid.com/asp/LotDetail.asp?lid=103301909",
"description": null,
"bid_count": 0,
"quantity": 1,
"quantity_type": null,
"currency": "USD",
"category": "Excavator Attachments",
"categories": [
{
"code": "[trimmed-depth]",
"name": "[trimmed-depth]"
},
{
"code": "[trimmed-depth]",
"name": "[trimmed-depth]"
},
{
"code": "[trimmed-depth]",
"name": "[trimmed-depth]"
}
],
"attributes": [],
"image_url": "https://images.proxibid.com/AuctionImages/958/300451/CatalogDetail/f783ddd55f6ff2ab2e1bd6daba9585839d12533b.jpg",
"country": "US",
"seller": {
"seller_id": "958",
"name": "DeMott Auction Company Inc"
},
"auction": {
"auction_id": "300451",
"type": "live",
"status": "ONLINE",
"starts_at": "2026-10-15T13:00:00Z",
"timezone": "US/Eastern",
"url": "https://www.proxibid.com/asp/catalog.asp?aid=300451"
},
"sale_starts_at": "2026-10-15T13:00:00Z",
"ends_at": null,
"status": "ACTIVE",
"internal_status": "prebid",
"current_bid": null,
"opening_bid": null,
"price_is": "none"
},
{
"lot_id": "103342341",
"title": "Unused CAT 12” 302 Mini Excavator Bucket Attachment",
"url": "https://www.proxibid.com/asp/LotDetail.asp?lid=103342341",
"description": null,
"bid_count": 0,
"quantity": 1,
"quantity_type": null,
"currency": "USD",
"category": "Excavator Bucket",
"categories": [
{
"code": "[trimmed-depth]",
"name": "[trimmed-depth]"
},
{
"code": "[trimmed-depth]",
"name": "[trimmed-depth]"
},
{
"code": "[trimmed-depth]",
"name": "[trimmed-depth]"
}
],
"attributes": [],
"image_url": "https://images.proxibid.com/AuctionImages/11957/300545/CatalogDetail/9956-1.jpg",
"country": "US",
"seller": {
"seller_id": "11957",
"name": "TriStar Auction Group"
},
"auction": {
"auction_id": "300545",
"type": "live",
"status": "ONLINE",
"starts_at": "2026-10-15T14:00:00Z",
"timezone": "US/Central",
"url": "https://www.proxibid.com/asp/catalog.asp?aid=300545"
},
"sale_starts_at": "2026-10-15T14:00:00Z",
"ends_at": null,
"status": "ACTIVE",
"internal_status": "prebid",
"current_bid": null,
"opening_bid": null,
"price_is": "none"
}
],
"total": 2570,
"total_capped": false,
"total_from_facets": 2570,
"pagination": {
"page": 1,
"page_size": 25,
"last_page": 103,
"has_more": true,
"page_beyond_last": false
},
"facets": {
"categories": [
{
"path": "ARTCOLLECT",
"label": "Art, Antiques & Collectibles",
"count": 57
},
{
"path": "VEHICLE",
"label": "Cars & Vehicles",
"count": 1
},
{
"path": "COMMERCIALTRUCK",
"label": "Commercial Trucks",
"count": 60
}
],
"auction_types": [
{
"id": "LIVE",
"label": "Live Auctions",
"count": 2067
},
{
"id": "TIMED",
"label": "Timed Events",
"count": 503
}
],
"states": [
{
"id": "AL",
"label": "Alabama",
"count": 67
},
{
"id": "AZ",
"label": "Arizona",
"count": 1
},
{
"id": "AR",
"label": "Arkansas",
"count": 40
}
],
"sellers": [
{
"id": "323 Auctions and Equipment",
"label": "323 Auctions and Equipment",
"count": 20
},
{
"id": "Alex Lyon and Son",
"label": "Alex Lyon and Son",
"count": 76
},
{
"id": "Assiter Auctioneers",
"label": "Assiter Auctioneers",
"count": 15
}
]
},
"suggestion": null,
"query": {
"searchTerm": "excavator",
"pageSize": 25,
"page": 1,
"sortTerm": "relevance"
}
}
}What the Proxibid API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| search | Search OPEN and upcoming lots by keyword and/or category, with auction type, state, auction house and order. Give query or category (one of them is required; state and seller_name only narrow). Returns the source's own match count (capped at 10,000 by the source, flagged) and facet counts for the next filter. | Pricing teams call search to search OPEN and upcoming lots by keyword and/or category, with auction type, state, auction h…. | query, category, auction_type, state, seller_name, ... |
| sold | Search the CLOSED-lot archive (back to 2010) by keyword and/or category with the same filters. Each row carries the last ONLINE bid; on live webcast sales that is not the hammer price (measured different on 19/19 live lots, equal on 6/6 timed lots) — read the hammer price with lot_status or detail. | Marketplace operators call sold to search the CLOSED-lot archive (back to 2010) by keyword and/or category with the same filters. | query, category, auction_type, state, seller_name, ... |
| auctions | Search auctions (sale events) by keyword, with auction type, state, auction house and a category label filter. query is required. | Catalog enrichment teams call auctions to search auctions (sale events) by keyword, with auction type, state, auction house and a categ…. | query, auction_type, state, seller_name, category_label, ... |
| sellers | Find auction houses by name. | Retail analysts call sellers to find auction houses by name.. | query, page, page_size |
| catalog | One auction's catalogue: its lots with current bid, minimum bid, status, seconds left (timed sales) and the lot's attribute table. | Pricing teams call catalog to get one auction's catalogue. | auction_id, sort, page, page_size |
| detail | One lot in full. Open lots: current bid, minimum next bid, masked high bidder, seconds left, reserve status, internet premium, sale order, location, attribute table, description, photos, payment/pickup terms. Closed lots: the sale outcome (sold / passed), the hammer price and whether a floor or an internet bidder won, plus the lot record. | Marketplace operators call detail to get one lot in full. | lot_id |
| lot_status | The live bid status of one lot from the source's own bid-widget feed — about 0.5 KB: status, high bid, next bid, seconds left, reserve met, extended bidding; after the sale the hammer price and whether a floor or an internet bidder won. | Catalog enrichment teams call lot_status to get the live bid status of one lot from the source's own bid-widget feed. | lot_id |
Call search from your stack
curl -X POST https://api.reefapi.com/proxibid/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"excavator"}'import requests
r = requests.post(
"https://api.reefapi.com/proxibid/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"query": "excavator"
},
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/proxibid/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"query": "excavator"
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.proxibid.search with {"query":"excavator"}.Who uses this API and why
- Equipment valuation: search the closed-lot archive for a model, then read lot_status on the live-sale rows to get the hammer price instead of the last online bid.
- Auction monitoring: poll lot_status every few minutes for the lots you follow; it returns the high bid, next bid, seconds left, reserve state and extended-bidding flag in about half a kilobyte.
- Deal flow by region: search a category path in one state, sorted by soonest closing, and read each lot's location, buyer's premium and pickup terms.
- Auction-house coverage: find houses with sellers, list their upcoming sales with auctions, and read each catalogue with its current and opening bids.
- Lead generation for buyers: timed lots ending soon with no bids and a low opening bid, filtered by category and state.
Questions developers ask before integrating
Is the archive price the price the lot sold for?
Only on timed online sales. On live webcast sales the lot is hammered in the room and the archive keeps the highest online bid, which was lower than the hammer price on every live lot we checked. So sold rows carry last_online_bid, and the hammer price comes from detail or lot_status (hammer_price, with sold_to floor or internet). lot_status costs one credit and is about half a kilobyte.
What does price_is mean on a row?
Which number you are looking at. current_bid means bids have been placed. opening_bid means no one has bid and the house set a starting price (4 of 17 unbid rows in one sample). none means neither. A lot with no bids never shows its opening price as a current bid.
Why do live lots have no end time?
Because the source does not publish one. A lot in a live webcast sale closes when the auctioneer reaches it, so ends_at is null and sale_starts_at carries the sale start; detail adds the lot's place in the running order (for example 359 of 687). Timed lots carry ends_at, and it matched the source's own countdown within two minutes on 8 of 8 lots.
How many results can one search return?
The source serves at most the first 10,000 matches of any query, and its match count stops at 10,000 too. When that happens total_capped is true and total_from_facets carries the real size from the facet counts (heavy construction equipment: 10,000 shown, 30,813 by facets). Narrow with a category path, a sale type or a state; each response lists the next category paths with their counts.
Which filters work?
Every one was measured against an unfiltered control in the same run. Open lots for 'tractor': 3,490, of which 1,760 in farm equipment, 2,898 live and 592 timed, 441 in Pennsylvania and 415 in Texas; the state was confirmed on the lot record 8 of 8 times. Auctions for 'excavator': 61, of which 15 timed, 46 live, 2 in Ohio. The auction house name must be written exactly as the source writes it.
Is the high bidder's name returned?
As the source shows it, which is masked, for example i****k. After the sale, sold_to says whether the lot went to a bidder in the room or online, and winning_bidder carries the masked online name when there is one.
What is not available?
Bid history is not published on the public lot page, so it is not returned. The bid count is in search and catalogue rows, not on the lot page. Lot rows in search carry no state or coordinates (the source leaves them empty); the auction record has the full address and coordinates.
How fast is it?
Over two back-to-back runs of the final code every one of 52 successful-path calls succeeded. Median: search 0.9 to 1.0 s, sold 1.2 to 1.4 s, auctions 0.9 s, lot_status 0.9 to 1.0 s, catalog 1.7 to 1.8 s, detail 2.7 to 3.1 s; the slowest call in either run took 4.0 s.
What is the Proxibid API?
Proxibid API is a ReefAPI endpoint group for us online auctions as json: open lots with current and opening bids, the closed-lot archive, auction catalogues, and every lot's outcome with the hammer price and whether a floor or an online bidder won. It returns live JSON through POST requests under /proxibid/v1.
Is the Proxibid API free to try?
Yes. ReefAPI starts with 1,000 free credits, no card required. Proxibid calls use the same shared credit balance as every other ReefAPI engine.
Do I need a Proxibid login or account?
No login to Proxibid is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.
How fresh is the Proxibid data?
The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.
How many credits does the Proxibid API use?
Proxibid actions currently cost 1-3 credits per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.
Can I call Proxibid from an AI assistant or MCP client?
Yes. Connect ReefAPI once through MCP and your assistant can call proxibid actions with the same key, credit pool and JSON envelope used by normal REST requests.