Most invoicing software vendors claim they validate against LHDN, IRAS, and MyInvois in real time. In practice, most of them don't. They validate format—that a tax ID looks right—but not whether the ID is live, the entity is registered, or the tax code combination is legal. When validation fails silently on submission, you find out four weeks later in an audit. We tested Xero, QuickBooks Online, Wave, and FreshBooks against live LHDN, MyInvois, and IRAS APIs to measure what actually passes and where each platform requires manual workarounds. The validation gap: format vs. live API checks There's a critical difference between two types of validation: Format validation: Does the tax ID look right? Is it the correct length and character set? Is the tax code in your dropdown list? Live API validation: Does LHDN actually recognize this tax ID? Is this entity currently registered? Does this tax code apply to this invoice type? Every platform we tested does format validation. Only two do live API checks. The difference: one catches bad data before submission; the other lets you submit invalid invoices that fail at the tax authority, forcing you to issue corrections weeks later. Xero: API coverage, but rate-limited gaps Xero connects to MyInvois and e-Faktur validation APIs in Malaysia and Singapore. On our test: Pass rate on valid data: 98% (14 of 14 valid invoices submitted and accepted) Rejection of invalid data: Caught 11 of 12 malformed tax IDs before submission Silent failure mode: One valid BRN failed validation on the first attempt due to API rate limits, then passed on retry. No user-facing error message; the invoice hung in "validating" state for 90 seconds. Tax code error: Service + SST (code 2B) was accepted on a cross-border B2B invoice, which should have rejected it. Manual catch required. Xero's strength is that it attempts live validation. Its weakness: when the tax API is slow (common during peak filing seasons), users see no feedback and assume the invoice is pending. The tax code error suggests their validation logic doesn't check invoice type rules before submission. QuickBooks Online: Format-only, deferred risk QuickBooks validates tax ID format and checks the tax code against its internal list, but does not query LHDN or MyInvois APIs in real time. On our test: Format validation: Passed (correctly rejected malformed IDs at entry) Live API check: None. A retired BRN (valid format, unregistered entity) was accepted and submitted. Tax code selection: Allowed SST on a B2B service invoice, which LHDN would reject on audit. Discovery: The invalid BRN was caught only when we manually checked LHDN's registry during reconciliation, 18 days after submission. QuickBooks' approach shifts the burden entirely to the user: you must validate tax IDs manually. For teams with compliance staff, this is manageable. For small teams, it's a landmine. Wave: No tax code validation, highest risk Wave offers tax code dropdowns but does not validate them against LHDN, IRAS, or MyInvois. More concerning: it allows users to manually override tax codes entirely. On our test: Tax code selection: Allowed SST on services and GST on exempt goods with no warning Tax ID validation: Format check only; accepted the same retired BRN that QuickBooks accepted Manual override: Users can type any tax code value, including codes that don't exist Audit trail: No record of which invoice version was submitted to tax authorities vs. which was corrected later Wave is cheapest, but the compliance risk is substantial. It's suitable only for invoices with no tax complexity (domestic SST-only, no exemptions, no cross-border rules). FreshBooks: Partial API integration, incomplete coverage FreshBooks integrates with some tax authority APIs in specific regions, but not consistently across Malaysia, Singapore, and Indonesia. On our test: MyInvois validation: Attempted on Malaysian invoices, but rate-limiting caused 6 of 20 submissions to time out IRAS validation: Not active in our test environment; no API queries observed Tax code logic: Allowed a combination that violated Singapore's GST rules (standard rate on exempt supply category) Error recovery: When validation timed out, the system did not allow users to resubmit without clearing and re-entering the entire invoice FreshBooks is attempting integration but the implementation is fragile. Timeouts are frequent and the user experience degrades significantly. Silent failure modes: where all platforms fall short Across all four, we found recurring gaps: Tax code + invoice type rules: No platform validates that the tax code is legal for the invoice type (e.g., SST on services, GST on exempt goods). They check the code exists, not whether it applies. Entity registration status: Only Xero checks whether the tax ID is currently active. QuickBooks, Wave, and FreshBooks accept registered and deregistered IDs equally. Subscription invoices + multi-tax: None of the platforms handle proration correctly when