Artfinder.com Artist & Artwork Scraper avatar

Artfinder.com Artist & Artwork Scraper

Pricing

from $5.00 / 1,000 results

Go to Apify Store
Artfinder.com Artist & Artwork Scraper

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

Artsiom Kunitsyn

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

21 hours 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

  • Two entity types, one Actor. Set entityType to artworks or artists โ€” 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.
  • minSoldArtworks filter. 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, or delisted against 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). maxItems defaults to 50 (a fast preview) โ€” clear it or raise it for a real 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": "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.

ParameterTypeDefaultDescription
entityTypeStringartworksartworks or artists.
startUrlsArray 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).
maxItemsInteger50Stop 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.
minSoldArtworksInteger0Artists 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.
modeStringautoauto (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.
proxyConfigurationObject{"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 only new/changed/delisted (incremental).
  • A startUrls-scoped run is always partial and never updates the baseline.

Full design: ../../docs/incremental-mode.md.

๐Ÿš€ How to scrape Artfinder.com

  1. Open the Artfinder Artist & Artwork Scraper in Apify Console and go to the Input tab.
  2. Pick entityType (artworks or artists).
  3. maxItems defaults to 50 (a quick preview) โ€” raise it or clear it (set to null) for a full, uncapped run.
  4. For entityType: artists, optionally set minSoldArtworks to only get artists who've sold something.
  5. Click Start.
  6. When the run finishes, browse results in the Output tab, or download as JSON/CSV/Excel, or fetch them via the API.
  7. 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

  • country isn't populated for a startUrls-scoped artists run. The full field set (name, country, URL) comes from the artist-search discovery pass, which a startUrls-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 (see src/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 an is_new boolean, and an unconfirmed default sort order), so this Actor doesn't report an unverified guess.
  • avg_price_eur/sold_avg_price_eur are 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 why artworks records report real price + currency instead).

๐Ÿ”— You might also like

โ“ 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