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

# QuickBooks

> Gain financial visibility and empower your accounting team by keeping your financials up to date

> [!NOTE]
>
> Hightouch uses minor version `65` of the **QuickBooks Online Accounting API**.
> See QuickBooks's
> [docs](https://developer.intuit.com/app/developer/qbo/docs/learn/explore-the-quickbooks-online-api/minor-versions)
> to learn more about minor versions.

## Supported syncing

| Type | Description | Supported Sync Modes | API Reference |
| - | - | - | - |
| **Account** | Sync data from any source to QuickBooks Accounts | Upsert, Update, Insert | [Account docs](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/account) |
| **Bill** | Sync data from any source to QuickBooks Bills | Upsert, Update, Insert | [Bill docs](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/bill) |
| **Class** | Sync data from any source to QuickBooks Classes | Upsert, Update, Insert | [Class docs](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/class) |
| **Customer** | Sync data from any source to Quickbook Customers | Upsert, Update, Insert | [Customer docs](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/customer) |
| **Deposit** | Sync data from any source to QuickBooks Deposits | Upsert, Update, Insert | [Deposit docs](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/deposit) |
| **Invoice** | Sync data from any source to QuickBooks Invoices | Upsert, Update, Insert | [Invoice docs](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/invoice) |
| **JournalEntry** | Sync data from any source to QuickBooks Journal Entries | Upsert, Update, Insert | [JournalEntry docs](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/journalentry) |
| **Payment** | Sync data from any source to QuickBooks Payments | Upsert, Update, Insert | [Payment docs](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/payment) |
| **PaymentMethod** | Sync data from any source to QuickBooks Payment Methods | Upsert, Update, Insert | [PaymentMethod docs](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/paymentmethod) |
| **RecurringTransaction** | Sync data from any source to QuickBooks RecurringTransaction objects | Insert | [RecurringTransaction docs](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/recurringtransaction) |
| **TimeActivits** | Sync data from any source to QuickBooks TimeActivity objects | Update, Insert | [TimeActivity docs](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/timeactivity) |
| **Vendor** | Sync data from any source to QuickBooks Vendors | Upsert, Update, Insert | [Vendor docs](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/vendor) |

For more information about sync modes, refer to the [sync modes](https://docs.hightouch.com/syncs/types-and-modes.md#sync-modes) docs.

## Connect to QuickBooks

Go to the [**Destinations** overview page](https://app.hightouch.com/destinations?from=docs) and click the **Add destination** button. Select **QuickBooks** and click **Continue**. You can then authenticate Hightouch to **QuickBooks** via OAuth.

You can choose to sync your data to a Sandbox or Production Quickbooks environment. Select your preference, click **Log in to QuickBooks**, and log into your QuickBooks account. Once successful, you will be redirected back to Hightouch to enter a descriptive name for your destination and complete setup.

## Sync configuration

Once you've set up your QuickBooks destination and have a [model](https://docs.hightouch.com/getting-started/concepts.md#models) to pull data from, you can set up your sync configuration to begin syncing data. Go to the [**Syncs** overview page](https://app.hightouch.com/syncs?from=docs) and click the **Add sync** button to begin. Then, select the relevant model and the QuickBooks destination you want to sync to.

### Syncing accounts

Sync data from any source to accounts in QuickBooks.

#### Record matching

You can match rows from your model to accounts in Quickbooks on any column in your model and any account field in Quickbooks. Ensure the data types of the model column and Quickbooks field you select match.

Refer to the [record matching docs](https://docs.hightouch.com/syncs/record-matching.md) for more information.

> [!NOTE]
>
> In **Insert** mode, QuickBooks automatically generates an identifier for every
> new record synced, so there is no need to match an existing record.

#### Field mapping

You can map data from any of your model columns to fields in QuickBooks.

QuickBooks requires the [`SyncToken` attribute](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/account) when performing updates.

The `SyncToken` is the version number of the object. It's used to lock an object for use by one app at a time. As soon as an application modifies an object, its SyncToken is incremented.

By default, Hightouch pulls the latest `SyncToken` from QuickBooks before perfoming the update. You can override this behavior by providing your own `SyncToken` value via field mapping. Keep in mind that attempts to modify an object specifying an older `SyncToken` fail.

QuickBooks also requires the following fields, so you must map them to complete your configuration:

* **Name**: User recognizable name for the Account. 100 character max.

Ensure the data types of your model columns match the data types of the fields you want to sync to. Refer to QuickBooks [account object docs](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/account) for more information.

### Syncing bills

Sync data from any source to bills in QuickBooks.

#### Record matching

You can match rows from your model to bills in Quickbooks on any column in your model and any bill field in Quickbooks. Ensure the data types of the model column and Quickbooks field you select match.

Refer to the [record matching docs](https://docs.hightouch.com/syncs/record-matching.md) for more information.

> [!NOTE]
>
> In **Insert** mode, QuickBooks automatically generates an identifier for every
> new record synced, so there is no need to match an existing record.

#### Field mapping

You can map data from any of your model columns to fields in QuickBooks.

QuickBooks requires the [`SyncToken` attribute](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/customer) when performing updates.

The `SyncToken` is the version number of the object. It's used to lock an object for use by one app at a time. As soon as an application modifies an object, its SyncToken is incremented.

By default, Hightouch pulls the latest `SyncToken` from QuickBooks before perfoming the update. You can override this behavior by providing your own `SyncToken` value via field mapping. Keep in mind that attempts to modify an object specifying an older `SyncToken` fail.

QuickBooks also requires the following fields, so you must map them to complete your configuration:

* **VendorRef**: Reference to the vendor for this transaction. Query the Vendor name list resource to determine the appropriate Vendor object for this reference. Use `Vendor.Id` and `Vendor.Name` from that object for `VendorRef.value` and `VendorRef.name`, respectively.
* **Line**: Individual line items of a transaction. Valid Line types include: `ItemBasedExpenseLine` and `AccountBasedExpenseLine`

Ensure the data types of your model columns match the data types of the fields you want to sync to. Refer to QuickBooks [bill object docs](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/bill) for more information.

### Syncing classes

Sync data from any source to classes in QuickBooks.

#### Record matching

You can match rows from your model to classes in Quickbooks on any column in your model and any class field in Quickbooks. Ensure the data types of the model column and Quickbooks field you select match.

Refer to the [record matching docs](https://docs.hightouch.com/syncs/record-matching.md) for more information.

> [!NOTE]
>
> In **Insert** mode, QuickBooks automatically generates an identifier for every
> new record synced, so there is no need to match an existing record.

#### Field mapping

You can map data from any of your model columns to fields in QuickBooks.

QuickBooks requires the [`SyncToken` attribute](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/class) when performing updates.

The `SyncToken` is the version number of the object. It's used to lock an object for use by one app at a time. As soon as an application modifies an object, its SyncToken is incremented.

By default, Hightouch pulls the latest `SyncToken` from QuickBooks before perfoming the update. You can override this behavior by providing your own `SyncToken` value via field mapping. Keep in mind that attempts to modify an object specifying an older `SyncToken` fail.

QuickBooks also requires the following fields, so you must map them to complete your configuration:

* **Name**: User recognizable name for the Class. 100 character max.

Ensure the data types of your model columns match the data types of the fields you want to sync to. Refer to QuickBooks [class object docs](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/class) for more information.

### Syncing customers

Sync data from any source to customers in QuickBooks.

#### Record matching

You can match rows from your model to customers in Quickbooks on any column in your model and any customer field in Quickbooks. Ensure the data types of the model column and Quickbooks field you select match.

Refer to the [record matching docs](https://docs.hightouch.com/syncs/record-matching.md) for more information.

> [!NOTE]
>
> In **Insert** mode, QuickBooks automatically generates an identifier for every
> new record synced, so there is no need to match an existing record.

#### Field mapping

You can sync columns from your model to QuickBooks default and custom fields.

QuickBooks requires the [`SyncToken` attribute](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/customer) when performing updates.

The `SyncToken` is the version number of the object. It's used to lock an object for use by one app at a time. As soon as an application modifies an object, its SyncToken is incremented.

By default, Hightouch pulls the latest `SyncToken` from QuickBooks before perfoming the update. You can override this behavior by providing your own `SyncToken` value via field mapping. Keep in mind that attempts to modify an object specifying an older `SyncToken` fail.

### Syncing deposits

Sync data from any source to deposits in QuickBooks.

#### Record matching

You can match rows from your model to deposits in Quickbooks on any column in your model and any deposit field in Quickbooks. Ensure the data types of the model column and Quickbooks field you select match.

Refer to the [record matching docs](https://docs.hightouch.com/syncs/record-matching.md) for more information.

> [!NOTE]
>
> In **Insert** mode, QuickBooks automatically generates an identifier for every
> new record synced, so there is no need to match an existing record.

#### Field mapping

You can map data from any of your model columns to fields in QuickBooks.

QuickBooks requires the [`SyncToken` attribute](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/deposit) when performing updates.

The `SyncToken` is the version number of the object. It's used to lock an object for use by one app at a time. As soon as an application modifies an object, its SyncToken is incremented.

By default, Hightouch pulls the latest `SyncToken` from QuickBooks before perfoming the update. You can override this behavior by providing your own `SyncToken` value via field mapping. Keep in mind that attempts to modify an object specifying an older `SyncToken` fail.

QuickBooks also requires the following fields, so you must map them to complete your configuration:

* **DepositToAccountRef**: Identifies the account to be used for this deposit.
* **Line**: Atleast 1 line item must be included to create a deposit.

Ensure the data types of your model columns match the data types of the fields you want to sync to. Refer to QuickBooks [deposit object docs](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/deposit) for more information.

### Syncing invoices

Sync data from any source to invoices in QuickBooks.

#### Record matching

You can match rows from your model to invoices in Quickbooks on any column in your model and any invoice field in Quickbooks. Ensure the data types of the model column and Quickbooks field you select match.

Refer to the [record matching docs](https://docs.hightouch.com/syncs/record-matching.md) for more information.

> [!NOTE]
>
> In **Insert** mode, QuickBooks automatically generates an identifier for every
> new record synced, so there is no need to match an existing record.

#### Field mapping

You can map data from any of your model columns to fields in QuickBooks.

QuickBooks requires the [`SyncToken` attribute](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/invoice) when performing updates.

The `SyncToken` is the version number of the object. It's used to lock an object for use by one app at a time. As soon as an application modifies an object, its SyncToken is incremented.

By default, Hightouch pulls the latest `SyncToken` from QuickBooks before perfoming the update. You can override this behavior by providing your own `SyncToken` value via field mapping. Keep in mind that attempts to modify an object specifying an older `SyncToken` fail.

QuickBooks also requires the following fields, so you must map them to complete your configuration:

* **DepositToAccountRef**: Identifies the account to be used for this deposit.
* **Line**: Atleast 1 line item must be included to create a deposit.

Ensure the data types of your model columns match the data types of the fields you want to sync to. Refer to QuickBooks [invoice object docs](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/invoice) for more information.

### Syncing journal entries

Sync data from any source to journal entries in QuickBooks.

#### Record matching

You can match rows from your model to jounal entries in Quickbooks on any column in your model and any journal entry field in Quickbooks. Ensure the data types of the model column and Quickbooks field you select match.

Refer to the [record matching docs](https://docs.hightouch.com/syncs/record-matching.md) for more information.

> [!NOTE]
>
> In **Insert** mode, QuickBooks automatically generates an identifier for every
> new record synced, so there is no need to match an existing record.

#### Field mapping

You can map data from any of your model columns to fields in QuickBooks.

QuickBooks requires the [`SyncToken` attribute](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/journalentry) when performing updates.

The `SyncToken` is the version number of the object. It's used to lock an object for use by one app at a time. As soon as an application modifies an object, its SyncToken is incremented.

By default, Hightouch pulls the latest `SyncToken` from QuickBooks before perfoming the update. You can override this behavior by providing your own `SyncToken` value via field mapping. Keep in mind that attempts to modify an object specifying an older `SyncToken` fail.

QuickBooks also requires the following fields, so you must map them to complete your configuration:

* **Line**: Individual line items of a transaction. There must be at least one pair of Journal Entry Line elements, representing a debit and a credit, called distribution lines.

Ensure the data types of your model columns match the data types of the fields you want to sync to. Refer to QuickBooks [journal entry object docs](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/journalentry) for more information.

### Syncing payments

Sync data from any source to payments in QuickBooks.

#### Record matching

You can match rows from your model to payments in Quickbooks on any column in your model and any payment field in Quickbooks. Ensure the data types of the model column and Quickbooks field you select match.

Refer to the [record matching docs](https://docs.hightouch.com/syncs/record-matching.md) for more information.

> [!NOTE]
>
> In **Insert** mode, QuickBooks automatically generates an identifier for every
> new record synced, so there is no need to match an existing record.

#### Field mapping

You can map data from any of your model columns to fields in QuickBooks.

QuickBooks requires the [`SyncToken` attribute](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/payment) when performing updates.

The `SyncToken` is the version number of the object. It's used to lock an object for use by one app at a time. As soon as an application modifies an object, its SyncToken is incremented.

By default, Hightouch pulls the latest `SyncToken` from QuickBooks before perfoming the update. You can override this behavior by providing your own `SyncToken` value via field mapping. Keep in mind that attempts to modify an object specifying an older `SyncToken` fail.

QuickBooks also requires the following fields, so you must map them to complete your configuration:

* **TotalAmt**: Indicates the total amount of the transaction. This includes the total of all the charges, allowances, and taxes.
* **CustomerRef**: Reference to a customer or job.

Ensure the data types of your model columns match the data types of the fields you want to sync to. Refer to QuickBooks [payment object docs](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/payment) for more information.

### Syncing payment methods

Sync data from any source to payment methods in QuickBooks.

#### Record matching

You can match rows from your model to payment methods in Quickbooks on any column in your model and any payment method field in Quickbooks. Ensure the data types of the model column and Quickbooks field you select match.

Refer to the [record matching docs](https://docs.hightouch.com/syncs/record-matching.md) for more information.

> [!NOTE]
>
> In **Insert** mode, QuickBooks automatically generates an identifier for every
> new record synced, so there is no need to match an existing record.

#### Field mapping

You can map data from any of your model columns to fields in QuickBooks.

QuickBooks requires the [`SyncToken` attribute](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/paymentmethod) when performing updates.

The `SyncToken` is the version number of the object. It's used to lock an object for use by one app at a time. As soon as an application modifies an object, its SyncToken is incremented.

By default, Hightouch pulls the latest `SyncToken` from QuickBooks before perfoming the update. You can override this behavior by providing your own `SyncToken` value via field mapping. Keep in mind that attempts to modify an object specifying an older `SyncToken` fail.

QuickBooks also requires the following fields, so you must map them to complete your configuration:

* **Name**: User recognizable name for the payment method. 31 character max.

Ensure the data types of your model columns match the data types of the fields you want to sync to. Refer to QuickBooks [payment method object docs](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/paymentmethod) for more information.

### Syncing RecurringTransaction objects

Hightouch supports syncing RecurringTransaction objects to the **Bill** entity. This sets the [`type`](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/recurringtransaction) field on the ecurringTransaction objects.

If you're interested in syncing RecurringTransations to another entity, please [let us know](#pylon-chat).

#### Record matching

Since you can only insert RecurringTransaction objects, QuickBooks automatically generates an identifier for every new record synced, so there is no need to match an existing record.

#### Field mapping

You can map data from any of your model columns to fields in QuickBooks.

QuickBooks requires the [`SyncToken` attribute](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/customer) when performing updates.

The `SyncToken` is the version number of the object. It's used to lock an object for use by one app at a time. As soon as an application modifies an object, its SyncToken is incremented.

By default, Hightouch pulls the latest `SyncToken` from QuickBooks before perfoming the update. You can override this behavior by providing your own `SyncToken` value via field mapping. Keep in mind that attempts to modify an object specifying an older `SyncToken` fail.

QuickBooks also requires the **RecurringInfo** field, so you must map it to complete your configuration. Ensure the data types of your model columns match the data types of the fields you want to sync to.

### Syncing TimeActivity objects

Sync data from any source to TimeActivity objects in QuickBooks.

#### Record matching

You can match rows from your model to TimeActivity objects in Quickbooks on any column in your model and any TimeActivity field in Quickbooks. Ensure the data types of the model column and Quickbooks field you select match.

Refer to the [record matching docs](https://docs.hightouch.com/syncs/record-matching.md) for more information.

> [!NOTE]
>
> In **Insert** mode, QuickBooks automatically generates an identifier for every
> new record synced, so there is no need to match an existing record.

#### Field mapping

You can map data from any of your model columns to fields in QuickBooks.

QuickBooks requires the [`SyncToken` attribute](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/customer) when performing updates.

The `SyncToken` is the version number of the object. It's used to lock an object for use by one app at a time. As soon as an application modifies an object, its SyncToken is incremented.

By default, Hightouch pulls the latest `SyncToken` from QuickBooks before perfoming the update. You can override this behavior by providing your own `SyncToken` value via field mapping. Keep in mind that attempts to modify an object specifying an older `SyncToken` fail.

QuickBooks also requires the following fields, so you must map them to complete your configuration:

* **NameOf** - Value can be `Vendor` or `Employee`.
* **VendorRef** - Required if **NameOf** is set to `Vendor`.
* **EmployeeRef** - Required if **NameOf** is set to `Employee`.

Ensure the data types of your model columns match the data types of the fields you want to sync to.

### Syncing vendors

Sync data from any source to vendors in QuickBooks.

#### Record matching

You can match rows from your model to vendors in Quickbooks on any column in your model and any vendor field in Quickbooks. Ensure the data types of the model column and Quickbooks field you select match.

Refer to the [record matching docs](https://docs.hightouch.com/syncs/record-matching.md) for more information.

> [!NOTE]
>
> In **Insert** mode, QuickBooks automatically generates an identifier for every
> new record synced, so there is no need to match an existing record.

#### Field mapping

You can sync columns from your model to QuickBooks default and custom fields.

QuickBooks requires the [`SyncToken` attribute](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/customer) when performing updates.

The `SyncToken` is the version number of the object. It's used to lock an object for use by one app at a time. As soon as an application modifies an object, its SyncToken is incremented.

By default, Hightouch pulls the latest `SyncToken` from QuickBooks before perfoming the update. You can override this behavior by providing your own `SyncToken` value via field mapping. Keep in mind that attempts to modify an object specifying an older `SyncToken` fail.

## Tips and troubleshooting

To see the exact API requests and responses from each sync run, use the [live debugger](https://docs.hightouch.com/syncs/debugger.md). To get notified by Slack, PagerDuty, SMS, or email when a sync fails, set up [sync alerts](https://docs.hightouch.com/syncs/alerting.md). If you run into an issue this page doesn't cover, [contact support](#pylon-chat).
