Shopify Scraper — Products, Collections, Reviews & Emails avatar

Shopify Scraper — Products, Collections, Reviews & Emails

Pricing

from $3.00 / 1,000 product scrapeds

Go to Apify Store
Shopify Scraper — Products, Collections, Reviews & Emails

Shopify Scraper — Products, Collections, Reviews & Emails

Extract Shopify products, collections, reviews and merchant emails from any store as CRM-ready JSON. No login needed; works with Apify MCP and the API.

Pricing

from $3.00 / 1,000 product scrapeds

Rating

0.0

(0)

Developer

Khadin Akbar

Khadin Akbar

Maintained by Community

Actor stats

1

Bookmarked

35

Total users

0

Monthly active users

9 hours ago

Last modified

Share

What is 🛍️ Shopify Scraper — Products, Collections, Reviews & Emails?

Use this Apify Actor to extract Shopify store data into one dataset, with each record representing one product, one collection, one customer review, or one merchant contact result. It accepts Shopify store URLs or bare domains, and it is designed for known stores rather than keyword discovery. The output can include product IDs, handles, URLs, titles, prices, compare-at prices, discounts, variants, images, review ratings, review counts, merchant email, phone, address, language, currency, and social links. The result is CRM-ready JSON that you can use in apps, pipelines, and Apify MCP workflows.

Best fit and connected workflows

This actor fits workflows where the input is already a specific Shopify store and the goal is structured data from that store.

It routes well into:

  • product catalog export when you need titles, pricing, stock, variants, images, and product metadata
  • collection mapping when you want categories, handles, descriptions, and product counts
  • review analysis when you want star ratings, review text, verified buyer status, and helpful votes
  • merchant lead capture when you want public contact details for outreach or account research
  • scheduled monitoring when you want repeatable snapshots of the same store over time
  • downstream enrichment or filtering by record_type in your own systems

Related Shopify workflows that connect naturally:

  • Use Shopify Products Scraper for a more focused product-only step
  • Use Shopify App Store Scraper when your next step is Shopify app research

Practical scenario

Maya, a sales operations specialist, starts with a known store domain, gymshark.com, and wants a contact record plus a small product sample for context. She enables scrapeContactInfo and scrapeProducts, then sets a product cap for a quick run.

The actor returns fields such as merchant_email, merchant_phone, store_currency, store_language, title, price, currency, available, and discount_percentage. Maya uses the merchant email to route the lead to the right account owner, then reviews the product pricing and availability before planning outreach.

Input

FieldTypePurpose
storeUrlsarray of stringsShopify store URLs or bare domains for known stores
scrapeProductsbooleanExtract product data from public Shopify catalog endpoints
scrapeCollectionsbooleanExtract collection data from public Shopify collection endpoints
scrapeReviewsbooleanExtract customer reviews when a supported review platform is detected
scrapeContactInfobooleanExtract public merchant contact details from the store pages
maxProductsPerStoreintegerUpper bound for products per store
maxCollectionsPerStoreintegerUpper bound for collections per store
maxReviewsPerProductintegerUpper bound for reviews per product

Focused input example

{
"storeUrls": [
"https://www.allbirds.com",
"gymshark.com"
],
"scrapeProducts": true,
"scrapeCollections": true,
"scrapeReviews": false,
"scrapeContactInfo": true,
"maxProductsPerStore": 25,
"maxCollectionsPerStore": 50,
"maxReviewsPerProduct": 20
}

Output

Each dataset item includes record_type so you can filter records by product, collection, review, or contact.

