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.
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?
How does it know which competitor page matches my product?
Why does stock status matter so much?
Where does the price history live?
Can I use it for just a handful of products?
How often does it check competitor prices?
Related templates
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.
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.
Pick a repricing rule, send an assistant out to check competitor pages, then approve the new prices that clear your margin floor.
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.
Pick any date range and see what each device in your home actually cost to run, not just how many kilowatt-hours it used.
Search three months of global coverage on your topic, rank the outlets actually writing about it, and draft a tailored pitch for each one.
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.