A web agency bills Client A on retainer: $5,000/month for "up to 40 hours of design and strategy." But this month they used 32 hours, so the agency includes a $1,200 credit. They also invoiced $800 in out-of-pocket stock photo licenses as a pass-through expense, and $3,500 for a custom WordPress plugin (fixed project fee). All on one invoice. Most invoicing platforms treat this as a heresy. They're built for accounting simplicity: recurring invoices OR time tracking OR project-based billing. Not all three at once, not with tax codes that don't scramble, not with payment terms that make sense across line items. FreshBooks, Xero, and Orin each take a different approach to this exact problem. One forces you to split the invoice. One requires accountant-level tax configuration. One builds mixed billing into the core. Here's what actually works. The mixed-billing problem: Why standard invoicing breaks When you combine retainer, time-and-materials (T&M), and fixed-fee work on one invoice, you hit three recurring crises: Tax codes don't stack: Your retainer might be taxable at 8%. The materials pass-through at 0%. The project fee at 5%. Most platforms apply one tax rate per invoice, forcing you to split. Partial billing ruins cash flow: If the retainer included "up to 50 hours" but you used 38, you need to invoice 38 hours + a credit. Platforms built for simple recurring invoices choke here. Payment terms and hold-backs: You might invoice 70% on retainer, 100% on T&M, and 50% on the project (due at completion). One invoice, three payment schedules. Most tools don't support this. Accounting sync breaks: Your retainer goes to recurring revenue. The T&M hours go to billable labor. The project fee goes to project revenue. If your invoicing tool doesn't sync cleanly to your GL, you'll reconcile in a spreadsheet. The wrong tool doesn't just slow you down—it forces manual accounting adjustments that introduce errors and blow compliance. FreshBooks: Flexible line items, manual tax codes FreshBooks does allow you to build mixed invoices. You can add retainer line items, hourly time entries, and fixed-fee items to the same invoice. The interface is intuitive, and most agencies with modest complexity can make it work. What works: Time tracking is genuinely useful. You can track hours against a project or client, then invoice them directly into the bill. Line-item discounts and credits are straightforward. If your retainer overages run negative, FreshBooks will let you apply a credit line. Recurring invoice templates can include one-time items. You build a retainer template, then add extra hours or expenses to the next invoice without rebuilding it. Payment terms are per-invoice, not per-line. You can set "Net 30" and it applies to the whole bill. What breaks: Tax codes are per-line but clumsy: FreshBooks lets you assign a tax code to each line item, which is necessary. But if you have 15 retainer invoices a month and each one has 3 tax codes, you're assigning manually or relying on presets. If your retainer client is in Singapore (GST 8%) and you add a pass-through from a Malaysian vendor (SST 6%), you have to manually override the default. No partial retainer invoicing: If your retainer is "50 hours for $5,000," FreshBooks doesn't natively track "used 40, credit 10." You have to manually calculate the credit and add a line item. Scale that across 10 retainer clients and you're doing math in a spreadsheet. Accounting sync is basic: FreshBooks can push invoices to QuickBooks or Xero, but the mapping is rigid. A mixed-model invoice might become four GL entries, and if your revenue categories are detailed, you'll need to tweak them manually. This breaks SOX compliance and makes audits painful. No hold-backs: If you want to invoice "50% on retainer, 100% on hours, 70% on project completion," FreshBooks doesn't support it. You'd invoice three separate bills. FreshBooks is strong for small agencies with 2–3 mixed-billing patterns. Beyond that, it becomes manual. Xero: Detailed tax, but invoicing is glacial Xero is an accounting platform that happens to have invoicing. It offers sophisticated tax code assignment, multi-currency support, and bulletproof GL sync—but the invoice UI is built for accountants, not agencies. What works: Tax codes are granular: Xero lets you assign different tax treatments per line item. You can retainer taxable service (GST 8%), zero-rated materials, and a project fee at a regional rate. The GL posts correctly. Multi-currency invoicing: If one retainer client is in SGD and another in IDR, Xero handles the conversions and FX gain/loss. It's built for this. GL sync is native: Invoices don't need to be exported and remapped. The accounting is correct from the moment you hit "Send." Contact tax IDs: For B2B invoicing in Southeast Asia (where GST/SST IDs are often required), Xero stores them on the contact and auto-populates. What breaks: Invoice creation is slow: Xero's invoice form is a long, multi-section p