Hey folks — we've pushed some solid improvements to the QuickBooks Online integration that should make your life easier if you're dealing with anything more complex than straight domestic invoicing. I know this one has been a pain point for a while, so let's walk through what's actually changed.

Tax Code Mapping That Doesn't Make You Want to Throw Your Laptop

Previously, our tax code mapping was... let's call it "optimistic." It worked fine if you had like three tax rates total, but once you got into compound taxes, exempt categories, or jurisdiction-specific rates, things got weird. We had customers manually fixing every single invoice in QBO, which defeats the whole purpose of an integration.

Now you get a proper mapping interface in Settings > Integrations > QuickBooks Online > Tax Codes. You can map FieldPulse tax rates to specific QBO tax codes, including exemptions. The sync will respect your QBO tax configuration instead of trying to guess.

Quick gotcha on this one: if you've got tax groups in QBO (multiple taxes rolled into one line), make sure those are set up as actual tax groups in QBO first. The API returns them weird otherwise and yeah this one tripped me up too when I first tested it.

Multi-Currency Support (Finally)

This was the big ask. If you're billing in USD, CAD, GBP, EUR, or AUD, the sync now handles currency conversion at the transaction level instead of trying to force everything into your QBO home currency.

Requirements:

  • Multi-currency has to be enabled in your QBO company settings (obviously)
  • The customer currency in FieldPulse needs to match an active currency in QBO
  • Exchange rates are pulled from QBO's daily rates, not FieldPulse

Edge case worth noting: if you're creating invoices in FieldPulse with a currency that doesn't exist in QBO yet, the sync will fail with a pretty clear error. We don't auto-create currencies because QBO's API is picky about exchange rate sources.

Batch Invoice Processing

Previously we were hitting QBO's API one invoice at a time, which meant if you had a busy week with 200 invoices, that sync could take 15+ minutes and occasionally timeout on QBO's end. Now we're batching up to 30 invoices per request using their bulk endpoint.

What this means practically:

Before: ~4-5 seconds per invoice
After: ~2-3 seconds per invoice, but batched

So 100 invoices went from ~7-8 minutes to ~90 seconds

The batching is automatic — you don't configure anything. If a batch fails partway through, we retry the failed items individually and log which ones had issues.

How to Get This

These changes are live now for all customers on the QBO integration. No action required unless you want to set up the tax mapping — that's opt-in via the settings panel.

If you're currently on the legacy QBO sync (pre-2024), you'll need to reauthorize the integration to get the new endpoints. You'll see a banner in your integration settings if this applies to you.

Questions or weird edge cases you're hitting? Drop them below. I've been deep in QBO's API docs for the last month and I'm happy to dig into specifics.

Parents
  • Excellent timing on this release. From a governance perspective, the improved audit trail on batch processing addresses a gap we had flagged in our SOC 2 prep.

    It is worth noting that organizations with complex intercompany transactions should test the multi-currency handling carefully. QBO's exchange rate timestamps can differ from the invoice date by up to 24 hours depending on when the rate was last refreshed in their system. This may have implications for period-end close accuracy.

    Will there be documentation on the specific error codes returned for partial batch failures? Our integration monitoring would benefit from more granular logging.

Comment
  • Excellent timing on this release. From a governance perspective, the improved audit trail on batch processing addresses a gap we had flagged in our SOC 2 prep.

    It is worth noting that organizations with complex intercompany transactions should test the multi-currency handling carefully. QBO's exchange rate timestamps can differ from the invoice date by up to 24 hours depending on when the rate was last refreshed in their system. This may have implications for period-end close accuracy.

    Will there be documentation on the specific error codes returned for partial batch failures? Our integration monitoring would benefit from more granular logging.

Children
  • Good catch on the rate timestamp thing — yeah, QBO's daily rate is typically stamped at 6am PT but there's no strict guarantee. If you need invoice-date rates, the workaround is creating the invoice in QBO first and then syncing back, which... defeats the purpose. We're looking at whether we can pass explicit exchange rates in a future update, but QBO's API doesn't expose that parameter consistently across endpoints.

    On error codes: here's what you'll see in the webhook payload or sync log:

    {
      "batch_status": "partial_failure",
      "processed": 28,
      "failed": 2,
      "failures": [
        {
          "invoice_id": "FP-28473",
          "qb_invoice_id": null,
          "error_code": "QB_6200",
          "message": "Currency AUD not found for customer",
          "retryable": false
        }
      ]
    }

    Full list of codes is going into the API v2.1 docs — I should have that section updated by tomorrow. The retryable flag is the key one for your monitoring — if that's false, it's a data issue (bad currency, missing tax code) rather than a transient QBO error.