Skip to main content

QuickBooks

This connector captures data from QuickBooks into Estuary collections.

Supported data resources

The following data resources are supported through the QuickBooks API:

By default, each resource is mapped to an Estuary collection through a separate binding.

Prerequisites

This connector authenticates with your own Intuit app. You'll need:

  • An Intuit developer account and an app with access to the QuickBooks Online Accounting API
  • Your app's client ID and client secret
  • A refresh token obtained by authorizing your app against your QuickBooks company
  • Your QuickBooks company ID (also called the realm ID)

Create an Intuit app

  1. Sign in (or sign up) at the Intuit Developer Portal and create a new app, granting it the QuickBooks Online Accounting API scope (com.intuit.quickbooks.accounting).
  2. Your app starts with Development keys, which only work against sandbox companies. To capture data from a real QuickBooks company, complete the questionnaire under your app's Production Settings to obtain Production keys.
  3. In your app's Keys & credentials page (under Production Settings for a real company, or Development Settings for a sandbox), note the Client ID and Client Secret.

Obtain a refresh token with the OAuth 2.0 Playground

The easiest way to authorize your app and generate a refresh token is Intuit's OAuth 2.0 Playground:

  1. On your app's Keys & credentials page, add the playground's redirect URI (https://developer.intuit.com/v2/OAuth2Playground/RedirectUrl) to the app's Redirect URIs. Do this for the environment (Production or Development) whose keys you're using.
  2. Open the OAuth 2.0 Playground, select your app and environment, and check the com.intuit.quickbooks.accounting scope.
  3. Click Get authorization code and authorize the QuickBooks company you want to capture from. The playground displays the company's realm ID.
  4. Click Get tokens. The response contains your refresh token.

Refresh tokens are valid for up to 100 days. That's all the connector needs: it exchanges the refresh token for access tokens on its own, keeping the tokens in your endpoint configuration up to date. Create the capture reasonably soon after generating the refresh token — Intuit issues a replacement refresh token roughly every 24 hours, and only the latest one remains valid.

Configuration

You configure connectors either in the Estuary web app, or by directly editing the catalog specification file. See connectors to learn more about using connectors. The values and specification sample below provide configuration details specific to the QuickBooks source connector.

Properties

Endpoint

PropertyTitleDescriptionTypeRequired/Default
/realm_idCompany IDID for the Company to Request Data FromstringRequired
/credentials/credentials_titleAuthentication MethodName of the credentials set. Set to OAuth Credentials.stringRequired
/credentials/client_idClient IDYour Intuit app's client ID.stringRequired
/credentials/client_secretClient SecretYour Intuit app's client secret.stringRequired
/credentials/refresh_tokenRefresh TokenThe refresh token received when authorizing your app.stringRequired
/start_dateStart DateThe date from which you'd like to replicate data, in the format YYYY-MM-DDT00:00:00Z. All data modified after this date will be replicated.stringDefault: 30 days ago
/is_sandboxUse Sandbox EnvironmentEnable to capture from a QuickBooks sandbox company instead of production.booleanDefault: false

Bindings

PropertyTitleDescriptionTypeRequired/Default
/nameResource NameName of the QuickBooks resource from which collections are capturedstringRequired
/intervalPolling IntervalFrequency at which to poll for new datastringDefault: 5 minutes

Sample

captures:
${PREFIX}/${CAPTURE_NAME}:
endpoint:
connector:
image: ghcr.io/estuary/source-quickbooks:v1
config:
realm_id: <your realm id>
credentials:
credentials_title: "OAuth Credentials"
client_id: <secret>
client_secret: <secret>
refresh_token: <secret>
start_date: 2024-01-01T00:00:00Z
bindings:
- resource:
name: Invoices
interval: PT5M
target: ${PREFIX}/invoices
- resource:
name: Customers
interval: PT5M
target: ${PREFIX}/customers