Shopify Competitor Sale & New Arrival Insights avatar

Shopify Competitor Sale & New Arrival Insights

Pricing

from $2.00 / 1,000 intelligence products

Go to Apify Store
Shopify Competitor Sale & New Arrival Insights

Shopify Competitor Sale & New Arrival Insights

Track public Shopify stores for competitor sales and new arrivals. Detect variant-level discounts, recent product launches, out-of-stock signals, sale rates, top discounts, and store-level comparisons. Export structured data for pricing research, dashboards, APIs, and automation.

Pricing

from $2.00 / 1,000 intelligence products

Rating

0.0

(0)

Developer

Johnn Mottin

Johnn Mottin

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

Track Shopify competitor discounts and new product launches

Turn public Shopify product catalogs into competitor pricing and assortment intelligence.

This Actor scans one or more Shopify stores and returns only products that carry a useful signal:

a product is currently on sale at or above your discount threshold;

a product was published within your new-arrival window.

Instead of paying for a complete catalog copy, you receive focused intelligence records plus free store-level and portfolio summaries.

No Shopify Admin API. No account. No login. No browser automation.

Key features

Shopify sale tracker

Competitor discount monitoring

Variant-level discount calculations

Shopify new arrivals detection

Multi-store competitor research

Minimum discount threshold

Configurable new-arrival window

Optional product-type filtering

Optional out-of-stock filtering

Up to 50 stores per run

Up to 25,000 catalog products scanned per store

Store-level sale-rate and discount summaries

Portfolio comparison across monitored stores

Top discounts, vendors, and product types

Structured JSON-ready output

Apify API, Tasks, Schedules, and integrations

Pay Per Event

Free store summaries and run summary

No charge for plain catalog rows that carry no intelligence

Unofficial community Actor. Not affiliated with, sponsored by, or endorsed by Shopify Inc. or by the stores being monitored. The Actor reads public storefront catalog data exposed by supported Shopify stores.

What this Actor is for

This Actor is designed for users who do not need another full Shopify catalog scraper.

Its purpose is to answer questions such as:

Which competitor products are discounted right now?

How deep are the discounts?

Which variants are actually on sale?

Which products were launched recently?

Which monitored store has the highest sale rate?

Which store is launching more new products?

Which stores currently show more out-of-stock products?

What are the deepest discounts across a competitor set?

The Actor turns a public Shopify catalog into a smaller set of actionable product signals.

Typical use cases include:

competitor pricing research;

promotion monitoring;

assortment research;

new-product discovery;

merchandising intelligence;

e-commerce market research;

pricing dashboards;

agency reporting;

scheduled competitor snapshots;

n8n, Make, Zapier, webhook, API, and database workflows.

Important: this is instant intelligence, not historical change tracking

This Actor is a snapshot intelligence tool.

It does not need a baseline run.

The first run can immediately identify:

products currently on sale recently published products store-level discount metrics store-level new-arrival metrics out-of-stock signals

It does not compare today's product price with yesterday's product price.

If your workflow requires persistent change events such as:

price changed stock changed product added product removed

use the companion:

Shopify Price & Catalog Monitor

Use this Actor for the current competitive picture.

Use the companion monitor for cross-run change detection.

Important: sale detection depends on compare_at_price

Shopify product variants can expose:

price compare_at_price

A discount is measurable when:

compare_at_price > price

The Actor calculates:

discountPct = (compare_at_price - price) / compare_at_price × 100

A product is flagged:

onSale: true

when at least one variant meets your:

minDiscountPct

threshold.

Honest limitation

Some Shopify stores run promotions through:

discount codes;

automatic checkout discounts;

collection-level campaign mechanics;

customer-specific pricing;

other mechanisms not reflected in compare_at_price.

Those promotions cannot be reliably detected from the public catalog endpoint used by this Actor.

A store can therefore be running a promotion while showing:

onSaleCount: 0

if its public variant data does not expose a usable compare-at price.

The Actor does not invent a discount when the source does not expose one.

Who it's for

E-commerce and pricing teams

Use the Actor to compare competitor promotion intensity.

Examples:

percentage of scanned products on sale;

deepest active discounts;

median detectable discount;

new arrivals;

