Riseart.com Artist & Artwork Scraper avatar

Riseart.com Artist & Artwork Scraper

Pricing

from $5.00 / 1,000 results

Go to Apify Store
Riseart.com Artist & Artwork Scraper

Riseart.com Artist & Artwork Scraper

Scrape Riseart.com artworks and artist profiles via the site's own public GraphQL search API, with built-in delta mode. No login required.

Pricing

from $5.00 / 1,000 results

Rating

0.0

(0)

Developer

Artsiom Kunitsyn

Artsiom Kunitsyn

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

7 hours ago

Last modified

Categories

Share

riseart-scraper

Scrapes both artworks and artist profiles from Riseart.com, a UK-based online art marketplace โ€” via the site's own public GraphQL search API, no HTML scraping or sitemap walking needed.

Contents

๐Ÿ”‘ Key features

  • Two entity types, one Actor. Set entityType to artworks or artists.
  • No detail-page fetch at all. Riseart's own public searchArt/searchArtists GraphQL queries already return every field this Actor emits, up to 100 items per request โ€” there's no separate "discover a URL, then fetch its detail page" step like most scrapers need.
  • Fast, concurrent pagination. Search-result pages are fetched in parallel (concurrency input, default 20) โ€” validated live against Riseart's own endpoint with zero blocking at concurrency up to 50. A full, uncapped crawl of every artist (~1,625) finishes in under 5 seconds.
  • Multi-currency. The store input picks which of Riseart's three regional stores prices are read from โ€” eu (EUR), uk (GBP), or us (USD).
  • Delta mode built in. Every run classifies each item as new, changed, unchanged, or delisted against a persisted baseline โ€” pay for what changed, not a full re-scrape every time.
  • maxItems defaults to 50 โ€” a fast preview, and what keeps an unconfigured run within Apify's automated 5-minute QA check. Clear it (null) for a full crawl of the catalog (~48,800 artworks or ~1,625 artists as of this build).
  • Real per-artist rollup stats. entityType: "artists" fetches each artist's complete artwork list (a real per-artist fetch, not a sample, sold pieces included) to compute total_artworks, avg_price, for_sale_artworks, enquire_only_artworks, and sold_artworks. A minSoldArtworks input filters what gets pushed down to artists with at least that many sales.
  • Full artwork detail for specific artists, sold pieces included. Set artistIds on entityType: "artworks" to fetch every artwork for exactly those artists instead of the general catalog โ€” the only way to get sold artworks with full detail (title, images, dimensions, price, medium/style/subject), since the general catalog never returns sold items at all. See How to scrape Riseart.com for the two-run workflow this enables.

๐Ÿ“‹ 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": "riseart",
"entity_type": "artworks",
"external_id": "192404",
"url": "https://www.riseart.com/art/192404/whispering-tides-by-paul-bennett",
"title": "Whispering Tides",
"artist_id": 2054,
"artist_name": "Paul Bennett",
"artist_alias": "paulbennett",
"artist_url": "https://www.riseart.com/artist/2054/paulbennett",
"price": 2755,
"currency": "EUR",
"can_buy": true,
"can_rent": false,
"sold": false,
"stock": 1,
"medium": "paintings",
"style": "abstract",
"subject": "landscapes",
"width_cm": 80,
"height_cm": 80,
"depth_cm": 4,
"unit": "CENTIMETER",
"image_url": "https://d1ee3oaj5b5ueh.cloudfront.net/thumbs/1200x1500_processed_art_2026_08_ac409a7f-d3df-4d1c-b657-906ffe16be78-main-square.jpg",
"change_type": "new"
}

Example artist record:

{
"source": "riseart",
"entity_type": "artists",
"external_id": "131449",
"url": "https://www.riseart.com/artist/131449/carolin-kreutzer",
"name": "Carolin Kreutzer",
"alias": "carolin-kreutzer",
"gender": "F",
"website": "https://carolinkreutzer.de",
"score": 549,
"commissions": true,
"birth_year": 1981,
"birth_city": "Hamburg",
"birth_country": "DE",
"lives_city": "Stuttgart",
"lives_country": "DE",
"ships_country": "DE",
"mediums": ["painters"],
"total_artworks": 35,
"avg_price": 1894.43,
"currency": "EUR",
"for_sale_artworks": 30,
"enquire_only_artworks": 0,
"sold_artworks": 5,
"change_type": "new"
}

