SaatchiArt.com Artist & Artwork Scraper avatar

SaatchiArt.com Artist & Artwork Scraper

Pricing

from $2.55 / 1,000 results

Go to Apify Store
SaatchiArt.com Artist & Artwork Scraper

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 $2.55 / 1,000 results

Rating

0.0

(0)

Developer

Artsiom Kunitsyn

Artsiom Kunitsyn

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

3 days ago

Last modified

Categories

Share

Saatchi Art Scraper — artworks, prices & artist sales data

Scrape artworks and artist profiles from Saatchi Art, one of the world's largest online art marketplaces. Get every artwork's price, size, medium, style and availability, plus per-artist sales statistics: how many works an artist has sold, their average asking price, average price of sold works, and medium mix. Every figure is computed from the artist's full catalog, not a sample.

Use it as a Saatchi Art API alternative: export Saatchi Art data to JSON, CSV or Excel, or pull it straight into Python, Google Sheets or an AI agent. No login and no browser needed.

Contents

What data can you extract from Saatchi Art?

Artworks (entityType: "artworks")Artists (entityType: "artists")
Title, URL, image URLFull name, profile URL, country, state, city
Artist name, id and profile URLFollowers, join date
Category, subject, stylesTotal artworks in the catalog
Mediums and materialsSold artworks count
Price (EUR)Average asking price (EUR)
Availability: available, sold, reserved, unavailableAverage price of sold works (EUR)
Height, width, depth (cm), ready to hangMedium mix across the whole catalog
Artist country and city, upload dateLatest artwork: title, price, category

Every record also carries a change_type (new, changed, unchanged, delisted) so scheduled runs can report only what changed. The Output tab has a readable Artworks and Artists table view with the full field list.

Why this Saatchi Art scraper

  • Real artist sales stats, not a sample. Sold count and average prices come from each artist's entire catalog, cross-checked against the artist's own stated artwork total.
  • Filter to artists who actually sell. minSoldArtworks: 1 skips the majority of artists who have never sold anything.
  • Full catalog or a targeted slice. Crawl the whole site, browse one category with filters (subject, medium, style, country, availability), fetch every artwork for a list of artists, or pass specific artwork URLs.
  • Only pay for what changed. Built-in delta mode on scheduled runs.

Sample output

Real rows from a recent run (artists filtered with minSoldArtworks: 3):

ArtistCountryArtworksSoldAvg. price (EUR)Avg. sold price (EUR)
Shawn McnultyUnited States124772,0972,021
Mania RowUnited Kingdom265602,388970
Robin ClareJamaica68241,9261,655
Constantin SeverinRomania31216,5166,580
Stephen GibbCanada41171,8221,270
ArtworkArtistCategoryPrice (EUR)Size (cm)Status
Dutch Treat (For Bill de Kooning)Gregg SimpsonPainting17,860200.7 × 241.3available
Dinner With TristanGregg SimpsonPainting12,165152.4 × 165.1available
CONFUSEDHildegarde HandsaemePainting3,21060 × 60available
BetweenCynthia LigerosPainting1,10076.2 × 121.9available

Artwork record (JSON):

{
"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_id": "476",
"artist_name": "Gregg Simpson",
"artist_url": "https://www.saatchiart.com/greggsimpson",
"category": "Painting",
"subject": "Still Life",
"styles": "Surrealism",
"mediums": "Oil, Other",
"materials": "Canvas",
"price_eur": 12165,
"original_status": "avail",
"height_cm": 152.4,
"width_cm": 165.1,
"depth_cm": 2.54,
"country": "Canada",
"change_type": "new"
}

Artist record (JSON):

{
"source": "saatchiart",
"entity_type": "artists",
"external_id": "88",
"url": "https://www.saatchiart.com/shawnmcnulty",
"full_name": "Shawn Mcnulty",
"country": "United States",
"state": "MN",
"city": "Minneapolis",
"followers_total": 1805,
"joined_date": "2010-08-31T18:10:25+00:00",
"total_artworks": 124,
"sold_artworks": 77,
"avg_price_eur": 2096.94,
"sold_avg_price_eur": 2021.08,
"mediums": "acrylic, digital, mixed media, oil, other, paper",
"latest_artwork_title": "Trope Abstract",
"latest_artwork_price_eur": 770,
"latest_artwork_category": "painting",
"change_type": "new"
}

