Bulk price editor for your Clover menu and inventory

By General Input

Change prices across every Clover item in one pass, preview each old and new price with margins, then apply and keep a full history.

Integrations

  • Clover
  • Google Sheets

Type

App

Categories

  • Operations
  • Finance

Build me an app for changing prices across my Clover menu in bulk, so I never have to edit items one at a time or export my whole inventory to a spreadsheet and reimport it. I open this when a supplier raises costs, when the menu changes for a season, or when I want to push a cash discount adjustment across the board.

The main screen is a table of every inventory item, loaded with Clover List Inventory Items and paged through with limit and offset until fewer than limit come back. Columns: item name, category, current price, cost, and current margin. Populate each item's category by expanding categories on the list call, and fall back to List Item Categories for anything that comes back without one. Above the table put a search box that filters on item name and a category dropdown populated from Clover List Categories. Every row has a checkbox, plus a select all control that selects everything matching the current filter rather than just the visible page. Show the selected count in the header at all times.

With a set of items selected I pick one bulk action: raise or lower price by a percentage, raise or lower price by a fixed dollar amount, set every selected item to one specific price, or round every selected price to the nearest .25 or the nearest .99. Clover prices are integers in cents, so do all arithmetic in cents and round to whole cents. Nearest .99 means the nearest whole dollar ending in .99. Display everything to me in dollars.

The preview step is mandatory and this is the most important part of the app. Choosing an action never writes anything. It builds a preview table with one row per selected item showing item name, current price, new price, the amount of the change, current margin, and new margin. Margin is price minus cost divided by price. Items with no cost on file show a clear no cost on file marker and are left out of the margin warnings. I set a target margin in the app settings, and any row whose new margin falls below it is flagged so I can see when a change pushes an item under water. Above the preview show a plain sentence with the count, like This will change 42 items. Keep the Apply button disabled until a preview has been generated for the current selection and settings, and invalidate the preview the moment I change the selection, the action, or the numbers.

Apply writes each change through Clover Update Inventory Item, one item at a time, sending the item id and the new price in cents. Clover resource updates are POST and there is no PATCH, so send the update as a POST to the item. Stay under Clover's rate limit, and when a 429 comes back, wait for the retry-after value and try again. Show live progress with a running count while the batch runs. If some items fail, show exactly which ones, keep them selected, and let me retry only the failures. End with a summary of how many succeeded and how many did not.

Every applied batch appends to a Google Sheets change log using Append Values, one row per changed item, so I have the price history Clover does not keep. Columns: timestamp, batch id, change type, item name, item id, old price, new price, old category, new category, and the name or email of the app user who ran it. Write prices in the log as dollars with two decimals so the sheet is readable, and convert back to cents when reading them. Write a header row when the tab is empty. The spreadsheet id and tab name live in an app settings screen along with the target margin, and are saved so I do not retype them.

Give me an Undo last batch button. It reads the log back with Google Sheets Get Values, takes every row belonging to the most recent batch id, and restores each item's old price through Clover Update Inventory Item. Run it through the same mandatory preview with the count so I can confirm before it writes. Log the undo as its own batch, marked as an undo of the original batch id, and disable the button once the most recent batch has been undone. Only the most recent batch needs to be undoable.

A second view handles bulk category reassignment, which is the other job that is painful item by item. Use the same filterable table and selection behaviour, then let me pick a target category from Clover List Categories. Show a preview listing each selected item with the categories it belongs to now and the category it will move to, plus the same count sentence, then apply with Clover Add Items to Category. Append those changes to the same Google Sheets log with change type set to category and the old and new category recorded in place of old and new price.

Anyone on my team who opens the app works against the same Clover location, and the log records who ran each batch, so the history tells me who changed what and when.

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