SaatchiArt.com Artist & Artwork Scraper
Pricing
from $5.00 / 1,000 results
SaatchiArt.com Artist & Artwork Scraper
SaatchiArt.com artist & artwork scraper with real per-artist rollup stats (avg price, medium mix, sold count) from each artist's full catalog, plus delta mode.
Pricing
from $5.00 / 1,000 results
Rating
0.0
(0)
Developer
Artsiom Kunitsyn
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
saatchiart-scraper
Scrapes both artworks and artist profiles from SaatchiArt.com, including per-artist rollup stats (average price, medium mix, sold count, latest artwork) computed from the artist's full catalog — not a sample.
Contents
- Key features
- Output
- Input
- Input examples
- Incremental (delta) mode
- How to scrape SaatchiArt.com
- You might also like
- FAQ
🔑 Key features
- Two entity types, one Actor. Set
entityTypetoartworksorartists— no need for two separate scrapers to build a full picture of an artist and their work. - Real per-artist rollup stats, not a sample. Average price, unique medium mix, sold-artwork count, and latest artwork are computed from an artist's entire catalog via a paginated API call, cross-checked to match the artist's own stated artwork total.
- Delta mode built in. Every run classifies each item as
new,changed,unchanged, ordelistedagainst a persisted baseline — pay for what changed, not a full re-scrape every time. - Exhaustive when you ask for it. A plain run (no
category, nostartUrls) crawls the full site sitemap — every artwork, every artist, not a filtered subset.maxItemsdefaults to 50 (a fast preview, and what keeps an unconfigured run within Apify's automated 5-minute QA check) — clear it or raise it for a real full crawl. - Optional cheaper category browse, with narrowing filters. Setting
categoryuses a faster search API instead of the sitemap. On its own it's a bounded preview (the API caps its reported result count at 10,000, and a broad category has far more artworks than that) — but combining it withsubject/mediums/styles/country/availabilitycan narrow a query enough to become genuinely exhaustive, and the Actor detects and logs which case you're in (see Input).
📋 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": "saatchiart","entity_type": "artworks","external_id": "P1-U476-A11979-T1","url": "https://www.saatchiart.com/art/Painting-Dinner-With-Tristan/476/4942/view","artwork_title": "Dinner With Tristan","artist_name": "Gregg Simpson","artist_url": "https://www.saatchiart.com/greggsimpson","category": "Painting","mediums": "Oil, Other","materials": "Canvas","price_eur": 12165.0,"original_status": "avail","height_cm": 152.4,"width_cm": 165.1,"change_type": "new"}
Example artist record:
{"source": "saatchiart","entity_type": "artists","external_id": "476","url": "https://www.saatchiart.com/greggsimpson","full_name": "Gregg Simpson","country": "Canada","followers_total": 1234,"total_artworks": 315,"sold_artworks": 42,"avg_price_eur": 987.5,"mediums": "Acrylic, Oil, Watercolor","latest_artwork_title": "Improvised Inlet","change_type": "new"}
Results can be downloaded as JSON, CSV, or Excel from the Console's Output tab, or pulled via the Apify API/dataset endpoint.
Known gap: uploaded_at is only populated for artworks discovered via the category input
(the search-API path carries a timestamp the sitemap detail-page path doesn't expose) — null
otherwise.
⚙️ Input
See .actor/input_schema.json for the full JSON schema.
| Parameter | Type | Default | Description |
|---|---|---|---|
entityType | String | artworks | artworks or artists. |
category | String | (none) | Artworks only. Restrict discovery to one category via a faster search API instead of the sitemap. The API caps its reported result count at 10,000 regardless of a category's true size — combine with the filters below to narrow enough for complete, delta-trackable coverage; check the run log for "exhaustive" vs "capped". Leave empty for a full, always-exhaustive sitemap crawl. |
availability | String | avail | Artworks only, category mode. Narrow by listing status: avail, sold, reserved, unavail, or empty for all. Including more statuses only widens the result count. |
subject | String | (none) | Artworks only, category mode. e.g. floral, landscape, abstract, portrait. |
mediums | String | (none) | Artworks only, category mode. e.g. oil, acrylic, watercolor, black & white. |
styles | String | (none) | Artworks only, category mode. e.g. realism, abstract expressionism, minimalism. |
country | String | (none) | Artworks only, category mode. Artist's country, e.g. united states, sweden. |
startUrls | Array of strings | (none) | Artworks only. Specific artwork URLs to scrape directly, instead of discovering via sitemap or category. |
maxItems | Integer | 50 | Stop after pushing this many dataset items. Defaults to a fast, cheap preview (also what keeps an unconfigured run within Apify's automated 5-minute QA check). A full crawl covers the entire site (hundreds of thousands of artworks, or the full artist directory) — raise this or clear it for that. |
mode | String | auto | auto (recommended): full scan on the first run, incremental after. full: always push every item and refresh the baseline. incremental: always push only new/changed items. Only a plain, unscoped sitemap crawl can detect delistings or update the baseline. |
impersonate | String | firefox (internal) | curl_cffi TLS-impersonation target. SaatchiArt blocks plain requests, so this is set internally by default — override only if that stops working. |
proxyConfiguration | Object | {"useApifyProxy": false} | Apify Proxy config. Off by default — try residential (not datacenter) proxies only if you start seeing blocks. |
🧪 Input examples
Full artwork catalog scan (exhaustive, slow — every artwork's detail page is fetched;
maxItems: null explicitly overrides the 50-item default):
{ "entityType": "artworks", "maxItems": null }
Quick category preview (fast, but broad — capped at 10,000 results, not exhaustive; the default
run without maxItems set already gives you a 50-item preview):
{ "entityType": "artworks", "category": "photography", "maxItems": 200 }
Narrow category query (fast and exhaustive — narrow enough to drop under the cap):
{ "entityType": "artworks", "category": "photography", "country": "sweden", "subject": "floral", "maxItems": null }
Full artist directory, with rollup stats:
{ "entityType": "artists", "maxItems": null }
Scheduled tracking run — only new/changed/delisted items since the last baseline:
{ "entityType": "artworks", "mode": "incremental" }
🔄 Incremental (delta) mode
Every run classifies each item as new, changed (price or status moved, for artworks; catalog
size/sold-count/avg-price moved, for artists), unchanged, or delisted, using a state baseline
persisted in a named Apify Key-Value Store scoped to entityType (+ category, for artworks).
mode: auto(default) — first run for a scope pushes everything (full); later runs push onlynew/changed/delisted(incremental).- A
startUrls-scoped artwork run is always partial and never updates the baseline. Acategory-scoped run updates the baseline only when it's narrow enough to be exhaustive (see Input) — check the run log to see which case a given run landed in.
Full design: ../../docs/incremental-mode.md.
🚀 How to scrape SaatchiArt.com
- Open the SaatchiArt Artist & Artwork Scraper in Apify Console and go to the Input tab.
- Pick
entityType(artworksorartists). - Optionally set
category(artworks only) for a quick, cheaper preview, or leave it empty for the full, exhaustive catalog. maxItemsdefaults to 50 (a quick preview) — raise it or clear it (set tonull) for a full, uncapped run.- Click Start.
- When the run finishes, browse results in the Output tab, or download as JSON/CSV/Excel, or fetch them via the API.
- To track over time instead of scraping once: create a Schedule with
mode: auto— the first run does a full scan, every run after only bills what actually changed.
🔗 You might also like
- Artmajeur Artist & Artwork Scraper — the same entity-type/rollup-stats design pointed at a second, independent art marketplace, for expanding artist coverage or cross-referencing the same artist's presence and pricing across platforms.
- Artsper Artist & Artwork Scraper — a third, independent art marketplace source, same design.
❓ FAQ
Is it legal to scrape SaatchiArt.com? It's legal to collect publicly available marketplace data such as artwork listings, prices, and public artist profile information. Scrape it only with a legitimate purpose under GDPR.
How do I get only new/changed items? Use mode: auto (or incremental) on a schedule — see
Incremental mode.
Why is avg_price_eur different from what's shown on the site? It's the artist's own catalog
average in SaatchiArt's Central-Europe reference price (EU1C), computed across every artwork —
not a single artwork's price.
Search keywords
saatchiart scraper, saatchi art scraper, art marketplace scraper, artist data scraper, artwork data scraper, art price data, art market analytics, saatchiart api, art collector data feed