Shopify Product Scraper & Inventory Tracker
Pricing
from $4.00 / 1,000 results
Shopify Product Scraper & Inventory Tracker
Scrape complete product catalogs from any Shopify or headless Next.js store. Extract real-time prices, precise backend stock/inventory counts, variant details, discounts, categories, and SEO metadata. Perfect for dropshippers, price monitoring, and deep competitor research.
Pricing
from $4.00 / 1,000 results
Rating
5.0
(1)
Developer
Randeep Dhillon
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Extract complete product catalogs, real-time prices, exact backend stock levels, variants, and discounts from any standard Shopify or headless Next.js store. Search by store domain, specific collection, or paste individual product URLs directly. Bypasses advanced Cloudflare bot protection natively. No login or authentication required.
⚡ The ultimate Shopify intelligence tool on Apify — Unlike basic scrapers, this actor uses a hybrid-extraction engine (SEO Meta + dataLayer + Next.js state) to bypass anti-bot walls and capture exact hidden inventory counts, discount percentages, and category tags. Ready to drop into Google Sheets, Airtable, or your competitive pricing dashboard.
What you can do with this scraper
- Inventory monitoring — track exact stock quantities (
inventory_quantity) across competitor variants to estimate their sales volume and revenue. - Dropshipping research — find discounted, in-stock products with high margins.
- Price monitoring — track competitor pricing strategies, sales, and discounts (
is_on_sale,compare_at_price) in real-time. - Competitor research — map out an entire brand's product catalog, including their internal categories (
product_type) and organizational tags. - SEO analysis — extract canonical
seo_titleandseo_descriptiontags to see how competitors are ranking on Google.
How to use
Step 1 — Add your target URLs
The Shopify Store URLs field accepts multiple input formats (you can mix them in one run):
| Input type | Example | Behavior |
|---|---|---|
| Store domain | gymshark.com | Automatically finds the sitemap and scrapes the entire catalog. |
| Collection URL | https://www.gymshark.com/collections/mens | Scrapes all products belonging to that specific collection. |
| Product URL | https://www.gymshark.com/products/arrive-t-shirt | Scrapes just that individual product. |
You can add multiple URLs at once — the actor queues and scrapes all of them in a single run.
Step 2 — Set your filters
| Filter | Options | Default |
|---|---|---|
| Max Products | Any integer (-1 for unlimited) | 10 |
| Target Collections | e.g. ["sale", "mens"] | [] (All) |
| Include Out of Stock | true / false | true |
| Include Variants | true / false (size, color, SKUs) | true |
| Only On Sale | true / false | false |
| Min / Max Price | Any numeric value | none |
Step 3 — Run and export
Click Start and wait for the run to complete. Download your results as JSON, CSV, or Excel — ready to use in your favorite data tools or automated workflows.
Sample output
{"store_domain": "[www.gymshark.com](https://www.gymshark.com)","store_name": "GYMSHARK","product_id": "6535207289034","product_handle": "gymshark-vital-seamless-shorts-black-marl-logo","product_url": "[https://www.gymshark.com/products/gymshark-vital-seamless-shorts-black-marl-logo](https://www.gymshark.com/products/gymshark-vital-seamless-shorts-black-marl-logo)","title": "vital seamless shorts","vendor": "Gymshark","product_type": "womens>apparel>shorts>tight","tags": ["womens", "apparel", "shorts", "tight"],"collections": [],"description_text": "Shop the Vital Seamless Shorts in black marl. With next day delivery and free returns, shop online today.","price": 40,"compare_at_price": null,"discount_percentage": null,"is_on_sale": false,"available": true,"total_inventory": 28006,"featured_image_url": "[https://cdn.shopify.com/s/files/1/0156/6146/files/images-VitalSeamless2_0ShortsBlackMarlB1A4J.jpg](https://cdn.shopify.com/s/files/1/0156/6146/files/images-VitalSeamless2_0ShortsBlackMarlB1A4J.jpg)","variants": [{"variant_id": "39245957562570","title": "xs","price": 40,"compare_at_price": null,"discount_percentage": null,"available": true,"inventory_quantity": 7079,"sku": "B1A4J-BBF3-XS","is_on_sale": false},{"variant_id": "39245957660874","title": "l","price": 40,"compare_at_price": null,"discount_percentage": null,"available": false,"inventory_quantity": 0,"sku": "B1A4J-BBF3-L","is_on_sale": false}],"total_variants": 6,"seo_title": "Gymshark Vital Seamless Shorts - Black Marl | Gymshark","seo_description": "Shop the Vital Seamless Shorts in black marl. With next day delivery and free returns, shop online today.","published_at": "2023-08-15T10:30:00Z","scraped_at": "2026-05-12T08:51:25.178Z"}
Output fields reference
Product Identity & SEO
| Field | Description |
|---|---|
store_domain | The source website e.g. www.gymshark.com |
store_name | Auto-formatted brand name e.g. GYMSHARK |
product_id | Shopify internal product ID |
product_handle | The URL slug for the product |
title | Cleaned product title |
vendor | The listed manufacturer or brand |
product_type | Internal category hierarchy e.g. womens>apparel |
tags | Array of internal product tags |
seo_title | The exact title used for Google Search ranking |
seo_description | The meta description used for SEO |
published_at | When the product was created/published |
Pricing & Offers
| Field | Description |
|---|---|
price | Current lowest price for the item |
compare_at_price | Original price before discount (strike-through) |
discount_percentage | Automatically calculated savings percentage e.g. 25 |
is_on_sale | true if compare_at_price is higher than price |
Inventory & Variants
| Field | Description |
|---|---|
available | true if at least one variant is in stock |
total_inventory | Exact aggregate stock count across all variants |
variants | Array of size/color objects (includes SKU, variant-specific price, and inventory_quantity) |
total_variants | Total number of variants for the product |
Input Schema Reference
{"shopifyStoreUrls": ["gymshark.com", "https://us.kith.com/collections/mens"],"maxProducts": 50,"collections": ["sale", "new-arrivals"],"includeOutOfStock": false,"includeVariants": true,"onlyOnSale": true,"minPrice": 20,"maxPrice": 150}
Who Uses This
- Dropshippers hunting for profitable, heavily discounted products that are guaranteed to be in stock.
- E-commerce brand owners tracking competitor catalog updates, pricing changes, and restocks.
- Retail analysts monitoring deep inventory metrics to estimate a brand's sales volume.
- SEO agencies auditing competitor meta titles, descriptions, and tagging strategies at scale.
Pricing
This actor uses Pay-Per-Result pricing — you only pay for the products you successfully scrape.
$4.00 per 1,000 products
Why this price? Unlike cheap scrapers that only read basic HTML, this actor executes complex JavaScript to pull hidden backend inventory quantities and utilizes proxy rotation with sitemap tracking to bypass enterprise Cloudflare blocks.
Tips for Best Results
Use Root Domains for bulk scraping
Inputting just brand.com tells the scraper to automatically locate the store's XML sitemap, which bypasses WAF (Web Application Firewall) blocks that usually stop catalog scraping.
Leverage the collections filter
If a store has 10,000 items and you only want shoes, don't scrape the whole site. Add "shoes" to the Target Collections filter to save money and time.
Track exact inventory_quantity
If you scrape a competitor's product every day at midnight, the difference in inventory_quantity between runs equals their exact daily sales volume for that item.
Handling strict blocks If a massive enterprise store (like Gymshark or FashionNova) is returning errors, ensure you have Residential Proxies enabled in your Apify proxy configuration to mimic real user traffic.
Limitations
Custom Headless limitations
99% of Shopify Plus / Next.js stores expose inventory via the dataLayer or __NEXT_DATA__. If a store has heavily modified their frontend to strip this out entirely, the scraper will fall back to SEO data, meaning inventory_quantity may return null (though price and title will still succeed).
Non-Shopify stores This actor is strictly tuned for Shopify architecture. Attempting to scrape WooCommerce or Magento links will result in empty outputs.