Competitor price and stock board for your Shopify catalog

By General Input

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.

Integrations

  • Firecrawl
  • Shopify
  • Google Sheets

Type

App

Categories

  • Operations
  • Marketing

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.

Related prompts

Explore more prompts
Call overdue Xero customers with an AI collections agentLocal listing health board for every location you manageLet support send one-off Loops emails without an engineerStop cold emails to anyone with a live deal in PipedriveiMessage campaign console with pre-flight checks and delivery boardLinkedIn Ads budget pacing dashboard for every client accountFront desk appointment confirmation board for the next 3 daysGive your team Looker numbers without buying more seatsBuild audience segments from product usage and push to LoopsTurn the people who engage with your posts into Pipedrive leads