Artsy.net Artist, Artwork & Gallery Scraper avatar

Artsy.net Artist, Artwork & Gallery Scraper

Pricing

from $5.00 / 1,000 results

Go to Apify Store
Artsy.net Artist, Artwork & Gallery Scraper

Artsy.net Artist, Artwork & Gallery Scraper

Artsy.net artist, artwork, and gallery/dealer ("partner") scraper via Artsy's own public GraphQL API โ€” real represented-artist and inventory data per gallery, real per-artist aggregate stats with no per-artwork fan-out, plus 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

3 days ago

Last modified

Categories

Share

artsy-scraper

Scrapes artists, artworks, and galleries/dealers ("partners") from Artsy.net via Artsy's own public GraphQL API โ€” real represented-artist lists and inventory data per gallery, real per-artist aggregate stats with no per-artwork fan-out, and delta mode.

Contents

๐Ÿ”‘ Key features

  • Exhaustive, not keyword-search-only. This is the difference that matters most: every other Artsy scraper on Apify requires a search query and returns whatever that query turns up. This one crawls Artsy's own sitemaps โ€” 173,000+ artists, ~5,800 galleries/dealers, millions of artworks โ€” so you get the whole catalog (or any slice of it via startUrls), not just what a keyword happens to surface.
  • The dealer/gallery angle is a first-class entity, not a bolted-on field.
    entityType: partners
    returns each gallery's real, fully-paginated represented-artist list AND inventory list โ€” not a page, not a sample, both walked to completion โ€” plus real aggregate stats (total artists, total artworks). No other Artsy scraper on Apify offers this.
  • Delta (incremental) mode. Every run classifies each item as new/changed/unchanged/delisted against a persisted baseline, so a repeat run only costs you for what actually changed. No other Artsy scraper on Apify has this either.
  • A real, documented GraphQL API under the hood, not HTML scraping. Every field comes from Artsy's own public "Metaphysics" API, whose schema is open-source โ€” richer, more reliable data than parsing rendered pages, and fast: validated at up to 190 requests/second with zero blocking.
  • Artist stats need no extra fetching at all. total_artworks/for_sale_artworks/follows are real, server-computed numbers โ€” one request per artist, not one request per artwork in their catalog.
  • Rich artwork data: for-sale/sold status, hidden-price ("price on request") detection, listed price with currency, medium, dimensions, and the selling gallery/dealer.
  • Fast by default. Concurrent fetching (tunable via concurrency, default 25) โ€” 500 artworks in under 20 seconds in real testing.

๐Ÿ“‹ Output

One dataset item per artwork, artist, or partner, depending on entityType โ€” see .actor/dataset_schema.json for the full field list, or the Output tab's per-entity-type views for a readable table.

Example artwork record:

{
"source": "artsy",
"entity_type": "artworks",
"external_id": "stacy-daguiar-hybrid-plus-ladybug",
"url": "https://www.artsy.net/artwork/stacy-daguiar-hybrid-plus-ladybug",
"title": "Hybrid + Ladybug",
"artist_name": "Stacy D'Aguiar",
"partner_name": "Abend Gallery",
"medium": "Acrylic on wood",
"is_for_sale": false,
"is_sold": true,
"price_amount": 365,
"price_currency": "USD",
"price_display": "US$365",
"sale_message": "Sold",
"change_type": "new"
}

Example artist record:

{
"source": "artsy",
"entity_type": "artists",
"external_id": "andy-warhol",
"url": "https://www.artsy.net/artist/andy-warhol",
"name": "Andy Warhol",
"nationality": "American",
"gender": "male",
"birthday": "1928",
"deathday": "1987",
"hometown": "Pittsburgh, PA, USA",
"location": "New York, NY, USA",
"bio": "Obsessed with celebrity, consumer culture, and mechanical reproduction, Pop artist Andy Warhol created some of the 20th century's most iconic images...",
"total_artworks": 9651,
"for_sale_artworks": 3294,
"follows": 216033,
"change_type": "new"
}

Example partner (gallery) record:

{
"source": "artsy",
"entity_type": "partners",
"external_id": "dc-moore-gallery",
"url": "https://www.artsy.net/partner/dc-moore-gallery",
"name": "DC Moore Gallery",
"type": "Gallery",
"city": "New York",
"country": "US",
"total_artists": 136,
"total_artworks": 1412,
"represented_artists": "Alicia Adamerovich, Eric Aho, ... Milton Avery",
"represented_artist_urls": "https://www.artsy.net/artist/alicia-adamerovich, https://www.artsy.net/artist/eric-aho, ...",
"artwork_titles": "Tile Roof (Gardenville), Heraldic Iris, ...",
"artwork_urls": "https://www.artsy.net/artwork/..., https://www.artsy.net/artwork/..., ...",
"change_type": "new"
}

