Competitive Intelligence
Watch what your competitors sell, what moves, and what they charge — without asking them.
Competitive Intelligence tracks the stores you compete with: their inventory, how fast products move, what's going on sale, and a rough read on their revenue. It reads their public storefronts directly, so there's nothing to connect on their end and no credentials to manage. Add a competitor by name and URL, and On Belay starts watching.
What it does
Competitive Intelligence scans the competitor stores you choose and builds a head-to-head picture:
- Inventory — it snapshots stock levels per product over time.
- Velocity — by watching inventory fall between scans, it infers how many units are moving, over rolling 7-day and 30-day windows.
- Pricing — it tracks current and compare-at prices, so it can flag what's on sale.
- Inferred revenue — units moved times price, rolled up per competitor and archived monthly. This is a directional estimate, not their books — but it's enough to see who's growing and what's working.
A head-to-head view matches the products you both sell and lines them up side by side: their units, revenue, and inventory against yours, with winning / losing / tied tallies.
Who it's for
Brands in a competitive category that want to know what rivals are stocking, discounting, and selling — without manually checking competitor sites every week. Especially useful when you and a competitor sell overlapping catalogs and you want to know where you're winning and where you're not.
Prerequisites
None on the integration side. This is the unusual fieldset: it needs no On Belay integration credentials at all. It reads competitors' public storefronts directly. You only need to be an admin to add and manage competitors.
For richer, more exact data on a given competitor, a competitor record can optionally carry that store's own public read keys (an Algolia search key or a Shopify Storefront token) — but the default path reads the public store with nothing extra, and that's all the dashboard sets up for you. See Algolia and other advanced reads for how the advanced fields are configured today.
Setup
- Open the fieldset. Go to Dashboard → Fieldsets → Competitive Intelligence. (Admin only.)
- Add a competitor. In the Tracked competitors section, click to add one and fill in two fields:
- Name — a display name, e.g. Whole Latte Love.
- Storefront URL — the competitor's store, e.g.
https://www.wholelattelove.com.
- Save. The competitor is created and enabled immediately. The scanner picks it up on the next scheduled scan and starts building snapshots.
That's the whole setup. By default, On Belay reads the competitor's public product feed; you don't need to configure anything else to get started.
Configuration
A competitor record can carry more than just name and URL:
- A scanning on/off switch (
enabled) — every competitor is created enabled, and only enabled competitors get scanned. See Can I pause a competitor without deleting it? for the current state of this control. - That store's public read keys (Algolia app ID + search key + index name, or a Shopify Storefront token) for more exact inventory and faster, more complete reads on large catalogs.
- A product-type allowlist to narrow a large catalog so scans stay within search limits.
The default — public storefront read — needs none of this, and name plus URL is everything the Add competitor form asks for. The advanced fields above exist on the competitor record and the scanner reads them, but they aren't yet editable from the dashboard; see the two sections below for exactly what you can and can't change yourself today.
How it runs
Three jobs run on their own schedule, all automatic:
- Scanner — runs every 2 hours. Each cycle re-snapshots every enabled competitor's catalog.
- Velocity rollup — runs right after each scan, recomputing the 7-day and 30-day units-moved windows.
- Monthly revenue rollup — runs on the 1st of each month at 04:00 UTC, archiving the prior month's inferred revenue so it's kept permanently before raw snapshots age out (snapshots are retained on a rolling 45-day window).
Read-only — no approval gate
Competitive Intelligence is read-only. It observes public competitor data and renders it. There's no writeback, no publish step, and no approval queue — the only writes you make from the dashboard are adding and removing competitors.
Outputs & where they land
Everything lands on the Competitive Intelligence dashboard:
- Revenue scoreboard — inferred 7-day and 30-day revenue per competitor, your store alongside theirs.
- Activity panels — top movers, inventory drops, and active promotions, grouped by competitor.
- Tracked competitors list — status and last-scan info for each one.
- Head-to-head (
/dashboard/fieldsets/competitive-intelligence/head-to-head) — a sortable, matched-pair table comparing your products to a chosen competitor's, with winning / losing / tied summary cards.
Using the Head-to-Head page
Open Dashboard → Fieldsets → Competitive Intelligence → Head-to-Head (or use the Head-to-Head button on the main dashboard). It's admin only, and it shows the products you and a competitor both sell, lined up side by side — your units, revenue, and inventory against theirs, with Winning / Losing / Tied summary cards across the top. The window is the last 7 days.
How do I compare against a different competitor?
When you track more than one competitor, a Competitor row of pills appears above the table. Each pill is one competitor; click one to switch which store you're comparing against. The page shows one competitor at a time — the summary cards, tab counts, and table all reflect only the selected competitor, never a blend across all of them.
The selection lives in the page URL (?competitor=…), so a comparison view is shareable and survives a refresh. If you track only one competitor, there are no pills — the page just compares against that one. On first load, the page defaults to your oldest competitor (the first one you added), not whichever comes first alphabetically.
Switching competitors resets the view tab back to its default ("Both > 0") so you land on the same first paint you'd get on a fresh page load, rather than carrying a stale filter over from the previous competitor.
Why don't all my products show up here?
The table has three view tabs, and the default isn't "show everything":
- All — every matched pair, including products only one of you actually sold this week.
- At least one > 0 — pairs where you or the competitor moved at least one unit.
- Both > 0 — pairs where both of you moved units. This is the default tab.
The page opens on Both > 0 on purpose: that's the real head-to-head fight — products you both stock and both sold this week — rather than a long list dominated by items only one side carries. So if a product you expected is missing, it's usually because it didn't sell on both sides in the last 7 days. Click All to see every matched pair, including one-sided ones.
If a tab is empty, the page tells you why: whether the competitor has no matched pairs at all yet, whether other competitors have matches but this one doesn't, or whether pairs exist but none survive the current filter (in which case it nudges you to try a different view tab).
Each row also carries a small confidence dot next to the product name — high, medium, or low — showing how sure the matcher is that it lined up the right two products. Hover the dot for the explanation. Every column (your units/revenue/inventory, theirs, and the deltas) is sortable by clicking its header.
How do I get more exact inventory with Algolia?
By default, On Belay reads a competitor's public Shopify product feed (/products.json), which is enough for inventory snapshots and inferred velocity. For a sharper read, a competitor record can instead use that store's Algolia search index, which exposes real signals like inventory quantity, recently-ordered counts, on-sale status, vendor, and product type. The scanner uses Algolia automatically for any competitor whose record has all three of algoliaAppId, algoliaApiKey, and algoliaIndexName set; otherwise it falls back to the public Shopify feed. A Shopify Storefront token and a product-type allowlist (to keep a very large catalog within search limits) can be configured the same way.
Where do you enter these? Not from the dashboard — at least not yet. The Add competitor form only collects a name and a storefront URL, and there's no edit screen for a saved competitor. The advanced fields (Algolia app ID, search key, index name; Shopify Storefront token; product-type allowlist) live on the competitor record and are read by the scanner, but the only way to populate them today is directly in the database. If you want exact-inventory reads for a competitor with a large catalog, contact On Belay and we'll set the keys on that record for you. Once they're set, the Tracked competitors list shows an Algolia badge on that competitor so you can tell at a glance which ones are reading the richer source.
Can I pause a competitor without deleting it?
Every competitor has an on/off switch (enabled), and the scanner only scans competitors that are switched on — so pausing one without losing its history is something the system is built to do. The Tracked competitors list even reflects the state visually: an active competitor shows a filled check, a paused one shows a muted icon.
In today's dashboard, though, there's no button to flip that switch — competitors are created switched on, and the only action the UI exposes is Delete (which removes the competitor and all of its snapshot data permanently). So while pausing is supported by the data model, it currently has to be done on our side. If you need a competitor paused rather than deleted — for example to stop scanning temporarily while keeping its accumulated history — contact On Belay and we'll switch it off for you.
Billing
Competitive Intelligence is included with your base plan — no metering and no add-on charge. See Billing.
Tips
- Two fields are enough. Name and storefront URL get you scanning. For more exact inventory on a big catalog, ask On Belay to add that store's own public keys — see Algolia.
- Read inferred numbers as directional. Velocity and revenue are estimated from inventory movement between scans — great for trends and head-to-head comparisons, not a substitute for a competitor's actual sales.
- Give it a few cycles. Velocity needs at least two snapshots to compute, so the first read is a baseline; the picture sharpens over the following scans.
- Start on "All" if a head-to-head product is missing. The Head-to-Head page defaults to the "Both > 0" tab, so it only shows products both stores sold this week. Switch to All to see every matched pair.