Artfinder.com Artist & Artwork Scraper
Pricing
from $5.00 / 1,000 results
Artfinder.com Artist & Artwork Scraper
Artfinder.com artist and artwork scraper with real per-artist rollup stats, a sold-artworks filter, and built-in delta mode.
Pricing
from $5.00 / 1,000 results
Rating
0.0
(0)
Developer
Artsiom Kunitsyn
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
8 days ago
Last modified
Categories
Share
artfinder-scraper
Scrapes both artworks and artist profiles from Artfinder.com, including per-artist rollup stats (total/sold artworks, average price, medium mix) computed from the artist's full catalog โ not a sample.
Contents
- Key features
- Output
- Input
- Input examples
- Incremental (delta) mode
- How to scrape Artfinder.com
- Known gaps
- You might also like
- FAQ
๐ Key features
- Two entity types, one Actor. Set
entityTypetoartworksorartistsโ same design as this Actor's siblings for SaatchiArt.com and Artmajeur.com. - Real per-artist rollup stats, not a sample. Total/sold artwork counts and average price are computed from an artist's entire catalog, paginated to completion โ confirmed to include sold items, not just currently-for-sale ones.
minSoldArtworksfilter. Only push artists with at least N sold artworks โ skip the majority who've never sold anything, without paying for rows you'd throw away.- Delta mode built in. Every run classifies each item as
new,changed,unchanged, ordelistedagainst a persisted baseline. - Exhaustive when you ask for it. A plain run (no
startUrls) covers the whole site โ the full artist directory (~3,785 artists as of this build) or the full artwork catalog (~144,000 products across 3 sitemap shards).maxItemsdefaults to 50 (a fast preview) โ clear it or raise it for a real full run. - Full artwork detail for specific artists. Set
artistUrlsonentityType: "artworks"to fetch every artwork for exactly those artists instead of the full product sitemap. Pair with anentityType: "artists"+minSoldArtworksrun to first collect the artist URLs you want.
๐ 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": "artfinder","entity_type": "artworks","external_id": "2312900","url": "https://www.artfinder.com/product/east-meets-west-c3fc7/","title": "East Meets West","artist_name": "Teresa Pereira","artist_url": "https://www.artfinder.com/artist/teresa-pereira/","category": "Oil painting","style": "Photorealistic","materials": "oil","price": 999.0,"currency": "USD","availability_status": "avail","width_cm": 71.12,"height_cm": 55.88,"change_type": "new"}
Example artist record:
{"source": "artfinder","entity_type": "artists","external_id": "97906","url": "https://www.artfinder.com/artist/olgali/","name": "Olga Li","country": "Italy","followers_total": 194,"total_artworks": 103,"sold_artworks": 5,"avg_price_eur": 287.4,"mediums": "Collage, Mixed media","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.
โ๏ธ Input
See .actor/input_schema.json for the full JSON schema.
| Parameter | Type | Default | Description |
|---|---|---|---|
entityType | String | artworks | artworks or artists. |
startUrls | Array of strings | (none) | Specific artist or product URLs to scrape directly, instead of discovering via the artist-search API or the product sitemap. A startUrls-scoped run cannot detect delistings or update the incremental baseline, and for entityType=artists it skips the artist-search pass, so country isn't populated for that scope (see Known gaps). |
artistUrls | Array of strings | (none) | Artworks only. Specific artist URLs (the url field on an artist record) โ fetches every artwork for exactly those artists instead of the product sitemap. startUrls still takes priority over this. Gets its own delta-mode scope. |
maxItems | Integer | 50 | Stop after pushing this many dataset items. Defaults to a fast, cheap preview. A full run covers the entire site โ raise this or clear it for that. |
minSoldArtworks | Integer | 0 | Artists only. Only push artist records with at least this many sold artworks (the sold_artworks rollup field) โ set to 1 to skip artists who've never sold anything. Artists are still fully tracked internally either way (delta baseline, delisted-detection); this only filters what's pushed to the dataset. |
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 run (no startUrls) can detect delistings or update the baseline. |
proxyConfiguration | Object | {"useApifyProxy": false} | Apify Proxy config. Off by default โ this Actor's default (a plain browser User-Agent header, no TLS impersonation) worked cleanly from every network tested while building it. |
๐งช Input examples
Full artwork catalog scan (exhaustive, slow โ every artwork's own page is fetched;
maxItems: null explicitly overrides the 50-item default):
{ "entityType": "artworks", "maxItems": null }
Full artist directory, with rollup stats:
{ "entityType": "artists", "maxItems": null }
Artists with at least one sold artwork only (skips the majority of artists who've never sold โ useful if you only care about active sellers):
{ "entityType": "artists", "minSoldArtworks": 1, "maxItems": null }
Scheduled tracking run โ only new/changed/delisted items since the last baseline:
{ "entityType": "artists", "mode": "incremental" }
๐ Incremental (delta) mode
Every run classifies each item as new, changed (price/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.
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.
๐ How to scrape Artfinder.com
- Open the Artfinder Artist & Artwork Scraper in Apify Console and go to the Input tab.
- Pick
entityType(artworksorartists). maxItemsdefaults to 50 (a quick preview) โ raise it or clear it (set tonull) for a full, uncapped run.- For
entityType: artists, optionally setminSoldArtworksto only get artists who've sold something. - 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.
Known gaps
countryisn't populated for astartUrls-scoped artists run. The full field set (name, country, URL) comes from the artist-search discovery pass, which astartUrls-scoped run skips entirely โ the artist's identity is instead recovered from their own artwork records (which do carry name, but not country). Not populated in that scope only, not a bug.- No
joined_date, social links, or bio. Those only exist on an artist's own profile page, a second per-artist request this Actor deliberately doesn't make (seesrc/artfinder.py's module docstring) since they weren't needed for the fields this Actor was built to report. Worth revisiting if a customer needs them. - No
latest_artwork_*fields, unlike this Actor's SaatchiArt/Artmajeur siblings โ the rollup data source has no reliable timestamp to determine "latest" from (only anis_newboolean, and an unconfirmed default sort order), so this Actor doesn't report an unverified guess. avg_price_eur/sold_avg_price_eurare converted display prices, not each artwork's real native currency โ the per-artist rollup endpoint doesn't expose a native-currency marker the way the artwork detail page does (which is whyartworksrecords report realprice+currencyinstead).sold_artworkson an artist record can occasionally undercount by one or two. Confirmed live (2026-08-29): Artfinder's own per-artist products-listing API (what the rollup reads) can lag behind an item's own detail page โ one real example stayedis_in_stock: trueon the listing while its detail page already correctly showedis_in_stock: false/quantity: 0. AnartistUrlsrun (which re-fetches each artwork's own page) doesn't have this gap; the artist rollup does, since re-fetching every artwork individually there would defeat its whole cost-saving purpose.
๐ You might also like
- SaatchiArt Artist & Artwork Scraper โ the same entity-type/rollup-stats design pointed at a first, independent art marketplace.
- Artmajeur Artist & Artwork Scraper โ a second independent art marketplace source, same design.
- Artsper Artist & Artwork Scraper โ a third, independent art marketplace source, same design.
- Artsy Artist, Artwork & Gallery Scraper โ a fourth, independent art marketplace source, plus a genuine dealer/gallery angle (real represented-artist rollups per gallery) this collection doesn't otherwise have.
- Bluethumb Artist & Artwork Scraper โ a fifth, independent art marketplace source (Australia's largest), with real per-artist sold/available/total counts read from a single profile-page fetch, no rollup fan-out needed.
- 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).
- 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 โ an eighth, 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 ninth, 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 Artfinder.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 artists who've sold something? Set minSoldArtworks: 1 โ see
Input examples.
How do I get only new/changed items? Use mode: auto (or incremental) on a schedule โ see
Incremental mode.
Search keywords
artfinder scraper, artfinder.com scraper, art marketplace scraper, artist data scraper, artwork data scraper, art price data, art market analytics, art collector data feed