out-of-stock rate.

Brands and merchants

Monitor a competitive set before:

changing prices;

launching a promotion;

planning a seasonal sale;

launching a new collection;

reviewing assortment strategy.

Agencies

Run the same structured competitor scan across multiple client accounts.

The output can feed:

client dashboards;

recurring reports;

Google Sheets;

internal databases;

automated summaries.

Market researchers

Study public catalog behavior across Shopify stores without manually opening hundreds or thousands of product pages.

Automation builders

Connect structured results to:

n8n;

Make;

Zapier;

webhooks;

databases;

Slack;

Google Sheets;

BI tools;

internal applications;

AI agents.

How it works

For each store, the Actor:

normalizes the supplied domain;

reads the store's public Shopify catalog endpoint;

paginates through products up to maxProductsPerStore;

inspects product variants;

calculates detectable discount percentages;

identifies recent products from published_at;

applies your filters;

writes billable PRODUCT_INTEL records only when real intelligence is present;

writes a free STORE_INTEL_SUMMARY;

writes a free RUN_SUMMARY at the end of the run.

Catalog pages are processed serially per store with controlled pacing and retry behavior.

Input

Example

{
"stores": [
"allbirds.com",
"deathwishcoffee.com"
],
"minDiscountPct": 10,
"newArrivalWindowDays": 30,
"includeOutOfStock": true,
"productTypeFilter": [],
"maxProductsPerStore": 5000,
"maxResults": 500,
"maxRuntimeMs": 300000
}

Input fields

FieldDefaultDescription
storesrequiredShopify store domains such as allbirds.com. Maximum 50 entries per run.
minDiscountPct5Minimum variant discount required for a product to count as on sale. Range: 1–90.
newArrivalWindowDays30A product published within this window counts as a new arrival. Range: 1–365 days.
includeOutOfStocktrueWhen false, fully sold-out products are excluded from PRODUCT_INTEL.
productTypeFilter[]Optional case-insensitive Shopify product_type filter.
maxProductsPerStore5000Maximum catalog products scanned per store. Range: 250–25,000.
maxResults500Maximum billable intelligence records delivered in one run. Range: 1–5,000.
maxRuntimeMs300000Hard runtime cap in milliseconds. Range: 10,000–3,600,000.
debugfalseEnables additional diagnostic logging.

Store input format

You can provide:

allbirds.com

or:

https://allbirds.com

The Actor normalizes the value to a bare domain.

Duplicate domains are removed.

Invalid values are rejected or reported during input validation.

Example: stricter sale intelligence

{
"stores": [
"allbirds.com",
"colourpop.com"
],
"minDiscountPct": 25,
"newArrivalWindowDays": 14,
"maxProductsPerStore": 5000,
"maxResults": 1000
}

This configuration focuses the sale signal on discounts of at least:

25%

while still returning products published within the last:

14 days

Example: one product type

{
"stores": [
"example-store.com"
],
"productTypeFilter": [
"shoes"
],
"minDiscountPct": 10,
"newArrivalWindowDays": 30
}

The filter is case-insensitive.

Output

The dataset can contain three record types:

PRODUCT_INTEL STORE_INTEL_SUMMARY RUN_SUMMARY

PRODUCT_INTEL

A billable product intelligence record.

It is written when the product is:

on sale at or above minDiscountPct

and/or:

a new arrival inside newArrivalWindowDays

Plain catalog products with no intelligence signal are not written.

STORE_INTEL_SUMMARY

A free per-store summary.

It can include:

products scanned;

percentage on sale;

median detectable discount;

number of new arrivals;

out-of-stock percentage;

top discounts;

top vendors;

top product types;

pages fetched;

intelligence records detected;

intelligence records delivered.

A store summary also makes a legitimate "nothing found" result visible.

RUN_SUMMARY

A free run-level summary.

It can include:

records written;

billable records;

free records;

stores requested;

stores completed;

stores failed;

unsupported stores;

request counts by store;

quality warnings;

cap reason;

source availability;

store comparison;

operational cost metrics.

Example PRODUCT_INTEL

