Your CRM says the invoice is ₹1,00,000. Your GL says ₹99,800. Finance is asking questions. The gap isn't a rounding error—it's usually one of nine systematic breaks in how data moves between your CRM, billing system, and accounting software. None of them are obvious until you know where to look. This playbook walks you through all nine in 90 minutes, with a repeatable audit checklist you can run monthly. Why this matters: the hidden audit cost When invoices don't reconcile, your finance team doesn't just spot-check one number—they audit the whole chain. An hour of reconciliation work costs ₹2,000–₹3,000 in loaded labour. If this happens 20 times a month, you're burning ₹40,000–₹60,000 a year on friction that automation could prevent. More important: unreconciled invoices delay cash recognition, muddy your accounts receivable aging, and create compliance exposure if your auditor flags systematic GL mismatches. The nine sync breaks almost never overlap. If you fix one and invoices still don't match, you've got a different one—or more than one at once. That's why this audit follows a fixed sequence. Break 1: Tax code mapping mismatch Your CRM calculates tax at 6% because that's the customer's default. Your GL code expects 0% for a tax-exempt customer. The invoice shows net ₹1,00,000 + tax ₹6,000 = ₹1,06,000, but GL posts the line as ₹1,06,000 without splitting the tax. How to audit: Pull 10 recent invoices. For each, compare the tax rate used in your CRM to the tax code assigned in your GL. Look for: Invoices marked exempt in GL but taxed in CRM Multi-line invoices where only some lines are exempt Customer tax IDs missing or mismatched in your GL mapping table The fix: If you're using separate systems, create a tax-code reconciliation table: customer ID → GL tax code. Test it on 5 invoices before going live. If you're on unified invoicing , ensure your GL tax-code field syncs with your customer master. Break 2: Currency rounding diverges You invoice a customer in SGD at ₹75.50 SGD = ₹3,775 INR (at 50 INR/SGD). Your CRM rounds to ₹3,775. Your GL uses a different conversion rate (49.95 INR/SGD) and posts ₹3,773.25. GL rounds to ₹3,773. Two rupees vanished. Now do that across 200 invoices and you've lost ₹200–₹400 in reconciliation noise. How to audit: Filter invoices for non-INR currencies. Pull the exchange rate used in your CRM on the invoice date. Cross-check it against the rate your GL used for the same transaction. Use a free API like XE.com or OANDA to validate which rate is closest to the spot rate on that date. The fix: Standardize on a single exchange rate source (your bank's end-of-day rates work best). Lock the rate at invoice time in your CRM, and configure your GL import to use the same locked rate, not re-convert at posting time. Document the rounding rule: round to the nearest paisa before posting. Break 3: Line-item GL splits are wrong You invoice ₹50,000 for consulting and ₹50,000 for software. Your CRM creates one invoice line. Your GL chart splits consulting to GL 4100 and software to GL 4200. Whoever hands off the data posts both to GL 4100 by mistake. Invoice total matches (₹1,00,000), but the GL split is wrong, and your revenue reports are useless. How to audit: Pick 5 multi-line invoices. For each line item, verify: The GL account code in your CRM matches the intended GL account If multiple line items map to different GL accounts, check the GL import for logic errors (e.g., 'always post to first account' bug) Discounts or adjustments post to the correct GL account (usually a contra-revenue or discount account, not the main revenue account) The fix: In your CRM or billing system, set up a line-item-to-GL mapping. If you can't do it natively, build a lookup table: product code → GL account. Validate the mapping on a test invoice before syncing to GL. Test both the happy path (standard product) and edge cases (custom services, bulk discounts, one-off adjustments). Break 4: Partial payments aren't recorded in GL on time Customer pays ₹30,000 of a ₹1,00,000 invoice. Your CRM records it immediately. Your GL still shows ₹1,00,000 owed because the payment post hasn't synced yet—or never syncs at all. A week later, finance reconciles and finds a ₹30,000 phantom AR balance. How to audit: For the last 20 invoices marked 'Paid' in your CRM, check your GL AR account: Does the GL show the same balance as CRM? For invoices with partial payments, does GL show an open balance matching the CRM? Are payments posting to the AR contra-account (usually GL 1200 or 1201) correctly? Run a reconciliation report: sum all CRM invoice balances vs. GL AR balance. They must match exactly. The fix: Ensure your payment processor (Stripe, Razorpay, etc.) syncs directly to GL, not through a manual step. If you're using separate CRM and accounting software, automate the payment sync so GL receives the payment record within 1 hour. Document the delay tolerance in writing (e.g., 'payments post to GL within 4 hours of receipt')