Shopify Product Scraper & Inventory Tracker avatar

Shopify Product Scraper & Inventory Tracker

Pricing

from $4.00 / 1,000 results

Go to Apify Store
Shopify Product Scraper & Inventory Tracker

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

Randeep Dhillon

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

1

Monthly active users

3 days ago

Last modified

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_title and seo_description tags 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 typeExampleBehavior
Store domaingymshark.comAutomatically finds the sitemap and scrapes the entire catalog.
Collection URLhttps://www.gymshark.com/collections/mensScrapes all products belonging to that specific collection.
Product URLhttps://www.gymshark.com/products/arrive-t-shirtScrapes 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

FilterOptionsDefault
Max ProductsAny integer (-1 for unlimited)10
Target Collectionse.g. ["sale", "mens"][] (All)
Include Out of Stocktrue / falsetrue
Include Variantstrue / false (size, color, SKUs)true
Only On Saletrue / falsefalse
Min / Max PriceAny numeric valuenone

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

FieldDescription
store_domainThe source website e.g. www.gymshark.com
store_nameAuto-formatted brand name e.g. GYMSHARK
product_idShopify internal product ID
product_handleThe URL slug for the product
titleCleaned product title
vendorThe listed manufacturer or brand
product_typeInternal category hierarchy e.g. womens>apparel
tagsArray of internal product tags
seo_titleThe exact title used for Google Search ranking
seo_descriptionThe meta description used for SEO
published_atWhen the product was created/published

Pricing & Offers

FieldDescription
priceCurrent lowest price for the item
compare_at_priceOriginal price before discount (strike-through)
discount_percentageAutomatically calculated savings percentage e.g. 25
is_on_saletrue if compare_at_price is higher than price

Inventory & Variants

FieldDescription
availabletrue if at least one variant is in stock
total_inventoryExact aggregate stock count across all variants
variantsArray of size/color objects (includes SKU, variant-specific price, and inventory_quantity)
total_variantsTotal 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.