Shopify New Product Monitor - Competitor Launches avatar

Shopify New Product Monitor - Competitor Launches

Pricing

from $2.00 / 1,000 new product reporteds

Go to Apify Store
Shopify New Product Monitor - Competitor Launches

Shopify New Product Monitor - Competitor Launches

Watch any Shopify store on a schedule and get only the products it launched recently. Remembers what it already reported between runs, so a daily schedule alerts you once per product instead of resending the whole catalogue. Scanning is free - you pay only for new arrivals.

Pricing

from $2.00 / 1,000 new product reporteds

Rating

0.0

(0)

Developer

DONGMIN KIM

DONGMIN KIM

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

8 hours ago

Last modified

Share

Shopify New Product Monitor — Track Competitor Launches on a Schedule

Watch any set of Shopify stores and get only the products they just launched. Put it on a daily schedule and it tells you what your competitors shipped yesterday — not their whole catalogue, every morning, forever.

The part that actually matters

This actor remembers what it has already reported, in a named store that persists between runs. Run it daily and each new product reaches you exactly once.

That sounds obvious and it is easy to get wrong: Apify's default key-value store is scoped to a single run, so a monitor that keeps its history there silently forgets everything and re-alerts the entire back catalogue on every run. This one uses a named store, and the behaviour is covered by a test.

You can point several watchlists at different memory stores, or clear the store in the Console to start fresh.

Input

{
"storeUrls": ["competitor-one.com", "competitor-two.com"],
"withinDays": 7,
"dateField": "published_at",
"onlyUnseen": true,
"onSaleOnly": false,
"maxProductsScanned": 2000
}
  • withinDays — for a daily schedule, 7 is sensible: wide enough to survive a missed run, narrow enough not to flood you.
  • dateFieldpublished_at is when shoppers could first see it. created_at is when it was added, which can be much earlier for a planned drop. Use created_at if you want the earliest possible warning.

Every option

The same wording you see in the Apify console, with the JSON key for API and MCP callers.

OptionWhat it doesDefault
Shopify stores to watchstoreUrls (required)Bare domains or any URL on the store. Watch as many competitors as you like in one scheduled run.
Consider new if launched within (days)withinDaysProducts older than this are ignored. For a daily schedule, 7 is a sensible window — it covers a missed run without flooding you.30
Date to judge bydateFieldpublished_at is when the store made it visible to shoppers. created_at is when it was first added, which can be much earlier for planned drops."published_at"
Only report products not seen beforeonlyUnseenRemembers reported product IDs between runs, so a schedule alerts you once per product. Turn off to always emit everything in the window.true
Memory store namememoryStoreNameNamed key-value store holding the IDs already reported. Change it to run two independent watchlists, or clear that store in the Console to start alerting from scratch."shopify-new-arrivals-seen"
Only new products already discountedonSaleOnlyNarrow to launches that arrived with a compare-at markdown.false
Max products scanned per storemaxProductsScannedThe catalogue is read to find recent items. Raise for very large stores, lower to cut cost. You are only billed for the new products reported, never for scanning.2000
ConcurrencyconcurrencyStores processed in parallel. Raise it when watching many competitors at once.3
ProxyproxyConfigurationLeave the default.{"useApifyProxy":true}

Output

Newest first, one row per new product — the same full product shape the store scraper delivers, plus two fields only a monitor can know.

{
"storeDomain": "competitor-one.com",
"productId": 8123456789012,
"title": "Wool Runner Mizzle",
"handle": "wool-runner-mizzle",
"url": "https://competitor-one.com/products/wool-runner-mizzle",
"vendor": "Allbirds",
"productType": "Shoes",
"tags": "new,mens,wool",
"createdAt": "2026-08-09T11:02:00-04:00",
"publishedAt": "2026-08-10T14:00:00-04:00",
"updatedAt": "2026-08-11T08:30:00-04:00",
"ageDays": 2,
"firstSeenAt": "2026-08-12T17:20:04.113Z",
"minPrice": 135,
"maxPrice": 135,
"onSale": false,
"inStock": true,
"variantCount": 9,
"availableVariantCount": 9,
"imageUrl": "https://cdn.shopify.com/…",
"imageCount": 5,
"options": [{ "name": "Size", "values": ["9", "10", "11"] }],
"description": "Water-repellent wool.",
"variants": [
{ "variantId": 1, "title": "9", "sku": "WRM-9", "price": 135, "available": true, "option1": "9" }
]
}

Every field