๐Ÿ”ง Input

FieldTypeDefaultDescription
entityTypestringartworksartworks or artists.
storestringeuCurrency/region for artwork prices: eu (EUR), uk (GBP), us (USD). Ignored for artists.
sortstringfeaturedPassed through to Riseart's own search API. Only affects discovery order, not coverage.
rankingCountrystringโ€”Optional 2-letter country code affecting search ranking only.
artistIdsarrayโ€”artworks only. List of Riseart artist ids โ€” fetches every artwork for exactly those artists (sold pieces included) instead of the general catalog. See How to scrape Riseart.com.
maxItemsinteger50Stop after pushing this many items. Set to null for a full crawl.
modestringautoauto / full / incremental โ€” see Incremental mode.
concurrencyinteger20How many result pages (100 items each) to fetch in parallel.
impersonatestringchromecurl_cffi TLS-impersonation target.
proxyConfigurationobjectoffApify Proxy config โ€” not needed; no anti-bot friction found.

๐Ÿ“ฅ Input examples

Default preview (50 artworks, EUR):

{ "entityType": "artworks" }

Full artist directory:

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

Artworks priced in GBP:

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

Every artist with at least one sale, plus full detail on all their artworks (two runs):

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

Take the external_id of every artist record this returns, then:

{ "entityType": "artworks", "artistIds": ["120264", "118510", "131529"], "maxItems": null }

The second run returns every artwork (sold and unsold) for exactly those artists, with the same full detail as a regular artworks run plus a real sold flag โ€” something the general artworks catalog can't give you, since it never returns sold items at all.

๐Ÿ” Incremental (delta) mode

auto mode does a full scan the first time it runs for a given entityType/store combination, then only pushes new/changed items on later runs โ€” cutting cost on repeat runs by not re-charging for items that haven't changed. Only an uncapped run (no maxItems limit reached, and no page errors) can detect delistings or update the baseline.

๐ŸŒ How to scrape Riseart.com

Riseart's frontend calls its own public GraphQL API directly (https://graphql.riseart.com) โ€” this Actor replicates exactly those calls (searchArt/searchArtists), the same requests your own browser makes when you browse the site, just automated and exhaustive.

๐Ÿ”— You might also like

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

Does this Actor tell me how many artworks an artist has sold? Yes โ€” sold_artworks on every artist record, computed from that artist's complete artwork list (sold pieces included). Confirmed live at scale: a 40-artist random sample came back with 1,159 total artworks, 244 sold (21%), across 28/40 artists with at least one sale. Set minSoldArtworks to only push artists who've sold at least that many pieces. Separately, for_sale_artworks counts directly-buyable listings and enquire_only_artworks counts price-on-request ones โ€” a genuine, different-from-sold distinction (an enquire-only listing is still for sale, just not via direct checkout).

Can I get full detail (images, price, dimensions) on sold artworks? Yes, but only via artistIds โ€” the general entityType: "artworks" catalog never returns sold items at all (confirmed live: none of a known-sold artist's sold pieces show up in a normal search, however it's sorted/filtered). Set artistIds to a specific list of artist ids and every artwork for those artists comes back, sold pieces included with a real sold flag. The usual workflow: run entityType: "artists" with minSoldArtworks: 1 first to collect the artist ids you care about, then feed those into an artistIds-scoped artworks run. See Input examples.

Why does the same artwork show a different price across runs if I only changed store? That's expected โ€” store selects genuinely different regional pricing (EUR/GBP/USD), not just a currency conversion, and delta mode scopes its baseline by store for exactly this reason: switching it starts a fresh baseline rather than reporting every item as "changed".

Does this need a proxy? No โ€” no anti-bot friction was found anywhere on the endpoint this Actor uses.