{
"recordType": "PRODUCT_INTEL",
"entityId": "shopify:deathwishcoffee.com/product/7366735200311",
"store": "deathwishcoffee.com",
"productId": "7366735200311",
"handle": "chocolate-hazelnut-16oz-klean-kanteen",
"title": "Chocolate Hazelnut Klean Kanteen",
"url": "https://deathwishcoffee.com/products/chocolate-hazelnut-16oz-klean-kanteen",
"vendor": "Klean Kanteen",
"productType": "On-The-Go Drinkware",
"onSale": true,
"maxDiscountPct": 40,
"newArrival": false,
"outOfStock": false,
"minPrice": 15,
"maxPrice": 15,
"variantCount": 1,
"variantsOnSale": 1,
"variants": [
{
"variantId": "41968903094327",
"title": "Default Title",
"sku": "UKCHZL16",
"price": 15,
"compareAtPrice": 25,
"discountPct": 40,
"available": true
}
],
"publishedAt": "2026-02-27T08:38:25-05:00",
"createdAt": null,
"observedAt": "2026-08-17T05:38:32.990Z"
}

PRODUCT_INTEL output fields

FieldDescription
recordTypePRODUCT_INTEL.
entityIdStable Actor identity composed from store and Shopify product ID.
storeNormalized store domain.
productIdShopify product ID.
handleShopify product handle when available.
titleProduct title.
urlPublic product URL when a handle is available.
vendorShopify vendor field when available.
productTypeShopify product type when available.
onSaleWhether at least one variant meets the minimum discount threshold.
maxDiscountPctDeepest detectable qualifying variant discount.
newArrivalWhether publishedAt falls inside the configured new-arrival window.
outOfStocktrue when no variant is currently marked available.
minPriceLowest numeric variant price found.
maxPriceHighest numeric variant price found.
variantCountNumber of variants in the public product record.
variantsOnSaleNumber of variants meeting the configured discount floor.
variantsVariant-level price, compare-at, discount, SKU, title, and availability data.
publishedAtShopify product publication timestamp when available.
createdAtShopify product creation timestamp when available.
observedAtTimestamp when the Actor observed the product.

Variant fields

Each item in:

variants[]

can contain:

FieldDescription
variantIdShopify variant ID.
titleVariant title.
skuSKU when publicly available.
priceCurrent public variant price.
compareAtPricePublic compare-at price when available.
discountPctCalculated discount percentage when computable.
availablePublic variant availability flag when available.

New-arrival detection

A product is considered a new arrival when its:

published_at

timestamp falls inside the period ending at the current run time.

For example:

{
"newArrivalWindowDays": 7
}

means a product must have been published within the previous seven days.

Important

This is based on Shopify's public:

published_at

value.

It is not a historical baseline comparison.

Out-of-stock behavior

A product is considered fully out of stock when it has variants and none of them is marked:

available: true

With:

{
"includeOutOfStock": false
}

fully sold-out products are excluded from billable intelligence records.

They can still contribute to the free store-level aggregate metrics.

Store summaries

Every successfully processed store receives a free summary.

Example shape:

{
"recordType": "STORE_INTEL_SUMMARY",
"store": "example.com",
"status": "OK",
"pagesFetched": 4,
"catalogTruncated": false,
"intelDelivered": 42,
"intelDetected": 42,
"productsScanned": 730,
"onSaleCount": 85,
"onSalePct": 11.6,
"medianDiscountPct": 20,
"newArrivalsCount": 18,
"outOfStockPct": 4.8,
"topDiscounts": [],
"topVendors": [],
"topProductTypes": [],
"observedAt": "2026-08-17T05:38:32.990Z"
}

Portfolio comparison

The free RUN_SUMMARY contains a store comparison derived from successful store summaries.

The comparison can include:

store productsScanned onSalePct medianDiscountPct newArrivalsCount outOfStockPct

This makes the Actor useful as a competitor portfolio snapshot without requiring an external aggregation step.

Password-protected and unsupported stores

The Actor recognizes controlled conditions such as:

STORE_PASSWORD_PROTECTED NOT_SHOPIFY_OR_HEADLESS

These conditions do not automatically crash the entire batch.

The store can be represented by a free summary with a controlled status while other stores continue.

Blocking and source errors

The Actor does not attempt to circumvent access controls.

