PlateLedger

How PlateLedger works

Theoretical depletion, reconciled by counts. Here is every screen and what it is for, in the order you meet them.

First-time setupAbout an hour

Six steps, saved as you go.

  1. Connect your POS. Square or Clover approve in a click and sync the menu plus 30 days of orders. No API? Skip it and use CSV imports.
  2. Map locations. One location maps itself. Groups tie each POS location to a PlateLedger location.
  3. Review your menu. Top sellers first. Map the twenty that matter; the rest can wait.
  4. Build recipes. Ingredients inline, quantity and unit per serving, a waste % where prep loses material.
  5. Opening count. What is on the shelf today. Every later number is measured from this.
  6. Notification email. Where alerts and the daily digest go.
Finished plates on a restaurant pass under heat lamps
Every day

Dashboard

Runs out next, sorted by days of stock with a run-out date. Open alerts. Menu items that sold without a recipe. Today's depletion and what it cost. POS connection health. A Suggested orders button when a supplier has something to order. One location at a time; switch in the header.

Alerts

Five kinds, checked every 15 minutes or on demand: below reorder point, runs out within lead time, negative stock, unmapped menu items, POS needs re-authorization. Acknowledge, snooze until a date, or let it resolve itself when the condition clears. Choose which kinds email immediately and when the digest arrives.

Ledger

The audit trail per ingredient and location: every sale, receipt, waste entry and count adjustment with time and quantity. Log waste from here with a reason; it lowers stock without touching the usage rate.

Recipes and menu mapping
A printed order ticket clipped above a kitchen pass

Recipes

Name it, set the yield (1 for a plated dish, 40 for a batch of salsa), add lines: ingredient, quantity, unit, waste %. A line can be another recipe, one level deep. Cost per serving updates as you type. Change a recipe any time; past ledger rows are never rewritten.

Menu mapping

Every item and modifier your POS sent, with an Unmapped filter. Map an item to a recipe with a portion multiplier for sizes. Bulk map by name does the obvious ones in one click. Modifiers map to a positive or negative ingredient amount, or a recipe; unmapped modifiers are ignored so a sale is never blocked.

Ingredients

Base unit, storage area, par level, reorder point, reorder quantity, cost per base unit, unit conversions (1 case = 24 each), and per-location overrides. Par, reorder and cost edit inline. Archive instead of delete so history stays intact.

Suppliers and purchase orders

Suppliers

Email, phone, lead time, order cutoff, delivery days, minimum order. Under each: supplier items with SKU, pack size and pack unit, cost per pack, and a preferred flag when several suppliers carry the same thing. Pack size drives the rounding.

Orders

  1. Suggested orders group what needs ordering by preferred supplier: par − on hand − on order, rounded up to packs.
  2. Draft. Edit packs, add or remove lines, notes, expected date.
  3. Approve (manager or owner). Auto-send suppliers get it now.
  4. Send. HTML order plus PDF attachment, reply-to your notification address. Or download the PDF and send it yourself.
  5. Receive. Packs delivered per line. Stock rises, cost updates, order becomes Partially received or Received.
Produce crates being unloaded at a restaurant back door
Stock counts and imports
Shelves of labelled containers inside a walk-in cooler

Stock counts

Start a count for a location (one open at a time). The sheet is built for a phone: one card per ingredient, grouped by storage area, big inputs, the conversion hint beside each field. Save as you go. Submit writes a count adjustment so on hand equals what you counted, and records theoretical versus counted for the variance report. The count applies at the time you started it, so sales during the count are not double-counted.

Imports

For POS systems without an API, or to backfill history. Choose the source (Toast, Shift4/SkyTab or Generic), preview the detected columns, fix the mapping once, resolve unmatched item names, commit. Each row becomes a sale on that business day. The same file twice is a no-op.

ReportsEvery one exports CSV

Six reports, any date range, one location or all.

ReportAnswers
Inventory on hand and valueWhat is on the shelf and what it is worth
Usage by ingredientTheoretical consumption and waste for the period, with cost
VarianceTheoretical vs counted per ingredient, with dollar impact
Sales mixQuantity sold per menu item with theoretical food cost %
Purchase historyOrders by supplier, sent and received totals
Days of stockThe "what runs out next" table with the forecast explanation
Integrations

POS systems

POSHowStatus
SquareOAuth connection: menu, modifiers, orders, refunds, webhooksLive
CloverOAuth connection: one merchant per locationLive
ToastSales-mix CSV importCSV
Shift4 / SkyTabSales-mix CSV importCSV
GoDaddy POSDirect connectionComing
Anything elseGeneric CSV template, or the API with a keyCSV / API
Security and operations

Plain facts.

Your data
Each restaurant group gets its own SQLite database. Backed up nightly.
Access
Session cookies for people, API keys for scripts. Three roles: owner, manager, staff.
In transit
TLS everywhere. POS tokens are stored encrypted and can be re-authorized or disconnected from Settings.
Leaving
Every report exports CSV, and the API returns everything the app shows. No lock-in by omission.

Roles

OwnerEverything, including billing, members, API keys, deleting the org
ManagerEverything except billing, members, API keys
StaffView, run stock counts, log waste, acknowledge alerts

Try it on this week's menu.

Start free trialSee pricing