Visible only when your shop is connected to Loyverse POS. Not connected yet? See Loyverse integration for the connect flow.
Map what sells first
The page opens on Best sellers — variants ranked by units sold in the last 30 days, with a Last sold column beside it. A catalog of 90 variants usually has 30-odd carrying the business and a long tail that hasn’t sold in months; this is how you tell them apart before spending an evening mapping.
Switch to A–Z when you’re hunting for one specific variant rather than working down the list.
Choosing the period
This month / Last 30 days / Last 90 days sets what the Sold column counts. This month is the calendar month, so it resets on the 1st — useful when you’re working through the catalog in sittings and only want to see what’s rung up since you last looked. Last sold ignores the period. It always looks back 90 days, because it answers a different question: not “how much”, but “is this still on the menu at all”.The counters
The four tiles count what sold in the selected period, and each one filters the table to match:
Unmapped deliberately excludes items that didn’t sell. A shop with 91 catalog items and 12 active ones has 12 decisions to make this month, not 91 — a backlog you can never clear is one you stop reading.
Both columns count receipts, not ringgit — you’re ranking by how often you’d use the recipe, and revenue would push a RM 45 bag of beans above a latte you sell 200 of. Refunds are ignored: a refund means a transaction was reversed, not that the drink is unpopular.
Variations
If you price through modifiers — oneCafe Latte item with hot and ice options rather than two separate items — each row shows a N variations link. Open it to see every combination customers have actually ordered, with its own sold count and price.
This is where the price column earns its place:
A gap like that says the two aren’t the same drink — iced needs ice, often more milk, sometimes a different cup — so costing them as one recipe would quietly overstate the margin on one and understate the other.
Variations follow the base row
You don’t map every combination. A variation shows Follows base, meaning it counts against whatever recipe you mapped the item to. MapCafe Latte once and all 20 of its variations are covered.
Override a variation only where the ingredients genuinely differ. Open its picker and pick a recipe, and only that combination changes — everything else keeps following the base. The item row then shows how many you’ve costed separately.
How to map (one-time per variant)
1
Open Loyverse Items
Sidebar → Loyverse Items. Each row is a Loyverse variant (e.g. “Latte (Hot)”, “Latte (Iced)”) grouped by parent item.
2
Pick a Recipe
From the dropdown next to each variant. Multiple variants can map to the same Recipe — Hot + Iced Latte → one “Latte” recipe.
3
Sync now (if needed)
The Sync now button at the top pulls the latest catalog from Loyverse. 5-minute cooldown between syncs to stay polite to the API.
What you get after mapping
- Recipes index fills in three columns: Sold this month, Revenue, Gross margin. They only render in the index’s Full view — see Minimal and Full views if the index looks unchanged after mapping.
- Backfill runs automatically — historical receipts that match the variant get attributed to the recipe within seconds.
- The Recipes form shows a read-only “Linked Loyverse items” block listing what’s currently pointing at each recipe.
Variants without a recipe
- Still count toward your total Pulse revenue.
- You just don’t get the per-recipe breakdown for them.
- Sidebar shows an “(N unmapped)” badge so you don’t forget.

