Competitor price and stock board for your Shopify catalog

See where you are overpriced against live competitor pages, check the cheaper one is actually in stock, and push a new price to Shopify in one click.

App
FirecrawlShopifyGoogle SheetsOperationsMarketingResearch & MonitoringData Sync
PromptCreate

Build me a competitor price and stock board that my ecommerce team opens every morning before deciding what to reprice. This is a monitor and approve tool, not an auto-repricer: no price on my store ever changes without a person typing a number and clicking apply, and the app must show the resulting margin before that click.

The main screen is a board of my Shopify catalog. Load products with Shopify List Products and their variants with Shopify List Variants, and show one row per variant I am tracking, with the product title, variant name, SKU and my current price. Only show rows that have at least one competitor page mapped to them, and give me a separate Catalog view listing everything in the store so I can pick which products to start tracking and paste competitor URLs onto them.

Against each tracked product, show the competitor pages I have mapped to it. Refreshing is on demand, not scheduled: a Refresh button on each row, plus a Refresh all button at the top of the board, runs Firecrawl Extract Structured Data against the mapped competitor URLs and pulls back price, currency, stock status such as in stock, out of stock or preorder, and any promotion or discount banner text on the page. Store the latest extraction per competitor URL with the timestamp so the board can show how fresh each number is, and keep the previous value so I can see whether a competitor moved since the last refresh. If an extraction fails or comes back with no price, mark that competitor row as stale with the reason rather than silently showing an old number as current.

Each product row shows my price, the cheapest competitor price, the gap in money and the gap in percent, whether that cheapest competitor is actually in stock, and my margin if I match them. By default the cheapest competitor calculation ignores competitors that are out of stock, because a cheaper competitor who is sold out is not a reason to drop my price, and there should be a toggle to include them anyway. Show the out of stock competitors on the expanded row regardless, greyed out and labelled, so I can still see them. Sort the board so the products where I am most overpriced float to the top, using the percent gap, and let me re-sort by money gap, by margin at match, or by refresh age. Flag rows where the cheapest competitor is running a promotion, since that price may be temporary.

Margin needs a unit cost. Let me enter and edit a unit cost per variant inside the app, stored in the app, importable by pasting a list of SKUs and costs. Where a cost is missing, show the price gap but display the margin cell as Cost needed with an inline field to fill it in. Let me set a floor margin percent in settings, and warn me clearly on the row and in the confirm step if the price I am about to apply would land under that floor.

From any row I can type a new price and apply it. Applying calls Shopify Update Variant to set the new price on that variant, and on success appends a row to my Google Sheet with Google Sheets Append Values: timestamp, product title, variant, SKU, old price, new price, the cheapest competitor price and URL that informed the change, the competitor stock status at the time, the margin at the new price, and the name of the person who applied it. This is my price history, since Shopify does not keep one. Show a confirmation step with the before and after price and the resulting margin, and if the Shopify update fails, say so on the row and do not write anything to the sheet. There should also be a History view that reads the log back with Google Sheets Get Values, so I can see every change we have made and filter it by product.

Mapping products to competitor URLs is the tedious part, so give me a Find matches button on each product that kicks off a background agent. The agent takes the product title, brand and any identifying attributes, then uses Firecrawl Search Web restricted to the competitor domains I have listed in settings to find candidate product pages, and uses Firecrawl Scrape URL on the promising results to read the actual page. It proposes up to a handful of candidate URLs per product, each with the competitor name, the page title, the price it saw, and a short confidence note explaining why it thinks this is the same product or where it is unsure, for example a different pack size, a different colourway or a bundle rather than a single unit. The proposals land back in the app as pending suggestions on that product, and nothing is saved to the mapping until I confirm it. I can confirm a suggestion, reject it, or edit the URL before confirming. Show the agent as running on the row while it works so I know something is happening, and let me kick it off for several products at once from a bulk action on the board.

A settings area holds the competitor list, which is a set of competitor names with their domains, used both to restrict the match search and to label competitor prices on the board, plus the Google Sheet the price history is written to, the floor margin, and the default rule about out of stock competitors. Persist the product to competitor URL mappings, the unit costs, the pending match suggestions and the latest extraction snapshots in the app so the board is populated the moment someone opens it, before any refresh runs.

