Shopify Product Scraper avatar

Shopify Product Scraper

Under maintenance

Pricing

from $0.80 / 1,000 products

Go to Apify Store
Shopify Product Scraper

Shopify Product Scraper

Under maintenance

Extract every product from any Shopify store: titles, prices, variants, stock, images, tags. Automatic whole-catalog pagination, four fallback extraction methods, honest failure reporting, no browser. Export to Excel, CSV, or JSON. Pay per result - you only pay for products delivered.

Pricing

from $0.80 / 1,000 products

Rating

0.0

(0)

Developer

electra bot

electra bot

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

6 days ago

Last modified

Share

Extract the full product catalog from almost any public Shopify store — titles, descriptions, vendors, product types, tags, images, and every variant (price, compare-at price, SKU, availability) — and download the results as Excel, CSV, or JSON.

No code required. Paste a store address, click Start, done.

Pay per result — you're only charged for products actually scraped, never for failed or empty runs.


What can I use it for?

  • Competitor & market research — pull a rival store's entire catalog with prices and stock status in minutes.
  • Price monitoring — schedule runs and track price / compare-at-price changes over time.
  • Dropshipping & sourcing — evaluate a supplier's assortment, variants, and availability before committing.
  • Catalog migration & syncing — export a complete, structured product feed from any Shopify storefront.
  • Feed building — generate product feeds for ads, affiliate sites, or search indexes.

Input

FieldRequiredDescription
Store URL or handleAny of: a myshopify handle (bajaao), a custom domain (tentree.com), or a full URL (https://www.allbirds.com)
Max itemsMaximum products to collect. Leave empty (or 0) to scrape the entire store catalog. Set e.g. 500 to stop early.
Starting page (advanced)Override the starting catalog page. Leave at 1.
Proxy configurationOff by default — most stores don't need it. Enable Apify Proxy (datacenter is enough) only if a store rate-limits you; residential only as a last resort.

Output

One dataset record per product. Example (shortened):

{
"id": 4808578760765,
"title": "Men's Tree Runners",
"handle": "mens-tree-runners",
"description": "Light, breathable everyday sneakers made from eucalyptus tree fiber.",
"vendor": "Allbirds",
"productType": "Shoes",
"tags": ["men", "sneakers", "tree"],
"publishedAt": "2024-03-12T09:00:01-07:00",
"options": [{ "name": "Size", "position": 1, "values": ["8", "9", "10"] }],
"images": [
{ "src": "https://cdn.shopify.com/s/files/1/.../TR1MBBW.png",
"width": 1600, "height": 1600, "position": 1, "variantIds": [] }
],
"variants": [
{
"id": 32924009496637,
"title": "8",
"sku": "TR1MBBW080",
"price": "98.00",
"compareAtPrice": null,
"available": true,
"option1": "8", "option2": null, "option3": null,
"grams": 340,
"barcode": null,
"requiresShipping": true,
"taxable": true,
"position": 1,
"featuredImage": null
}
],
"url": "https://allbirds.com/products/mens-tree-runners",
"createdAt": "2024-03-10T11:02:44-07:00",
"updatedAt": "2026-07-01T02:14:09-07:00",
"source": "products.json"
}

Product-level fields

FieldDescription
titleProduct name
handleShopify URL slug
descriptionPlain-text description (HTML stripped, entities decoded)
vendorBrand / vendor
productTypeShopify product type
tagsList of tag strings
publishedAtISO timestamp of when the product was published
optionsProduct option definitions, e.g. [{"name":"Size","position":1,"values":["S","M","L"]}]
imagesList of image objects: {"src","width","height","position","variantIds"}
variantsList of variant objects (see below)
urlDirect link to the product page
createdAt / updatedAtTimestamps (when available)
sourceWhich extraction method found the product

Variant-level fields (inside variants)

FieldDescription
idVariant ID
titleVariant title
skuStock-keeping unit
priceVariant price (string)
compareAtPriceCompare-at / original price (string, or null)
availableWhether the variant is in stock
option1 / option2 / option3Structured option values (e.g. "Red", "Large")
gramsWeight in grams
barcodeBarcode / GTIN (null when the store doesn't publish it)
requiresShippingWhether shipping is required
taxableWhether the variant is taxable
positionDisplay position within the product
featuredImageURL of the variant's featured image (or null)

Why this scraper is reliable

Four extraction methods, tried in order — it keeps working even when a store has one method locked down:

  1. products.json — Shopify's public product feed (fastest, most complete).
  2. Storefront GraphQL — the store's own public storefront API.
  3. Collections + product pages — reads the catalog listing and each product page.
  4. Embedded data — reads product data embedded directly in the page HTML.

Honest run statuses — you always know what you got:

  • Succeeded — the full requested catalog was scraped.
  • ⚠️ PARTIAL: … status message — the store blocked or rate-limited the run partway; everything scraped up to that point is in the dataset, and the message says so. A truncated catalog is never silently passed off as a complete one.
  • Failed — no products could be extracted; the run is clearly marked failed with the reason. It will never quietly finish "successful" with an empty dataset.

Data you don't lose:

  • Products are saved incrementally as each page is fetched — a timeout or abort never loses what was already collected.
  • Long whole-store runs are checkpointed: if Apify migrates or restarts the run, it resumes from the last completed page instead of starting over (so you don't pay twice).
  • Rate limits (HTTP 429) are retried automatically with polite backoff before the scraper ever gives up on a method.

Fast and cheap by design: no headless browser — pure HTTP with a realistic browser fingerprint. Typical speed is hundreds of products per second on the primary method, which keeps compute usage (and your cost) low.


Tips & limits

  • Works best on standard, public Shopify storefronts. Password-protected or heavily customized stores may return fewer (or no) products — in that case the run tells you instead of pretending.
  • Each internal page fetches up to 250 products (Shopify's maximum). Pagination is automatic; just set maxItems or leave it empty for the full catalog.
  • products.json only exposes published, publicly visible products — draft or hidden products are not (and cannot be) included.
  • Be respectful: only scrape publicly available data and follow the target site's terms.

FAQ

Do I need a proxy? Usually no — Shopify's product feed is public and this scraper is polite by default. If a specific store rate-limits you, enable Apify Proxy (datacenter) in the input.

How do I scrape an entire store? Leave Max items empty. The actor paginates through the whole catalog automatically.

Can it scrape prices in my currency? Prices are returned exactly as the store publishes them in its primary currency.

Can it access wholesale, draft, or password-protected products? No. It only reads what the store makes publicly available — nothing behind a login.

Is scraping public product data legal? This actor only accesses publicly available information. You are responsible for ensuring your use complies with applicable laws and the target website's Terms of Service.

Something didn't work — what now? Check the run's status message first (it always states the reason). Feel free to open an issue on the actor's Issues tab with the store URL and run ID — reliability reports are handled with priority.


Disclaimer

This is an unofficial tool. It is not affiliated with, endorsed by, sponsored by, or in any way officially connected to Shopify Inc. or any of the stores it can be pointed at. "Shopify" and all related names, marks, and logos are trademarks of their respective owners and are used here for descriptive purposes only.

This actor only accesses publicly available information. You are responsible for ensuring your use complies with applicable laws, the target website's Terms of Service, and any applicable robots and rate-limiting rules. Use it ethically and at your own risk.