# Changelog of Shopify Scraper & Price Tracker - Products, Stock, Alerts (`akhil_rajesh/shopify-scraper`) Actor

- **URL**: https://apify.com/akhil_rajesh/shopify-scraper/changelog.md
- **Full Actor documentation**: https://apify.com/akhil_rajesh/shopify-scraper.md

## Changelog

### 0.2 (2026-11-13)

- Product details, on by default: every image with its size, hosted videos (the tallest MP4) and YouTube or Vimeo links, the description as HTML, SEO title and description, subscription plans, and the product's collections. With details a request reads 60 products, to stay under Shopify's query cost limit of 1,000 (60 measured at 913, 100 refused at 1,045); a refusal (HTTP 429 MAX_COMPLEXITY_EXCEEDED) is asked again with half as many products. **Product details** off reads 250 at a time, as before.
- A store's `/collections` link lists its collections, one charged `collection` row each.
- **Recommendations per product** (0 to 10): Shopify's own recommended products on each row.
- Other Shopify scrapers' input names read with their meanings: `startUrls`, `domains`, `maxRequestsPerCrawl` (0 = no limit), `maxProducts` (per store), `maxRecommendationsPerProduct`; stock-count and proxy options get a note instead of being listed as ignored.

### 0.1 (private beta, 2026-11-12)

- Products of any Shopify store, collection or product link through the store's Storefront API, as an identified bot (this Actor's User-Agent), one request a second per store.
- Sort by best selling, newest, price either way, title or store order; prices for a chosen country in its currency; every variant with price, compare-at price, stock, SKU, barcode, options and weight; one row per product or per variant.
- Filters: keywords, words to exclude, vendors, product types, tags, price range, in stock, on sale, published within N days. Product types, stock and price ranges are sent to Shopify with the request; keywords, vendors and tags stay in the Actor, since Shopify's search treats accents as different letters.
- Only changes: new products, price drops and rises past a minimum %, back in stock, sold out, newly on sale and removed, each once, with every price seen; a store read in part checks missing products by id.
- Alerts to Slack, Discord, Microsoft Teams or any JSON webhook.
- Stores that can't be read (a browser check in front, not a Shopify store, no such address, a missing collection or product type) get free notFound rows saying why. A browser check served as a normal page counts as the store refusing, not as "not a Shopify store".
- When one form of a store's domain has no Storefront API (HTTP 404), the other form, with or without `www.`, is asked once: Gymshark answers on gymshark.com and not on www.gymshark.com.
- Each push to the dataset gets a 45-second deadline of its own. A push Apify's API took without answering is checked against the dataset, and only the rows that didn't land are stored again; the landed ones are not charged. On the platform, one of 10 test runs had sat until its timeout with all its rows stored. The run summary's `storedUncharged` counts such rows.
- Optional Web Bot Auth request signing (off unless its key and directory are set).