Keep the whole thing readable at a glance for a merchandiser standing with a coffee: dense table, clear money formatting with currency, red for where I am overpriced against an in stock competitor, neutral for where I am at or below the market, and an obvious visual difference between a competitor number pulled minutes ago and one that is days old. The point of the app is that someone opens it, reads the top ten rows, and makes a handful of deliberate price decisions.

What does this prompt do?

  • Lists your Shopify catalog alongside the competitor pages you have mapped to each product, with prices, stock status and promotion banners refreshed on demand.
  • Every row shows your price, the cheapest in-stock competitor, the gap in both money and percent, and the margin you would keep if you matched them.
  • Products where you are most overpriced float to the top, and nothing reprices itself: you type the new price, see the margin, and click apply.
  • Applied changes go straight to Shopify and append to a Google Sheet, so you keep the price history Shopify does not give you.

What do I need to use this?

  • A Shopify store you can edit product prices in
  • A Firecrawl account for reading competitor pages
  • A Google Sheets file to hold the price change history
  • A short list of the competitor websites you want watched
  • Unit costs for the products you want margin figures on

How can I customize it?

  • Change the list of competitor domains the match finder is allowed to search
  • Decide whether out of stock competitors count when picking the cheapest price
  • Set a floor margin so the board warns you before you apply a price that dips under it
  • Choose which part of the catalog appears on the board, such as a single collection or vendor

FAQs

Does this change my prices automatically?
No. Nothing moves unless you type a new price and click apply, and the board shows the margin you would be left with before you click. It is built to help a person decide, not to reprice behind your back.
How does it know which competitor page matches my product?
You can paste competitor URLs yourself, or use the Find matches button. That sends a background helper to search the competitor sites you listed for the product, read the candidate pages, and propose matches with a short note on why each one looks right. Nothing is saved until you confirm it.
Why does stock status matter so much?
A competitor who is cheaper but sold out is not a reason to drop your price. The board pulls stock status alongside price and, by default, ignores out of stock competitors when it works out the cheapest price you are being compared against.
Where does the price history live?
In a Google Sheet you own. Every applied change appends a row with the product, the old price, the new price, the competitor price it was based on, the time and who made the change, so you can look back at what you did and why.
Can I use it for just a handful of products?
Yes. The board only shows products that have at least one competitor page attached, so you can start with your ten most price-sensitive lines and add more as you map them.
How often does it check competitor prices?
Whenever you press refresh. There is no background schedule, so the numbers you see are the ones you pulled this morning, and you can re-check a single product before you act on it.

Related templates

Prospecting desk that builds account lists from the live web

Stop buying stale lists. Reps run a saved search, work the results like an inbox, and only the accounts they approve ever reach your CRM.

Hyperbrowser
HubSpot
Google Sheets
App
Influencer campaign roster board with AI creator briefs

Drag creators through Sourced to Wrapped on a board grouped by campaign, with audience stats on every card and a one-click brief for each creator.

HypeAuditor
Google Sheets
Notion
App
Morning repricing console for Shopify with margin-safe rules

Pick a repricing rule, send an assistant out to check competitor pages, then approve the new prices that clear your margin floor.

Hyperbrowser
Shopify
Google Sheets
App
Pre-flight bounce check before you launch a cold email sequence

See the projected bounce rate for any outbound send before it goes out, and keep the launch button locked until the list is clean enough to be safe.

Hunter
Google Sheets
App
Per-device electricity cost explorer for your smart home

Pick any date range and see what each device in your home actually cost to run, not just how many kilowatt-hours it used.

Home Assistant
Google Sheets
App
Build a PR media list from real worldwide news coverage

Search three months of global coverage on your topic, rank the outlets actually writing about it, and draft a tailored pitch for each one.

GDELT
Google Sheets
Gmail
App

Stop opening five competitor tabs before you change one price.

Get one board that shows the gap, the stock status and your margin, with the apply button right there on the row.