Shopify Store Scraper avatar

Shopify Store Scraper

Pricing

Pay per event

Go to Apify Store
Shopify Store Scraper

Shopify Store Scraper

Scrape every product from any Shopify store: titles, prices, compare-at prices, variants, images, vendor, product type, tags and stock. Paste store URLs and get clean JSON, CSV or Excel. $0.001 per product plus $0.005 per run start.

Pricing

Pay per event

Rating

0.0

(0)

Developer

NanoScrape

NanoScrape

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

9 days ago

Last modified

Share

Get the product catalog of any Shopify store as a clean table: names, prices, discounts, variants, images and store details. The actor reads the public /products.json endpoint that Shopify stores expose. Returns product details, descriptions, prices, discount info, variant data, images, and store metadata. No login required. Pay-per-result.

Features

  • Any Shopify store: works with myshopify.com subdomains and custom domains
  • Complete product data: title, description, vendor, type, tags, all images, options, price range, discount detection
  • Variant details: optional full variant data with SKU, individual prices, option values, and weight
  • Store metadata: name, domain, myshopify domain, description, currency, country, city and published product count from the public /meta.json
  • Automatic pagination: fetches all pages up to your limit (250 per page)
  • Automatic fallback: tries /collections/all/products.json if /products.json is blocked
  • Clear errors: a site that is not a Shopify store, or blocks access, is reported in the run status message
  • Deduplication: no duplicate product IDs per store

Use with AI Agents (MCP)

Connect this actor to any MCP-compatible AI client: Claude Desktop, Claude.ai, Cursor, VS Code, LangChain, LlamaIndex, or custom agents.

Apify MCP server URL:

https://mcp.apify.com?tools=santamaria-automations/shopify-store-scraper

Example prompt once connected:

"Use shopify-store-scraper to extract all products from allbirds.com and kith.com. Return a table with product name, vendor, price range, and availability."

Clients that support dynamic tool discovery (Claude.ai, VS Code) will receive the full input schema automatically via add-actor.

Output Data

Each record represents one product, with store metadata embedded:

Product Fields

FieldTypeDescription
product_idstringShopify product ID
product_titlestringProduct title
product_handlestringURL slug
product_typestring|nullMerchant-assigned product type
descriptionstring|nullProduct description (HTML stripped to plain text)
vendorstring|nullBrand or vendor name
tagsarrayMerchant-assigned tags
min_pricenumber|nullLowest variant price
max_pricenumber|nullHighest variant price
compare_at_price_minnumber|nullLowest original/compare-at price (indicates discount)
compare_at_price_maxnumber|nullHighest original/compare-at price
currencystring|nullStore default currency
availablebooleanTrue if any variant is purchasable
variant_countintegerNumber of variants (sizes, colors, etc.)
image_urlstring|nullPrimary product image URL
image_urlsarrayAll product image URLs
optionsarrayProduct options with values (e.g. {name: "Size", values: ["S","M","L"]})
variantsarray|nullFull variant details (only when includeVariants is enabled)
product_urlstringDirect link to the product page
product_created_atstring|nullISO 8601 creation timestamp
product_updated_atstring|nullISO 8601 last-updated timestamp
product_published_atstring|nullISO 8601 publish timestamp

Variant Fields (when includeVariants: true)

Each variant in the variants array contains:

FieldTypeDescription
idstringVariant ID
titlestringVariant title (e.g. "M / Black")
skustringStock Keeping Unit code
pricenumberVariant price
compare_at_pricenumber|nullOriginal price before discount
availablebooleanWhether this variant is in stock
option1string|nullFirst option value (e.g. "Medium")
option2string|nullSecond option value (e.g. "Black")
option3string|nullThird option value
gramsintegerWeight in grams

Store Fields (embedded per product)

FieldTypeDescription
store_urlstringStore URL as provided in input
store_namestring|nullStore display name
store_domainstring|nullPrimary domain
store_myshopify_domainstring|nullmyshopify.com subdomain
store_descriptionstring|nullStore description
store_currencystring|nullDefault currency code
store_countrystring|nullCountry code
store_citystring|nullStore city
store_provincestring|nullStore state or province
store_published_products_countinteger|nullNumber of published products the store reports
scraped_atstringISO 8601 scrape timestamp

Input

ParameterTypeDefaultDescription
storeUrlsarrayhttps://allbirds.com (demo)List of Shopify store URLs to scrape. Empty input scrapes the demo store allbirds.com, limited to 10 products
maxProductsPerStoreinteger250Maximum products per store (1-10,000). Ignored in the empty-input demo, which returns 10 products
includeVariantsbooleanfalseInclude full variant details (SKU, prices, options, weight) per product

Input Examples

Scrape a single store

{
"storeUrls": ["https://allbirds.com"],
"maxProductsPerStore": 500
}

Scrape multiple stores with variant details

{
"storeUrls": [
"https://www.allbirds.com",
"https://kith.com"
],
"maxProductsPerStore": 250,
"includeVariants": true
}

Scrape with myshopify.com domains

{
"storeUrls": ["https://weareallbirds.myshopify.com"],
"maxProductsPerStore": 100
}

Pricing

Pay per result. You are charged only for products that were saved to the dataset; a run with no results costs nothing.

EventPrice
actor-start (once per run, charged with the first saved product)$0.005
shopify-product-result (per product saved)$0.001

If you set a maximum total charge for the run, the actor stops saving products before the next charge would exceed it.

Notes

  • Fallback endpoint: If /products.json is blocked, the actor automatically tries /collections/all/products.json as a fallback.
  • Pagination: Shopify returns up to 250 products per page. The actor paginates automatically using the legacy ?page=N parameter, which works on all Shopify stores.
  • Custom domains: The actor follows HTTP redirects, so custom domains pointing to Shopify backends are fully supported.
  • Public endpoint only: /products.json and /meta.json are public Shopify endpoints. Some shops (for example headless storefronts) block them with HTTP 403 or 404; those stores are reported as skipped and the actor does not try to work around the block.
  • Store email and phone: not available from the public endpoints. Use a website contact extractor on the store domain for contact details.
  • Discount detection: Compare min_price with compare_at_price_min to identify products on sale.

Issues & Feature Requests

If something is not working or you're missing a field, please open an issue.