Known gap: uploaded_at is only filled for artworks found through the category input (the search path carries a timestamp that artwork pages don't show). It's null otherwise.

Who uses this Saatchi Art scraper?

  • Online galleries and art marketplaces: find artists who already sell well online, benchmark pricing, and scout talent to recruit.
  • Art-market analysts and researchers: price distributions by medium, style, size and country; sold-vs-asking price gaps; how catalogs grow over time.
  • Art advisors and collectors: track specific artists' new work, price changes and sell-through.
  • Artists: see how comparable artists price their work.

How much does it cost to scrape Saatchi Art?

Pay per result: you're charged per artwork or artist record delivered, plus a small charge per artist whose full catalog is analyzed for the sales stats. There's no monthly rental and no separate platform fee to estimate. See the Pricing tab for current prices, including automatic discounts on higher Apify plans.

The default run returns 50 records, so trying it costs a fraction of a cent. The monthly credit on Apify's free plan covers a good-sized first dataset.

How to scrape Saatchi Art

  1. Click Try for free (or open the actor in Apify Console) and go to the Input tab.
  2. Choose entityType: artworks or artists.
  3. Optionally set a category plus filters for a faster targeted slice, artistIds for specific artists, or minSoldArtworks to keep only artists with sales.
  4. maxItems defaults to 50, a quick preview. Raise it, or clear it (null) for the full catalog.
  5. Click Start.
  6. Browse the results in the Output tab, or download them as JSON, CSV, Excel or HTML.
  7. To track Saatchi Art over time, add a Schedule with mode: auto. The first run does a full scan; every later run returns only new, changed and delisted items.

Input

ParameterTypeDefaultDescription
entityTypeStringartworksartworks or artists.
categoryString(none)Artworks only. Restrict discovery to one category via a faster search API instead of the full sitemap. The API caps its reported result count at 10,000 whatever a category's true size, so combine it with the filters below to narrow the query enough for complete coverage. The run log says "exhaustive" or "capped". Leave empty for a full sitemap crawl, which is always complete.
availabilityStringavailArtworks only, category mode. avail, sold, reserved, unavail, or empty for all.
subjectString(none)Artworks only, category mode. e.g. floral, landscape, abstract, portrait.
mediumsString(none)Artworks only, category mode. e.g. oil, acrylic, watercolor, black & white.
stylesString(none)Artworks only, category mode. e.g. realism, abstract expressionism, minimalism.
countryString(none)Artworks only, category mode. Artist's country, e.g. united states, sweden.
startUrlsArray of strings(none)Artworks only. Specific artwork URLs to scrape directly.
artistIdsArray of strings(none)Artworks only. Saatchi Art artist ids: fetches every artwork for exactly those artists. Overrides category (startUrls still wins). Has its own delta-mode scope.
maxItemsInteger50Stop after this many records. A full crawl covers hundreds of thousands of artworks or the full artist directory; raise this or clear it for that.
minSoldArtworksInteger0Artists only. Only return artists with at least this many sold artworks. 1 skips artists who have never sold. Filtered-out artists are still tracked internally for delta mode.
modeStringautoauto (recommended): full scan on the first run, changes only after. full: always return everything. incremental: always return only new/changed items. Only an unscoped sitemap crawl can detect delistings or update the baseline.
impersonateStringfirefox (internal)Browser fingerprint used for requests. Saatchi Art blocks plain requests; change only if it stops working.
proxyConfigurationObjectoffApify Proxy settings. Not needed normally; try Residential (not datacenter) only if you see blocks.

Input examples

Full artwork catalog (every artwork's detail page is fetched, so it's slow):

{ "entityType": "artworks", "maxItems": null }

Quick category preview (fast, but a broad category is capped at 10,000 results):

{ "entityType": "artworks", "category": "photography", "maxItems": 200 }

Narrow category query (fast and complete, because it's under the cap):

{ "entityType": "artworks", "category": "photography", "country": "sweden", "subject": "floral", "maxItems": null }

Full artist directory with sales stats:

{ "entityType": "artists", "maxItems": null }

Only artists who have sold at least one work:

{ "entityType": "artists", "minSoldArtworks": 1, "maxItems": null }

Every artwork, sold ones included, for specific artists (get the ids from an artists run):

{ "entityType": "artworks", "artistIds": ["88", "79"], "maxItems": null }

Scheduled tracking run (only new/changed/delisted items since the last run):

{ "entityType": "artworks", "mode": "incremental" }

Track new and sold artworks over time

Every run labels each item new, changed (price or status moved for artworks; catalog size, sold count or average price moved for artists), unchanged or delisted. The baseline is saved per entityType (and per category for artworks).

  • mode: auto (default): the first run for a scope returns everything; later runs return only new/changed/delisted.
  • A startUrls run is always partial and never updates the baseline. A category run updates it only when narrow enough to be complete; the run log says which.

Use it from Python or the API

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("artsiom_k/saatchiart-scraper").call(
run_input={"entityType": "artists", "minSoldArtworks": 1, "maxItems": 500}
)
for artist in client.dataset(run["defaultDatasetId"]).iterate_items():
print(artist["full_name"], artist["sold_artworks"], artist["avg_price_eur"])

The same works from JavaScript, plain HTTP, Make, Zapier, n8n and Google Sheets integrations. AI agents such as Claude or Cursor can call it through Apify's MCP server.

FAQ

Is there an official Saatchi Art API? Saatchi Art doesn't offer a public data API. This actor works as one: it returns structured Saatchi Art artwork and artist data on demand, via Apify's API or as downloadable files.

Can I get sold artworks and sold prices from Saatchi Art? Yes. Each artwork has an original_status (avail, sold, reserved, unavail), and each artist record has sold_artworks and sold_avg_price_eur. To pull the sold works themselves, use artistIds, or category with availability: "sold".

How many artworks and artists does Saatchi Art have? Hundreds of thousands of artworks and a very large artist directory. A full crawl covers all of them; use maxItems, category filters or minSoldArtworks to narrow it.

Why is avg_price_eur different from what's shown on the site? It's the average across the artist's whole catalog, in Saatchi Art's Central-Europe reference price, not a single artwork's price.

Can I export Saatchi Art data to Excel or CSV? Yes. Every run's results can be downloaded as JSON, CSV, Excel, XML or HTML from the Output tab, or fetched through the API.

How do I get only new or changed items? Run it on a schedule with mode: auto (or incremental). See Track new and sold artworks over time.

Is it legal to scrape Saatchi Art? This actor collects publicly available marketplace data: artwork listings, prices and public artist profile information. Use it for a legitimate purpose and in line with GDPR where personal data is involved.

Something doesn't work or a field is missing? Open an issue on the Issues tab; issues are answered promptly.

Same design, same output style, so results combine easily: