Bidsquare Scraper - Auction House Contacts & Lots avatar

Bidsquare Scraper - Auction House Contacts & Lots

Pricing

$4.50 / 1,000 per row delivereds

Go to Apify Store
Bidsquare Scraper - Auction House Contacts & Lots

Bidsquare Scraper - Auction House Contacts & Lots

From $4.50 per 1,000 rows, no start fee. Bidsquare's whole 505-house auctioneer directory - phone, email, street address, coordinates, socials - plus every catalogue lot with estimate, current bid, bid count, condition, premium and the realized hammer price hidden behind 'Login for Price'.

Pricing

$4.50 / 1,000 per row delivereds

Rating

0.0

(0)

Developer

Scrapers Delight

Scrapers Delight

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

🏛️ Bidsquare Scraper — Auction House Contacts & Lots

Two things nobody else pulls out of Bidsquare in one place: the full auctioneer directory as a contact list, and every catalogue lot with the realized hammer price the site hides behind a login button.

  • 📇 505 auction houses — name, phone, email, street, city, state, postcode, country, map coordinates, logo and social profiles.
  • 🔨 ~48,300 lots currently on the upcoming calendar across 132 sales, plus a closed-sale archive 91 pages deep.
  • 💰 Realized hammer prices on closed lots. Bidsquare replaces the price with a "Login for Price" button — but its own schema.org block still publishes the number. This Actor reads it.
  • 📍 Every lot row can carry the selling house's phone, email and address, joined on for you.
  • 💵 $4.50 per 1,000 rows. No run-start fee. Both row shapes cost the same.

Everything below is a number measured on a real run through an Apify proxy on 2026-09-18, not an estimate. Where a field is sparse, the real percentage is printed rather than hidden.


What does Bidsquare Scraper do?

Bidsquare is a US marketplace where independent auction houses run fine-art, antiques, jewellery, coin and collectible sales. Two useful datasets sit inside it, and this Actor returns either.

Mode 1 — auction-houses (the default): the contact directory

One row per auction house. This is the deliverable if you sell to auction houses, build price databases, do estate liquidation, or need an appraiser/insurer panel.

FieldFill (505 houses, measured)
name100%
email100%
postalCode · country · bidsquareSellerId100%
city99.8%
street99.4%
phone · phoneE16499.2%
logoUrl97.6%
state90.7% (blank where the country has no state/region line)
latitude · longitude81.2% (the rest publish no geocode — null, never 0,0)
facebookUrl53.5%
instagramUrl52.5%
any social profile60.4%
twitterUrl23.8%
description33.3% (only a third of houses write a storefront blurb)
upcomingAuctionCount · upcomingLotCount100% (a real count, 0 where nothing is on the calendar)
nextAuctionUrl · nextAuctionName12.5% — the 63 houses with a sale scheduled

Also on every house row: slug, profileUrl, contactUrl, pastSalesUrl, addressLines (the raw address exactly as printed), isListedInDirectory, linkedinUrl, pinterestUrl, youtubeUrl, scrapedAt.

Geography measured on the full 505: 429 United States (across 41 states), 24 United Kingdom, 12 Canada, 7 Mexico, 5 Italy, 4 Germany, 4 France, 3 Spain, 3 Austria, and a long tail — 419 distinct email domains, so these are the houses' own inboxes, not a shared platform address.

Mode 2 — lots: catalogue lots

One row per lot, from the upcoming calendar or the closed archive.

FieldWhat it is
lotId · lotNumber · title · lotUrl · imageUrlidentity; 100% on 4,298 lots measured
estimateLow · estimateHigh · estimateCurrency · estimateDisplaythe estimate band; 99.8%
currentPrice · currentPriceDisplay · currentPriceLabelcurrent bid, starting bid or Buy Now price, and which of those it is
bidCountbids placed, where the sale shows it
hammerPriceLoginWalledtrue when Bidsquare has replaced the price with a login button
realizedPrice · saleStatus · schemaAvailabilitysold / unsold / open, and the hammer price on sold — needs lotDetails
condition · categories · buyersPremiumPercent · shippingInfo · description · imageswith lotDetails
eventId · eventName · eventUrl · eventStatus · auctionType · eventDatesText · eventTimezonethe sale
houseName · houseSlug · houseProfileUrlthe seller
housePhone · houseEmail · houseStreet · houseCity · houseState · housePostalCode · houseCountry · houseLatitude · houseLongitudewith includeHouseContact (on by default) — 100% on 4,298 lots

The realized-price wedge, and how it was verified

On a closed sale, the catalogue page shows an estimate and a "Login for Price" button — measured at 85.2% of 4,298 lots across ten closed sales. The lot page shows the same button. But the lot page also carries a schema.org Product block, and that block still publishes the price:

"offers": { "price": 125, "priceCurrency": "USD", "availability": "SoldOut" }

