YieldSheet
True cost, real margins, from your invoices.
Forgot password?
Your data is private to your account and synced across your devices.
YieldSheet

Invoice capture · unit pricing · trim yield · recipe margins

One-time setup: paste your scanning access code to enable invoice & recipe scanning.
Everything else works without it. Your access code was sent to you when your account was set up — open Settings to paste it in.
⚠ Your data is not saving to storage.
Everything on screen is in browser memory only and will be lost when you close the app. Download a backup now, then use Import to restore it later.

Photograph an invoice

Snap or upload a vendor invoice. It'll read the line items so you can drop them straight into inventory.
Already have a picture saved? Pick one from your phone or computer.
Invoice preview
If the invoice is sideways, rotate it upright first — it reads much more accurately.

Inventory & unit pricing

Every item's price broken into $/lb, $/oz, $/kg and more. Set a trim loss % to see true yield cost.
Add an item manually
No items yet — scan an invoice or add one above.
Backup — if a save ever fails, export your data so nothing is lost, then import it later.

New recipe / portion

Build a recipe from your inventory to see true cost per portion and a suggested menu price at your target margin.

Scan a recipe (optional)

Upload a photo or PDF of a recipe — it'll pull the name, servings, and ingredients, then you match each one to your inventory so cost is calculated from real prices, converting units automatically where it can (e.g. a recipe calling for 2oz of something priced by the lb).

Recipe details

e.g. 8 if this batch fills 8 containers — cost per portion is calculated from this
Enter your real menu/shelf price to see the margin you're actually getting

Ingredients

Measuring a dry good by spoon/cup, or citrus by juice volume? Those costs use average density & juice-yield assumptions — good for planning, not exact. Tune them under Settings → Measurement assumptions.
Or add a Prepared Item as an ingredient (cooked $/lb) ▾
Use a house-prepared cooked item — its yield-adjusted finished cost gets carried into this recipe.

Recipe log

Every saved recipe. Costs re-calculate from current inventory prices, so these stay current as your invoices come in.

Scanning access

Invoice and recipe scanning runs through YieldSheet's secure service — no API key needed. Paste the access code from your welcome email once; it's stored in this browser only.
What this is: your access code identifies your shop's account so scans are counted against your plan. Scanning is included in your subscription — there's no separate AI bill to set up. Keep the code private; if it's ever shared or lost, contact support to reissue it.

Cloud sync off

Connect a free Google Firebase database so your phone and computer share the same data. Scan on the phone, hit Sync on the desktop, and it's there. Without this, each device keeps its own separate data.
Setup steps (one time, ~10 min, free, no card)
  1. Go to console.firebase.google.com and sign in with your Google account.
  2. Create a project. Name it anything (e.g. yieldsheet). You can turn Google Analytics off — not needed.
  3. In the left sidebar: Build → Firestore Database → Create database. Pick a location near you. Choose Start in test mode for now.
  4. Go to the Rules tab in Firestore, replace what's there with the rules below, and click Publish.
  5. Click the gear icon → Project settings. Under "Your apps" click the web icon (</>), register an app (any nickname, skip hosting).
  6. You'll see a config block. Copy the projectId and apiKey values into the boxes above.
  7. Click Generate for a workspace ID, then Save & connect.
  8. On your phone, enter the same three values.
rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /workspaces/{ws}/{document=**} {
      allow read, write: if true;
    }
  }
}
Be aware: these rules allow anyone with your Project ID, API key and workspace ID to read or change your data — normal for a small internal tool, but it means your workspace ID acts like a password. Use the generated random one rather than something guessable, and keep the three values private. Proper per-user logins would be the next step if you ever sell this.

Measurement assumptions

When you buy a dry good by weight (a pound of paprika) but use it by volume in a recipe (2 tsp), or buy whole citrus by the piece but call for juice by the cup, YieldSheet converts between the two using reference values. YieldSheet uses USDA-based defaults for common ingredients; substitute your own for more accurate assumptions. Each field is left blank on purpose and shows its default as a faint hint — that default is used until you type your own value.

Dry-good density — grams per cup

Citrus juice yield — ml per average fruit

Cooking yield — % of raw weight left after cooking

YieldSheet uses USDA-based defaults for common ingredients — beef, pork, poultry, lamb, veal, and now fish & seafood. Substitute your own for more accurate assumptions: your oven, temperature, hold time, and species all shift the number. Fields are left blank on purpose — the default (shown faint) is used until you type your own. And once a Prepared Item has two or more logged cooks, YieldSheet uses your measured average instead.
How these are used, and their limits. Volume-to-weight and juice-yield figures vary with brand, grind, humidity, packing, ripeness and how a cook scoops or squeezes. YieldSheet applies a single average per ingredient to estimate cost, and real results will differ batch to batch. Treat the resulting costs and margins as planning estimates, not guarantees — verify anything you price a menu or a sale on. YieldSheet and its makers accept no liability for pricing, purchasing or other decisions made from these estimates. Overrides you set here apply shop-wide to every recipe that uses the matched ingredient.

Your data

Your data is saved to your account and synced across every device you sign in on. You can download a full backup any time for your own records, or import one you've saved.