Shopify Products Scraper | Prices & Variants
Pricing
from $0.75 / 1,000 product extracteds
Shopify Products Scraper | Prices & Variants
Extract complete public Shopify product catalogs through products.json. Get titles, prices, compare-at prices, variants, SKUs, availability, images, tags, and vendors. Process one or many stores with no Shopify API key. Pay only $1 per 1,000 saved products—no start or per-store fees.
Pricing
from $0.75 / 1,000 product extracteds
Rating
0.0
(0)
Developer
DataScraperES
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
14 days ago
Last modified
Categories
Share
Extract public Shopify product catalogs from one or many storefronts. Add the store URLs and receive one structured Dataset item per unique product, including prices, variants, SKUs, availability, options, images, timestamps, and merchant metadata when publicly available.
What this Actor does
Shopify Products Scraper reads the public catalog exposed by compatible Shopify storefronts and converts every product into a consistent, export-ready record. It handles pagination, duplicate products, multiple stores, retries, rate limits, currency detection, and partial store failures automatically.
The normalized output keeps product identity, content, pricing, availability, variants, images, source information, and warnings together in one row. An optional output mode also preserves the original public product object.
Use cases
- Monitor public product catalogs, prices, compare-at prices, and availability.
- Build ecommerce research, competitor, assortment, or market datasets.
- Enrich product feeds with variants, SKUs, barcodes, images, and merchant tags.
- Compare catalogs across multiple Shopify stores.
- Create recurring snapshots for pricing and assortment analysis.
How to use
- Open the Actor in Apify Console.
- Add one or more public Shopify storefront URLs.
- Choose the per-store and run-wide product limits.
- Keep the default output options or disable data you do not need.
- Click Start and open the default Dataset when the run finishes.
Input
startUrls is required and accepts 1–100 public Shopify storefront homepages or localized storefront URLs. Equivalent URLs are normalized and deduplicated.
maxProductsPerStore defaults to 1,000 and limits each storefront. maxTotalProducts defaults to 10,000 and is a hard limit across the entire run. Both accept values from 1 to 100,000.
respectRobotsTxt, fetchStorefrontContext, includeVariants, includeImages, and includeDescriptionHtml default to true. outputMode defaults to normalized; use normalizedAndRaw only when the original public product object is also needed.
This is the exact input used for the output example below:
{"startUrls": [{"url": "https://partakefoods.com"}],"maxProductsPerStore": 1,"maxTotalProducts": 1,"respectRobotsTxt": true,"fetchStorefrontContext": true,"includeVariants": true,"includeImages": true,"includeDescriptionHtml": true,"outputMode": "normalized"}
Output
Each default Dataset item represents one unique product. productKey combines the normalized store domain and Shopify product ID. Prices are strings to preserve source precision, while unavailable fields remain null or empty. Variant and image fields are omitted only when their corresponding input options are disabled. rawProduct appears only in normalizedAndRaw mode.
This is the complete Dataset item from a real successful run:
{"productKey": "partakefoods.com:7424044826722","shopifyProductId": "7424044826722","storeUrl": "https://partakefoods.com","storeDomain": "partakefoods.com","productUrl": "https://partakefoods.com/products/teeny-tiny-crunchy-chocolate-chip","title": "Teeny Tiny Crunchy Chocolate Chip","handle": "teeny-tiny-crunchy-chocolate-chip","vendor": "Partake Foods","productType": null,"descriptionText": "Say hello to snack time’s new MVP. Partake Teeny Tiny Chocolate Chip Cookies deliver the same crunchy, chocolatey goodness you know and love — now in a Teeny Tiny bite ! Free of the Top 9 Allergens, gluten-free, non-GMO, and kosher, these cookies are safe for schools, playdates, and parties. Whether you’re filling lunchboxes, hosting movie night, or grabbing a handful just because, these crunchy little classics make every moment sweeter! Like all Partake treats, they’re gluten-free, non-GMO, and free of the top 9 allergens—so everyone can enjoy the moment, worry-free.","tags": [],"available": false,"currency": "USD","priceMin": "0.00","priceMax": "0.00","compareAtPriceMin": null,"compareAtPriceMax": null,"variantCountObserved": 1,"variantsMayBeTruncated": false,"createdAt": "2025-10-06T23:32:50+02:00","publishedAt": "2025-10-14T16:03:34+02:00","updatedAt": "2026-08-24T17:09:01+02:00","scrapedAt": "2026-08-24T17:09:02.512198+02:00","source": {"endpoint": "https://partakefoods.com/products.json?limit=1&page=1","page": 1,"contract": "public_products_json_observed"},"warnings": [],"descriptionHtml": "<p><meta charset=\"utf-8\"><meta charset=\"utf-8\">Say hello to snack time’s new MVP. Partake Teeny Tiny Chocolate Chip Cookies deliver the same crunchy, chocolatey goodness you know and love — now <em data-end=\"366\" data-start=\"327\">in a Teeny Tiny bite</em>! Free of the Top 9 Allergens, gluten-free, non-GMO, and kosher, these cookies are safe for schools, playdates, and parties. Whether you’re filling lunchboxes, hosting movie night, or grabbing a handful just because, these crunchy little classics make every moment sweeter!</p>\n<p>Like all Partake treats, they’re gluten-free, non-GMO, and free of the top 9 allergens—so everyone can enjoy the moment, worry-free.</p>","variants": [{"id": "42220701089890","title": "Default Title","sku": null,"barcode": null,"available": false,"price": "0.00","compareAtPrice": null,"option1": "Default Title","option2": null,"option3": null,"grams": 0,"weight": null,"weightUnit": null,"requiresShipping": true,"taxable": true,"inventoryManagement": null,"featuredImage": null}],"options": [{"name": "Title","position": 1,"values": ["Default Title"]}],"images": [{"id": "33333703114850","src": "https://cdn.shopify.com/s/files/1/0012/2296/7353/files/TTCC-PDP-FOP.png?v=1759786436","altText": null,"width": 3000,"height": 3000,"position": 1,"variantIds": []},{"id": "33439384567906","src": "https://cdn.shopify.com/s/files/1/0012/2296/7353/files/teeny_tiny_6.png?v=1760556603","altText": null,"width": 6912,"height": 3456,"position": 2,"variantIds": []},{"id": "33333703049314","src": "https://cdn.shopify.com/s/files/1/0012/2296/7353/files/TTCC-PDP-Square3.png?v=1760556603","altText": null,"width": 2000,"height": 2000,"position": 3,"variantIds": []},{"id": "33439395283042","src": "https://cdn.shopify.com/s/files/1/0012/2296/7353/files/teeny_tiny_7.png?v=1760556084","altText": null,"width": 2500,"height": 2500,"position": 4,"variantIds": []}]}
The Output tab also links to a SUMMARY record with run and per-store counts, plus a bounded ERRORS record for storefront failures. A run can be partial when it preserves products but reaches a selected limit or cannot complete every store.
Pricing
Each unique product successfully saved to the default Dataset is charged according to your Apify account tier.
| Apify plan tier | Price per product | Price per 1,000 products |
|---|---|---|
| Free | $0.001 | $1.00 |
| Bronze | $0.0009 | $0.90 |
| Silver | $0.0008 | $0.80 |
| Gold | $0.00075 | $0.75 |
| Platinum | $0.00075 | $0.75 |
| Diamond | $0.00075 | $0.75 |
There is no Actor start fee and no per-store fee; platform usage is included. Duplicate, invalid, unavailable, failed, or charge-limit-skipped products are free.
API and integrations
Run the Actor through Apify Console, API, CLI, tasks, schedules, or webhooks. Use the Dataset API for product records and the default Key-Value Store for SUMMARY and ERRORS. Dataset exports are available in JSON, CSV, Excel, XML, JSONL, and other Apify-supported formats.
For recurring monitoring, save the input as a Task and attach a Schedule. Use productKey, storeDomain, and shopifyProductId as stable identifiers when comparing snapshots or loading results into a database.
Related Actors
| Actor | Best for |
|---|---|
| Website Technology Lookup – CMS, Hosting & Tech Stack Data | Confirming ecommerce technology and enriching storefront domains with their wider tech stack. |
| Similarweb Website Traffic & SEO Analytics Scraper | Adding estimated traffic, rankings, audience geography, and competitor intelligence to store domains. |
| Favicon Extractor | Adding lightweight store icons to catalog directories, dashboards, and product research tools. |
Limits and data quality
- A run accepts up to 100 storefront URLs and up to 100,000 products per store or run.
- Only products exposed through a compatible public Shopify catalog can be returned. Draft, private, hidden, password-protected, wholesale-only, unlisted, or market-restricted products may be absent.
- Exact inventory quantities, costs, private metafields, customers, orders, reviews, ratings, analytics, and sales estimates are not public catalog fields and are not returned.
- Availability means at least one observed variant is publicly purchasable; it is not an inventory count.
- Public product records can expose at most 250 variants. Items at that boundary set
variantsMayBeTruncatedtotrue. - Headless or heavily customized stores may not expose a compatible catalog. Non-Shopify platforms are not supported.
- Currency can depend on storefront market and visitor context. The Actor returns
nullrather than guessing when it cannot confirm a value. - Catalogs can change while a run is active, so a multi-page result is not a transactional snapshot.
- When
respectRobotsTxtis enabled, stores that disallow the catalog path are skipped.
Frequently asked questions
Does one Dataset item represent a product or a variant?
One item represents one product. When variants are enabled, all observed variants are nested in the variants array.
Why did the Actor return fewer products than my limit?
Limits are maximums, not guaranteed counts. The public catalog may be smaller, restricted, incompatible, contain duplicate or invalid records, or be interrupted by a spending limit. Review SUMMARY and ERRORS for the store outcome.
Why is currency null?
Currency detection is separate from product extraction. If the storefront does not expose a verifiable currency context, the Actor keeps the product and returns null.
Which output mode should I use?
Use normalized for smaller, consistent records. Choose normalizedAndRaw only when you also need the complete original public product object.
What happens when one store fails?
Stores run independently. Products already saved from other stores remain in the Dataset, and the failure is recorded in ERRORS and the run summary.
Responsible use
Use public catalog data only for purposes you are authorized to perform. Respect storefront terms, robots preferences, intellectual-property rights, privacy requirements, and applicable laws. Product images, descriptions, names, and trademarks remain subject to their owners' rights.
Support
Open the Actor's Issues tab and include the run ID, affected storefront URL, exact non-sensitive input, and expected versus actual behavior. Do not include credentials, private data, or confidential storefront information.