Artsper.com Artist, Artwork & Gallery Scraper
Pricing
from $2.10 / 1,000 results
Artsper.com Artist, Artwork & Gallery Scraper
Artsper.com artworks for sale (the whole catalog in minutes) and sold, artist profiles with rollup stats, and galleries. Filter by category, country, EUR price and keyword; delta mode flags newly sold works.
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
14 days ago
Last modified
Categories
Features
Share
Scrapes artworks (for sale and sold), artist profiles and galleries from Artsper.com: prices in EUR and the gallery's own currency, dimensions, edition size, medium, style, theme, gallery, listing date, plus per-artist rollup stats (average price, medium mix, sold count) computed from each artist's full catalog.
Contents
- For sale, sold or all: what to expect
- Key features
- Output
- Input
- Input examples
- Incremental (delta) mode
- How to scrape Artsper.com
- You might also like
- FAQ
⏱️ For sale, sold or all: what to expect
Artworks have an Availability option. Pick it by what you need and how long you can wait:
| Availability | What you get | Speed |
|---|---|---|
For sale (fast) — forSale, the default | Every artwork currently for sale (~205,000), with all filters | Fast. Read from Artsper's own search index, 1,000 artworks per request (over 1,000 rows a second): the whole catalog in a few minutes. |
Sold (slow) — sold | Sold artworks | Slow. Artsper shows sold works only on each artist's catalog page (60 works per page), read one page every 2 seconds. With an Artist URL list that's seconds per artist. Across the whole site it means reading every artist's catalog (tens of thousands of artists): many hours, so set Max results or use the artist list. |
All (slow) — all | For sale + sold, without duplicates | Slow, for the same reason as Sold. |
Want to know what sells, as it sells? You don't need the slow option for that. Schedule a
For sale (fast) run with mode: incremental and Max results cleared: every run reports new
listings, price changes, and artworks that sold since the last run (change_type: "changed",
availability_status: "SoldOut"). Sold (slow) is only needed for sales from before you started
tracking.
Typical run times (measured on Apify):
| Run | Rows | Time |
|---|---|---|
| Default input (for sale, 50 results) | 50 | ~5 s |
| Paintings for sale in France, €500–2,000 | 200 | ~5 s |
| For sale, no filters | 8,000 | ~12 s |
| Sold works of 2 artists (Warhol, Kusama), artist URL list | 55 | ~15 s |
All (for sale + sold) of 1 artist, with includeDetails | 30 | ~45 s |
| Every gallery | 395 | ~2 s |
| Artists with rollup stats | 50 | ~2 min |
🔑 Key features
- Three entity types, one Actor.
entityTypeartworks,artistsorgalleries. - The whole for-sale catalog in minutes. Artworks come from the search index Artsper's own pages use, with ~45 fields each: price in the gallery's currency and in EUR, width/height/depth, edition size and copies left, unique or edition, framed, ready to hang, negotiable, medium, surface, styles, themes, colors, tags, orientation, gallery, location country and the date the listing was approved.
- Filters that run on the site's side. Category, location country, EUR price range and keyword: you pay only for matching artworks, and filtered runs are even faster.
- Sold artworks with their last price. From the "Sold" cards in artists' catalogs, plus the works Artsper has just marked sold.
- A feed of newly sold works. A scheduled for-sale run checks every artwork that disappeared
since the last run: sold (reported as sold), still for sale (kept quietly) or really removed
(reported
delisted). - Detail-page extras on request.
includeDetailsadds condition, signature and certificate of authenticity from each artwork's page (slower: one page per artwork). - Real per-artist rollup stats, not a sample. Average price, medium mix, sold count and latest artwork, computed from an artist's entire catalog (60 works per page request).
- Galleries. Every gallery in Artsper's gallery directory (~400) with its city, country, number of artworks, number sold and followers.
- Delta mode built in. Every run classifies each item as
new,changed,unchangedordelistedagainst a saved baseline: pay for what changed, not a full re-scrape every time. - A tracked artist list.
artistUrlsscrapes exactly the artists you care about (artist profiles, or their artworks for sale and sold), with its own tracking across repeat runs. maxItemsdefaults to 50 (a fast preview); clear it (null) for everything.
📋 Output
One dataset item per artwork, artist or gallery, depending on entityType — see the Output
tab's Artworks / Artists / Galleries views for a readable table.
Example artwork record (for sale):
{"source": "artsper","entity_type": "artworks","external_id": "artsper_1298532","url": "https://www.artsper.com/en/contemporary-artworks/print/1298532/lenvolee-secrete","title": "L'Envolée Secrète","artist_name": "Hugo Pondz","artist_url": "https://www.artsper.com/en/contemporary-artists/belgium/6293/hugo-pondz","artist_id": 6293,"artist_nationality": "Belgian","category": "Print","medium": "tirage fine art","surface": "argentic paper","date_created": "2019","price": 1200,"currency": "EUR","price_eur": 1200,"availability_status": "InStock","width_cm": 120,"height_cm": 80,"edition_size": 30,"copies_available": 26,"is_unique": false,"is_framed": false,"is_negotiable": true,"styles": ["Contemporary Landscape"],"themes": ["Everyday life"],"tags": ["Sea", "Swimming", "Holidays"],"orientation": "Landscape","rarity": "Limited editions","gallery_name": "galerie bruno massa","gallery_id": 1004,"location_country_code": "BE","listed_at": "2021-12-15T16:10:00+00:00","image_url": "https://media.artsper.com/artwork/1298532_1_m.jpg","data_source": "search_index","change_type": "new"}
A sold artwork from an artist's catalog (data_source: "artist_catalog") has the title, artist,
category, last price (EUR), image and availability_status: "SoldOut"; add includeDetails for
medium, surface, dimensions, condition, signature and authenticity from its page.
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"}
Example gallery record:
{"source": "artsper","entity_type": "galleries","external_id": "artsper_gallery_9948","url": "https://www.artsper.com/us/art-galleries/united-states/9948/zatista-contemporary-fine-art","name": "Zatista Contemporary & Fine Art","city": "Yardley","country": "United States","artworks_count": 7500,"sold_count": 178,"followers_count": 62,"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/currencyare the gallery's own currency (EUR, USD, GBP or CHF);price_euris the euro price. Sold works from artist catalogs carry the EUR price only.condition,signatureandauthenticityare only on the artwork's own page: turn onincludeDetailsfor them.- Filters by country and keyword apply to the search index; sold works read from artist catalogs can't be filtered by them (category and price filters do apply).
- The artist rollup's
latest_artwork_*assumes the catalog's default sort is newest-first.
⚙️ Input
The Input tab lists every option with its description.
| Parameter | Type | Default | Description |
|---|---|---|---|
entityType | String | artworks | artworks, artists or galleries. |
availability | String | forSale | Artworks: forSale (fast), sold (slow), all (slow) — see what to expect. |
categories | Array | (all) | Artworks: painting, print, photography, sculpture, drawing, design. |
countries | Array of strings | (all) | Artworks: two-letter codes of the countries Artsper lists the artwork in, e.g. ["FR", "US"]. |
minPrice / maxPrice | Integer | (none) | Artworks: price range in EUR. |
keyword | String | (none) | Artworks: Artsper's own site search. |
includeDetails | Boolean | false | Artworks: also open each artwork's page for condition, signature and authenticity. Slower. |
artistUrls | Array of strings | (none) | Artist URLs, one per line. Artists: scrape exactly these. Artworks: only these artists' works (the fast way to get sold works). Each list gets its own tracking scope. |
verifyArtistUrls | Boolean | true | Artists: check artistUrls against the artist sitemap first (about a minute) and skip any not found. |
startUrls | Array of strings | (none) | Specific artist/artwork URLs or a catalog URL, scraped page by page instead of the search index; availability and filters are then ignored. Never a delisting-aware scan. |
maxItems | Integer | 50 | Stop after this many dataset items. Clear it (null) for everything — and for incremental tracking, since a capped run never updates the baseline. |
mode | String | auto | auto: full on the first run, incremental after. full: push everything. incremental: push only new/changed/sold/delisted items. |
impersonate | String | chrome (internal) | curl_cffi TLS-impersonation target; override only if Artsper's Cloudflare check stops passing. |
proxyConfiguration | Object | Apify Residential | Used only for artwork pages (includeDetails, startUrls, checking disappeared artworks): 12 pages at a time over many IPs. Included in the price. |
🧪 Input examples
Every artwork for sale (fast, a few minutes):
{ "entityType": "artworks", "maxItems": null }
Paintings for sale in France between €500 and €2,000:
{"entityType": "artworks","categories": ["painting"],"countries": ["FR"],"minPrice": 500,"maxPrice": 2000,"maxItems": null}
Sold works of specific artists (slow option, but quick for a short list):
{"entityType": "artworks","availability": "sold","artistUrls": ["https://www.artsper.com/us/contemporary-artists/united-states/1554/andy-warhol","https://www.artsper.com/us/contemporary-artists/japan/2391/yayoi-kusama"],"maxItems": null}
Daily feed of new listings, price changes and newly sold works (schedule it):
{ "entityType": "artworks", "availability": "forSale", "mode": "incremental", "maxItems": null }
Full artist directory, with rollup stats:
{ "entityType": "artists", "maxItems": null }
Every gallery:
{ "entityType": "galleries", "maxItems": null }
🔄 Incremental (delta) mode
Every run classifies each item as new, changed (price or availability moved, for artworks;
catalog size/sold count/average price, for artists; artwork or sold count, for galleries),
unchanged, or delisted, using a baseline saved per entityType and input (availability,
filters, artist list).
mode: auto(default) — the first run for a given input pushes everything (full); later runs push onlynew/changed/delisteditems (incremental).- Sold and removed artworks are told apart. When an artwork from the last run is missing, the
Actor checks it: if Artsper marks it sold, you get it as
changedwithavailability_status: "SoldOut"; if its page is still for sale, it stays tracked quietly; only an artwork whose page is really gone comes back asdelisted. - Only a complete run updates the baseline and reports sold/delisted items:
maxItemscleared, nostartUrls, and no errors. A capped orstartUrlsrun never does. - A URL confirmed gone is recorded and never fetched again on any future run.
🚀 How to scrape Artsper.com
- Open the Artsper Artist, Artwork & Gallery Scraper in Apify Console and go to the Input tab.
- Pick
entityType(artworks,artistsorgalleries), and for artworks the Availability (For sale is fast; Sold and All are slow) and any filters. maxItemsdefaults to 50 (a quick preview) — clear it (set tonull) for a full 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, including works that sold.
🔗 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.
Can I get only sold artworks? Yes: set Availability to Sold (slow). It's slow because
Artsper shows sold works only on each artist's catalog page, so give an Artist URL list for a
quick run, or set Max results. To follow sales as they happen, schedule a For sale (fast) run in
incremental mode instead: works that sold since the previous run come back with
availability_status: "SoldOut".
Why is "For sale" so much faster than "Sold"? For-sale artworks come from Artsper's own search index, 1,000 per request. Sold works aren't in it (apart from the most recent ~1,400), so they're read from artists' catalog pages, 60 per page, paced at one page every 2 seconds to stay within Artsper's rate limit.
Does the artist rollup count sold works? Yes — sold_artworks/sold_avg_price on artist
records come from the "Sold" marker on each artwork in the artist's catalog.
Search keywords
artsper scraper, artsper sold artworks, art gallery data, art marketplace scraper, artist data scraper, artwork data scraper, art price data, art market analytics, art collector data feed