Food cost
Inventory

Restaurant Cost of Goods Sold: What Reaches the Ledger

Restaurant accounting sync status card showing which documents post to the ledger

What Actually Reaches Your Ledger (and What Doesn't)

A restaurant inventory-to-accounting integration posts documents, not cost calculations. Supplier invoices, goods received notes and credit notes flow into your accounting system, each carrying a live posting status. Your cost of goods sold (COGS) and your sales revenue do not - they stay inside the inventory platform as reports. Knowing which is which is the entire job at month-end.

Most finance teams assume "integrates with my accounting system" means "posts my period-end cost journals." It does not, and the gap is where trust in the numbers breaks. Here is the honest scope of a restaurant inventory accounting integration and where each figure actually ends up.

Document or figureReaches your accounting system?Where it lives
Supplier invoices and goods received notesYes, with posting statusYour ledger
Credit notes and supplier returnsYes, with posting statusYour ledger
Cost of goods sold (COGS)NoSupy dashboards and reports
Sales revenueNoYour point-of-sale system


This is not a Supy quirk - it is how the category works. Supy's accounting connectors sit inside its 75+ integrations alongside Xero, QuickBooks, Zoho Books and Wafeq, and every one of them pushes documents and posting status rather than a finished cost journal. Plan month-end around that fact and the rest of this article is a checklist. Ignore it and you will spend every close arguing with your own accounting system.

Why Your Food Cost Percentage and the Ledger Disagree

A group expecting cost of goods sold around 25% opens the accounting system, sees 20%, and stops trusting the numbers. Nothing has been stolen. The ledger only ever received purchase invoices - never the cost of what actually sold - so it is answering a different question than your recipes are.

A 5-point gap between the 25% food cost expected from recipes and the 20% shown in the ledger


Two things drive the gap, and both are timing, not error:

  • Theoretical COGS updates daily as you buy and sell. Actual COGS depends on a stock count, and a monthly count is too slow to steer daily cost decisions. Our guide on theoretical food cost versus actual walks through why the two diverge.
  • A day or two of sync lag means the inventory platform and the ledger are rarely looking at the same moment, so a snapshot comparison always shows a mismatch.

The fix is not to force the two numbers to match. It is to know which one answers which question: the ledger tells you what you paid suppliers, and Supy tells you what those goods cost as they sold.

The Accounting Setup That Silently Blocks Posting

The most common reason an invoice never reaches the ledger is not a bug. It is a missing setup step, and it fails silently - no error, no warning, just an invoice that quietly never posts until month-end refuses to reconcile.

The three checks every invoice must clear before it posts to the ledger: accounting category, supplier mapping, integration enabled


Three preconditions have to be true before a single invoice posts:

  • Every item needs an accounting category. Miss it and that item's invoices never post - one operator had to assign categories across roughly 800 items before their close would tie out.
  • Every supplier must be mapped on both sides. An unmapped supplier posts nowhere and reports nothing.
  • The integration has to be switched on. It has been found disabled at the start of onboarding more than once, blocking the entire close before anyone noticed.

Verify all three before your first period close, not during it. A test post of one invoice, confirmed on both sides, is the cheapest insurance you will buy all quarter.

Posting Across Legal Entities Without Hitting the Wrong Books

Multi-brand and central-kitchen groups carry a second trap: an invoice can post to the wrong legal entity. The cost is real - one entity's month-end will not tie out, and nobody knows why until someone traces it back to a mapping set once at go-live and never checked. Groups running a central kitchen hit this hardest, as our guide on where a central kitchen breaks ERP inventory modules shows.

BranchLegal entity in the ledgerMapping status
Harbour ViewCentral Kitchen HoldingsVerified
Airport OutletRetail EntityVerified
North BranchRetail EntityMissing - invoices posted to the wrong books


When a branch is mapped to the wrong entity, the fix is mechanical, not a support escalation: unpost the affected invoices, correct the venue-to-entity mapping, then repost so the export re-fires against the right books. Do the mapping check at go-live for every branch and entity, because a group only ever discovers it the hard way, at close.

Redesign Month-End Around What the Integration Can't Do

Once you accept that the integration posts documents and not cost journals, month-end stops being a monthly argument and becomes a fixed sequence. The integration handles the invoices; you own the two steps it cannot.

The five-stage month-end close sequence that works around the COGS posting gap


  • Pull actual COGS from your reports after the count. In Supy the numbers are already there in the interactive dashboards, in one-click spreadsheet exports by site and dish, or through the inventory platform API if you feed a data warehouse.
  • Confirm every invoice posted on both sides. A document can read as posted in one system and unsent in the other, so check both rather than trusting one.
  • Book the cost journal by hand from that COGS report. This is the step no integration in the category does for you.
  • Check entity and venue mapping before you reconcile, not after.
  • Reconcile and close.

Run that same order every month and the 5-point gap disappears - not because the systems finally agree, but because you stopped asking the ledger a question it was never posted to answer.

Your 60-Second Self-Check

Before your next close, work out which of these is already true in your operation:

  • Your accounting system's food cost looks lower than your recipes say it should - your cost journals are not being posted, only your invoices.
  • You only find unposted invoices when month-end will not reconcile - your item or supplier mapping has gaps.
  • One entity's numbers never tie out - a branch is mapped to the wrong books.

If any of these sound familiar, the answer is not more integration. It is deciding, on paper, what your integration posts and what you post by hand, then wiring your close around it. Start by pulling one month of actual cost of goods sold from your reports and comparing it line by line against what your ledger received - you can sanity-check your target with a food cost calculator before you do.

Book a Demo with Supy - close month-end with restaurant cost numbers you trust

Ready to optimize your restaurant operations?

Blog

Our operational insights

No items found.

Your questions 
answered

Everything you need to know about Supy — from setup to integrations, pricing, and daily use. If it’s not covered here, just ask.

What does a restaurant inventory accounting integration actually post to my ledger?
+

It posts documents, not cost calculations. Supplier invoices, goods received notes, credit notes and supplier returns flow into your accounting system, each with a live posting status you can check on the record. What it does not post is your cost of goods sold or your sales revenue - those stay in the inventory platform as reports and in your point-of-sale system. Treating the integration as a document pipeline rather than a full ledger sync is the single change that makes month-end predictable, because you stop waiting for journals that were never going to arrive.

Why is my food cost percentage lower in my accounting system than in my inventory reports?
+

Because the ledger only ever received your purchase invoices, not the cost of what actually sold. A group expecting cost of goods sold near 25% often sees closer to 20% in the accounts, and it looks like a problem when it is really a timing gap. Theoretical cost updates daily as you buy and sell, while actual cost depends on a stock count, and a day or two of sync lag means the two systems are rarely looking at the same moment. The fix is to read each number for what it answers, not to force them to agree.

Does Supy sync cost of goods sold journals to Xero or QuickBooks?
+

No inventory-to-accounting integration in this category posts finished cost of goods sold journals, and Supy is explicit about it. Supy connects to Xero, QuickBooks, Zoho Books and Wafeq to push supplier invoices, goods received notes and credit notes, and it shows live posting status on each document. Your actual cost of goods sold lives in Supy's dashboards and one-click reports, or through its API if you feed a data warehouse. At close you pull that figure and book the cost journal yourself. Knowing this upfront prevents the most common accounting-integration misunderstanding operators hit at go-live.

Why do some supplier invoices never post to my accounting system?
+

Usually because a setup step is missing, and it fails silently. Every item needs an assigned accounting category; miss it and that item's invoices never post. Every supplier must be mapped on both sides, or the invoice has nowhere to land. And the integration itself has to be switched on, which has been found disabled at the start of onboarding more than once. None of these throws an error, so the gap surfaces only when month-end will not reconcile. Test-post a single invoice and confirm it on both sides before your first close, rather than discovering the gaps during it.

How do I stop invoices posting to the wrong legal entity in a multi-brand group?
+

Verify the venue-to-entity mapping for every branch at go-live, not at close. In a multi-brand or central-kitchen structure, a branch mapped to the wrong legal entity sends its invoices to the wrong books, and nobody notices until that entity's month-end will not tie out. When it happens, the fix is mechanical: unpost the affected invoices, correct the mapping, and repost so the export re-fires against the right entity. Keep a simple table of branch to legal entity and check it whenever you add a location, because a new outlet is the most common way a clean mapping breaks.

When should I run a stock count if I want reliable actual cost of goods sold?
+

Often enough that the count cadence matches the decisions you make from it. Actual cost of goods sold depends on a physical count, so a monthly count gives you a number that is already weeks stale for daily cost control. Many groups move to weekly counts on high-value categories and full counts monthly, using theoretical cost daily in between. The point is not to count constantly; it is to know that a figure drawn from a monthly count answers a monthly question, and to stop comparing it to a daily theoretical number as if they should match.

How should I redesign month-end around an inventory-to-accounting integration?
+

Treat it as a fixed sequence rather than a monthly negotiation. First, pull actual cost of goods sold from your reports after the count. Second, confirm every invoice posted on both sides, since a document can read as posted in one system and unsent in the other. Third, book the cost journal by hand from that report, because the integration will not. Fourth, check entity and venue mapping before you reconcile. Then close. Running the same order every period removes the guesswork and turns the gap between documents and journals into a step you own rather than a surprise.

Ready to transform your operations?

Join 3500+ restaurant operators cutting costs, streamlining operations and making smarter decisions with Supy.