Conditions such as:

HTTP 403 HTTP 430

are treated as source blocking or unavailable conditions.

Retryable conditions such as:

HTTP 429 HTTP 5xx network failures timeouts

use controlled retry behavior before the run decides the final outcome.

Scheduling

This Actor is useful for repeatable competitive snapshots.

A common cadence is:

daily weekly before a pricing or promotion review

Because every run is self-contained, scheduling does not require a previous baseline.

Configure your competitor store list.

Save the configuration as an Apify Task.

Go to Console → Schedules → Create schedule.

Choose the desired cadence.

Run the Task automatically.

Send results to your preferred destination.

Possible destinations include:

Google Sheets;

Slack;

webhooks;

n8n;

Make;

Zapier;

CRM;

databases;

dashboards;

internal applications.

Example competitor-intelligence workflow

Input

{
"stores": [
"competitor-a.com",
"competitor-b.com",
"competitor-c.com"
],
"minDiscountPct": 15,
"newArrivalWindowDays": 14,
"maxProductsPerStore": 5000,
"maxResults": 1000
}

Possible downstream flow

The Actor scans each public Shopify catalog.

It writes only products carrying sale or new-arrival intelligence.

Free store summaries compare the competitors.

A downstream workflow can:

rank the deepest discounts;

create a promotion report;

flag new product launches;

save results to a database;

send a Slack alert;

generate an internal summary;

update a dashboard.

The Actor supplies structured public data and deterministic calculations.

Your downstream system decides how to act on them.

Run health

The Actor writes operational information to:

STATS

in the default key-value store.

Depending on the run, this can include:

request counts;

retries;

stores completed;

stores failed;

unsupported stores;

records written;

charged results;

free rows;

warnings;

quality signals;

source-unavailable state;

runtime and cost metrics.

Health and error behavior

The Actor uses controlled error codes instead of silently returning structurally broken data.

Possible conditions include:

INVALID_INPUT HTTP_TIMEOUT HTTP_UNAVAILABLE SOURCE_BLOCKED API_CONTRACT_CHANGED STORE_PASSWORD_PROTECTED NOT_SHOPIFY_OR_HEADLESS ALL_STORES_FAILED

The exact run outcome depends on whether the condition is:

an input problem;

a controlled unsupported-store condition;

a partial store failure;

a source outage;

a terminal contract problem.

API

Run the Actor through the Apify API and receive dataset items programmatically.

Example:

curl -s "https://api.apify.com/v2/acts/<YOUR_USERNAME>~shopify-sale-newarrival-intelligence/run-sync-get-dataset-items?token=<YOUR_TOKEN>"
-X POST
-H "Content-Type: application/json"
-d '{ "stores":["allbirds.com","deathwishcoffee.com"], "minDiscountPct":10, "newArrivalWindowDays":30, "maxResults":500 }'

Replace:

<YOUR_USERNAME> <YOUR_TOKEN>

with your Apify account values.

Integrations

The Actor can be used with:

Apify API;

webhooks;

Apify Tasks;

Apify Schedules;

n8n;

Make;

Zapier;

Google Sheets;

Slack;

databases;

BI tools;

custom applications.

Pricing

This Actor uses Pay Per Event.

The billable result event is:

intel-product

A result is billable only when a PRODUCT_INTEL record is actually delivered.

That means plain catalog products with no qualifying sale or new-arrival signal are not written as billable product intelligence.

The Actor also calls a run-start event:

actor-start

Store summaries and the final run summary are free rows.

The Pricing tab on the Actor page is always the authoritative source for current prices.

What is free

These dataset rows are designed to be free:

STORE_INTEL_SUMMARY RUN_SUMMARY

They provide visibility into:

stores scanned;

zero-result stores;

unsupported stores;

aggregate sale metrics;

new-arrival metrics;

portfolio comparisons;

run quality.

Cost control

The main user-controlled output caps are:

maxResults maxProductsPerStore maxRuntimeMs

You can also reduce billable output by using:

minDiscountPct newArrivalWindowDays productTypeFilter includeOutOfStock

Lower-volume research

Use:

a higher minimum discount;

a shorter new-arrival window;

a narrower product-type filter;

