Shopify Scraper — Products, Collections, Reviews & Emails
Pricing
from $3.00 / 1,000 product scrapeds
Shopify Scraper — Products, Collections, Reviews & Emails
Extract Shopify products, collections, reviews & merchant emails from any store. No login required. CRM-ready JSON. Export scraped data, run via API, schedule and monitor runs, or integrate with other tools.
Pricing
from $3.00 / 1,000 product scrapeds
Rating
0.0
(0)
Developer
Khadin Akbar
Actor stats
0
Bookmarked
3
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
🛍️ Shopify All-in-One Scraper — Products, Collections, Reviews & Emails
Extract products, collections, customer reviews, and merchant contact info from any Shopify store in a single run. No login, no API keys, no cookies required. Uses Shopify's public JSON endpoints for maximum reliability and speed.
The only Shopify scraper that combines all four data types in one actor — and charges you separately for each so you only pay for what you use.
What It Extracts
Products (record_type: "product")
Every product from any Shopify store's public catalog:
- Pricing: current price, compare-at price, discount percentage calculated automatically
- Variants: every size/color/option combination with per-variant price, stock status, SKU, barcode, and inventory quantity
- Images: all product image URLs in order
- Metadata: title, vendor/brand, product type, tags, full description (HTML stripped to plain text)
- Stock: real-time availability status per variant
- Dates: created, updated, and published timestamps
Collections (record_type: "collection")
All product categories/collections from the store:
- Collection ID, handle, and title
- Description (HTML stripped)
- Hero image URL
- Product count per collection
Customer Reviews (record_type: "review")
Reviews extracted directly from the store's review app. Supports auto-detection of:
- Judge.me — the most widely used Shopify review app
- Yotpo — enterprise-grade review platform
Extracted fields: reviewer name, title, body, star rating (1–5), date, verified buyer status, helpful votes.
Merchant Contact Info (record_type: "contact")
Live-scraped contact data from each store's public pages (not a static database):
- Business email and phone number from the contact page
- Social media links: Instagram, Facebook, Twitter/X, TikTok, YouTube
- Store name, currency, and language
- Physical address (where publicly displayed)
Why Use This Over Alternatives?
| Feature | This Actor | webdatalabs ($0.01/product) | xmiso (static DB) |
|---|---|---|---|
| Products + variants | ✅ | ✅ | ❌ |
| Collections | ✅ | ❌ | ❌ |
| Customer reviews | ✅ | ✅ | ❌ |
| Live merchant emails | ✅ | ❌ | Static/stale |
| Social media links | ✅ | ❌ | ❌ |
| Price per product | $0.003 | $0.01 | N/A |
| No login required | ✅ | ✅ | ✅ |
| Batch scraping | ✅ | ✅ | ❌ |
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
storeUrls | string[] | ["allbirds.com"] | Shopify store URLs or domains to scrape |
scrapeProducts | boolean | true | Extract all products |
scrapeCollections | boolean | false | Extract product collections |
scrapeReviews | boolean | false | Extract customer reviews (Judge.me, Yotpo) |
scrapeContactInfo | boolean | false | Extract merchant email, phone, social links |
maxProductsPerStore | integer | 100 | Max products per store (0 = full catalog) |
maxReviewsPerProduct | integer | 50 | Max reviews per product |
Example Input
{"storeUrls": ["gymshark.com", "allbirds.com"],"scrapeProducts": true,"scrapeCollections": true,"scrapeReviews": false,"scrapeContactInfo": true,"maxProductsPerStore": 500}
Output Format
All records share a common schema with a record_type discriminator field. Filter by record_type to get the data you need.
Product Record Example
{"record_type": "product","store_url": "https://www.allbirds.com","store_domain": "www.allbirds.com","product_id": "7234567890","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", "sustainable"],"description": "The world's most comfortable shoes, made with superfine merino wool.","price": 120.0,"compare_at_price": null,"discount_percentage": null,"currency": "USD","available": true,"variants_count": 14,"variants": [{"variant_id": "41234567890","title": "8 / Medium Grey","sku": "M-WR-8-MGR","price": 120.0,"available": true,"option1": "8","option2": "Medium Grey"}],"image_url": "https://cdn.shopify.com/s/files/1/...","sku": "M-WR-8-MGR","review_platform": "yotpo","review_rating": 4.8,"review_count": 2341,"created_at": "2023-06-01T00:00:00Z","scraped_at": "2026-04-03T10:30:00.000Z","source_url": "https://www.allbirds.com/products.json?limit=250&page=1"}
Contact Record Example
{"record_type": "contact","store_url": "https://www.gymshark.com","store_domain": "www.gymshark.com","merchant_name": "Gymshark","merchant_email": "hello@gymshark.com","merchant_phone": "+44 1234 567890","store_currency": "GBP","store_language": "en","social_instagram": "https://www.instagram.com/gymshark/","social_facebook": "https://www.facebook.com/gymshark","social_twitter": "https://twitter.com/gymshark","social_tiktok": "https://www.tiktok.com/@gymshark","social_youtube": "https://www.youtube.com/@Gymshark","contact_page_url": "https://www.gymshark.com/pages/contact","scraped_at": "2026-04-03T10:30:00.000Z"}
Pricing
This actor uses Pay-Per-Event pricing — you only pay for what you actually extract.
| Event | Price | Notes |
|---|---|---|
| Product scraped | $0.003 | Per product, all variants included |
| Collection scraped | $0.001 | Per collection |
| Review scraped | $0.001 | Per individual review |
| Contact info scraped | $0.005 | Per store (one charge covers all fields) |
Cost Examples
| Task | Units | Cost |
|---|---|---|
| Scrape 100 products | 100 products | $0.30 |
| Scrape 1,000 products | 1,000 products | $3.00 |
| Full catalog of 5,000 products | 5,000 products | $15.00 |
| Scrape 50 stores for contact info | 50 stores | $0.25 |
| 1,000 reviews | 1,000 reviews | $1.00 |
Apify takes 20% platform fee — you keep 80% of revenue generated.
Use Cases
Competitor Price Monitoring — Track pricing changes across competitor Shopify stores. Run on a schedule and monitor discount patterns, new arrivals, and sold-out products.
Dropshipping Product Research — Identify trending products, winning price points, and inventory levels across Shopify stores in your niche.
B2B Lead Generation — Scrape merchant emails, phones, and social links from Shopify stores in specific categories. Build targeted outreach lists for apps, services, or agencies targeting Shopify merchants.
Market Research — Analyze full product catalogs to understand market pricing, category structures, and brand positioning.
Review Sentiment Analysis — Extract customer reviews for NLP analysis, product improvement insights, or competitive intelligence.
Price Comparison Sites — Aggregate product data from multiple Shopify stores to power a comparison engine.
Using via API
const ApifyClient = require('apify-client');const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('khadinakbar/shopify-all-in-one-scraper').call({storeUrls: ['gymshark.com', 'allbirds.com'],scrapeProducts: true,scrapeContactInfo: true,maxProductsPerStore: 200,});const { items } = await client.dataset(run.defaultDatasetId).listItems();const products = items.filter(r => r.record_type === 'product');const contacts = items.filter(r => r.record_type === 'contact');console.log(`Got ${products.length} products and ${contacts.length} contacts`);
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("khadinakbar/shopify-all-in-one-scraper").call(run_input={"storeUrls": ["gymshark.com"],"scrapeProducts": True,"maxProductsPerStore": 500,})items = client.dataset(run["defaultDatasetId"]).list_items().itemsproducts = [r for r in items if r["record_type"] == "product"]
How It Works
This actor uses Shopify's public JSON API endpoints that every Shopify store exposes:
/products.json?limit=250&page=N— paginated product catalog/collections.json?limit=250— all collections/meta.json— store metadata (name, currency, language)/pages/contactand/contact— contact information/— homepage (social links)
For reviews, it detects the installed review app from script tags on the store's homepage, then calls the review platform's public widget API.
No browser automation is used — all requests are plain HTTP, making this actor fast, lightweight, and highly reliable (99%+ success rate on public stores).
Limitations
- Only works with public Shopify stores (password-protected stores are skipped with a clear log message)
- Reviews require the store to use Judge.me or Yotpo; other platforms (Stamped, Okendo, Loox) detected but not yet scraped — contact us to request
- Inventory quantities may show
-1on stores that don't track inventory levels by variant - Contact email/phone availability depends on the store displaying it publicly
Frequently Asked Questions
Does this require a Shopify account or API key? No. This actor uses Shopify's public JSON API, which every Shopify store exposes. No login, cookies, or API keys needed.
Can I scrape multiple stores in one run?
Yes. Add as many store URLs as you need to storeUrls. Each store is processed sequentially.
How do I scrape a full product catalog?
Set maxProductsPerStore to 0 for unlimited scraping.
What if a store is password-protected? The actor detects this automatically and skips the store with a warning in the logs. Only public storefront data is accessible.
Why is my contact email sometimes missing? Not every store displays their contact email publicly. Some stores only show a contact form. The actor will still return all other available data.
Works great with: 🔗 Google Maps Scraper | 📊 LinkedIn Jobs Scraper
Export scraped data, run the scraper via API, schedule and monitor runs, or integrate with other tools using Apify's platform features.