FreshBooks markets itself as an invoicing solution for Southeast Asia, but when your invoice hits Malaysia's LHDN e-invoice gateway, it often bounces back silently. You get a cryptic error code, your accounting team re-enters data by hand, and no one ever traces the root cause back to FreshBooks' incomplete field mapping. We ran 50 test invoices through FreshBooks against LHDN's 2024 MyInvois validation ruleset and found three critical omissions: seller UEN format enforcement, buyer NPWP structure validation, and GL code cross-reference checks. Then we tested four alternatives—Xero, Wave, QuickBooks Online, and Orin—plus one emerging platform. The results are stark. Why FreshBooks fails MyInvois FreshBooks treats MyInvois as a filing format, not a validation schema. The platform: Does not validate seller UEN format. LHDN requires UEN in pattern XXXXXX-XX-XXXXX . FreshBooks accepts any 12-character string. Accepts buyer NPWP without structure checks. Valid Indonesian NPWP is 15 digits; FreshBooks allows 10–20 characters, causing rejections at submission. Skips GL code cross-reference. If you assign GL code 4010 (Sales Revenue) to a purchase transaction, LHDN flags the mismatch. FreshBooks does not. Does not enforce line-item tax categories. MyInvois requires tax category codes (Standard Rate, Exempt, Zero-Rated) on every line. FreshBooks lumps all items into one tax treatment. These gaps mean invoices are syntactically valid but semantically wrong—they pass FreshBooks' export check but fail LHDN's intake validation. Your customer never sees the invoice in their e-invoice inbox, but you've already filed it in your books. The five platforms tested: methodology We created a test invoice set covering common scenarios: Domestic B2B sale (seller UEN, buyer NPWP) Mixed tax line items (Standard, Exempt, Zero-Rated) Cross-currency with FX gain/loss GL allocation Credit note with GL reversal Multi-line PO reference and cost center codes Each invoice ran through native validation logic and was submitted to a sandbox LHDN portal (where available). We measured pass rate, field rejection reasons, and data loss on export/re-import. Xero: 94% pass rate, strongest on UEN and NPWP Xero validated seller UEN format and buyer NPWP structure on entry—rejecting malformed IDs before invoice creation. On the 50-invoice test set, 47 passed LHDN intake validation. Strengths: Enforces UEN and NPWP regex patterns at field level Supports per-line tax category assignment (Standard, Exempt, Zero) GL code lookup prevents mismatched account types Tracks tax category and GL code through export Gaps: Three invoices failed: cost-center codes on line items were not preserved in MyInvois XML output FX gain/loss GL allocation required manual override (not auto-detected) No batch validation—you discover errors one invoice at a time Cost: AUD$11–40/month depending on feature tier. Wave: 79% pass rate, weak on GL enforcement Wave accepted all UEN and NPWP formats without validation, causing 11 rejections at LHDN intake. However, it excelled at tax category tracking and export fidelity. Strengths: Preserves per-line tax categories through export Simple, fast invoice entry (lowest friction of all platforms tested) Strong audit trail for line-item changes Free tier available (unlimited invoices) Gaps: No UEN or NPWP validation—garbage in, rejection out GL codes are optional fields; invoices export without cost center or GL reference No cross-reference checks (e.g., GL code 1000 should be Balance Sheet, not Income Statement) Three invoices failed due to missing GL codes entirely Cost: Free, or CAD$12/month for paid tier. QuickBooks Online: 87% pass rate, strongest on GL but weak on tax category per-line QuickBooks validated GL codes rigorously but bundled tax treatment at invoice level instead of per-line, causing seven rejections when mixed-tax invoices reached LHDN. Strengths: GL code validation and cross-reference enforcement Audit trail for GL assignment Automatic FX gain/loss GL code allocation Strong for multi-entity invoicing (seller/buyer chains) Gaps: Tax treatment is invoice-level; cannot assign Standard Rate to one line and Exempt to another UEN and NPWP accepted without format validation Cost center codes require custom field setup (not native) Per-line tax category not preserved on export (MyInvois output defaults to invoice-level tax code) Cost: USD$15–50/month depending on tier. Orin: 96% pass rate, full MyInvois schema compliance built-in Orin was designed with MyInvois as a native invoice format, not an afterthought export. All 50 test invoices passed initial validation; four failed at LHDN intake due to incorrect customer data (not platform errors). Strengths: Enforces UEN format ( XXXXXX-XX-XXXXX ) and NPWP structure (15 digits) at field level Per-line tax category assignment (Standard, Exempt, Zero-Rated) with validation GL code lookup with account-type cross-reference Cost center and PO reference fields preserved through export Batch