FieldTypePurpose
record_typestringRecord discriminator: product, collection, review, or contact
store_urlstringFull base URL of the Shopify store
store_domainstringHostname of the store
scraped_atstringISO 8601 extraction timestamp
source_urlstringSource page or endpoint used for the record
product_idstring or nullShopify product ID for product records
product_handlestring or nullShopify product slug
product_urlstring or nullDirect product URL
titlestring or nullProduct title or collection title
vendorstring or nullProduct vendor or brand
product_typestring or nullProduct type from Shopify
tagsarray or nullProduct tags
descriptionstring or nullPlain-text product description
pricenumber or nullCurrent lowest selling price
compare_at_pricenumber or nullOriginal price before discount
discount_percentagenumber or nullCalculated discount value
currencystring or nullISO 4217 currency code
availableboolean or nullCurrent availability status
variants_countnumber or nullNumber of variants
variantsarray or nullVariant details such as SKU, barcode, and option values
imagesarray or nullImage URLs in store order
image_urlstring or nullMain image URL
skustring or nullSKU from the first variant
barcodestring or nullBarcode from the first variant
review_platformstring or nullDetected review platform
review_ratingnumber or nullAverage review rating
review_countnumber or nullNumber of scraped reviews
created_atstring or nullShopify creation timestamp
updated_atstring or nullLast update timestamp
published_atstring or nullStorefront publish timestamp
collection_idstring or nullShopify collection ID
collection_handlestring or nullCollection slug
collection_titlestring or nullCollection title
collection_descriptionstring or nullPlain-text collection description
collection_image_urlstring or nullCollection image URL
collection_product_countnumber or nullProduct count in collection
review_idstring or nullReview platform ID
reviewer_namestring or nullReview author name
review_titlestring or nullReview headline
review_bodystring or nullFull review text
review_datestring or nullReview submission date
review_star_ratingnumber or nullIndividual star rating
verified_buyerboolean or nullVerified buyer flag
helpful_votesnumber or nullHelpful vote count
merchant_namestring or nullStore or merchant name
merchant_emailstring or nullPublic business email
merchant_phonestring or nullPublic business phone number
merchant_addressstring or nullPublic business address
store_languagestring or nullStore language code
store_currencystring or nullStore currency code
contact_page_urlstring or nullContact page URL
social_instagramstring or nullInstagram profile URL
social_facebookstring or nullFacebook page URL
social_twitterstring or nullTwitter or X profile URL
social_tiktokstring or nullTikTok profile URL
social_youtubestring or nullYouTube channel URL

Illustrative output record

{
"record_type": "product",
"store_url": "https://www.allbirds.com",
"store_domain": "www.allbirds.com",
"scraped_at": "2026-04-03T10:30:00.000Z",
"source_url": "https://www.allbirds.com/products.json?limit=250&page=1",
"product_id": "7234567890123",
"product_handle": "mens-wool-runners",
"product_url": "https://www.allbirds.com/products/mens-wool-runners",
"title": "Men's Wool Runners",
"vendor": "Allbirds",
"product_type": "Shoes",
"tags": [
"mens",
"running",
"wool"
],
"description": "Lightweight everyday shoes made with merino wool.",
"price": 120,
"compare_at_price": null,
"discount_percentage": null,
"currency": "USD",
"available": true,
"variants_count": 4,
"variants": [
{
"variant_id": "41234567890",
"title": "8 / Medium Grey",
"sku": "M-WR-8-MGR",
"price": 120,
"available": true,
"option1": "8",
"option2": "Medium Grey"
}
],
"images": [
"https://cdn.shopify.com/s/files/1/0001/product-main.jpg"
],
"image_url": "https://cdn.shopify.com/s/files/1/0001/product-main.jpg",
"sku": "M-WR-8-MGR",
"barcode": "0123456789012",
"review_platform": "yotpo",
"review_rating": 4.8,
"review_count": 2341,
"created_at": "2023-06-01T00:00:00Z",
"updated_at": "2026-03-20T14:30:00Z",
"published_at": "2023-06-01T00:00:00Z"
}

How it works

The actor works from Shopify's public surfaces and store pages, using the implementation facts provided in the contract:

  • product data from /products.json
  • collection data from /collections.json
  • store metadata from public store pages and metadata surfaces
  • contact details from public contact and footer pages
  • social links from the homepage footer
  • review data from detected review platforms such as Judge.me and Yotpo

The output uses a single dataset schema with a record_type field so you can separate products, collections, reviews, and contact records in downstream processing.

Pricing

Startup billing and empty runs

The apify-actor-start event costs $0.00005 per startup unit. Apify charges one startup unit per GB of allocated memory, with a minimum of one unit, so a 2 GB run incurs two units. This startup charge still applies when input is invalid, no results are found, or an upstream request fails. Statements about free, unbilled, or skipped results refer only to the corresponding result event; they do not waive the startup charge. Apify platform usage is included in the event prices and is not passed through as an additional customer charge. Check the live Pricing tab for current events, tiers, and rates. Result limits cap result events, not the entire run cost.

