Integration
QuickBooks Online + Bastle
What syncs from QuickBooks Online, what it makes possible, and how to connect it.
This connector works and can be connected today, with edge cases still being closed. Check the first month against the source before you rely on it.
What does the QuickBooks Online integration do?
What syncs
Bastle reads the following from QuickBooks Online and normalises it into the same entities every other source produces. Ingestion is read-only: nothing is created, changed or cancelled upstream.
- Customers from the QuickBooks customer list.
- Recurring invoice templates → subscriptions, with their cadence.
- Paid invoices → charges, in integer cents.
- Credit memos → refunds.
- Change notifications from the QuickBooks webhook stream, filtered to the connected company.
- Cadence: webhook-driven for changes; historical import run manually today.
Once connected
What QuickBooks Online data unlocks
Connecting a source is not the point; what you can answer afterwards is. These are the questions this data makes answerable.
Accounting actuals next to billing data
Invoiced revenue and processor revenue rarely match exactly. Holding both in one workspace makes the gap visible instead of leaving it to be discovered at close.
Invoice-billed customers in the same model
Companies that bill enterprise accounts by invoice and self-serve accounts by card usually have two disconnected revenue pictures. Both become sources feeding one set of metrics.
A base for FP&A work
Forecasting reads from the same normalised entities regardless of source, so an accounting-derived book can be modelled with the same scenarios as a card-billed one.
Setup
Connecting QuickBooks Online
The whole flow, start to first chart. No implementation call and no data engineer.
- Create an app in the Intuit developer portalIt provides the client id and secret used for the OAuth2 flow.
- Authorise Bastle against your companyCompleting the OAuth flow yields a realm id — your company id — and a refresh token, which is what Bastle stores.
- Enable webhooks on the Intuit appPoint them at /api/webhooks/quickbooks and copy the verifier token into Bastle. Deliveries for other companies are filtered out.
- Plan for refresh-token rotationIntuit rotates the refresh token roughly daily. Bastle surfaces the new token in its run log; the stored credential has to be updated, and doing that by hand is a real operational cost today.
Recurring invoices are the closest thing to a subscription
QuickBooks has no subscription object. What it has is recurring invoice templates, and those carry a cadence, an amount and a customer — enough to model recurring revenue. Bastle maps them onto subscriptions and treats paid invoices as charges. The approximation is honest but it is an approximation: a customer invoiced ad hoc every month without a recurring template will show as charges with no subscription behind them, and no MRR.
Refresh-token rotation is the rough edge
Intuit rotates refresh tokens on roughly a daily cycle, with a hundred-day outer lifetime. The connector cannot persist credentials itself, so when rotation happens it logs the new token and expects an operator to store it. Until that is automated, QuickBooks is the most operationally demanding connector Bastle has, and it is worth knowing before you connect rather than after a sync stops.
What this is not
Bastle does not post journal entries, create invoices, or reconcile accounts. It reads. QuickBooks remains the system of record for the books; Bastle is a second reader of them.
What "beta" means here
The connector is written and the inbound webhook route verifies signatures and writes normalised rows, so a connected account keeps up with changes as they happen. What is not self-serve yet is the historical backfill: the code that walks your provider's API from the beginning exists in the connector, but the scheduled runner that triggers it is still a stub, so first-time imports are run by hand with us. Expect to email someone once during setup, and expect that to stop being true.
Bastle is free while in beta, connectors included. There is no tier that unlocks a provider.
Related
Other sources
Companies billing through QuickBooks Online usually have at least one of these in the stack too.
- XeroBetaThe Xero integration reads an organisation through the Accounting API v2, mapping repeating invoices to subscriptions and paid accounts-receivable invoices to charges. Like the QuickBooks connector, it exists to put accounting actuals beside billing-system revenue rather than to replace either.
- StripeBetaThe Stripe integration turns a Stripe account into Bastle's subscription data model: prices become plans, subscriptions carry their add-ons and discounts, and charges carry the Stripe fee from the balance transaction. Ongoing changes arrive over a signature-verified webhook endpoint within seconds of happening in Stripe, so MRR, churn and failed-payment state track the billing account rather than a nightly export.
- Universal APILiveBastle's write API accepts subscription data from any billing system, including one you built yourself. A single batched import endpoint upserts plans, customers, subscriptions, charges and refunds against your own external ids, and a read API returns the same metrics the dashboard renders. It is available today, self-serve, with scoped API keys.
- WebhooksLiveBastle sends outbound webhooks for subscription, charge, trial and dunning events derived from every connected source, signed with an HMAC header and retried on a backoff schedule across roughly fourteen hours. Endpoints subscribe with exact event types or wildcard patterns, and delivery history is visible in settings. This is shipped and self-serve today.
QuickBooks Online and Bastle: common questions
Can QuickBooks replace a billing system as my data source?
How often do I need to touch QuickBooks credentials?
Does Bastle write anything into QuickBooks?
Can I connect a QuickBooks sandbox company?
Connect QuickBooks Online and see your own history.
Bastle backfills what QuickBooks Online will serve, then keeps current over webhooks — usually a couple of minutes before the first real chart. Free while in beta, no card required.