Ecommerce Scraper — Shopify, WooCommerce & Any Store
Pricing
from $3.00 / 1,000 product scrapeds
Ecommerce Scraper — Shopify, WooCommerce & Any Store
MCP-ready ecommerce scraper. Extract products, prices, discounts, variants, stock & images from any Shopify, WooCommerce, or generic store $3.00/1K.
Pricing
from $3.00 / 1,000 product scrapeds
Rating
0.0
(0)
Developer
Khadin Akbar
Maintained by CommunityActor stats
0
Bookmarked
73
Total users
15
Monthly active users
4 days ago
Last modified
Categories
Share
Ecommerce Scraper — Shopify, WooCommerce, Generic (MCP)
This Apify Actor is for ecommerce pages and store homepages that you want to turn into structured product records. It accepts one or more full ecommerce URLs in startUrls, then returns one dataset record per scraped product. Each record can include the product URL, title, description, price, original price, discount percentage, stock status, SKU, brand, category, tags, images, rating, review count, variants, platform, source URL, and scrape timestamp. The outcome is a product dataset that is ready for analysis, review, enrichment, or downstream automation.
Best fit and connected workflows
This Actor fits workflows where the source is a public Shopify, WooCommerce, or generic ecommerce store and the goal is product-level extraction.
Common routing patterns include:
- Store homepage to catalog crawl when you want a broader product set from one starting URL.
- Single product page extraction when you want a focused record for one item.
- Catalog monitoring when you need repeated product snapshots for prices, stock, and discounts.
- AI-agent workflows through Apify MCP when a model needs structured ecommerce data from a public store.
Practical scenario
A merchandiser opens a product page on a Shopify store and wants a compact record for tracking. They provide the page URL in startUrls, set maxProducts to 1, and keep variants enabled. The returned record includes the product title, current price, original price if present, discount percentage, availability, SKU, images, and platform. With that data, they can decide whether to review the item for pricing updates, assortment changes, or competitive comparison, then move the result into a spreadsheet or another automation step.
Input fields
| Field | Type | Purpose |
|---|---|---|
startUrls | array | One or more full ecommerce URLs to scrape. Accepts store homepages and product page URLs. |
maxProducts | integer | Upper limit on the number of products returned in the run. Default: 50. |
includeVariants | boolean | Includes a variants array with size, color, or style entries, each with its own price, SKU, and availability. |
includeDescription | boolean | Includes the full plain-text product description when enabled. |
proxyConfiguration | object | Apify proxy settings. Residential proxy is prefilled by default. |
Focused JSON input example
{"startUrls": [{"url": "https://allbirds.com"},{"url": "https://allbirds.com/products/mens-wool-runners"}],"maxProducts": 10,"includeVariants": true,"includeDescription": true,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
Output fields
| Field | Type | Meaning |
|---|---|---|
url | string | Direct product URL. |
title | string or null | Product name as shown on the page. |
description | string or null | Plain-text description. |
price | number or null | Current selling price. |
original_price | number or null | Pre-discount price. |
currency | string or null | ISO currency code. |
discount_percentage | number or null | Discount calculated from original and current price. |
in_stock | boolean or null | Availability for the product or at least one variant. |
sku | string or null | Product SKU. |
brand | string or null | Brand or vendor name. |
category | string or null | Product category or type. |
tags | array | Store-assigned product tags or labels. |
images | array | Product image URLs, up to 10. |
rating | number or null | Average rating, if publicly shown. |
review_count | integer or null | Total review count, if publicly shown. |
variants | array | Variant records with title, price, original price, SKU, and availability. |
platform | string | Detected platform: shopify, woocommerce, or generic. |
source_url | string | Store or page URL used for scraping. |
scraped_at | string | ISO 8601 extraction timestamp. |
Illustrative output record
{"url": "https://allbirds.com/products/mens-wool-runners","title": "Men's Wool Runners","description": "The shoe that started it all. Made with ZQ-certified merino wool.","price": 110,"original_price": 140,"currency": "USD","discount_percentage": 21,"in_stock": true,"sku": "WR-M-NVY-9","brand": "Allbirds","category": "Shoes","tags": ["wool", "sustainable", "running"],"images": ["https://cdn.allbirds.com/image/fetch/q_auto.../wr.jpg"],"rating": 4.7,"review_count": 3241,"variants": [{"title": "Size 9 / Navy","price": 110,"original_price": null,"sku": "WR-M-NVY-9","available": true}],"platform": "shopify","source_url": "https://allbirds.com","scraped_at": "2026-04-13T12:00:00.000Z"}
How it works
This Actor auto-detects the ecommerce platform from the provided URLs and extracts public product data using platform-specific and generic paths.
Implementation facts from the live contract:
- Shopify, WooCommerce, and generic stores are supported.
- The actor uses a Cheerio-based Crawlee template.
- Residential proxies are enabled by default in the input prefill.
- The output dataset is structured around product-level records.
- The run also writes machine-readable terminal records for
OUTPUTandRUN_SUMMARY.
Pricing
This Actor uses pay per event pricing plus Apify platform usage.
Billing events in the live contract:
apify-actor-start: charged when the Actor starts.product-scraped: charged for each product record successfully extracted.
The input schema shows maxProducts as an upper limit, and the charged event price for each scraped product is listed in the live contract. For current pricing details, open the live Pricing tab on the Actor page in Apify Console. Apify platform usage such as compute and proxy usage is billed separately.
Example in words: if a run returns fifty products, the execution includes one start event plus fifty product-scraped events, and Apify platform usage is added on top according to the live Pricing tab.
Use with AI agents (MCP)
This Actor is an Apify Actor usable through Apify MCP. It is designed to serve structured ecommerce extraction to agentic tools that need product URLs, prices, stock, images, and other catalog fields in a predictable schema.
Exact Actor identity: khadinakbar/ecommerce-store-scraper
Use it when an agent needs product-level data from a public ecommerce site and benefits from stable JSON output plus dataset provenance.
Scrape this Shopify store homepage and return the products that are in stock, with titles, current prices, discounts, and variant availability. Then summarize the results using the dataset output.
How to interpret the output:
- Each dataset item represents one scraped product record.
platformshows the detected store type.source_urlshows the page or store URL that was used as input.scraped_atmarks when the record was extracted.variantscontains per-variant pricing and availability when enabled.
Provenance and scope:
- Output is derived from the provided public ecommerce URLs.
- The schema includes the product fields listed above and the run summary records in key-value storage.
maxProductscontrols the upper bound on returned products.- When you provide a store homepage, the actor can crawl the catalog from that starting point.
- When you provide a product URL, the actor returns targeted product-level extraction.
Cost guidance:
- Product-level records are billed as individual product-scraped events.
- Larger catalogs increase event counts proportionally to returned products.
- Review the live Pricing tab before running large crawls.
Apify API example
import { ApifyClient } from "apify-client";const client = new ApifyClient({token: process.env.APIFY_TOKEN,});const input = {startUrls: [{ url: "https://allbirds.com" }],maxProducts: 5,includeVariants: true,includeDescription: true,};const run = await client.actor("khadinakbar/ecommerce-store-scraper").call(input);const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Best results and outcome guidance
Use full ecommerce URLs in startUrls. Store homepages are useful for broader catalog collection, while individual product URLs are useful for a focused single-record run. Keep maxProducts aligned with the scope you need. Leave includeVariants on when variant-level price and availability matter. Turn includeDescription off when you want smaller records centered on pricing and stock. The default residential proxy configuration is available for public store access patterns that benefit from it.
Design note
I found that the output contract requires url, platform, source_url, and scraped_at in every record, which makes each product item easy to trace back to its source and extraction time.
FAQ
When should I use a store homepage versus a product page URL?
Use a store homepage when you want the actor to discover more of the catalog from a single starting point. Use a product page URL when you want a specific product record.
How does the actor route between Shopify, WooCommerce, and generic stores?
It auto-detects the platform from the provided ecommerce URL and returns the detected value in the platform field.
What if I only need price and stock fields?
Set includeDescription to false to keep the payload focused on pricing and availability while still collecting the product record.
How do variants appear in the output?
When includeVariants is enabled, each record can include a variants array with titles, prices, original prices, SKUs, and availability values.
How can I read the run result after the actor finishes?
Use the default dataset for the product records, and inspect the OUTPUT or RUN_SUMMARY records in the default key-value store for terminal run details.
Focused standalone workflow
This Actor is designed as a focused standalone workflow.
Responsible use
Use this Actor only on public ecommerce pages that you are authorized to access and process. Follow applicable website terms, platform policies, and data protection requirements when collecting, storing, or sharing product data.