Make + Apify · Web and domains

Competitor Shopify Price Changes to Slack with Make

The Shopify Catalog Monitor reads a store's public product catalog and, in changes mode, compares it with the previous run and returns only what changed: prices, availability, new and removed products. Save it as an Apify task, schedule it daily, and a Make scenario built on Apify's official Make app posts each price change to Slack with the old and new price.

Open the Actor on Apify Store

Shopify Catalog Monitor & Price Tracker — Products Scraper. Pay per result; see the Store page for current pricing.

What you build

A daily Apify schedule runs a saved task on one or more competitor stores. The first run stores a baseline of every variant; every later run returns change records. Make's Watch Task Runs trigger starts the scenario when a run finishes, Get Dataset Items reads the changes, a filter keeps price changes, and Slack gets one message each: product, variant, before and after price, and the percent change.

Keep other changeType values in the filter to also hear about new-product, removed-product or availability-changed. The Shopify price tracker guide lists every field.

Before you start

  • An Apify account. The Actor is billed per result to that account; the Store page lists the current prices. Set a maximum total charge in the task's run options to cap a run.
  • A Make account with a Slack connection.
  • The competitor stores' domains. Only public storefronts work: a password-protected or blocked store returns one error item, and the Actor does not work around it.

Step 1: Save the input as an Apify task

Open the Actor in Apify Console from its Store page. On the Input tab, switch to the JSON editor, paste this input with your competitors' domains, and click Save as a new task:

{
  "storeUrls": [
    "www.allbirds.com",
    "www.deathwishcoffee.com"
  ],
  "mode": "changes",
  "granularity": "variant",
  "maxProductsPerStore": 2000,
  "includeCollections": false,
  "stateStoreName": "make-slack-competitor-prices"
}

The first changes run writes one baseline record per variant and is billed like a snapshot; the Store page has the rate. From the second run on, the dataset holds only change records, so later runs bill for what changed rather than for the whole catalog. Run the task once from Console now to write the baseline.

Then open Schedules in Console, create a daily schedule, and add the task to it.

Step 2: Build the Make scenario

1. Trigger: Apify, Watch Task Runs

Create a scenario and add Apify → Watch Task Runs. Create a connection (OAuth, or an API token from Console → Settings → API & Integrations) and pick the task.

2. Search: Apify, Get Dataset Items

Add Apify → Get Dataset Items and map Dataset ID to the default dataset ID from the trigger.

3. Filter: price changes only

On the link to the next module, set up a filter with two conditions: recordType equals change, and changeType equals price-changed. This also drops the baseline records of the first run and any error items.

4. Action: Slack, Create a Message

Add Slack → Create a Message, pick the channel, and build the text from the mapped fields (insert each one from Make's mapping panel; the braces below stand for those fields), for example:

{storeDomain}: {productTitle} ({variantTitle})
{before.price} → {after.price} ({percentChange}%)
{productUrl}

Save the scenario and switch it on.

Fields to map

Each change record carries the current variant fields plus what changed:

FieldUse it for
recordType, changeTypechange, and one of price-changed, availability-changed, new-product, removed-product, new-variant, removed-variant, title-changed
storeDomain, productTitle, variantTitleWhich store and product
before.price, after.price, percentChangeThe old and new price (in the store's currency) and the change in percent
before.compareAtPrice, after.compareAtPriceThe "was" price, to spot a sale starting or ending
availableWhether the variant can be bought now
productUrlLink to the product page

All fields are described in the Shopify price tracker guide.

Costs and limits

  • Apify bills the first run per baseline record and later runs per change, at the prices on the Store page. A daily check of a store whose prices rarely change costs little after the baseline.
  • Make counts operations per module run; each change that passes the filter adds one Slack operation.
  • The catalog is the store's public products.json: stock quantities appear only where the store publishes them.

FAQ

Can I put the changes in a sheet instead?

Yes. Replace the Slack module with Google Sheets → Add a Row and map the same fields. The permits-to-Sheets recipe shows that module.

How do I start over with a fresh baseline?

Use a new stateStoreName in the task, or delete the key for that store in the named key-value store.

Does it work for non-Shopify stores?

No. A store that is not on Shopify returns one NOT_SHOPIFY error item.

Is this affiliated with Shopify, Make or Slack?

No. owlabee is an independent developer on Apify Store, and the Make app used here is Apify's own. Not affiliated with or endorsed by Shopify, Make, Slack, Apify or any store named; the store names are examples.