Shopify API Scraper avatar

Shopify API Scraper

Pricing

$1.00 / 1,000 variants

Go to Apify Store
Shopify API Scraper

Shopify API Scraper

API scraper to get product data from almost any Shopify store!

Pricing

$1.00 / 1,000 variants

Rating

0.0

(0)

Developer

R.L.

R.L.

Maintained by Community

Actor stats

3

Bookmarked

19

Total users

1

Monthly active users

6 days ago

Last modified

Categories

Share

Shopify API Scraper

Most eCommerce stores based on the Shopify platform expose a RESTful API to get product data, e.g. the sneaker boutique Social Status:

Other sneaker and apparel stores that work the same way:

Note, however, that in some cases this trick won't work with primary store domain. In that case one should inspect web site source with View Source feature of Chrome browser and look for *.myshopify.com subdomain being referenced in JavaScript code, e.g.:

Shopify.shop = "pelacase.myshopify.com";

Proxy — required in practice

Shopify rate-limits products.json per client IP, across stores: once the limiter trips, unrelated storefronts start answering HTTP 429 {"errors":[{"message":"You have sent too many requests..."}]}. Measured on one host, 9 of 18 unrelated stores returned 429 after a short burst, and the same request was 429 through Apify's datacenter pool while succeeding through residential:

direct HTTP 200 products=250
datacenter HTTP 429
residential HTTP 200 products=250

So the scraper takes a fresh exit IP for every request and defaults to Apify Proxy residential. A full 10-page catalogue crawl then completes with no 429s at all. You can switch pools or disable the proxy in the input, but expect throttling past a few pages without one.

Input example

{
"start_urls": [
{
"url": "https://socialstatuspgh.com/products.json"
}
],
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}

Output example

This scraper outputs one row per product variant, e.g.:

{
"product_id": 7985713840170,
"title": "THE WHITAKER GRP SUEDE CODA ECHO POINTS (CHAMBRAY BLUE/ALPINE SNOW/BUTTERCREAM)",
"description": "The Whitaker Grp introduces PUMA CODA a fresh take on an everyday classic. Crafted from soft premium suede, this low-top sneaker pairs a clean neutral upper with textured pink terry laces for an unexpected pop of color. Designed with subtle contrast stitching and a durable rubber sole, it delivers effortless comfort while making a statement with every step.\n\nDetails\n\n\nPremium suede upper\nPlush terry laces\nLow-top silhouette\nContrast stitching throughout\nCushioned footbed for all-day comfort\nDurable rubber outsole\nTrue to size\n\n\nSKU: 40874401",
"handle": "the-whitaker-grp-coda-echo-points-chambray-blue-alpine-snow-buttercream",
"web_url": "https://socialstatuspgh.com/products/the-whitaker-grp-coda-echo-points-chambray-blue-alpine-snow-buttercream",
"vendor": "PUMA CODA",
"product_type": "SNEAKERS",
"tags": [
"81026",
"CODA",
"FinalSale",
"fw26",
"maincolor-blue/cream",
"mens",
"new arrivals",
"nosale",
"puma",
"sneakers"
],
"images": [
"https://cdn.shopify.com/s/files/1/0262/2475/files/PUMACODABLU-1.jpg?v=1786378574",
"https://cdn.shopify.com/s/files/1/0262/2475/files/PUMACODABLU-2.jpg?v=1786378574",
"https://cdn.shopify.com/s/files/1/0262/2475/files/PUMACODABLU-3.jpg?v=1786378574",
"..."
],
"featured_image": null,
"variant_id": 44682235478058,
"variant_title": "4",
"option1": "4",
"option2": null,
"option3": null,
"variant_sku": "40874401",
"variant_available": false,
"price": "130.00",
"compare_at_price": null
}

When something goes wrong

The run status tells you whose problem it is, and the status message says what happened. A run never finishes green and empty without an explanation:

What happenedRun statusWhat you do
No usable products.json URL in the inputSucceeded, "Nothing to scrape: ..."fix the URL
Store is password-protected, or the endpoint is disabled (401/403/404, or an HTML page)Succeeded, "the catalogue is not public"nothing — the store does not serve it
Rate-limited after 4 attempts on rotating IPsSucceeded, "still failing after 4 attempts"enable/raise the residential proxy, retry later
Run timeout hit mid-catalogueSucceeded, "the run timeout was reached"raise the run timeout; rows already fetched are kept
The endpoint changed shape, or an unexpected bugFailedreport it — this one is ours

Partial results are always delivered: rows are flushed as pages complete, so a run that is throttled or cut short still hands over everything it fetched, and a page that fails does not discard the pages that succeeded. A run that hits any error also writes an ERROR_SUMMARY record to the key-value store with the counts and a sample of each.

Notes

  • Some of the heavily customised Shopify stores (e.g. Supreme) do not expose the API this scraper relies on.
  • It is recommended to disable timeout for larger scraping jobs that span across multiple stores or cover large amount of products.

Global marketplace toolkit

Part of the Global marketplace toolkit — product and pricing data across international B2B/B2C marketplaces and classifieds sites:

Did you find this useful?

⭐ Rate this actor on Apify! Your feedback helps other users find it and helps us keep improving it.