a smaller maxResults.

Broader research

Use:

a lower minimum discount;

a longer new-arrival window;

more stores;

a larger product scan cap.

Honest limits

Sale detection requires public compare-at pricing

If the public Shopify data does not expose a useful:

compare_at_price

the Actor cannot infer a real discount.

This is not a historical price monitor

The Actor does not maintain a customer-visible price baseline for cross-run price changes.

Use the companion Shopify monitor for change events.

It does not scrape private Shopify data

The Actor does not access:

Shopify Admin;

private inventory systems;

customer data;

merchant dashboards;

authenticated APIs.

Exact inventory quantity is not available

The public catalog can expose variant availability.

It does not expose a reliable private inventory count.

Headless storefronts may not support the route

Some Shopify merchants use custom/headless architectures where:

/products.json

is unavailable or does not provide the expected contract.

Those stores can return:

NOT_SHOPIFY_OR_HEADLESS

Password-protected stores are not bypassed

A password-protected storefront is reported as:

STORE_PASSWORD_PROTECTED

The Actor does not attempt to bypass the password.

Catalogs can be truncated by your cap

When a store contains more products than:

maxProductsPerStore

the scan stops at the configured cap.

The store summary exposes:

catalogTruncated

so the limitation is visible.

published_at is the source for new-arrival detection

A product counts as recent according to the public Shopify publication timestamp.

The Actor does not claim that this timestamp is the merchant's internal launch-planning date.

Source behavior can change

Shopify or individual stores can change the behavior of their public storefront endpoints.

The Actor uses health checks and controlled failures to surface unexpected contract changes instead of inventing data.

FAQ

Do I need a Shopify account?

No.

Do I need a Shopify API key?

No.

Does the Actor use the Shopify Admin API?

No.

Does it use browser automation?

No.

Does it need a proxy?

The current implementation uses direct HTTP requests to the public storefront catalog route.

Can I scan multiple stores?

Yes.

The current input accepts up to:

50

store entries per run.

What counts as a sale?

At least one variant must have:

compare_at_price > price

and the calculated discount must meet:

minDiscountPct

Can it detect discount codes?

Not reliably.

Discount-code promotions that are not reflected in public compare-at pricing are outside the current detection contract.

How are new arrivals detected?

Using the public Shopify:

published_at

timestamp and your:

newArrivalWindowDays

setting.

Does it need a baseline?

No.

Does it track price changes between runs?

No.

Use the companion Shopify Price & Catalog Monitor for persistent price, stock, product-added, and product-removed change events.

Can I exclude sold-out products?

Yes.

Use:

{
"includeOutOfStock": false
}

Can I filter by product type?

Yes.

Use:

{
"productTypeFilter": [
"shoes",
"accessories"
]
}

How many products can it scan per store?

The current input supports up to:

25000

products per store.

How many billable results can I allow?

The current maxResults range is:

1–5000

What happens if a store is password-protected?

It receives a controlled:

STORE_PASSWORD_PROTECTED

status.

The rest of the batch can continue.

What happens if a store is headless or not compatible?

It can receive:

NOT_SHOPIFY_OR_HEADLESS

instead of being parsed as valid Shopify data.

What am I charged for?

Billable PRODUCT_INTEL records according to the Actor's Pay Per Event configuration, plus the run-start event shown in the Pricing tab.

Are store summaries charged?

No.

Is the final run summary charged?

No.

Can I schedule this Actor?

Yes.

Because each run is a self-contained snapshot, you can schedule it daily, weekly, or according to your competitive-research workflow.

Is this affiliated with Shopify?

No.

This is an unofficial community Actor and is not affiliated with, sponsored by, or endorsed by Shopify Inc.

Support

Found a bug, a source contract change, or a field this intelligence is missing?

Open an issue on the Actor page or write to johnatan291303@gmail.com — we reply within 24 hours.

Part of the JM Forge suite

Also from the same developer:

Shopify Price & Catalog Monitor — persistent Shopify price, stock, product-added, and product-removed change monitoring across scheduled runs.

Use Shopify Competitor Sale & New Arrival Insights when you need the current competitive picture.

Use Shopify Price & Catalog Monitor when you need historical change events.