{"name":"shopify-products-scraper","id":"sfoln/shopify-products-scraper","title":"Shopify Products Scraper + WooCommerce","description":"Scrape every product of any Shopify or WooCommerce store: title, vendor, type, tags, price and compare-at price, discount, stock, variants, images and dates, one row per product or per variant. No login or API key. $0.80 per 1,000 products + $0.001 per store.","version":"0.1","status":"ready","family":{"id":"company-lead-intelligence","name":"Company & lead intelligence","description":"Company enrichment, contact discovery, tech-stack detection, hiring signals, job listings, public tenders, Shopify stores, marketplace listings, NPI provider records, e-mail and phone validation.","actors":13},"categories":["ECOMMERCE","LEAD_GENERATION","AUTOMATION"],"availability":"on_request","seoTitle":"Shopify Products Scraper – Shopify & WooCommerce Data","seoDescription":"Scrape all products of any Shopify or WooCommerce store: prices, discounts, stock, variants, images. No login. $0.80 per 1,000 products + $0.001 per store.","summary":"Scrape every product of any Shopify or WooCommerce store into clean rows: give store URLs and get one row per product (or per variant) with title, vendor, product type, tags, price and compare-at price, discount, stock availability, variants, images and creation / update dates. The platform is detected per store and the catalog is read from the store's public storefront JSON (Shopify /products.json, the WooCommerce Store API), so there is no login, no API key and no browser. Built for e-commerce analysts, competitor price monitoring, dropshippers, agencies, market research and AI agents.","pricing":{"model":"pay-per-event","currency":"USD","billedBy":"Apify","freePlanMaxItemsPerRun":10,"events":[{"name":"product","title":"Store product","description":"One product (or, with includeVariants, one variant) delivered as a normalized dataset row with prices, availability, variants and images.","priceUsd":0.0008},{"name":"store","title":"Store catalog","description":"One store whose catalog delivered at least one row in this run (platform detection and paging).","priceUsd":0.001}]},"input":{"description":"Add Shopify or WooCommerce store URLs. Each store produces one dataset row per product (or per variant) plus one summary record.","required":["storeUrls"],"fields":[{"name":"storeUrls","title":"Store URLs","type":"array","required":true,"description":"Store homepages or domains (https://www.allbirds.com, allbirds.com) or Shopify collection URLs (https://store.com/collections/sale, also under a market folder such as /en-ca/collections/sale), one per line. The platform is detected per store: Shopify (/products.json) or WooCommerce (Store API). Duplicates are removed. Accounts on the Apify free plan can process up to 10 stores per run.","prefill":["https://www.allbirds.com"],"editor":"stringList"},{"name":"maxProductsPerStore","title":"Max products per store","type":"integer","required":false,"description":"Rows per store (1–50,000): products, or variants with includeVariants. Each delivered row is one charged event.","default":1000,"prefill":10,"minimum":1,"maximum":50000},{"name":"collections","title":"Collections (Shopify)","type":"array","required":false,"description":"Shopify collection handles or URLs (sale, new-arrivals, https://store.com/collections/sale) to list instead of the whole catalog. Products in several collections are listed once.","editor":"stringList"},{"name":"includeVariants","title":"One row per variant (Shopify)","type":"boolean","required":false,"description":"Deliver one row per variant (size, colour…) with its own SKU, price, compare-at price, availability and image, instead of one row per product. WooCommerce stores are always listed per product.","default":false},{"name":"includeDescription","title":"Include product descriptions","type":"boolean","required":false,"description":"Add the plain-text product description to each product row (up to 20,000 characters).","default":false},{"name":"maxStores","title":"Max stores","type":"integer","required":false,"description":"Safety cap on the number of stores processed in this run.","default":1000,"minimum":1,"maximum":10000},{"name":"concurrency","title":"Concurrency","type":"integer","required":false,"description":"How many stores are processed in parallel (1–10). Pages of one store are read one at a time at up to 2 requests per second.","default":5,"minimum":1,"maximum":10},{"name":"itemTimeoutSecs","title":"Time limit per store (seconds)","type":"integer","required":false,"description":"Paging for one store stops cleanly shortly before this limit (60–3600).","default":600,"minimum":60,"maximum":3600},{"name":"includeRaw","title":"Include raw upstream response","type":"boolean","required":false,"description":"Attach the store's original product JSON to each row (variant rows: the variant's own JSON; larger output).","default":false}]},"exampleInput":{"storeUrls":["https://www.allbirds.com"],"maxProductsPerStore":10},"outputFields":[{"name":"input","type":"string | object","title":"Input","description":"The store entry as given."},{"name":"recordType","type":"string","title":"Record type","description":"product (one per delivered product, charged product) | variant (with includeVariants, one per variant, charged product) | summary (one per store; charged store when at least one row was delivered)","example":"product"},{"name":"position","type":"integer","title":"Position","description":"Product and variant rows: position within the store (1-based)."},{"name":"platform","type":"string | null","title":"Platform","description":"shopify | woocommerce"},{"name":"store","type":"string | null","title":"Store","description":"The store's host (after redirects, e.g. www.allbirds.com)."},{"name":"productId","type":"string","title":"Product ID"},{"name":"handle","type":"string | null","title":"Handle","description":"URL handle (Shopify) or slug (WooCommerce)."},{"name":"title","type":"string","title":"Title","description":"Product title (variant rows: the product's title)."},{"name":"url","type":"string | null","title":"Product URL","description":"Variant rows: the product URL with ?variant=<id> (Shopify)."},{"name":"vendor","type":"string | null","title":"Vendor","description":"Shopify vendor; WooCommerce brand when the store uses brands."},{"name":"productType","type":"string | null","title":"Product type","description":"Shopify product type; WooCommerce: the first category."},{"name":"tags","type":"array","title":"Tags"},{"name":"categories","type":"array","title":"Categories","description":"WooCommerce categories (Shopify products have none in the storefront JSON)."},{"name":"price","type":"number | null","title":"Price","description":"Product rows: the lowest variant price. Variant rows: the variant's price."},{"name":"priceMin","type":"number | null","title":"Lowest price"},{"name":"priceMax","type":"number | null","title":"Highest price"},{"name":"compareAtPrice","type":"number | null","title":"Compare-at price","description":"The regular price of discounted variants (highest of them); null when nothing is on sale."},{"name":"currency","type":"string | null","title":"Currency","description":"ISO 4217 code (Shopify: from the store's /meta.json)."},{"name":"onSale","type":"boolean","title":"On sale","description":"At least one variant is below its compare-at price."},{"name":"discountPct","type":"integer | null","title":"Discount %","description":"Largest discount among variants, in percent of the compare-at price."},{"name":"available","type":"boolean | null","title":"Available","description":"At least one variant can be bought (variant rows: this variant)."},{"name":"variantCount","type":"integer","title":"Variants"},{"name":"variants","type":"array","title":"Variants","description":"Product rows: up to 100 { variantId, title, sku, price, compareAtPrice, available, options, grams }."},{"name":"options","type":"array | object","title":"Options","description":"Product rows: [{ name, values }]. Variant rows: { optionName: value }."},{"name":"images","type":"array","title":"Images","description":"Up to 20 image URLs."},{"name":"imageCount","type":"integer","title":"Images (count)"},{"name":"createdAt","type":"string | null","title":"Created at","description":"ISO 8601 UTC (Shopify only)."},{"name":"updatedAt","type":"string | null","title":"Updated at","description":"ISO 8601 UTC (Shopify only)."},{"name":"publishedAt","type":"string | null","title":"Published at","description":"ISO 8601 UTC (Shopify only)."},{"name":"description","type":"string | null","title":"Description","description":"Plain text, product rows only, with includeDescription."},{"name":"variantId","type":"string","title":"Variant ID","description":"Variant rows only."},{"name":"variantTitle","type":"string | null","title":"Variant title","description":"Variant rows only (e.g. 9 / Black)."},{"name":"sku","type":"string | null","title":"SKU","description":"Variant rows only."},{"name":"grams","type":"number | null","title":"Weight (g)","description":"Variant rows only."},{"name":"image","type":"string | null","title":"Image","description":"Variant rows only: the variant's image, else the product's first image."},{"name":"storeName","type":"string | null","title":"Store name","description":"Summary records only (Shopify /meta.json)."},{"name":"productCount","type":"integer | null","title":"Products in store","description":"Summary records only: published products the store reports (Shopify /meta.json, WooCommerce X-WP-Total)."},{"name":"collections","type":"array","title":"Collections","description":"Summary records only: the Shopify collections listed."},{"name":"resultsDelivered","type":"integer","title":"Rows delivered","description":"Summary records only."},{"name":"duplicates","type":"integer","title":"Duplicates","description":"Summary records only: rows already delivered for another entry of this run (not charged)."},{"name":"stopReason","type":"string","title":"Stop reason","description":"Summary records only: end | limit | free_plan | budget | deadline | aborted | max_pages | empty_pages | error"},{"name":"status","type":"string","title":"Status","description":"ok | not_found | error | skipped_invalid | skipped_budget | skipped_free_plan | skipped_unmetered","example":"ok"},{"name":"charged","type":"boolean","title":"Charged","description":"Product and variant rows: charged product. Summary records: charged store when at least one row was delivered."},{"name":"chargedEvent","type":"string","title":"Charged event","description":"Pay-per-event event charged for this record (present only when charged)."},{"name":"chargedCount","type":"integer","title":"Events charged","description":"Events actually charged when the charge came back short of the requested count (present only then; a warning explains it)."},{"name":"source","type":"string","title":"Source","description":"Upstream data source (storefront)."},{"name":"fetchedAt","type":"string","title":"Fetched at","description":"ISO timestamp."},{"name":"error","type":"object","title":"Error","description":"{ code, message, provider?, status? } when status is not ok. Actor codes: invalid_input, unsupported_platform, store_password_protected, blocked, collection_not_found. Upstream codes: http_error (see status), timeout, network, dns_not_found, blocked_url, too_large, invalid_json, unexpected_type, invalid_response. Codes set by the runtime: budget_exhausted, free_plan_limit, unmetered, aborted, charge_failed, record_too_large, invalid_record, dataset_push_failed."},{"name":"warnings","type":"array","title":"Warnings","description":"Notes about this record, e.g. a free-plan cap, the budget, or a collection that was not found."}],"outputExample":{"input":"https://www.allbirds.com","recordType":"product","position":1,"platform":"shopify","store":"www.allbirds.com","productId":"7340901859408","handle":"womens-allbirds-flip-flop-dusty-pink","title":"Women's Allbirds Flip Flop - Dusty Pink","url":"https://www.allbirds.com/products/womens-allbirds-flip-flop-dusty-pink","vendor":"Allbirds","productType":"Shoes","tags":["allbirds::edition => limited","shoprunner"],"categories":[],"price":25,"priceMin":25,"priceMax":25,"compareAtPrice":50,"currency":"USD","onSale":true,"discountPct":50,"available":true,"variantCount":7,"variants":[{"variantId":"42146889039952","title":"5","sku":"A12513W050","price":25,"compareAtPrice":50,"available":false,"options":["5"],"grams":455},{"variantId":"42146889072720","title":"6","sku":"A12513W060","price":25,"compareAtPrice":50,"available":true,"options":["6"],"grams":455}],"options":[{"name":"Size","values":["5","6","7","8","9","10","11"]}],"images":["https://cdn.shopify.com/s/files/1/1104/4168/files/A12513_26Q2_Allbirds-Flip-Flop-Dusty-Pink_PDP_LEFT.png?v=1774646345"],"imageCount":6,"createdAt":"2026-03-27T21:03:50.000Z","updatedAt":"2026-10-14T21:56:35.000Z","publishedAt":"2026-09-25T23:58:13.000Z","status":"ok","charged":true,"chargedEvent":"product","source":"storefront","fetchedAt":"2026-10-14T12:00:00.000Z"},"faq":[{"question":"Which stores work?","answer":"Shopify stores that serve their public /products.json (almost all do) and WooCommerce stores with the Store API (WooCommerce 6.0 and later). The platform is detected per store. Password-protected stores, stores that block automated requests and other platforms return not_found or error and are not charged."},{"question":"Do I get stock quantities or sales numbers?","answer":"No. Storefronts publish whether a variant is available, not how many units are left, and never sales. available is true when at least one variant can be bought."},{"question":"How do I scrape only a collection?","answer":"Give the collection URL (https://store.com/collections/sale) as the store, or list collection handles in collections. Products in several collections are delivered once."}],"mcpExamplePrompt":"List the 20 newest products of allbirds.com with their prices, compare-at prices and whether they are in stock, then tell me which ones are on sale.","related":["shopify-store-analyzer","google-shopping-search","amazon-search"],"urls":{"site":"https://www.sfoln.com/actors/shopify-products-scraper/","siteJson":"https://www.sfoln.com/actors/shopify-products-scraper.json","siteMarkdown":"https://www.sfoln.com/actors/shopify-products-scraper.md","runSync":"https://api.apify.com/v2/actors/sfoln~shopify-products-scraper/run-sync-get-dataset-items","runAsync":"https://api.apify.com/v2/actors/sfoln~shopify-products-scraper/runs","mcp":"https://mcp.apify.com?tools=sfoln/shopify-products-scraper","requestAccess":"mailto:contact@sfoln.com?subject=Access%20request%3A%20Shopify%20Products%20Scraper%20%2B%20WooCommerce%20(sfoln%2Fshopify-products-scraper)&body=Please%20publish%20shopify-products-scraper.%20What%20we%20plan%20to%20use%20it%20for%3A"},"publisher":{"name":"SFOLN LLC","apifyUsername":"sfoln","url":"https://www.sfoln.com","apifyProfile":"https://apify.com/sfoln","email":"contact@sfoln.com"},"generatedAt":"2026-10-22T04:28:58.477Z"}