Shopify Store Catalog & Contact Scraper avatar

Shopify Store Catalog & Contact Scraper

Pricing

$5.70 / 1,000 results

Go to Apify Store
Shopify Store Catalog & Contact Scraper

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

Snappy

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

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.