Tappan Collective Artist & Artwork Scraper avatar

Tappan Collective Artist & Artwork Scraper

Pricing

from $5.00 / 1,000 results

Go to Apify Store
Tappan Collective Artist & Artwork Scraper

Tappan Collective Artist & Artwork Scraper

Scrape TappanCollective.com limited-edition fine-art photography/print products (price range, size/edition/frame variants, artist) and a real artist directory with live product counts, 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

3 days ago

Last modified

Categories

Share

tappan-collective-scraper

Scrapes artworks (limited-edition fine-art photography/print products) and a real artist directory from Tappan Collective, a curated contemporary-art marketplace representing emerging artists โ€” via the site's own real Shopify product data. No login required.

Contents

๐Ÿ”‘ Key features

  • Two entity types, one Actor. Set entityType to artworks or artists.
  • Every real purchasable size/edition/frame/mount combination, not just one price per artwork โ€” a single artwork can have dozens of variants (size ร— edition ร— frame finish ร— mount type), each with its own price, pulled from Shopify's own structured variant options (not parsed out of a compound title string).
  • A real, exhaustive artist directory with live product counts โ€” unlike some sibling actors in this portfolio, Tappan Collective's own /pages/artists page is a genuine, complete artist list, so entityType=artists is a fresh live crawl every run, not an accumulator that only grows as artworks runs happen to see a given artist.
  • Delta mode built in for artworks โ€” every run classifies each item as new, changed, unchanged, or delisted against a persisted baseline.
  • Confirmed-dead listings are never re-fetched. A removed artwork returns a plain HTTP 404 โ€” tracked in a persisted registry so a future run skips it without a wasted request.
  • 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 (~8,000 artworks, ~133 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": "tappan-collective",
"entity_type": "artworks",
"external_id": "2180501125",
"url": "https://www.tappancollective.com/products/nathalie",
"name": "Nathalie",
"description": "DESCRIPTION 2016 This Exclusive Tappan Edition is an archival photographic art print...",
"artist_name": "Gia Coppola",
"product_type": "Photograph",
"tags": ["gia-coppola", "artist-roster", "collection-California", "..."],
"image_urls": ["https://cdn.shopify.com/s/files/..."],
"price_min": 275.0,
"price_max": 275.0,
"currency": "USD",
"variant_count": 1,
"variants": [
{
"sku": "GC.N_XF_9.45x14",
"title": "9.45 x 14 inches | Edition of 100 / White / Matted",
"size_raw": "9.45 x 14 inches",
"width": 9.45,
"height": 14,
"unit": "in",
"edition_type": "Edition",
"edition_size": 100,
"finish": "White",
"mount_type": "Matted",
"price": 275.0,
"currency": "USD",
"available": true
}
],
"change_type": "new"
}

Example artist record:

{
"source": "tappan-collective",
"entity_type": "artists",
"external_id": "gia-coppola",
"url": "https://www.tappancollective.com/collections/gia-coppola",
"name": "Gia Coppola",
"tracked_product_count": 44
}

๐Ÿ”ง Input

FieldTypeDefaultDescription
entityTypestringartworksartworks or artists.
startUrlsarrayโ€”Specific artwork product URLs to scrape directly instead of the full sitemap. artworks only.
maxItemsinteger50Stop after pushing this many items. Set to null for a full crawl.
modestringautoauto / full / incremental โ€” see Incremental mode.
concurrencyinteger25How many product (or artist collection) pages to fetch in parallel.
impersonatestringchromecurl_cffi TLS-impersonation target.

๐Ÿ“ฅ Input examples

Default preview (50 artworks):

{ "entityType": "artworks" }

Full artwork catalog:

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

Full artist directory:

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

๐Ÿ” Incremental (delta) mode

auto mode does a full scan the first time it runs for entityType=artworks, then only pushes new/changed items on later runs (price_min/price_max/variant_count are the watched fields). Only an uncapped, unscoped run (no maxItems limit reached, no startUrls, no item errors) can detect delistings or update the baseline. entityType=artists has no delta mode โ€” it's a fresh live directory crawl every run.

โ“ FAQ

Why is structured data (dimensions, edition) parsed from variant options instead of the product description or tags? A real, deliberate choice based on live evidence: this site's own product tags are internal marketing/SEO labels with no consistent schema, and the description text's own structure varies product to product (different section labels, sometimes no structure at all). Shopify's own variant option2/option3 fields cleanly and consistently carry frame finish and mount type across every product checked; only the combined size+edition string (option1) needs light parsing, handled defensively โ€” an unrecognized shape keeps the raw string rather than guessing.

Why can tracked_product_count undercount a very prolific artist? It's read from Shopify's own /collections/{artist}/products.json?limit=250 endpoint, which caps at 250 products per page. An artist with more than 250 listed works would be undercounted. Given ~8,000 total artworks spread across ~133 artists, this is not expected to bind for any single artist, but hasn't been exhaustively verified for every one.

Why is entityType=artists slow (~4 minutes for the full directory)? A real, hard rate limit on the artist-collection endpoint (/collections/{slug}/products.json) that even a lower concurrency plus retries couldn't clear cleanly. Fixed with fully sequential fetching plus a 1-second pause between requests, which reliably gets all 133 real artists with 0 errors. This doesn't affect entityType=artworks, which uses a completely different endpoint with no rate-limit issue found even at real scale (7,326 products, concurrency 25, 0 errors).

Does this need a proxy? No โ€” no anti-bot friction was found anywhere on this site while building this Actor (a real burst test came back 100% clean, and a full large-scale run confirmed it holds at real volume).