This actor uses Pay per event pricing on Apify. Each extracted record type maps to an event, and Apify platform usage is included in the event price. For the current breakdown and total run cost, open the actor's Pricing tab in Apify Console.

A simple example in words: if you scrape one hundred products, the product event is charged one hundred times; if you also scrape one contact record for that store, the contact event is charged once; if you add twenty reviews, the review event is charged twenty times.

Use with AI agents (MCP)

This Actor is usable through Apify MCP, so an AI agent can call it as a tool to gather Shopify store data before reasoning, enrichment, routing, or follow-up actions.

Tool description: extract Shopify product, collection, review, and merchant contact records from a known store domain or URL, then return structured dataset items for filtering by record_type.

Exact Actor identity: khadinakbar/shopify-all-in-one-scraper

Scrape the Shopify store www.allbirds.com for products and merchant contact info. Return the dataset items, then separate product records from contact records by record_type. Keep the result in structured JSON and include the source URLs for traceability.

Output interpretation: use record_type first, then read the fields that match that record family. For example, product records center on title, price, currency, available, and variants, while contact records center on merchant_email, merchant_phone, merchant_address, and social links.

Provenance: each item includes source_url and scraped_at, which makes it easier to trace where the record came from and when it was extracted.

Scope: use storeUrls for stores you already know. This actor is designed for direct store targets rather than keyword discovery.

Pagination and cost guidance: product and collection extraction is governed by the per-store caps in the input, while review volume is governed by maxReviewsPerProduct. Because pricing is event-based, raising the cap increases the number of billable records.

Apify API example

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({
token: process.env.APIFY_TOKEN || 'YOUR_APIFY_TOKEN',
});
const run = await client.actor('khadinakbar/shopify-all-in-one-scraper').call({
storeUrls: ['https://www.allbirds.com'],
scrapeProducts: true,
scrapeCollections: true,
scrapeReviews: false,
scrapeContactInfo: true,
maxProductsPerStore: 10,
maxCollectionsPerStore: 10,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
const products = items.filter((item) => item.record_type === 'product');
const contacts = items.filter((item) => item.record_type === 'contact');
console.log(`Products: ${products.length}`);
console.log(`Contacts: ${contacts.length}`);
console.log(items);

Best results and outcome guidance

Start with a known Shopify domain or full store URL, then enable only the record types you need for the current task. Use smaller caps for sampling and larger caps when you want fuller catalog coverage. For lead generation, pair scrapeContactInfo with a small product sample so you have both outreach data and store context. For analysis workflows, filter the dataset by record_type before transforming or exporting the records.

Continue the workflow

  • Then use Shopify Products Scraper to extend 🛍️ Shopify Scraper — Products, Collections, Reviews & Emails research with a complementary content contract.
  • Then use Target Product Reviews Scraper & Ratings to extend 🛍️ Shopify Scraper — Products, Collections, Reviews & Emails with a neighboring commerce research source when the brief calls for Target data.

Design note

I found that the dataset contract uses a single shared schema with record_type as the discriminator, which makes it practical to mix products, collections, reviews, and contact records in one run and still separate them cleanly downstream.

FAQ

Can I send multiple Shopify stores in one run?
Yes. Add multiple URLs or domains to storeUrls and process them together.

Which input field is the suitable fit for a known store domain?
Use storeUrls for a specific Shopify store you already identified.

How do I get only product rows from the dataset?
Filter results where record_type equals product.

How do I get merchant contact records for outreach?
Enable scrapeContactInfo and filter dataset items where record_type equals contact.

How do I connect this with a product-only Shopify step?
Use Shopify Products Scraper when a later workflow needs a narrower product export.

How do I connect this with Shopify app research?
Use Shopify App Store Scraper when the next step is app discovery or app-store analysis.

Responsible use

Use this actor on stores you are authorized to review and on public pages that are available for access. Review the live Pricing tab before running larger jobs so you can match the input caps to your intended budget and data volume. When exporting contact information, keep outreach aligned with your internal policies and applicable laws.