Shopify Products Scraper avatar

Shopify Products Scraper

Under maintenance

Pricing

from $14.10 / 1,000 completed store watchlist checks

Go to Apify Store
Shopify Products Scraper

Shopify Products Scraper

Under maintenance

Scrape public Shopify products, prices, variants, SKUs and availability. Export catalogs and monitor price and stock changes across repeat runs.

Pricing

from $14.10 / 1,000 completed store watchlist checks

Rating

0.0

(0)

Developer

Inus Grobler

Inus Grobler

Maintained by Community

Actor stats

1

Bookmarked

10

Total users

0

Monthly active users

a day ago

Last modified

Features

Limited permissions

Share

Export products from public Shopify stores: names, source URLs, prices, currency, variants, SKUs, images and availability where published. Download JSON, CSV or Excel, or compare product prices and stock across repeat runs.

Quick start

The Console example enables native Apify residential proxy. Proxy traffic has an additional Apify charge; inspect the clearly labeled proxy setting under Proxy settings before starting. API inputs that omit proxy configuration retain direct access.

Enter a Shopify store URL and choose Product list. Set the maximum products per store, then Start. The example retrieves five live products:

{"storeUrls":["https://colourpop.com"],"analysisType":"productCatalog","maxProductsPerStore":5,"proxyConfiguration":{"useApifyProxy":true,"apifyProxyGroups":["RESIDENTIAL"],"apifyProxyCountry":"US"}}

Open the Product rows dataset view for flat product columns. Product records also retain the nested product and variant data. Summary and warning records may appear in the default dataset; filter by recordType: product when processing exports.

What you can collect

  • Product title, URL, vendor, type, descriptions, tags and images where published.
  • Published variant IDs, SKU, options, prices, compare-at prices and availability.
  • Store profiles and visible technology signals using the existing store/agency workflows.
  • Repeat catalog comparisons and selected-product price and stock watchlists.

Use catalogs for merchandising research, price comparisons and product-feed workflows. Monitoring supports recurring competitor checks. Store profiles support agency research; opportunity scores are heuristics, not verified sales or purchase intent.

Inputs

The three primary controls are Store or product URLs, What do you want to do?, and Max products per store. Monitoring history and baseline handling are automatic, with no advanced monitoring section in the form. Proxy settings have their own clearly labeled section. Existing API inputs remain supported. The optional native proxy control is the ninth total input; it does not require external credentials. Omitting analysisType through the API retains the legacy store-profile default; the Console example explicitly selects product export.

Product feeds are read in pages and output is deduplicated. If the public feed is unavailable, the Actor tries sitemap/product pages. The result limit is a maximum, not a guarantee: smaller catalogs, blocking, missing metadata and spending limits can reduce results. A limit of zero requests no product sampling; it does not mean unlimited.

Output

Product rows include productTitle, productUrl, currency, minVariantPrice, maxVariantPrice, available, sourceUrl, sourceType, scrapedAt and the top-level variants array.

Availability is true for an observed available offer, false when all observed offers explicitly indicate unavailable, and null when unknown. Availability does not establish inventory quantity or every variant's status. Missing source fields remain null. Zero prices are retained. Aggregate offers do not establish individual variant identities.

Store quality.coverage distinguishes the requested limit, extracted products, confirmed source exhaustion and a reached limit. completenessScore measures field completeness, not the percentage of the store collected. Catalog samples are not verified best-seller rankings. Summary-only output does not establish successful product collection.

Example product collected during the12November2026 local verification (live values change):

{
"recordType": "product",
"productTitle": "Everyday Edit",
"productUrl": "https://colourpop.com/products/everyday-edit",
"currency": "USD",
"minVariantPrice": 15,
"maxVariantPrice": 15,
"available": true,
"sourceUrl": "https://colourpop.com/products.json",
"sourceType": "productsJson",
"scrapedAt": "2026-11-12T18:05:17.052Z"
}

Monitoring

Choose Monitor store catalog and paste store URLs, or choose Monitor product prices & stock and paste product-page URLs into the same main URL field. Selected-product monitoring detects the stores automatically; no separate store list is needed.

{"analysisType":"productWatchlist","storeUrls":["https://colourpop.com/products/bangin-brunette-pencil"],"proxyConfiguration":{"useApifyProxy":true,"apifyProxyGroups":["RESIDENTIAL"],"apifyProxyCountry":"US"}}

The first run creates a baseline. Run the same input again to detect changes. All price and stock changes are watched by default, and existing history is reused. Running once does not create a schedule; configure an Apify schedule separately if needed.

History is reused automatically and the baseline is not reset. Advanced API callers can use a different history name for independent comparisons or explicitly request a baseline reset. Run the same watchlist serially. Existing stateKey, resetState, minPriceChangePercent, watchChangeTypes and productUrls API fields still work. Explicit productUrls takes precedence over the main URL field, including validation of an explicitly empty list. Defaults remain the existing history key default, no reset, a zero price threshold and both price/availability changes.

Selected watchlists accept up to ten product URLs per store. Unknown stock and failed fetches are not changes or removals. Currency changes establish a new context. Some themes lack usable structured offers; inspect WATCHLIST_SUMMARY for incomplete checks. CHANGES.csv contains detected changes. Do not reset a pending delivery without inspecting it.

Pricing

Rates are taken from the pricing snapshot at run start. Check the Pricing tab for the active tariff and any future notice:

Workflow eventCurrent rate
Product catalog record$0.0015 per product
Store profile record$0.002 per store
Legacy monitoring change record$0.001 per change
Completed selected-product store check, up to ten selected products$0.0141 per completed store
Run start$0.00005 per allocated GB, minimum one unit

A completed selected-product store check replaces product/store/change events for that check, including when nothing changed. Incomplete stores receive no completed-store event. Other workflows retain their applicable events. Set a spending limit sufficient for a complete billable unit; a smaller limit can leave partial output.

For example, ten product export rows at 1GB cost $0.01505 under these event rates; one completed selected-product store check costs $0.01415. These are event-price examples, not total job-cost estimates. Enabled proxy traffic is additional. No price reduction is active merely because one is under evaluation.

Python API

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("thescrapelab/shopify-store-opportunity-intelligence").call(
run_input={"storeUrls": ["https://colourpop.com"],
"analysisType": "productCatalog", "maxProductsPerStore": 10}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
if item.get("recordType") == "product":
print(item["productTitle"], item["minVariantPrice"], item["available"])

Limitations and troubleshooting

Only publicly accessible storefront data is collected. Login, Admin, checkout and private inventory are unsupported. A storefront can block requests or disable feeds. Retry transient failures with a smaller scope; inspect warnings and coverage rather than treating an incomplete result as a complete catalog. Browser fallback remains optional, and any paid proxy use requires explicit configuration. No external API subscription is required. Explicit API proxy configuration uses the same object shown in the quick-start JSON.