Shopify Store Catalog & Contact Scraper
Pricing
$5.70 / 1,000 results
Shopify Store Catalog & Contact Scraper
This Actor takes a list of Shopify store domains and reads the store's public, unauthenticated storefront JSON endpoints: /products.json (products, variants, prices, stock availability) and /collections.json (collection count).
Pricing
$5.70 / 1,000 results
Rating
0.0
(0)
Developer
Snappy
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Shopify Store Catalog and Contact Scraper
What it does
This Actor takes a list of Shopify store domains and reads the store's public, unauthenticated storefront JSON endpoints: /products.json (products, variants, prices, stock availability) and /collections.json (collection count). Optionally it also reads the public homepage and the public /pages/contact page to extract business contact details that the merchant publishes for customers: email addresses, phone numbers and links to social profiles. Each product becomes one dataset record, enriched with store-level contact data, so you pay per useful product row.
Use cases
- Competitor price tracking: monitor minimum and maximum variant prices and stock availability across rival stores.
- Lead generation: build lists of Shopify merchants with their public business contact channels and catalog size.
- Market research: compare vendors, product types and tags across a niche.
- Catalog audits: detect out-of-stock products or recently updated items.
Input
- domains (required): list of store domains or URLs, e.g. allbirds.com. Up to 50 stores per run; extras are ignored.
- maxProductsPerStore: 1 to 1000, default 50. Pagination stops at this bound.
- includeContacts: boolean, default true. Reads the homepage and /pages/contact for public business contact details.
Output
Each record contains: id (stable, storeDomain:productId), url (canonical https product URL), storeDomain, productId, title, vendor, productType, tags, priceMin, priceMax, compareAtPriceMax, available, variantCount, availableVariantCount, skus, imageUrl, createdAt, updatedAt, publishedAt, storeCollectionCount, contactEmails, contactPhones, socialLinks, scrapedAt. Stores that cannot be read produce a single record with an error field so you can see what failed.
Example
Input:
{"domains": ["allbirds.com"], "maxProductsPerStore": 2, "includeContacts": true}
Sample output:
[{"id": "allbirds.com:6574521123", "url": "https://allbirds.com/products/mens-wool-runners", "storeDomain": "allbirds.com", "productId": "6574521123", "title": "Men's Wool Runners", "vendor": "Allbirds", "productType": "Shoes", "tags": ["mens"], "priceMin": 98, "priceMax": 110, "compareAtPriceMax": null, "available": true, "variantCount": 12, "availableVariantCount": 9, "createdAt": "2021-03-01T10:00:00-05:00", "updatedAt": "2026-10-20T09:00:00-04:00", "storeCollectionCount": 40, "contactEmails": ["help@allbirds.com"], "contactPhones": [], "socialLinks": ["https://instagram.com/allbirds"], "scrapedAt": "2026-10-28T12:00:00.000Z"}]
Limits and data provenance
All data comes from publicly accessible Shopify storefront endpoints and public web pages served to any visitor without login. The Actor never uses credentials, never bypasses access controls, password-protected stores or bot challenges, and only collects business contact information that merchants publish for their customers; it does not target private individuals. Requests are sequential with a short delay to be polite. Hard limits: 50 stores and 1000 products per store per run. Some stores disable /products.json; those return an error record. Prices are in the store's default currency as returned by the endpoint. You are responsible for using the data in line with applicable laws, including anti-spam rules for outreach.