Setting lotDetails: true reads it. On a 250-lot sale walked end to end: 228 sold lots, 228 realized prices (100%), 12 unsold lots, 0 realized prices — because availability: Discontinued means the lot did not sell and its price is only the last standing bid. An unsold lot is never reported as sold.

Why it is the hammer price and not a restated estimate. Checked on 24 closed lots from one sale: the published price equalled the estimate midpoint on only 2 of 24, and ranged from $50 against a $100–150 estimate to $2,500 against a $200–300 estimate. An estimate cannot do that.


How much data is there?

Every figure re-measured against the live site on 2026-09-18:

Measured
Auction houses in Bidsquare's sitemap505
…of those, listed in the public /directory210
…of those, with a sale on the calendar63
Upcoming sales132
Lots advertised across those sales48,320
Largest single catalogue seen2,999 lots
Closed-sale archive91 pages × 24 sales ≈ 2,180 sales

A full-directory run — all 505 houses — takes 513 requests and returned 505 / 505 rows with 0 failures and 0 blocks.


Input

FieldTypeDefaultWhat it does
modeselectauction-housesauction-houses or lots
houseScopeselectallall (505) or selling-now (63)
houseSlugsarray[]Limit to specific houses — slug or profile URL
auctionStatusselectupcomingupcoming, past or both
auctionUrlsarray[]Scrape exactly these sale catalogues
maxAuctionsinteger5Catalogues to walk; 0 = no limit
keywordsarray[]Keep only lots matching these words
minEstimate / maxEstimateintegerEstimate-band filter
onlyWithEstimatebooleanfalseDrop lots with no published estimate
lotDetailsbooleanfalseOne request per lot: realized price, condition, category, premium, all photos
includeHouseContactbooleantrueJoin the selling house's contact onto each lot row
maxRecordsinteger75Hard cap on rows delivered and charged; 0 = no limit
maxConcurrencyinteger8Parallel requests
proxyConfigurationobjectApify ProxyDatacenter measured at 513/513 on 2026-09-18

Example: the whole contact directory

{ "mode": "auction-houses", "houseScope": "all", "maxRecords": 0 }

Example: houses with a sale on the calendar right now

{ "mode": "auction-houses", "houseScope": "selling-now", "maxRecords": 0 }

Example: realized prices from closed sales

{ "mode": "lots", "auctionStatus": "past", "maxAuctions": 3,
"lotDetails": true, "maxRecords": 500 }

Example: watches and jewellery on the upcoming calendar over $1,000

{ "mode": "lots", "auctionStatus": "upcoming", "maxAuctions": 20,
"keywords": ["Rolex", "Cartier", "diamond"], "minEstimate": 1000, "maxRecords": 2000 }

A real row (from the verified run, trimmed)

{
"recordType": "auction-house",
"slug": "clars-la",
"name": "Clars LA Auctions",
"bidsquareSellerId": 906,
"phone": "(626) 766-1616",
"phoneE164": "+16267661616",
"email": "ask@clarsla.com",
"street": "818 W Las Tunas Dr",
"city": "Los Angeles",
"state": "CA",
"postalCode": "91776",
"country": "United States",
"latitude": null,
"longitude": null,
"instagramUrl": "https://www.instagram.com/clarsauctiongalleryla",
"isListedInDirectory": true,
"upcomingAuctionCount": 0,
"upcomingLotCount": 0,
"profileUrl": "https://www.bidsquare.com/auction-house/clars-la"
}

Pricing

Pay per event. One event, record-scraped, charged once for each row delivered — $0.0045 a row, i.e. $4.50 per 1,000. There is no run-start fee, so a run that matches nothing costs nothing.

RunRowsCost
The whole 505-house contact directory505$2.27
Houses with a sale on the calendar63$0.28
One 450-lot catalogue with house contacts450$2.03
A 250-lot closed sale with realized prices250$1.13

Filtered-out lots are never delivered and never charged. A house whose page exists but publishes no contact at all is reported in the run summary and not charged. The row cap counts rows produced, so maxRecords: 60 charges exactly 60 — never a flushed batch of 100.


Honest limits

  • Realized prices need lotDetails: true. The catalogue listing genuinely has no price for a closed lot — measured 0 of 96 on a closed-sale page. One extra request per lot is the cost of it.
  • Bidsquare does not publish a house's own website URL anywhere on its profile or contact page, so there is no website field. The email domain is usually the site (419 distinct domains on 505 houses).
  • condition and categories vary by house, not by parser. Some houses publish a full condition report and a category path on every lot page; others publish neither — on one 240-lot sale walked with lotDetails both came back empty for all 240, and the raw bytes confirm the page carries an empty auction-category block and no condition section at all.
  • description is only written by a third of houses (168 of 505). It is null, not an empty string, on the rest.
  • Coordinates are null on 18.8% of houses. Bidsquare writes 0 there and geocodes in the browser; 0,0 is a point in the Atlantic, so it is reported as null.
  • limit=120 is broken on Bidsquare's own pagination — a 450-lot catalogue reachable at limit=96 returns only 330 lots at 120, because page 4 silently re-serves page 1. This Actor pins 96 and stops on "no new lot ids", and every catalogue it walked reconciled exactly to the sale's own results counter (4,298 reported / 4,298 read across ten sales).
  • Bid counts and current prices only exist while a lot is open. Across ten closed sales, currentPrice filled on 12.5% of rows and hammerPriceLoginWalled on 85.2% — that is the source, not a parse failure, and the flag tells you which is which.

