FIND YOUR IT.

Ecommerce operations

Keep one review row for every Shopify variant.

Start with up to five variants from one public product. Keep each option separate, preserve the listed currency, and prepare rows for a review sheet you connect.

See it before you configure it

A closer look at the workflow.

Saved sample · October 12, 2026
This preview makes no live data requests.

Inspect the records

Shopify variant prices · observed October 12, 2026
VariantVariant IDListed priceVerified currencyPublic availability
10-count3953441249695112.99USDYes
20-count3953441252971925.98USDYes
30-count3953441256248738.97USDYes

Three variants from one product, selected from an earlier bounded catalog run. Prices and availability are historical observations, not current offers. Comparison was off in that source run; no price changes are demonstrated.

Start with a focused input

{
  "stores": [],
  "productUrls": [
    "https://www.deathwishcoffee.com/products/gingerdead-coffee-cups"
  ],
  "maxResults": 5,
  "comparePrevious": true,
  "onlyChanges": false,
  "snapshotName": "n8n-shopify-manual-v1",
  "maxRunSeconds": 120
}

Download input JSON

The saved preview and sample downloads make no live requests. Running an Actor is a separate, user-initiated action on Apify; review its current pricing and set a maximum total charge first. Input row limits are not spending caps.

Keep one identity per record

Spreadsheet-ready variant observations and stable keys for a price and availability review queue you configure.

DESTINATION KEYJSON.stringify([storeUrl, String(variantId)])

Retain the originating run ID; replay that dataset if destination delivery fails and deduplicate deliveries by run ID plus destination key.

The template produces flat rows. Connect your own spreadsheet or service desk and use this key when updating records.

Get the n8n template

From first run to repeatable work

Make it part of your process.

  1. 01

    Choose the exact products

    Import the inactive n8n starter and edit its small input. The example reads one public product with a five-row cap. Keep locale URLs consistent, choose your own snapshotName, and select your Apify Header Auth credential on all five HTTP Request nodes.

  2. 02

    Seed the register

    Review current Apify pricing, then run the whole workflow once manually. The starter requests a $0.15 charge ceiling and checks SUMMARY plus the saved dataset count before releasing rows. Keep comparePrevious true and onlyChanges false initially; the first comparison is labeled baseline.

  3. 03

    Update variants in place

    The starter ends at Sheets-ready rows. Add and authenticate your own spreadsheet upsert node, matching record_key. Its key combines storeUrl and the string variantId. Write values as literal text, retain replay_key, and keep IDs and decimal prices as strings.

  4. 04

    Review changes, then repeat

    After the baseline, run the same scope sequentially. Enable onlyChanges when you want new or changed observations only. Use changeTypes to route price and availability changes for review; send price_changed_currency_unverified to manual review.

Understand the output

Fields with a clear purpose.

storeUrl + variantId
Destination identity, including the locale root.
title / variantTitle / productUrl
Product, option label and public source page.
price / compareAtPrice / currency
Exact decimal amounts and verified currency, or null when unknown. Do not divide price by 100 again.
available
The public storefront reports the variant as purchasable; this is not stock quantity.
comparisonStatus / changeTypes / previous
Baseline and later saved-observation comparisons; no continuous record of every intermediate edit.

Before you rely on a result

Check the coverage.

  • Read the completed run's own SUMMARY, not a last-run shortcut.
  • Inspect failedSources, sourcesNotReached, stoppedOnTime and stoppedOnChargeLimit.
  • Inspect sourceCoverage.hasMore, catalogComplete and publicVariantLimitReached; success alone is not full source coverage.
Source and workflow limits
  • The public product endpoint exposes up to 250 variants; the boundary is reported. A result cap can leave a chosen product or watchlist partly observed.
  • Missing observations never mean product deletion or stockout. Preserve existing destination rows on empty or partial runs.
  • Only confirmed saved rows advance Actor history. A later source or delivery failure can coexist with useful saved observations; replay the original dataset after delivery trouble.
  • Use one writer per source and snapshot namespace. A conflict check does not provide a transactional lock.
  • Robots restrictions, password pages and unsupported endpoints can prevent collection. There is no login, proxy or anti-bot bypass.

Common questions

A few useful answers.

Can I monitor a product without crawling the entire store?

Yes. Use productUrls with exact public /products/handle pages. The store must expose the supported Shopify product Ajax endpoint; custom or headless storefronts may not.

Does available mean a known number of units in stock?

No. It is public purchasing availability. The Actor does not report inventory quantities or verify checkout success.

Why would a healthy repeat have no rows?

With onlyChanges enabled, unchanged observations are omitted. Check SUMMARY for source or limit issues before treating zero rows as a clean no-change result.

Can I compare prices when currency is missing?

Preserve the null currency. The Actor does not classify an increase or decrease unless the old and new observations have the same verified currency. Unverified currency changes need review.

Is this already connected to my spreadsheet?

The download prepares flat rows and stable record_key and replay_key fields. You add and authenticate the spreadsheet destination. No Google Sheets connection, destination write or schedule is included.

Ready for your own data?

Start with a small scope.

Review current pricing and coverage, then configure your input on Apify.

Open Actor on Apify

Sources & further reading

Guide prepared October 13, 2026. Samples are dated observations; current source records can differ.