Shopify Store Scraper avatar

Shopify Store Scraper

Pricing

Pay per usage

Go to Apify Store
Shopify Store Scraper

Shopify Store Scraper

Scrape product data from any Shopify store using the public /products.json API. Extracts titles, prices, variants, images, tags, and more. Perfect for dropshipping research, competitor analysis, and price monitoring.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Ricardo Akiyoshi

Ricardo Akiyoshi

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

12 hours ago

Last modified

Categories

Share

Scrape product data from any Shopify store using the public /products.json API endpoint. No anti-bot measures, no proxies needed, extremely fast and reliable.

Why This Scraper?

All Shopify stores expose a public JSON API at /products.json. This actor leverages that endpoint to extract structured product data without needing to parse HTML or deal with anti-scraping measures. It just works.

Use Cases

  • Dropshipping Research — Find winning products by analyzing competitor stores. Compare prices, identify trending items, and discover new product opportunities across multiple stores.
  • Competitor Analysis — Monitor competitor product catalogs, pricing strategies, and inventory levels. Track when new products are added or prices change.
  • Price Monitoring — Set up scheduled runs to track price changes over time. Compare your pricing against competitors and identify market trends.
  • Product Research — Analyze product descriptions, tags, and categories to understand market positioning. Study how successful stores organize and present their products.
  • Market Intelligence — Aggregate data across multiple stores to identify trending products, popular price points, and market gaps.
  • Inventory Tracking — Monitor variant availability to understand demand patterns and stock levels.

Input

ParameterTypeDefaultDescription
storeUrlsarray(required)Shopify store URLs (e.g. https://gymshark.com)
maxProductsinteger50Max products per store. Set to 0 for unlimited.
includeVariantsbooleantrueInclude variant details (sizes, colors, SKUs, prices)

Output

Each product in the dataset includes:

FieldDescription
titleProduct name
handleURL-friendly slug
descriptionFull product description (HTML stripped)
vendorBrand or vendor name
productTypeProduct category
tagsArray of product tags
priceLowest variant price
compareAtPriceOriginal/compare price (if on sale)
currencyStore currency code
availableWhether any variant is in stock
totalInventoryTotal inventory count (if exposed)
variantsArray of variant objects (if enabled)
imagesArray of image URLs
optionsProduct options (Size, Color, etc.)
createdAtProduct creation date
updatedAtLast update date
publishedAtPublication date
storeUrlSource store URL
productUrlDirect link to product page
scrapedAtTimestamp of scrape

Example Output

{
"title": "Crest T-Shirt",
"handle": "crest-t-shirt",
"description": "A classic cotton t-shirt with embroidered logo.",
"vendor": "Gymshark",
"productType": "Tops",
"tags": ["men", "t-shirts", "cotton", "new-arrivals"],
"price": "30.00",
"compareAtPrice": "40.00",
"currency": "USD",
"available": true,
"variants": [
{
"title": "S / Black",
"price": "30.00",
"compareAtPrice": "40.00",
"sku": "GS-CREST-BLK-S",
"available": true,
"weight": 200,
"weightUnit": "g"
}
],
"images": [
"https://cdn.shopify.com/s/files/1/example/crest-tshirt.jpg"
],
"options": [
{ "name": "Size", "values": ["S", "M", "L", "XL"] },
{ "name": "Color", "values": ["Black", "White", "Navy"] }
],
"createdAt": "2026-01-15T10:00:00-05:00",
"updatedAt": "2026-02-28T14:30:00-05:00",
"storeUrl": "https://gymshark.com",
"productUrl": "https://gymshark.com/products/crest-t-shirt",
"scrapedAt": "2026-03-01T12:00:00.000Z"
}

How It Works

  1. Takes each store URL and normalizes it
  2. Fetches /products.json?limit=250&page=1 (Shopify's public API)
  3. Falls back to /collections/all/products.json if the primary endpoint fails
  4. Paginates through all pages until no more products or maxProducts is reached
  5. Extracts and normalizes all product data
  6. Pushes structured results to the Apify dataset

Tips

  • Unlimited scraping: Set maxProducts to 0 to scrape entire product catalogs
  • Reduce output size: Set includeVariants to false if you only need product-level data
  • Scheduled runs: Set up a schedule to monitor price changes and new products over time
  • Multiple stores: Add as many store URLs as you want — the actor processes them all in one run
  • Finding Shopify stores: Most stores built on Shopify have cdn.shopify.com in their page source

Limitations

  • Only works with Shopify stores (not WooCommerce, Magento, etc.)
  • Some stores may have disabled the /products.json endpoint (rare)
  • Product descriptions are returned as plain text (HTML tags stripped)
  • Shopify limits the API to 250 products per page

Cost

This actor is very lightweight. It makes simple JSON API calls — no browser rendering, no proxy rotation needed. A typical run scraping 1,000 products costs less than $0.01 in platform usage.

Integration — Python

from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("sovereigntaylor/shopify-store-scraper").call(run_input={
"searchTerm": "shopify store",
"maxResults": 50
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(f"{item.get('title', item.get('name', 'N/A'))}")

Integration — JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('sovereigntaylor/shopify-store-scraper').call({
searchTerm: 'shopify store',
maxResults: 50
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach(item => console.log(item.title || item.name || 'N/A'));