Incollect Dealer & Listing Scraper
Pricing
from $5.00 / 1,000 results
Incollect Dealer & Listing Scraper
Scrape Incollect.com fine-art, decorative-arts, furniture, and jewelry listings from vetted dealers (price, dimensions, images, dealer link) and dealer/professional profiles (bio, address, tracked inventory), with built-in delta mode. No login required.
Pricing
from $5.00 / 1,000 results
Rating
0.0
(0)
Developer
Artsiom Kunitsyn
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
incollect-scraper
Scrapes both listings (fine art, furniture & lighting, decorative arts, and jewelry pieces from vetted dealers โ price, dimensions, images, and a dealer link) and dealer/professional profiles from Incollect.com, a US-based marketplace for fine art, antiques, and high-end design sourced from vetted dealers. No login required.
Contents
๐ Key features
- Two entity types, one Actor. Set
entityTypetolistingsordealers. - Choose which categories to include. Set
categoriesto one or more of the site's real top-level categories (Fine Art, Furniture & Lighting, Decorative Arts, Jewelry) to filter the results, or leave it empty to include all 4. This is a real discovery-level filter โ a non-matching category is never fetched at all. - A real per-dealer inventory rollup, fed as your listings runs go. Dealer profiles report a
tracked_listing_count/tracked_categoriesaccumulated from every listings run over time โ genuine numbers, honestly labeled as "tracked so far", not a capped or guessed total. - Real dealer bio, full postal address, and logo โ read from each dealer's own page, not approximated from listing text.
- Delta mode built in for listings. Every run classifies each item as
new,changed,unchanged, ordelistedagainst a persisted baseline โ pay for what changed, not a full re-scrape every time. maxItemsdefaults 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, or narrowcategoriesinstead.- No proxy needed. A real burst test (up to 100 concurrent requests from a single IP) found no IP-based rate limiting at all โ see the FAQ.
๐ Output
One dataset item per listing or dealer, depending on entityType โ see
.actor/dataset_schema.json for the full field list.
Example listing record:
{"source": "incollect","entity_type": "listings","external_id": "177922","url": "https://www.incollect.com/listings/fine-art/sculpture/alex-katz-maine-cow-177922","category": "fine-art","subcategory": "sculpture","name": "Maine Cow","maker_name": "Alex Katz","width_value": 72.5,"width_unit": "INH","height_value": 49,"height_unit": "INH","depth_value": 10.25,"depth_unit": "INH","currency": "USD","price": null,"price_on_request": true,"dealer_name": "RoGallery","dealer_url": "https://www.incollect.com/node/144054","change_type": "new"}
Example dealer record:
{"source": "incollect","entity_type": "dealers","external_id": "rogallery","url": "https://www.incollect.com/professionals/dealers/rogallery","name": "RoGallery","city": "Long Island City, NY","region": "New York","country": "United States","tracked_listing_count": 14,"tracked_categories": ["fine-art"]}
๐ง Input
| Field | Type | Default | Description |
|---|---|---|---|
entityType | string | listings | listings or dealers. |
categories | array | โ | Listings only. Only crawl these categories (real discovery-level filter). Leave empty for all 4. |
startUrls | array | โ | Listings only. Specific listing URLs to scrape directly instead of the normal category-driven discovery. |
maxItems | integer | 50 | Stop after pushing this many items. Set to null for a full crawl. |
mode | string | auto | Listings only. auto / full / incremental โ see Incremental mode. |
concurrency | integer | 25 | How many pages to fetch in parallel. |
impersonate | string | chrome | curl_cffi TLS-impersonation target. |
proxyConfiguration | object | off | Apify Proxy config โ see FAQ for why this isn't needed by default. |
๐ฅ Input examples
Default preview (50 listings):
{ "entityType": "listings" }
Every fine-art listing:
{ "entityType": "listings", "categories": ["fine-art"], "maxItems": null }
Dealer profiles (with tracked inventory):
{ "entityType": "dealers", "maxItems": null }
๐ Incremental (delta) mode
auto mode does a full scan the first time it runs for a given categories scope, then only pushes
new/changed items on later runs โ including price changes (price/price_on_request/currency are
the watched fields). Only an uncapped run using the same categories selection each time (no
maxItems limit reached, no startUrls, no item errors) can detect delistings or update the
baseline. entityType: "dealers" has no delta mode โ every run is a full live snapshot of the
currently-known dealer set.
โ FAQ
Why does tracked_listing_count grow over multiple runs instead of showing a fixed total?
Incollect's own dealer directory only reveals about a dozen of its 560 real dealers without going
through the site's own AJAX-loaded pagination. Rather than block on that, dealer inventory counts
are accumulated honestly from your own listings runs over time โ the more of the catalog you've
crawled, the more complete these numbers get. A brand-new account with no prior listings runs still
gets a real (if smaller) starting set from a static directory seed.
Does this need a proxy?
No. A real burst test (20 โ 50 โ 100 concurrent single-IP requests, no proxy) against live listing
pages came back 100% clean 200/404 responses โ the site's declared Crawl-delay: 10 in
robots.txt is the stock, unenforced Drupal boilerplate, not a real rate limit.
How does discovery work?
Via the site's own internal landing-page API (/listing/ajax_get_landing_page_data) โ the same one
its own category browse pages use, confirmed unauthenticated and reliable. Each selected category is
paginated independently with a real item count, so results are both fast and accurate โ no dead-link
guessing involved.
Why is price sometimes null even though price_on_request is false... or the reverse?
A listing with no visible price on the site reports price: null, price_on_request: true โ this is
read directly from the page, never guessed. A genuine $0 price does not occur on this site.
What does dealer_url on a listing point to?
The dealer's stable internal link as found directly on the listing page โ it redirects to that
dealer's full public profile page. entityType: "dealers" resolves and reports the canonical,
human-readable profile URL instead.