Artsper.com Artist & Artwork Scraper
Pricing
from $2.10 / 1,000 results
Artsper.com Artist & Artwork Scraper
Artsper.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 $2.10 / 1,000 results
Rating
0.0
(0)
Developer
Artsiom Kunitsyn
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
8 days ago
Last modified
Categories
Share
Scrapes both artworks and artist profiles from Artsper.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 Artsper.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, enumerated via Artsper's own catalog pagination (paginated to completion), not just whatever a single search page happens to show.
- Fast artist rollups. The stats are read straight from the artist's catalog pages (60 artworks per page, sold ones included), so an artist with up to 60 artworks costs a single page request and a 240-artwork artist four — instead of one request per artwork.
- 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. With no
startUrls/artistUrls, discovery is the full site sitemap — every artwork, every artist — butmaxItemsdefaults to 50 (a fast preview, and what keeps an unconfigured run within Apify's automated 5-minute QA check), so clear it (null) for a real full crawl. - Rich data straight from the site's own structured markup. Every artwork/artist page ships clean Schema.org JSON-LD (price, medium, dimensions, artist nationality, birth year, full biography) — read directly rather than scraped from display text, so it doesn't break on cosmetic page redesigns the way plain-HTML scraping would.
- A verified, trackable artist list.
artistUrlslets you scrape exactly the artists you care about — each URL is checked against the real artist sitemap first (typos/removed artists are logged and skipped), and unlike a genericstartUrlslist, it gets its own persisted tracking scope: run the same list on a schedule and get real new/changed/delisted detection for just those artists. - Progress visible in the run log. Every ~10 items or ~20 seconds, the log reports how many
items have been processed (with a known total for bounded runs), pushed, and errored, plus the
observed rate — and for
entityType: artists, a running count of artworks read across all rollups so far. - Confirmed-gone URLs are never re-fetched. Artsper.com doesn't return an HTTP error for a
removed artwork — it silently serves the generic catalog page instead (still
200 OK). This Actor detects that content signal, persists it, and skips the URL on every future run — no input needed to enable it. - Fast artwork crawls. Artwork pages go through Apify's Residential proxy by default (included in the price), a different IP per request, so 12 pages are fetched at a time instead of one every 2 seconds — about 8x faster. A blocked IP is simply retried on another one.
- Resilient to rate limiting — bounded, not stuck. Artsper.com's Cloudflare protection throttles sustained traffic (HTTP 429s that mostly resolve on retry, just slowly). Requests are paced and retried, and a wall-clock budget cuts one artist's catalog walk short after 180 seconds rather than letting it stall the run; the record is still returned, with a warning in the log.
📋 Output
One dataset item per artwork or artist, depending on entityType — see
the
Output tab's Artworks / Artists views for a readable table.
Example artwork record:
{"source": "artsper","entity_type": "artworks","external_id": "artsper_2462506","url": "https://www.artsper.com/fr/oeuvres-d-art-contemporain/peinture/2462506/toile-lamour-dans-la-nature-jerome-mesnager","title": "Toile L'amour dans la nature","artist_name": "Jérôme Mesnager","artist_url": "https://www.artsper.com/us/contemporary-artists/france/17/jerome-mesnager","category": "Painting","medium": "acrylic","surface": "canvas","date_created": "2022","price": 2800,"currency": "EUR","availability_status": "InStock","width_cm": 81,"height_cm": 100,"condition": "Artwork sold in perfect condition, framed, ready to hang","signature": "Hand-signed by artist","gallery_name": "At Down","gallery_country": "France","change_type": "new"}
Example artist record:
{"source": "artsper","entity_type": "artists","external_id": "artsper_artist_17","url": "https://www.artsper.com/fr/artistes-contemporains/france/17/jerome-mesnager","name": "Jérôme Mesnager","nationality": "France","birth_year": 1961,"total_artworks": 45,"sold_artworks": 0,"avg_price": 1037.0,"mediums": "Fine Art Drawings, Painting, Print, Sculpture","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 gaps:
price/currencyon artwork records are native, unconverted values. The artist rollup'savg_price/sold_avg_price/latest_artwork_priceare in EUR (the catalog pages' own price field, which was EUR on every artwork checked).latest_artwork_*assumes the catalog's default sort is newest-first; not independently confirmed against a date field.- A very large artist's rollup can in principle be cut short by heavy rate-limiting (see Key
features) —
total_artworks/avg_price/etc. then reflect only the catalog pages read before the 180-second budget ran out. Check the run log for a "cut short" warning if a rollup's numbers look lower than expected.
⚙️ Input
The Input tab lists every option with its description.
| Parameter | Type | Default | Description |
|---|---|---|---|
entityType | String | artworks | artworks or artists. |
startUrls | Array of strings | (none) | Specific artist/artwork URLs, or a category/search catalog URL, to scrape directly instead of discovering via the full site sitemap. Scope is always "custom", with no persisted tracking across runs — for persisted per-artist tracking, use artistUrls instead. A catalog URL's unfiltered form self-caps at 100 pages regardless of true match count — narrow with a category/filter for large result sets. |
artistUrls | Array of strings | (none) | Artists only. Paste artist URLs, one per line (a .txt file's contents paste in directly, no upload needed) to scrape exactly those artists + their artworks. Verified against the real artist sitemap first (see verifyArtistUrls); gets its own persisted scope, so re-running the same list on a schedule gives real new/changed/delisted tracking for just those artists. Takes priority over startUrls. |
verifyArtistUrls | Boolean | true | When artistUrls is set, check each URL against the real sitemap first (roughly a minute, one full sitemap walk, regardless of list size) and skip any not found. Turn off to scrape the list unverified. |
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 — raise this or clear it (set to null) for that; note a capped run never updates the incremental baseline (see below), so any real tracking run needs this cleared. |
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 or a verified artistUrls list can detect delistings or update the baseline. |
impersonate | String | chrome (internal) | curl_cffi TLS-impersonation target. Artsper's Cloudflare protection challenges plain requests, so this is set internally by default — override only if that stops working. |
proxyConfiguration | Object | Apify Residential | Proxy for artwork detail pages. Residential (the default, included in the price) spreads requests over many IPs so 12 pages are fetched at a time; turn it off for slower direct fetching (one page every 2 s). Artist runs and discovery always go direct. |
🧪 Input examples
Full artwork catalog scan (exhaustive — every artwork's detail page is fetched, 12 at a time;
maxItems: null explicitly overrides the 50-item default):
{ "entityType": "artworks", "maxItems": null }
Bounded preview (the default — fast, but not a curated subset, just the first N artworks the sitemap yields):
{ "entityType": "artworks", "maxItems": 200 }
Full artist directory, with rollup stats:
{ "entityType": "artists", "maxItems": null }
A specific, tracked list of artists (verified against the sitemap, own persisted scope —
maxItems: null so the whole list is scraped even if it's longer than the 50-item default):
{"entityType": "artists","artistUrls": ["https://www.artsper.com/fr/artistes-contemporains/france/17/jerome-mesnager"],"maxItems": null}
Scheduled tracking run — full, uncapped run (maxItems cleared — required for the baseline to
save and delistings to be detected):
{ "entityType": "artworks", "mode": "incremental", "maxItems": null }
🔄 Incremental (delta) mode
Every run classifies each item as new, changed (price or availability 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.
mode: auto(default) — first run for a scope pushes everything (full); later runs push onlynew/changed/delisted(incremental).- A
startUrls-scoped run is always partial and never updates the baseline.artistUrlsis different: it's treated as a complete, closed universe (like a full sitemap crawl), so its baseline does get saved and delisted-detection does run — as long as no item hit a genuinely ambiguous error that run (a confirmed-gone URL doesn't count against this — see below; a timeout, 5xx, or parse error does, and skips the baseline-save/delisted-detection that run to avoid false "delisted" reports). - Every bounded run (
startUrlsorartistUrls) logs a quick "X new, Y already tracked, Z already known-dead" preview right after startup, before the full fetch loop begins — new/already-tracked is informational only (every URL is still fully fetched and classified regardless, real price/status-change detection isn't skipped for "already tracked" items); already-known-dead URLs genuinely are skipped, see below. - A URL confirmed gone is recorded and never fetched again on any future run, regardless of
modeor scope — logged distinctly from other errors. Doesn't count toward the baseline-save/ delisted-detection gate above, since it's a trustworthy, already-understood outcome rather than an ambiguous failure.
🚀 How to scrape Artsper.com
- Open the Artsper Artist & Artwork Scraper in Apify Console and go to the Input tab.
- Pick
entityType(artworksorartists). maxItemsdefaults to 50 (a quick preview) — 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
- SaatchiArt 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.
- Artmajeur Artist & Artwork Scraper — a third, independent art marketplace source, same design.
- Artfinder Artist & Artwork Scraper — a fourth, independent art marketplace source, same design.
- Artsy Artist, Artwork & Gallery Scraper — a fifth, independent art marketplace source, plus a genuine dealer/gallery angle (real represented-artist rollups per gallery) this collection doesn't otherwise have.
- Riseart Artist & Artwork Scraper — a sixth, independent art marketplace source, built entirely on the site's own public GraphQL search API (no HTML scraping, no per-item detail fetch), with a real per-artist rollup (total artworks, avg price, for-sale vs. enquire-only split, sold count).
- Kunsthaus ARTES Artist & Artwork Scraper — a seventh, independent art marketplace source (German gallery), with a real four-state availability signal (for sale, price-on-request, reserved, sold) read from the site's own schema.org microdata.
- Ars Mundi Artist & Artwork Scraper — a ninth, independent art marketplace source (a sibling German gallery running the same underlying platform as Kunsthaus ARTES), also selling jewelry and decorative objects alongside paintings/sculptures.
- Artprice.com Artist & Artwork Scraper — a tenth, independent art marketplace source, built on Artprice.com's own public unauthenticated JSON APIs (artist directory + current marketplace listings), with real per-artist rollup stats and multi-currency pricing (EUR/USD/GBP/CNY/BTC/ETH) on every artwork.
❓ FAQ
Is it legal to scrape Artsper.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.
Does this Actor detect sold artworks? Yes — sold_artworks/sold_avg_price on artist records
are computed from the "Sold" marker on each artwork in the artist's catalog, checked live against
the artworks' own pages (sold status, price, category and title matched on all 63 artworks compared,
sold ones included). If a very large artist's rollup gets cut short by rate-limiting, these numbers
reflect only the catalog pages read — see the rate-limiting note under Known gaps.
Search keywords
artsper scraper, art marketplace scraper, artist data scraper, artwork data scraper, art price data, art market analytics, art collector data feed