represented_artist_urls/artwork_urls are real artsy.net URLs, same order as their

represented_ artists
/artwork_titles counterparts โ€” feed them into a separate entityType: artists or entityType: artworks run's startUrls to get full per-record detail (bio, price, dimensions, etc.) for exactly the artists/artworks a given gallery carries. Both lists are paginated to completion, not capped samples โ€” but artwork_titles/artwork_urls can still come back shorter than total_artworks for some galleries (confirmed live, sometimes even 0) โ€” see FAQ for why. A partners run itself still stays fast and reasonably cheap by design โ€” it doesn't fetch full per-record detail (bio, price, dimensions) for every represented artist or every inventory item, only names/titles and URLs.

๐Ÿ”ง Input

FieldDescription
entityTypeartworks (default), artists, or partners.
startUrlsOptional list of specific artsy.net artist/artwork/partner URLs to scrape directly instead of a full sitemap crawl.
maxItemsStop after pushing this many items. Defaults to 50. Set to null for an uncapped run.
concurrencyHow many items to fetch in parallel. Defaults to 25 โ€” validated live with zero blocking well above this.
modeauto (recommended), full, or incremental โ€” see below.
proxyConfigurationOff by default โ€” no anti-bot blocking was found against this site.

๐Ÿ’ก Input examples

Default preview (50 artworks): leave input empty.

All galleries/dealers, uncapped:

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

A specific artist:

{ "entityType": "artists", "startUrls": ["https://www.artsy.net/artist/andy-warhol"] }

๐Ÿ”„ Incremental (delta) mode

Every run classifies each item as new/changed/unchanged/delisted against a baseline persisted between runs. mode: auto (the default) does a full scan on the first run for a given entityType/scope, then only pushes new/changed items afterwards. Only a plain, unscoped sitemap crawl (no startUrls) can detect delistings or update the baseline โ€” see the linked doc below for the full design.

๐Ÿ”— You might also like

  • SaatchiArt Artist & Artwork Scraper โ€” a real per-artist rollup (avg price, medium mix, sold count) computed from an artist's full catalog, an independent art marketplace source.
  • Artmajeur Artist & Artwork Scraper โ€” same rollup-stats design, a second independent art marketplace.
  • Artsper Artist & Artwork Scraper โ€” same rollup-stats design, a third independent art marketplace.
  • Artfinder Artist & Artwork Scraper โ€” same rollup-stats design, a fourth independent art marketplace.
  • Bluethumb Artist & Artwork Scraper โ€” a fifth independent art marketplace (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

Why is partner_name sometimes empty on an artwork? Not every artwork on Artsy is currently listed by a gallery/dealer โ€” some are archival records with no active seller attached.

Why is price_amount null even though is_for_sale is true? Many galleries mark high-value work "Price on request" (is_price_hidden: true) rather than publishing a number โ€” sale_message will say so.

Does a partners run give me full details for every artist/artwork a gallery carries? No, and deliberately so. A partners run gets you the complete represented-artist list and the complete reachable inventory list โ€” every one, paginated to completion, not a capped sample โ€” but only name/title + URL for each, not full per-record detail (bio, price, dimensions, etc.). Fetching full detail for potentially hundreds of artists or thousands of artworks inline would turn a several- second run into a much slower, much more expensive one, for data most customers don't need on every single gallery in scope. Instead, use represented_artist_urls/artwork_urls from a partners run as input to a follow-up entityType: artists or entityType: artworks run's startUrls, scoped to exactly the artists/artworks you actually want full detail on.

Why can artwork_urls be shorter than total_artworks โ€” or even empty? Confirmed live against real galleries: Artsy's own aggregate artwork count for a partner (total_artworks) can be higher than what's actually reachable through the public inventory listing this Actor uses โ€” sometimes substantially so (e.g. one real gallery reported 425 total artworks but 0 were reachable via the public listing). This isn't a bug in this Actor: the gap looks to be private/unpublished inventory that's only visible to the gallery's own Artsy account, not something available without a real partner login. total_artists/represented_artist_urls don't have this gap in any case checked so far โ€” it's specific to the artwork inventory listing.