You are billed per new product delivered, so here is everything a row can contain. A field is absent when the store did not publish it.

FieldWhat it is
firstSeenAtWhen this actor first reported the product. Only a monitor can know this; the store does not publish it.
ageDaysDays between the product's date field and this run, so you can tell a same-day drop from a backfill.
storeDomainWhich store the row came from, so a multi-store run reads without a join.
productIdShopify's numeric product id. It is also the key the run-to-run memory uses.
titleProduct title.
handleThe URL slug — the stable key across renames.
urlCanonical product URL.
vendorBrand as the store records it.
productTypeThe store's own product type.
tagsThe store's tag string.
createdAtWhen the product was created in the store's admin.
publishedAtWhen it went live on the storefront. Usually the field you want Date field set to.
updatedAtLast edit of any kind.
descriptionBody copy with HTML stripped.
optionsThe option axes, each with name and values.
imageUrlFirst image.
imageCountHow many images the product has.
variantCountNumber of variants.
availableVariantCountHow many are in stock.
inStocktrue when any variant is available.
minPrice / maxPriceLive price range at launch — the number that dates fastest, which is the point of catching it now.
compareAtPriceHighest compare-at price found.
onSaletrue when a compare-at price sits above the live price. A launch already on sale is worth knowing.
discountPercentThat markdown as a whole-number percent.
variantsPer-variant rows: variantId, title, sku, price, compareAtPrice, available, requiresShipping, grams, option1option3.

Who this is for

  • Competitive intelligence teams — wire the dataset to Slack or email through a webhook and know about a launch within a day.
  • Retail buyers — catch drops early on the stores you resell.
  • Affiliate and content publishers — auto-publish a weekly roundup from a run that only ever returns what is new.
  • Trend watchers — watch ten stores in a category and see what they all start stocking.

Common uses

  • Competitor launch alerts — wire the dataset to Slack or email via an Apify webhook and know within a day.
  • Trend spotting — watch ten stores in a category and see what they all start stocking.
  • Retail buying — catch drops early on stores you resell.
  • Content and affiliate sites — auto-publish "new this week" roundups.
  • Launch archives — accumulate a dated record of everything a brand released.

Pricing

Pay per new product reported. Scanning costs almost nothing — reading a catalogue is billed at $0.00002 per run — the platform's $0.00001 minimum, once per GB, on 2 GB — and everything beyond that is charged only for the new arrivals it surfaces. On a steady daily schedule most runs report a handful of products, or none, and cost two thousandths of a cent.

Other Actors in this family

Same engines, same billing, no account or API key on any of them.

YouTube & video

Search demand

E-commerce

Hiring

FAQ

Will I get blocked or rate-limited? It reads /products.json, the endpoint Shopify serves on every shop, on cheap datacenter proxies. Monitoring the same stores daily does not change that — the endpoint is built to be polled, and no login is involved.

Will the first run report everything? Yes — on the first run every product inside your date window is new to it. After that it only reports genuine arrivals. Set a small withinDays for the first run if you want a quiet start.

What if a run is interrupted? Only products actually reported are remembered, so the rest come through on the next run instead of being lost.

Can I watch many stores? Yes, in one run. Each store's history is tracked separately.

Does it detect price changes too? No — this one is about new products. Use the Shopify Store Scraper on a schedule and diff the results for price tracking.

Can I run it on a schedule? That is the point. Apify Schedules, webhooks, or the API. Also available over MCP for AI agents.

Is it legal to monitor a competitor's Shopify store? This reads the public /products.json endpoint Shopify serves on every storefront — no login, nothing bypassed. What a shop lists for sale is public commercial fact, and watching a competitor's public catalogue is ordinary market research. Each store's own terms are a separate contract question. Not legal advice.

How much does 1,000 new products cost? $2.00, plus $0.00002 for the run. Scanning is free — you are billed only for genuinely new arrivals, so a daily watch on a quiet store costs almost nothing.

Can I export the results to Excel or Google Sheets? Yes. Every run's dataset downloads as CSV, Excel, JSON, XML or RSS from the Storage tab, or straight from the API if you want a live link a spreadsheet can pull.

Can I connect it to Zapier, Make or n8n? Yes — Apify publishes integrations for all three, plus webhooks that fire when a run finishes. A common setup is a schedule here and a webhook into your own database or Slack.

Do I need to write code? No. Fill the form in the console and press Start. If you do want code, the Apify client libraries for Python and JavaScript call this the same way, and it is available over MCP so an AI agent can call it directly.