Product
Price monitoring software, field by field
Price monitoring software collects the prices competitors publish, ties each listing to a product in your own catalogue, and stores the result on a schedule. This module records shelf price, was-price, stock status, shipping, promotions, seller and currency on every check, keeps every observation with its timestamp and source URL, and sends alerts on the changes you choose.
This is the collection engine. On every check it records the shelf price, the crossed-out was-price, stock status, shipping cost, promotional text, the seller behind the listing and the currency, then stores that observation with a timestamp and the exact source URL. Observations are appended, never overwritten, so a number you saw in March is still there in September, traceable to the page it came from.
What price monitoring software captures on every check
One number is not enough to price against. A listing at $179.00 means something very different when it is in stock, ships free and carries no promotion than when it is a backordered marketplace offer with $14.00 shipping and a 10 percent coupon banner. Every refresh stores the whole listing.
| Field | What is stored | Why it changes a decision |
|---|---|---|
| Shelf price | The price a shopper pays today, after on-page discounts | This is the number you actually compete with, not the list price beside it |
| Was-price | The crossed-out list or compare-at price, where the page publishes one | $179.00 against a $229.00 was-price is a 21.8 percent markdown that will end. $179.00 with no was-price is the new normal, and needs a different answer |
| Stock status | In stock, out of stock, backorder or limited availability | A price nobody can buy should not drag your market average down. Out-of-stock listings can be excluded from every calculation |
| Shipping | Shipping cost shown for the listing and any free-shipping threshold | Delivered price is what competes. $169.00 plus $12.00 shipping loses to $175.00 shipped free |
| Promotions | Coupon codes, percent-off banners, bundle offers and threshold offers | Explains why a price moved and tells you whether it is temporary or structural |
| Seller | The storefront domain, or on a marketplace the seller behind the current offer | A marketplace offer can change hands several times a day, and any enforcement conversation needs a name |
| Currency | The currency code published on the page, stored with the amount | Listings in another currency are kept apart, not averaged into a USD figure |
| Variant | The specific size, color, capacity or pack count the price belongs to | Averaging a 12-pack and a single hides whichever one is losing |
| Source URL and timestamp | The exact page read and the time it was read | Makes every number checkable months later, which is what ends arguments about a figure |
Anything not published on the page is not collected. There is no inference of a price from a category listing, and no data from behind a login.
Competitor prices — Audio & Small appliances
| Product | You | Voltbay | Harborline | PrimeDeck | Casa & Kin | Belmont Direct | Position |
|---|---|---|---|---|---|---|---|
| Aurora H7 Noise-Cancelling HeadphonesNL-1000 | $249.00 | $254.75 | $257.46 | $263.24 | $260.16 | — | Lowest |
| Aurora H7 Noise-Cancelling Headphones — BlackNL-1007 | $275.83 | $255.57 | $295.14 | $273.40 | $261.36 | $274.54 | Above |
| Aurora H7 Noise-Cancelling Headphones — Midnight BlueNL-1014 | $275.90 | $243.97 | $299.78 | $294.42 | $280.25 | $272.53 | Above |
| Aurora H7 Noise-Cancelling Headphones — SandNL-1021 | $273.31 | $265.33 | $265.90 | $247.33 | $259.81 | $288.91 | Above |
| Aurora Buds ProNL-1028 | $149.00 | $162.74 | $169.34 | $159.11 | $167.18 | $154.28 | Lowest |
| Aurora Buds Pro — BlackNL-1035 | $165.68 | $165.93 | $187.17OOS | $173.29 | $174.95 | $177.90 | Matched |
| Aurora Buds Pro — Midnight BlueNL-1042 | $165.19 | $148.24 | $183.85 | $161.72 | $162.17 | $167.73 | Above |
Out-of-stock listings are struck through and excluded from position and repricing decisions.
How collection works, from URL to stored row
- 1
Resolve the source
Competitor URLs are attached by hand, imported in bulk by CSV, or discovered by identifier from your product feed. Each domain carries its own fetch profile and extraction recipe.
- 2
Fetch the page
Checks are spread across the refresh window rather than fired in one burst, and pages that build their price in the browser are rendered before reading, so a client-side price is not stored as null.
- 3
Read structured data first
Where a retailer publishes schema.org Product markup, price, currency and availability come from it. That is the same feed the site hands to search engines, so it survives most redesigns. A per-domain extraction recipe is the fallback, regenerated automatically when a layout changes.
- 4
Validate before storing
Every candidate price passes plausibility checks. A $0.00, a shipping fee read as a price, or a fortyfold overnight jump is quarantined rather than published, and the source is flagged in data quality.
- 5
Attach it to a product
Matching runs by GTIN, UPC, EAN or MPN first, then title and attribute embeddings, then image. Every match carries a confidence score, and low-confidence matches never reach a repricing rule.
- 6
Append the observation
The row is written with its timestamp, source URL and extraction method. Nothing is overwritten, which is what makes history real rather than a rolling snapshot.
How bot mitigation and moved URLs are handled is covered in price scraping. The matching waterfall and its harder cases are in the product matching guide.
Refresh cadence by plan
Refresh rate and product count are the only two things that change between plans. Every plan includes matching, MAP monitoring with screenshot evidence, repricing, analytics, all integrations, the API and unlimited users.
| Plan | Refresh | Checks per product per day | Products | Competitor URLs per product |
|---|---|---|---|---|
| Starter, $99/mo | Daily | 1 | 500 | 10 |
| Growth, $299/mo | Twice daily | 2 | 2,500 | Unlimited |
| Scale, $699/mo | Four times daily | 4 | 10,000 | Unlimited |
| Enterprise, custom | Hourly | 24 | Unlimited | Unlimited |
Full plan detail is on pricing. Annual billing saves roughly two months.
Pick the cadence from how fast your category moves, not from ambition. Here is the arithmetic that settles it: a competitor runs a six-hour flash sale, and a once-daily check sees it only if the check lands inside those six hours, which is 6 in 24, a 25 percent chance. A four-times-daily check catches it nearly every time. In categories with frequent short promotions, daily collection is sampling rather than monitoring. In furniture or industrial supply, daily is plenty.
How variants are handled
Each purchasable variant is monitored as its own row. Size, color, capacity and pack count each get their own price, stock and history, because averaging them hides the one that is losing.
- Variant to variant. A 5Ah battery pack is compared against a 5Ah battery pack, not against the 2Ah version on the same product page.
- Pack count is normalized for comparison. A 12-pack at $47.88 is $3.99 a unit. A single at $4.49 is 12.5 percent more per unit, because (4.49 - 3.99) / 3.99 = 0.125. Both the pack price and the unit price are stored, so you can compare on either.
- Bundles are not folded in. A drill kit with two batteries and a bare tool are different products. Matching flags the difference instead of treating a $129.00 bare tool as a 31.7 percent undercut on your $189.00 kit.
- Parent-level rollups are derived, not collected. A product family shows the range and the worst-positioned variant, both computed from the variant rows rather than scraped from a category page.
How history is stored, and what it answers
History is an append-only series of observations. Each one holds the price, was-price, stock, shipping, promotion text, seller, currency, source URL, extraction method and the time of the read. Change events are derived from that series rather than stored separately, which means a correction to a bad reading does not rewrite the past.
- When a competitor's price drop started, and whether it has ended.
- Whether a low price is an event or a cadence. A price that falls every second Thursday is somebody's promotional calendar, and chasing it costs margin twice a month.
- How long a listing sat below MAP, which is the number that matters in MAP protection.
- How many times a seller changed price in a quarter, which tells you whether they are repricing automatically.
- What a page said on a given date, since the source URL and timestamp travel with the observation.
Cadence 200 Bookshelf Speakers (pair) — Sand — 60-day price history
Raw observations export as CSV over SFTP or through the REST API, not just as charts. If you want the series in your own warehouse, take it.
How alerts are configured
An alert is four choices: a trigger, a scope, a threshold and a destination. Set them on a boundary you would actually act on, or the channel becomes noise inside two weeks and everyone mutes it.
- 1Trigger. An in-stock competitor crossing your price in either direction; a move larger than a set percent or dollar amount; every in-stock competitor now sitting below you, which is a different signal from one seller going low; a listing below MAP; a stock flip; or a source that has gone quiet for two refresh cycles.
- 2Scope. All products, a category, a brand, a saved product group, or a single SKU. Thresholds usually need to differ by category: 3 percent is a sensible starting point for general merchandise, 1 percent for high-velocity electronics.
- 3Threshold. Percent, dollars, or a crossing of your own price. Alerts are deduplicated within a refresh cycle, so a price oscillating around your number does not fire six times before lunch.
- 4Destination. Email, a Slack channel through the Slack integration, a webhook, or the weekly digest for people who want the summary rather than the feed.
Every alert carries enough to decide without opening anything: your product and price, the competitor and their new price, the move in dollars and percent, their stock status, and a link to the source page with its capture time.
Watch your own SKUs, not a demo catalogue
Connect a store, confirm a handful of matches, and see real competitor prices with real timestamps. Fourteen days, no credit card.
Frequently asked questions
How often does price monitoring software check competitor prices?
Refresh runs daily on Starter, twice daily on Growth, four times daily on Scale and hourly on Enterprise. Checks are spread across the refresh window rather than fired at once. Choose the cadence from how fast your category moves and how quickly you can act on what you see; collecting four times a day and approving changes weekly wastes both.
What data fields are captured for each competitor listing?
Shelf price after on-page discounts, the crossed-out was-price where one is published, stock status, shipping cost and free-shipping thresholds, promotional and coupon text, the seller behind the offer, the currency code, the specific variant, and the source URL with the time of the read. Everything is stored together as one timestamped observation.
How are product variants tracked?
Each purchasable variant is monitored as its own row with its own price, stock and history, so a 5Ah battery is compared against a 5Ah battery rather than the 2Ah on the same page. Pack counts are normalized to a unit price as well as the pack price. Bundles and multipacks are flagged during matching instead of being folded into a single product.
How long is price history kept?
Observations are appended, never overwritten, so history accumulates from the day a competitor URL starts collecting. Each row keeps its price, stock, promotion, seller, source URL and capture time. Raw observations export as CSV over SFTP or through the REST API, so the series can also live in your own warehouse.
What happens when a competitor redesigns their product page?
Structured product data is read first, so many redesigns change nothing at all. Where a per-domain extraction recipe is in use, a layout change triggers automatic regeneration of that recipe. If the product URL moves, the match is re-discovered by identifier rather than URL, and plausibility validation quarantines suspicious values before they reach a chart or a rule.
Can I get alerts in Slack?
Yes. Alerts go to email, a Slack channel, or a webhook into your own systems, and a weekly digest summarizes what moved for people who do not want a live feed. Every alert includes your price, the competitor price, the move in dollars and percent, their stock status and a link to the timestamped source page.
How many competitor URLs can I track per product?
Starter includes ten competitor URLs per product. Growth, Scale and Enterprise have no per-product limit. In practice most products need three to six meaningful competitors. Adding a dozen marginal marketplace sellers usually adds noise to the market average rather than accuracy, especially if they are frequently out of stock.
Keep reading
- Competitor price monitoringThe wider use case: choosing competitors, matching, and what to do with a feed you trust.
- Data qualityCoverage and freshness dashboards, self-healing extraction, and how you find out a source went quiet.
- RepricingWhat happens after collection: rules, guardrails and where a new price lands.
- Pricing analyticsPrice index, position mix and category volatility built from these observations.
- Product matching guideBundles, multipacks and refurbished listings, and how to review a low-confidence match.
- Plans and pricingRefresh rate and product count are the only differences between tiers.
Start monitoring in the next ten minutes
Connect your store, match your catalogue and get your first competitor comparison in the same session.
14 days, no credit card, cancel in one click.