LUMAS Artist & Artwork Scraper avatar

LUMAS Artist & Artwork Scraper

Pricing

from $5.00 / 1,000 results

Go to Apify Store
LUMAS Artist & Artwork Scraper

LUMAS Artist & Artwork Scraper

Scrape LUMAS.com limited-edition photography artworks (with per-size edition size, signature type, and remaining-stock data) and artist profiles, 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

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

lumas-scraper

Scrapes both artworks (limited-edition photography, one record per artwork with a per-size breakdown) and artist profiles from LUMAS.com, a global limited-edition photography gallery network โ€” via the site's own sitemap and real embedded structured data. No login required.

Contents

๐Ÿ”‘ Key features

  • Two entity types, one Actor. Set entityType to artworks or artists.
  • Real per-size edition-size and remaining-stock tracking โ€” a genuinely different data shape from every other art-marketplace Actor in this collection. Each artwork is offered in 1-3+ distinct sizes, each with its own price, availability, and edition size โ€” some sizes are a numbered "Edition of: N" (with a signature type: Signed, Studio Stamp, ...), others are a genuine Open Edition with no cap at all, confirmed live on the same artwork.
  • A real, best-effort "stock left" count, read from the page's own analytics data for whichever size is shown by default โ€” present for most artworks, and honestly null (not guessed) when the site itself doesn't report it (confirmed: this correlates with Open Edition sizes, which have no capped stock to report).
  • A real three-state per-size availability signal (for_sale / limited_availability / sold), aggregated honestly across a multi-size artwork's own sizes โ€” some artworks have one size sold out while another is still in stock.
  • 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.
  • Confirmed-dead listings are never re-fetched. A removed artwork or artist returns a plain HTTP 404 on this site โ€” tracked in a persisted registry so a future run skips it without a wasted request.
  • artistUrls input. Scope entityType=artworks to a specific artist's own catalog (e.g. from a prior entityType=artists run) โ€” reuses that artist's own embedded artwork list, no separate discovery pass needed.
  • maxItems defaults to 50 โ€” a fast, cheap preview, and what keeps an unconfigured run within Apify's automated 5-minute QA check. Clear it (null) for a full crawl (~5,046 artworks or ~604 artists as of this build).

๐Ÿ“‹ Output

One dataset item per artwork or artist, depending on entityType โ€” see .actor/dataset_schema.json for the full field list.

Example artwork record:

{
"source": "lumas",
"entity_type": "artworks",
"external_id": "pictures/3deluxe/bergen01_violet",
"url": "https://www.lumas.com/pictures/3deluxe/bergen01_violet/",
"title": "Bergen.01 (violet)",
"artist_name": "3deluxe",
"artist_url": "https://www.lumas.com/artist/3deluxe/",
"date_created": "2009",
"image_url": "https://img.lumas.com/showimg_dde01_desktop.jpg",
"currency": "USD",
"price_min": 760,
"price_max": 1432,
"availability_status": "for_sale",
"sold": false,
"has_open_edition_size": false,
"sizes": [
{
"sku": "DDE02",
"price": 760,
"list_price": 950,
"on_sale": true,
"currency": "USD",
"availability": "for_sale",
"width_mm": 1080,
"height_mm": 290,
"edition_size": 100,
"signature": "Studio Stamp",
"mounting": "Mounted under acrylic glass",
"framing_label": "depth 0.08\" glossy, 11.4 x 42.5\" (External dimensions)",
"stock_left": 49
},
{
"sku": "DDE01",
"price": 1432,
"list_price": 1790,
"on_sale": true,
"currency": "USD",
"availability": "for_sale",
"width_mm": 1800,
"height_mm": 490,
"edition_size": 100,
"signature": "Studio Stamp",
"mounting": "Mounted under acrylic glass",
"framing_label": "depth 0.08\" glossy, 19.3 x 70.9\" (External dimensions)",
"stock_left": null
}
],
"change_type": "new"
}

Example artist record:

{
"source": "lumas",
"entity_type": "artists",
"external_id": "660",
"url": "https://www.lumas.com/artist/3deluxe/",
"name": "3deluxe",
"bio": "3DIMENSIONAL LUXURY Finding pictures in the clouds is one of the best exercises...",
"image_url": "https://img-lumas.b-cdn.net/showimg_dde-header_full.jpg",
"is_active": true,
"artwork_urls": ["https://www.lumas.com/pictures/3deluxe/bergen01_violet/", "..."],
"artwork_count": 10,
"change_type": "new"
}

๐Ÿ”ง Input

FieldTypeDefaultDescription
entityTypestringartworksartworks or artists.
startUrlsarrayโ€”Specific artwork/artist URLs to scrape directly instead of the full sitemap.
artistUrlsarrayโ€”artworks only: scope to these artists' own catalogs (reuses each artist page's embedded artwork list).
maxItemsinteger50Stop after pushing this many items. Set to null for a full crawl.
modestringautoauto / full / incremental โ€” see Incremental mode.
concurrencyinteger20How many detail pages 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):

{ "entityType": "artworks" }

Full artist directory:

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

All artworks by specific artists:

{ "entityType": "artworks", "artistUrls": ["https://www.lumas.com/artist/3deluxe/"], "maxItems": null }

๐Ÿ” Incremental (delta) mode

auto mode does a full scan the first time it runs for a given entityType/scope, then only pushes new/changed items on later runs โ€” including price changes and sold-out transitions (price_min/price_max/availability_status are the watched fields). Only an uncapped, unscoped run (no maxItems limit reached, no startUrls/artistUrls, no item errors) can detect delistings or update the baseline.

โ“ FAQ

Why is stock_left null for most sizes? This is a real, honest limitation, not a scraping gap: the site's own page only reports a remaining-stock count for whichever single size is shown by default when the page loads โ€” every other size on the same artwork genuinely has no stock-left data available from the page itself. It's also null for Open Edition sizes, since there's no capped stock to report.

Why do some sizes have no edition_size? That's a real Open Edition โ€” a size with no fixed cap at all, confirmed live to exist alongside numbered "Edition of: N" sizes on the very same artwork. has_open_edition_size flags this at the artwork level; check each entry in sizes for the per-size detail.

Does this need a proxy? No โ€” no anti-bot friction was found anywhere on this site while building this Actor (a real 150-request concurrent burst at concurrency 40 came back 100% clean).

Does this cover LUMAS's other regional storefronts (lumas.de, lumas.co.uk, etc.)? Not in this build โ€” it's scoped to www.lumas.com (USD pricing) only. The site has at least 9 other regional/currency storefronts sharing the same catalog; a future version could add those.