Shopify Brand & Assortment Shift Tracker
Pricing
from $20.00 / 1,000 assortment comparisons
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Security
Limited permissionsShare
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 anotableflag. - 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 hasstore,capturedAt(YYYY-MM-DD), optionallabel, optionalpartialFeed, andproductsin Shopifyproducts.jsonstyle (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.jsonfeed, only ifrobots.txtallows 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
vendorfield, 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.jsonfeeds 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(orhandlewhen 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.