Shopify Brand & Assortment Shift Tracker avatar

Shopify Brand & Assortment Shift Tracker

Pricing

from $20.00 / 1,000 assortment comparisons

Go to Apify Store
Shopify Brand & Assortment Shift Tracker

Shopify Brand & Assortment Shift Tracker

Compare dated Shopify catalog snapshots to see brand, category and product assortment changes, with partial-feed caveats.

Pricing

from $20.00 / 1,000 assortment comparisons

Rating

0.0

(0)

Developer

Practical AI Lab

Practical AI Lab

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Security

Limited permissions

Share

Compare two or more dated snapshots of a Shopify product catalog and see how the assortment changed: which brands (vendors) and categories (product types) gained or lost share, which are new or gone, and which products were added, removed, repriced or changed availability. Every result carries explicit limitations so small or partial feeds are not over-interpreted.

What you get

For each consecutive pair of snapshots of a store, the dataset contains:

  • summary – product counts, added/removed products, price and availability changes, new/exited brands and categories, top gaining/losing brands, key overlap ratio, partial-feed flag and a list of plain-language limitations.
  • brand and category rows – counts and share of catalog before/after, share change in percentage points, median lowest-variant price before/after, status (new, exited, growing, shrinking, stable) and a notable flag.
  • product_change rows – added, removed, price_changed, availability_changed, brand_changed, category_changed.

Input

Copy the prefilled example, or supply your own:

  • snapshots – each item has store, capturedAt (YYYY-MM-DD), optional label, optional partialFeed, and products in Shopify products.json style (id, handle, title, vendor, product_type, variants[].price, variants[].available). At least two dated snapshots per store are required; the maximum is 20 snapshots and 20,000 products each.
  • liveStoreUrls (optional, max 5) – public HTTPS Shopify store URLs. The Actor reads only the public /products.json feed, only if robots.txt allows it, with a page cap and a delay between requests. The snapshot is saved in a named key-value store (pal-brand-assortment-snapshots) and compared with the one from your previous run. The first run only saves a baseline.
  • maxPagesPerStore, minShareShiftPoints, maxProductChanges, requestDelaySeconds – bounds and thresholds.

Safety

Live fetching uses HTTPS only, rejects credentials, IP literals, non-standard ports and local-style host names, checks that the host resolves only to public addresses, and does not follow redirects. Responses are size-limited. No proxies, logins or paid services are used. Input snapshots are processed as provided and nothing else is contacted.

Pricing

The code defines one pay-per-event event name, assortment-comparison, charged once per completed snapshot-pair comparison after its results are written. Invalid input, fetch errors, robots refusals and baseline-only runs are not charged. No payable plan is configured in this repository.

Limitations (please read)

  • Catalog snapshots are listings, not sales, demand or stock quantities. A product appearing or vanishing may be a listing or feed change, not a commercial event.
  • Brand is the vendor field, which can be a store name or reseller; blank vendors are grouped as (unbranded).
  • Price is the lowest variant price in the store's feed currency; no currency conversion is done. Availability is true if any variant is available.
  • Shares are based on product counts, not revenue. With fewer than 30 products, a single product can move a share by several points; results are labeled as small-sample.
  • Public products.json feeds may be disabled, capped or incomplete. When the page cap is reached the result is flagged partial and missing products must not be read as removals.
  • Products are matched by id (or handle when no id exists). Re-created products with new ids appear as one removal plus one addition.
  • Live store hostnames are checked before the request, but a DNS change between the check and the connection is not fully excluded.
  • Dates in live mode are the UTC date of the run.

Local tests

Tests are offline: python -m unittest discover -s tests from the project folder.