Recurring invoices sound simple until tax rules enter the picture. If you run a subscription business or manage retainers in Malaysia or Indonesia, you know the friction: SST exemptions that flip mid-contract, GST thresholds that move the goalposts, and e-Faktur validation that silently rejects batches. The platform you pick for invoicing doesn't just bill—it either locks compliance in place or leaves you scrambling with spreadsheet patches every month. We tested four platforms that claim to handle tax automation: Xero, QuickBooks Online, Wave, and FreshBooks. Each invoice tested was a real-world scenario: a 12-month retainer with mid-contract service changes, SST exemption status shifts, and GST threshold proximity. Here's what we found. The recurring invoice tax problem Recurring invoices are deceptively risky for tax compliance. A single template rule applied 12 times a year means a single mistake compounds 12 times before you notice. Most platforms apply tax calculations at invoice creation—which works fine for one-off invoices, but fails for recurring ones when: SST exemption status changes mid-contract (service to goods, or exempted service to standard-rated) GST registration thresholds shift due to currency fluctuation or scope changes e-Faktur submission batches contain line items that don't match LHDN (Indonesian tax authority) validation rules Tax ID format or validity changes, invalidating past invoices retroactively The real cost isn't just correcting invoices—it's the audit risk. A batch of 12 invoices with incorrect SST or GST that slip through to clients and ledger creates tax debt that compounds. Xero: Template rigidity with partial validation Xero excels at recurring invoice setup—you define a template, set frequency, and it generates invoices on schedule. For SST and GST, Xero applies tax codes based on the template settings, which means the tax rate bakes in at creation time. What works: Xero's tax code library includes SST, GST, and exemption codes for both Malaysia and Indonesia. If your retainer never changes tax treatment, Xero's recurring setup is fast and reliable. The platform also validates LHDN tax ID formats on import, catching some malformed NPWP numbers before they hit e-Faktur. The gap: Mid-contract tax changes require manual intervention. If a client's SST exemption status flips (say, from exempt service to taxable service), you can't update the recurring template retroactively—you must create a new one or manually edit individual invoices. For 12 monthly invoices, that's tedious and error-prone. Xero also doesn't warn you when a tax code applied to a recurring template becomes invalid in future periods, which is critical if SST rates change or GST thresholds shift. e-Faktur gap: Xero exports to e-Faktur format, but validation is downstream—the platform submits the file, but if line items fail LHDN rules, you get a batch rejection with minimal detail on which line item caused the failure. We submitted 12 recurring invoices (mix of goods and services); 2 invoices were rejected because Xero didn't enforce LHDN's requirement that services not mixed with goods in a single line item. Manual splitting was required. QuickBooks Online: Real-time GST validation, SST blind spot QB Online is built for subscription billing and includes native recurring invoice templates. Tax handling is more dynamic than Xero—the platform recalculates tax at each invoice generation based on current tax settings. What works: QB Online's GST validation is robust. When you set up a recurring invoice with GST, the platform checks GST registration status, threshold proximity, and applies the correct rate on each generation. If you're near a GST registration threshold (say, ₹40M ARR in Malaysia), QB will flag if your next invoice crosses it. That's useful for planning. QB also validates Indonesian NPWP format and cross-references it against known deregistered taxpayers—a layer Xero doesn't have. The gap: SST handling is weaker. QB Online's SST tax codes are less granular than Malaysian law requires. For example, QB has one 'SST—Services' code, but SST actually has multiple rates and exemptions depending on service type (digital services, professional services, catering, etc.). If your retainer spans two service types, QB won't split the tax correctly on a single recurring invoice. You must create separate line items, which defeats the simplicity of recurring invoices. e-Faktur gap: QB Online doesn't validate against DGES (Indonesia's digital tax reporting system) rules in real-time. We submitted recurring invoices that passed QB's basic validation but failed DGES submission because QB didn't enforce the rule that invoice amounts must match PPN (value-added tax) declarations. One batch of 6 invoices was rejected, then required manual amendment in QB before resubmission. Wave: Cheapest, but tax validation is afterthought Wave's appeal is price—it's free for invoicing—but that economy shows in tax handling. Wave