> ## Documentation Index
> Fetch the complete documentation index at: https://docs.precipiq.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Connect QuickBooks to Precipiq for accounting data

> Sync QuickBooks Online invoices, bills, and payments into Precipiq every 15 minutes so your Financial Events stay current without manual exports.

Unlike Stripe's push-based webhooks, the QuickBooks Online API doesn't offer webhooks at the granularity Precipiq needs — so this is a **pull** integration. Precipiq runs a background job every 15 minutes that fetches invoices, bills, and payments modified since the last sync and converts them into Financial Events in your ledger. Once you connect your QBO company file, the ledger stays up to date automatically.

## Setup

<Steps>
  <Step title="Register a QBO app">
    Go to [Intuit Developer](https://developer.intuit.com/) → **My Apps** and create a new app. Copy the OAuth 2.0 **Client ID** and **Client Secret** — you'll need both in Precipiq.
  </Step>

  <Step title="Configure the redirect URI">
    On your QBO app, set the OAuth redirect URI to:

    ```
    https://api.precipiq.dev/api/v1/integrations/quickbooks/callback
    ```
  </Step>

  <Step title="Add your credentials to Precipiq">
    In the Precipiq dashboard, go to **Settings → Integrations → QuickBooks** and paste in your client ID and client secret.
  </Step>

  <Step title="Authorise the connection">
    Click **Connect QuickBooks** on the same page. Intuit's consent screen opens — select your company file and approve access. Precipiq stores the resulting OAuth tokens and uses them for all future syncs.
  </Step>

  <Step title="First sync">
    Precipiq triggers the first sync immediately after authorisation, pulling up to 90 days of historical data. Subsequent syncs run every 15 minutes. Check **Dashboard → Integrations** for the last-sync timestamp and any sync errors.
  </Step>
</Steps>

## What gets synced

Each QBO object has a stable ID that Precipiq uses as the `external_id` on the Financial Event. This makes every sync fully idempotent — re-syncing the same data never creates duplicate events.

| QBO object       | Precipiq event type | Sign |
| ---------------- | ------------------- | :--: |
| `Invoice` (paid) | `payment`           |   +  |
| `Bill`           | `cost`              |   −  |
| `CreditMemo`     | `refund`            |   −  |

## OAuth scope

Precipiq requests the minimum viable scope to read your accounting data:

```
com.intuit.quickbooks.accounting
```

Precipiq requests read-only access and **never writes to QuickBooks**. Payroll data and payment processing are outside the scope of this integration.

## Limits

* **Rate limits** — QBO's API allows 500 requests per minute per realm. The Precipiq poller self-throttles well under that ceiling.
* **Historical backfill** — on first connection, Precipiq pulls data from the last 90 days. Data older than 90 days can be backfilled by uploading a CSV via **Settings → Backfill** (coming in a future release).

<Info>
  The default sync interval is 15 minutes. Contact support if you need a custom sync frequency for your plan.
</Info>
