ArtBrokerage.com Artist & Artwork Scraper avatar

ArtBrokerage.com Artist & Artwork Scraper

Pricing

from $5.00 / 1,000 results

Go to Apify Store
ArtBrokerage.com Artist & Artwork Scraper

ArtBrokerage.com Artist & Artwork Scraper

Scrape ArtBrokerage.com listings and artist profiles, with rich per-listing condition/provenance detail and real buyer-demand signals. No login required.

Pricing

from $5.00 / 1,000 results

Rating

0.0

(0)

Developer

Artsiom Kunitsyn

Artsiom Kunitsyn

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

artbrokerage-scraper

Scrapes artist profiles and artwork listings from ArtBrokerage.com, a US-based secondary-market art marketplace โ€” via the site's own public sitemaps, no login required.

Contents

๐Ÿ”‘ Key features

  • Two entity types, one Actor. Set entityType to artworks or artists.
  • Rich per-listing detail most marketplace scrapers don't carry: condition, signature details, framing, provenance ("Purchased from" / "Provenance history"), a free-text backstory, and the certificate-of-authenticity source โ€” genuinely server-rendered on every listing page.
  • A real buyer-demand signal. Every artist record includes collector_wanted_count โ€” genuine named-collector buy requests for that artist, a field no sibling art-marketplace Actor in this collection has (kept separate from broker_wanted_count, ArtBrokerage's own generic standing interest, present for nearly every artist and not itself a strong demand signal โ€” see FAQ).
  • A genuine for-sale/sold flag on every artwork.
  • Delta mode built in. Every run classifies each item as new, changed, unchanged, or delisted against a persisted baseline.
  • maxItems defaults to 50 โ€” a fast preview, and what keeps an unconfigured run within Apify's automated 5-minute QA check. ArtBrokerage's real catalog is substantial (~40,000 listings, ~5,800 artists) โ€” clear maxItems (null) for a full run.

๐Ÿ“‹ Output

One dataset item per artwork or artist, depending on entityType โ€” see .actor/dataset_schema.json for the full field list, or the Output tab's Artworks / Artists views for a readable table.

Example artwork record:

{
"source": "artbrokerage",
"entity_type": "artworks",
"external_id": "120261",
"url": "https://www.artbrokerage.com/Larry-Rivers/Madama-Butterfly-1978-120261",
"title": "Madama Butterfly 1978",
"artist_name": "Larry Rivers",
"artist_url": "https://www.artbrokerage.com/Larry-Rivers",
"category": "Limited Edition Print",
"medium": "Mixed Media Work in Eight Colors in Lithography And Three Colors",
"size_raw": "22.75x30.5 in | 58x77 cm",
"height_in": 22.75,
"width_in": 30.5,
"edition": "From the edition of 250",
"sold": false,
"price": 2700.0,
"currency": "USD",
"price_note": "Mixed Media - Blue Chip",
"year": "1978",
"condition": "Excellent",
"purchased_from": "Gallery",
"provenance": "Circle Gallery, NY",
"certificate_of_authenticity": "Art Brokerage",
"art_styles": ["Contemporary"],
"art_collections": ["Well Priced", "Blue Chip - Post War - MASTERS"],
"change_type": "new"
}

Example artist record:

{
"source": "artbrokerage",
"entity_type": "artists",
"external_id": "Pablo-Picasso",
"url": "https://www.artbrokerage.com/Pablo-Picasso",
"name": "Pablo Picasso",
"location": "Spain",
"bio": "Art Brokerage: Park West Artist: Pablo Picasso Blue Chip Spanish...",
"for_sale_count": 151,
"recent_sold_count": 16,
"broker_wanted_count": 4,
"collector_wanted_count": 7,
"change_type": "new"
}

๐Ÿ”ง Input

FieldTypeDefaultDescription
entityTypestringartworksartworks or artists.
maxItemsinteger50Stop after pushing this many items. Set to null for a full crawl.
modestringautoauto / full / incremental โ€” see Incremental mode.
concurrencyinteger10How many listing/artist pages to fetch in parallel. Automatically capped to 8 for entityType=artists regardless of this value โ€” see FAQ.
impersonatestringchromecurl_cffi TLS-impersonation target.
proxyConfigurationobjectoffApify Proxy config โ€” not needed; no anti-bot friction found.

๐Ÿ“ฅ Input examples

Default preview (50 artworks):

{ "entityType": "artworks" }

Full artist directory:

{ "entityType": "artists", "maxItems": null }

Full listing catalog:

{ "entityType": "artworks", "maxItems": null }

๐Ÿ” Incremental (delta) mode

auto mode does a full scan the first time it runs for a given entityType, then only pushes new/changed items on later runs. Only an uncapped run (no maxItems limit reached) can detect delistings, sold-status changes, or price changes, or update the baseline.

๐ŸŒ How to scrape ArtBrokerage.com

ArtBrokerage has no JSON API of any kind โ€” this Actor discovers its scope entirely via the site's own public sitemaps (sitemap-artists.xml, sitemap-listings.xml) and reads each artwork/artist page's own server-rendered HTML, the same content your browser sees.

โ“ FAQ

Why is price null on some for-sale (not sold) listings? Some (typically higher-value) listings show a price tier instead of an exact figure โ€” the site displays literal "$$$$$$$" characters with the real range only in a tooltip. This Actor reads that range into price_min/price_max instead, leaving price null since no single figure exists.

What's the difference between broker_wanted_count and collector_wanted_count? broker_wanted_count is ArtBrokerage's own standing "we'll help you sell this artist's work" interest โ€” present at a low count for nearly every artist checked, including ones with zero for-sale listings, so it isn't a meaningful demand signal by itself. collector_wanted_count is genuine named-collector buy requests, confirmed to be entirely absent (not zero) from the page until at least one real request exists โ€” this is the field worth watching for real demand.

Does this include realized/historical sale prices? No. A sold listing on this site shows only a plain "SOLD" tag โ€” no price. An artist's "Recently Sold" section is a small, capped preview (also with no price), not a queryable total or archive. recent_sold_count reflects only what that preview shows, not a true total sold count.

Why is price sometimes accompanied by odd text like "23 Watchers" or "Inquire"? That's price_note โ€” ArtBrokerage's own marketing copy next to the price on some listings. It's kept verbatim (with decorative emoji stripped) since it occasionally carries real signal (a watcher count, a negotiability hint), but it's free text, not a structured field.

Some size_raw values look implausible (e.g. "1312x1034 in"). A real, confirmed site-side data-entry bug on ArtBrokerage's own pages (a missing decimal point) โ€” not a scraping error. The paired cm value is mathematically derived from the same (buggy) inch value, so it inherits the same error rather than independently confirming it. Passed through as-is.

Does this need a proxy? No โ€” no anti-bot friction was found anywhere on this site (plain nginx, no Cloudflare or equivalent challenge). The origin server is simply slow (several seconds per page even under concurrency) โ€” a full uncapped crawl takes hours, which is expected, not a sign of blocking.

Why is entityType=artists capped at concurrency 8 no matter what I set? A real large-scale test found artist pages are fast/light enough that even moderate concurrency drives a high sustained request rate, and above roughly 8 concurrent requests that rate reliably triggers a real HTTP 403 block for the rest of that run (confirmed: concurrency 20 failed within 3 minutes; concurrency 8 ran clean across 4,500+ consecutive real artist pages). This Actor enforces the safe value automatically rather than exposing a setting that can silently lose half a run's results.