Upload sales data
Export a sales report from your POS as a CSV and upload it here. Once a sales file is loaded and matched to your menu items, several things unlock: your food cost percentage becomes a real sales-weighted number instead of an estimate, the variance report can compare theoretical vs. actual ingredient consumption, and — on Pro — demand forecasting has real history to learn from.
What the CSV needs to contain
At minimum, each row needs:
- A date (when the sale happened).
- An item name (matched against your menu items).
- A quantity sold.
Most POS exports include extra columns (price, discounts, categories) — Rinvy ignores the ones it doesn't need. The matcher does best-effort header detection; if it can't find the columns, the upload screen lets you map them manually.
The upload flow
- Export a sales report from your POS, daily or weekly.
Go to Sales data and upload the file.
- Rinvy parses the rows and attempts to match each line to a menu item by name.
Review any lines the matcher left Unmatched. Pick the right menu item from the Map to Menu Item dropdown, or create a new menu item if one's genuinely missing.
- Confirm the upload. Matched lines write into the daily sales table.

Matching logic
The matcher uses fuzzy comparison against menu item names. A POS export line "MARG PIZZA" will usually match a menu item called "Margherita Pizza". Where it can't match a line, you'll see an Unmatched badge and a "Map to Menu Item" dropdown to confirm.
Tip: the matcher remembers your past confirmations. Once you've matched "MARG PIZZA" to "Margherita Pizza" the first time, future uploads with the same string match automatically.
Items you never want to track
Merch, gift cards, and anything else sold through the POS but not tracked in inventory will come back as unmatched on every upload. On an unmatched line, Always skip saves that decision: the item is skipped on this upload, cleared from any other upload still waiting on it, and resolved automatically from then on — so an upload containing only merch and matched dishes never lands in review at all.
Skip once is still there for a one-off you don't want to rule on.
Saved rules live under Always skipped on the Pending Review tab. Removing one sends the item back to the review queue on the next upload that contains it; lines already skipped stay skipped.
What gets stored
Two tables fill from the upload:
- Sales uploads — the raw uploaded file and its line items, kept for audit.
- Daily sales — denormalized per-menu-item totals by date. This is what the variance report and the forecaster read from.
Newly landed sales also mark the current demand forecast as Outdated ("New sales data has come in since") — the baselines it reasoned from are now behind. See demand forecasting for regenerating.
How often to upload
Whatever cadence works — daily, weekly, monthly. More frequent uploads mean:
- The variance report can run on fresher data.
- The demand forecaster has more recent history to learn from.
Most operators settle on weekly. Daily is fine if you have automated exports.
Common mistakes
Skipping the review step
Auto-match is fast but not perfect. An unmatched line that you submit anyway becomes a sale with no menu item attached — it appears in totals but doesn't drive variance or forecast for any dish.
Uploading overlapping date ranges
Rinvy doesn't dedupe overlapping uploads automatically. If yesterday's upload covered Mon–Fri and today's covers Wed–Sun, Wed–Fri get double-counted. Either align your exports to non-overlapping windows or delete the older upload first.
Inconsistent item names in the POS
If "Margherita" appears as "MARG", "Margherita Pizza", and "Pizza Margherita" across exports, the matcher confirms each variant separately. Pick a canonical name in the POS so each item only needs to be matched once.