Your invoices and general ledger don't match. The totals drift 5–8%, your accountant flags it on the 25th, and you spend three days tracing rounding errors and tax code mismatches through Xero, your billing tool, and QuickBooks. By then, month close is delayed, and you've burned hours that should've been spent on the business. This isn't a Xero problem or an accounting software problem. It's a sync problem . Invoices split across systems, and each one interprets tax, rounding, and GL line assignment differently. Zapier automations bridge the gap, but they're brittle—they don't validate logic, they don't catch edge cases, and when the tax rule changes, you rewrite the zap. The fix is a nine-field audit that exposes where your data actually breaks, plus native automation that validates before it writes to the GL. The five places invoice reconciliation fails 1. Rounding on line-item tax An invoice has three line items at different tax rates. Line 1: ₹1,001 + 10% tax = ₹110.10. Line 2: ₹1,002 + 18% tax = ₹180.36. Line 3: ₹1,003 + 0% tax. Total due: ₹3,296.46. Your billing system rounds each line to two decimals and sums them: ₹110.10 + ₹180.36 + ₹0 = ₹290.46 in tax. Xero imports the invoice and recalculates tax on the total subtotal, then rounds the final result. If the GL entry is generated from Xero's rounded number, it diverges from what your billing system recorded by ₹0.01–₹0.04 per invoice. At 200 invoices a month, that's ₹2–₹8 unreconciled. The audit: Compare the tax total calculated in your billing system with the tax total in Xero's import, before it hits the GL. If they differ by more than ₹0.01, you have a rounding rule mismatch. 2. Tax code mismatches between systems In Xero, you assign Tax on Sales (standard 18% GST). In your billing tool, the same customer is tagged with "18% Standard." They look the same, but Xero's code is SGR18, and your billing system's code is TX001. When Zapier syncs the invoice, it maps TX001 to SGR18, but if the mapping table is outdated or incomplete, it falls back to "no tax" or "exempt." The invoice total matches, but the GL splits are wrong—tax goes to the wrong line, and the taxable revenue line is overstated. The audit: Export all tax codes from both systems. Build a mapping table in a spreadsheet with four columns: Billing System Code , Billing System Name , Xero Code , Xero Name . Run a sample of ten invoices and verify each tax line maps to the correct code in both systems before posting to the GL. 3. GL account assignment logic that drifts Your revenue recognition rule is simple: "Service revenue goes to GL 4010, product revenue goes to 4020." In Xero, you map it by line-item category. In your billing system, you map it by customer segment. A customer tagged as "Product" in your billing system but categorized as "Service" in Xero gets posted to 4010 in one system and 4020 in the other. The invoice total is right, but revenue is split across two lines, and your monthly revenue report by category is garbage. The audit: Pull a week of invoices and compare the GL account assigned in your billing system with the account Xero actually posted to. Document every divergence. If you find more than 2–3 mismatches in ten invoices, your mapping logic is inconsistent. 4. Partial or duplicate syncs Zapier hits a rate limit mid-sync, or your billing system API times out. Half your invoices for the day sync to Xero; the other half sit in a queue. You resync manually the next morning, and now fifteen invoices exist in Xero twice—same number, slightly different amounts (one has a credit memo applied, the other doesn't). Reconciliation becomes a hunt for duplicates. Native integration platforms like Orin's billing module handle partial syncs natively—they queue, retry, and log every attempt. If a sync fails, you get an alert with the exact invoice and the reason. You fix the root cause (a tax code was renamed) and replay just that invoice, not the whole batch. 5. Exchange rate and currency rounding You invoice a customer in USD. Your billing system stores it as USD 1,000. When it syncs to your accounting system, Xero converts it to INR at the daily exchange rate and rounds to the nearest paisa. By day three, the exchange rate shifts 0.2%, and if you resynced, Xero would post a different INR amount. Your GL and your billing system now disagree on what the invoice was worth on the day it posted. The audit: For every multi-currency invoice, log three fields: Invoice currency and amount , Exchange rate used , Home currency amount posted to GL . If exchange rates shift between sync attempts, document the variance and decide whether to post at the invoice date rate or the sync date rate—then codify that rule in your automation. The nine-field audit template Export a week of invoices from your billing system. In a spreadsheet, create these columns: Invoice Number (from billing system) Total from Billing System Tax Code in Billing System GL Account (Expected) Total in Xero Tax Code in Xero