Reliability and how it behaves when something goes wrong

  • A non-200 is treated as a transport failure, retried on a fresh proxy session, and listed in RUN_SUMMARY.unreachable — never as "end of data".
  • An HTTP 200 carrying a challenge page is counted as blocked, not as an empty result.
  • Bodies are checked against Content-Length before parsing, because a multi-hundred-KB page can die mid-stream under HTTP 200 on a datacenter proxy.
  • Every catalogue is floor-asserted against the sale's own "N Results" counter.
  • The 505-house sitemap parse is floor-asserted too: if it yields fewer than 300 houses the run fails rather than shipping a partial directory.
  • A run where more than half the requests fail fails loudly. A run that legitimately matched nothing exits clean with zero rows and zero charge.
  • RUN_SUMMARY (in the key-value store) keeps the three kinds of nothing apart — does not exist · exists but publishes no contact · unreachable after retries — and charges for none of them.

FAQ

Can I get sold prices / prices realized? Yes. mode: "lots", auctionStatus: "past", lotDetails: true. realizedPrice is filled on every lot whose saleStatus is sold; it stays null on unsold.

Do I need a Bidsquare account? No. Everything this Actor reads is served to a logged-out visitor.

Does it use a browser? No. Bidsquare renders its directory, catalogues and lot pages server-side, so this is plain HTTP at 1,024 MB — which is why a full 505-house directory is 513 requests and a few minutes.

How do I get every house in one file? { "mode": "auction-houses", "maxRecords": 0 }. That is 505 rows, $2.27.

How do I get the houses worth calling this week? houseScope: "selling-now" — the 63 houses with a sale on the calendar, each row carrying upcomingAuctionCount, upcomingLotCount and the next sale's name, URL and start time.

Can I filter by category, artist or keyword? keywords matches lot titles (and descriptions when lotDetails is on). Bidsquare's /search endpoint is Disallowed in its robots.txt, so this Actor filters catalogue lots it has already read rather than querying that endpoint.

Why is currentPrice empty on so many of my rows? Because those lots have closed and Bidsquare has replaced the price with a login button — hammerPriceLoginWalled will be true on exactly those rows. Turn on lotDetails to get realizedPrice instead.

What happens if a lot or house disappears mid-run? It is recorded in RUN_SUMMARY.notFound and not charged.

Can I monitor a specific house? houseSlugs: ["clars-la"] in either mode. In lots mode only that house's sales are walked.

How big can one run get? The largest single catalogue measured was 2,999 lots, and it walked to the last lot exactly (31 pages of 96 plus a final 23 = 2,999).

Does the row cap really cap the bill? Yes. Rows are delivered through Apify's budget-aware push, so delivered always equals charged.


Data comes from public pages on https://www.bidsquare.com — the auctioneer directory, sale calendars, catalogue pages and lot pages, all served to a logged-out visitor.

Why auction houses are named on every sale: US state auctioneer-licensing statutes require the licensed auctioneer to be identified on an advertised sale — Ohio R.C. 4707.22, the Pennsylvania Auctioneer Licensing Act (63 P.S. §734) and Texas Occupations Code ch. 1802 among them — so the selling house is named on each catalogue. Bidsquare's own house profiles carry the address and phone by directory convention.

robots.txt (fetched 2026-09-18), quoted verbatim. The disallowed paths are:

Disallow: /my-bidsquare
Disallow: /my-account
Disallow: /admin
Disallow: /seller
Disallow: /user
Disallow: /search
Disallow: /*?*category=
Disallow: /category/*?*page=
Disallow: /*?*search=
Disallow: /*?*filters=
Disallow: /*?*sort=
Disallow: /*?*default=
Disallow: /user/register/*
Disallow: /user/register?*
Disallow: /register/*
Disallow: /register?*
Disallow: /*?*is_ajax=
Allow: /user/register

There is no blanket Disallow: /. This Actor reads only /directory, /sitemap-auction-house.xml, /auction-house/<slug>/contact-us, /auctions[?page=N], /auctions/past[?page=N], /auctions/<house>/<sale>?limit=96[&page=N] and /online-auctions/<house>/<lot> — none of which appears above, and the offline test suite asserts that for each URL template. It does not use /search or the ?is_ajax= endpoints, which is why the per-house sale count is counted off /auctions rather than taken from the directory's "View All Upcoming" button.

Not affiliated with, endorsed by, or connected to Bidsquare. Check Bidsquare's Terms of Service and your own obligations before using the output; how you use contact data is your responsibility.