Data source

Collect QuickBooks Online data into your data warehouse

The QuickBooks connector loads accounts, customers, vendors, every sales and purchase transaction and dated financial report snapshots into your own data warehouse, so the books sit next to orders and ad spend.

Get started free

Recent updates

Endpoints

QuickBooks Endpoints

Documentation

26 QuickBooks endpoints you can import. Each lands in its own table in your data warehouse.

Trust

The Data Partner You Can Trust

users

176K Source: Internal OWOX data as of 2026-10-02

Executives and data analysts across 20+ industries

G2 rating

4.9★2

“A trusted data analytics partner” — verified review

npm installs

165K3

In Open Source We Trust

Customers

A/P Aging Summary report schema

QuickBooks A/P Aging Summary report schema

11 fieldsTime seriesquickbooks_report_aged_payables

A/P Aging Summary as of report_date (window end): one row per vendor with aging buckets.

QuickBooks A/P Aging Summary report fields
FieldTypeDescription
realm_idSTRING
report_nameSTRING
report_timeTIMESTAMPWhen QuickBooks produced the snapshot.
report_basisSTRINGCash or Accrual (absent on aging reports).
start_periodDATE
end_periodDATE
summarize_columns_bySTRING
currencySTRING
header_optionsJSONName/Value pairs; NoReportData=true means an empty report.
report_rowsJSONNested Section/Data rows as JSON. Flatten in SQL; ColData.id is the Account/Customer/Vendor Id.
report_columnsJSONColumn metadata (ColTitle, ColType) as JSON; index-aligned with every ColData array.

A/R Aging Summary report schema

QuickBooks A/R Aging Summary report schema

11 fieldsTime seriesquickbooks_report_aged_receivables

A/R Aging Summary as of report_date (window end): one row per customer with Current, 1-30, 31-60, 61-90, 91+ and Total columns.

QuickBooks A/R Aging Summary report fields
FieldTypeDescription
realm_idSTRING
report_nameSTRING
report_timeTIMESTAMPWhen QuickBooks produced the snapshot.
report_basisSTRINGCash or Accrual (absent on aging reports).
start_periodDATE
end_periodDATE
summarize_columns_bySTRING
currencySTRING
header_optionsJSONName/Value pairs; NoReportData=true means an empty report.
report_rowsJSONNested Section/Data rows as JSON. Flatten in SQL; ColData.id is the Account/Customer/Vendor Id.
report_columnsJSONColumn metadata (ColTitle, ColType) as JSON; index-aligned with every ColData array.

Accounts schema

QuickBooks Accounts schema

20 fieldsquickbooks_account

Chart of accounts, active and inactive.

QuickBooks Accounts fields
FieldTypeDescription
idSTRINGQuickBooks entity Id (string). Primary key together with realm_id.
realm_idSTRINGCompany (realm) id, stamped from the RealmId parameter.
sync_tokenSTRINGVersion counter; changes on every edit.
create_timeTIMESTAMP
last_updated_timeTIMESTAMPIncremental cursor.
nameSTRING
fully_qualified_nameSTRINGParent:Child path for sub-accounts.
account_typeSTRINGBank, Accounts Receivable, Expense, Income, Credit Card…
account_sub_typeSTRING
classificationSTRINGAsset, Liability, Equity, Revenue, Expense.
acct_numSTRING
current_balanceFLOAT
current_balance_with_sub_accountsFLOAT
currency_idSTRING
currency_nameSTRING
sub_accountBOOLEAN
parent_idSTRING
parent_nameSTRING
descriptionSTRING
activeBOOLEAN

Balance Sheet report schema

QuickBooks Balance Sheet report schema

12 fieldsTime seriesquickbooks_report_balance_sheet

Balance Sheet as of the run window end (Assets, Liabilities, Equity by account).

QuickBooks Balance Sheet report fields
FieldTypeDescription
realm_idSTRING
report_nameSTRING
report_timeTIMESTAMPWhen QuickBooks produced the snapshot.
report_basisSTRINGCash or Accrual (absent on aging reports).
start_periodDATE
end_periodDATE
summarize_columns_bySTRING
currencySTRING
header_optionsJSONName/Value pairs; NoReportData=true means an empty report.
accounting_method_paramSTRINGAccountingMethod parameter used for the request (ReportBasis echoes it).
report_rowsJSONNested Section/Data rows as JSON. Flatten in SQL; ColData.id is the Account/Customer/Vendor Id.
report_columnsJSONColumn metadata (ColTitle, ColType) as JSON; index-aligned with every ColData array.

Bill payments schema

QuickBooks Bill payments schema

23 fieldsquickbooks_bill_payment

Payments against vendor bills; joins to Bill through Line[].LinkedTxn.

QuickBooks Bill payments fields
FieldTypeDescription
idSTRINGQuickBooks entity Id (string). Primary key together with realm_id.
realm_idSTRINGCompany (realm) id, stamped from the RealmId parameter.
sync_tokenSTRINGVersion counter; changes on every edit.
create_timeTIMESTAMP
last_updated_timeTIMESTAMPIncremental cursor.
doc_numberSTRING
txn_dateDATEBusiness date of the transaction (not the edit date).
total_amtFLOAT
currency_idSTRING
currency_nameSTRING
exchange_rateFLOAT
private_noteSTRING
pay_typeSTRINGCheck or CreditCard.
vendor_idSTRING
vendor_nameSTRING
ap_account_idSTRING
ap_account_nameSTRING
check_bank_account_idSTRING
check_bank_account_nameSTRING
check_print_statusSTRING
credit_card_account_idSTRING
credit_card_account_nameSTRING
lineJSONLine\[\] as JSON; LinkedTxn\[\] {TxnId, TxnType=Bill} names the bills settled.

Bills schema

QuickBooks Bills schema

25 fieldsquickbooks_bill

Vendor bills (payables).

QuickBooks Bills fields
FieldTypeDescription
idSTRINGQuickBooks entity Id (string). Primary key together with realm_id.
realm_idSTRINGCompany (realm) id, stamped from the RealmId parameter.
sync_tokenSTRINGVersion counter; changes on every edit.
create_timeTIMESTAMP
last_updated_timeTIMESTAMPIncremental cursor.
doc_numberSTRING
txn_dateDATEBusiness date of the transaction (not the edit date).
total_amtFLOAT
currency_idSTRING
currency_nameSTRING
exchange_rateFLOAT
private_noteSTRING
lineJSONLine\[\] as JSON; DetailType is AccountBasedExpenseLineDetail (AccountRef) or ItemBasedExpenseLineDetail (ItemRef).
due_dateDATE
balanceFLOAT
vendor_idSTRING
vendor_nameSTRING
ap_account_idSTRING
ap_account_nameSTRING
sales_term_idSTRING
sales_term_nameSTRING
department_idSTRING
department_nameSTRING
linked_txnJSON
home_balanceFLOAT

Cash Flow report schema

QuickBooks Cash Flow report schema

12 fieldsTime seriesquickbooks_report_cash_flow

Statement of Cash Flows for the run window.

QuickBooks Cash Flow report fields
FieldTypeDescription
realm_idSTRING
report_nameSTRING
report_timeTIMESTAMPWhen QuickBooks produced the snapshot.
report_basisSTRINGCash or Accrual (absent on aging reports).
start_periodDATE
end_periodDATE
summarize_columns_bySTRING
currencySTRING
header_optionsJSONName/Value pairs; NoReportData=true means an empty report.
accounting_method_paramSTRINGAccountingMethod parameter used for the request (ReportBasis echoes it).
report_rowsJSONNested Section/Data rows as JSON. Flatten in SQL; ColData.id is the Account/Customer/Vendor Id.
report_columnsJSONColumn metadata (ColTitle, ColType) as JSON; index-aligned with every ColData array.

Company info schema

QuickBooks Company info schema

15 fieldsquickbooks_company_info

One row per company: names, country, fiscal-year start.

QuickBooks Company info fields
FieldTypeDescription
idSTRINGQuickBooks entity Id (string). Primary key together with realm_id.
realm_idSTRINGCompany (realm) id, stamped from the RealmId parameter.
sync_tokenSTRINGVersion counter; changes on every edit.
create_timeTIMESTAMP
last_updated_timeTIMESTAMPIncremental cursor.
company_nameSTRING
legal_nameSTRING
countrySTRING
company_start_dateDATE
fiscal_year_start_monthSTRING
emailSTRING
company_addr_countrySTRING
company_addrJSON
supported_languagesSTRING
name_valueJSONExtra settings as Name/Value pairs (industry type, subscription status…).

Credit memos schema

QuickBooks Credit memos schema

23 fieldsquickbooks_credit_memo

Credits issued to customers (reduce receivables; negative revenue in reconciliations).

QuickBooks Credit memos fields
FieldTypeDescription
idSTRINGQuickBooks entity Id (string). Primary key together with realm_id.
realm_idSTRINGCompany (realm) id, stamped from the RealmId parameter.
sync_tokenSTRINGVersion counter; changes on every edit.
create_timeTIMESTAMP
last_updated_timeTIMESTAMPIncremental cursor.
doc_numberSTRING
txn_dateDATEBusiness date of the transaction (not the edit date).
total_amtFLOAT
currency_idSTRING
currency_nameSTRING
exchange_rateFLOAT
private_noteSTRING
lineJSONLine array kept as JSON. Unnest in SQL: DetailType decides which \*LineDetail object is present.
remaining_creditFLOAT
balanceFLOAT
customer_idSTRING
customer_nameSTRING
class_idSTRING
class_nameSTRING
department_idSTRING
department_nameSTRING
total_taxFLOAT
home_total_amtFLOAT

Customers schema

QuickBooks Customers schema

28 fieldsquickbooks_customer

Customers, including inactive ones and sub-customers, with open balance and a flattened billing address.

QuickBooks Customers fields
FieldTypeDescription
idSTRINGQuickBooks entity Id (string). Primary key together with realm_id.
realm_idSTRINGCompany (realm) id, stamped from the RealmId parameter.
sync_tokenSTRINGVersion counter; changes on every edit.
create_timeTIMESTAMP
last_updated_timeTIMESTAMPIncremental cursor.
display_nameSTRING
company_nameSTRING
given_nameSTRING
family_nameSTRING
primary_emailSTRING
primary_phoneSTRING
balanceFLOATOpen A/R balance for the customer.
balance_with_jobsFLOAT
currency_idSTRING
currency_nameSTRING
taxableBOOLEAN
jobBOOLEANTrue for sub-customers (projects).
parent_idSTRING
parent_nameSTRING
payment_method_idSTRING
payment_method_nameSTRING
sales_term_idSTRING
sales_term_nameSTRING
bill_addr_citySTRING
bill_addr_countrySTRING
bill_addr_postal_codeSTRING
bill_addrJSONFull billing address as JSON.
activeBOOLEAN

Deposits schema

QuickBooks Deposits schema

21 fieldsquickbooks_deposit

Bank deposits, including the ones that group undeposited customer payments.

QuickBooks Deposits fields
FieldTypeDescription
idSTRINGQuickBooks entity Id (string). Primary key together with realm_id.
realm_idSTRINGCompany (realm) id, stamped from the RealmId parameter.
sync_tokenSTRINGVersion counter; changes on every edit.
create_timeTIMESTAMP
last_updated_timeTIMESTAMPIncremental cursor.
doc_numberSTRING
txn_dateDATEBusiness date of the transaction (not the edit date).
total_amtFLOAT
currency_idSTRING
currency_nameSTRING
exchange_rateFLOAT
private_noteSTRING
lineJSONLine\[\] as JSON; lines either link received Payments (LinkedTxn) or post directly (DepositLineDetail.AccountRef, Entity).
deposit_to_account_idSTRING
deposit_to_account_nameSTRING
cash_back_amountFLOAT
cash_back_account_idSTRING
cash_back_account_nameSTRING
department_idSTRING
department_nameSTRING
home_total_amtFLOAT

General Ledger Detail report schema

QuickBooks General Ledger Detail report schema

12 fieldsTime seriesquickbooks_report_general_ledger_detail

General Ledger: every posting line per account for the run window, with opening balance and totals.

QuickBooks General Ledger Detail report fields
FieldTypeDescription
realm_idSTRING
report_nameSTRING
report_timeTIMESTAMPWhen QuickBooks produced the snapshot.
report_basisSTRINGCash or Accrual (absent on aging reports).
start_periodDATE
end_periodDATE
summarize_columns_bySTRING
currencySTRING
header_optionsJSONName/Value pairs; NoReportData=true means an empty report.
accounting_method_paramSTRINGAccountingMethod parameter used for the request (ReportBasis echoes it).
report_rowsJSONNested Section/Data rows as JSON. Flatten in SQL; ColData.id is the Account/Customer/Vendor Id.
report_columnsJSONColumn metadata (ColTitle, ColType) as JSON; index-aligned with every ColData array.

Invoice changes (CDC, incl. deletes) schema

QuickBooks Invoice changes (CDC, incl. deletes) schema

9 fieldsTime seriesquickbooks_cdc_invoice

Change data capture for Invoice: every invoice created, updated or deleted since the run window start, full payload, deleted ones with status = Deleted.

QuickBooks Invoice changes (CDC, incl. deletes) fields
FieldTypeDescription
idSTRING
realm_idSTRING
entitySTRINGEntity name, constant per node.
statusSTRING"Deleted" for hard-deleted objects; absent for live ones. Live rows carry the full payload.
last_updated_timeTIMESTAMP
sync_tokenSTRING
txn_dateDATE
total_amtFLOAT
payloadJSONWhole object as JSON (CDC returns the full payload, so the main node's columns can be re-derived).

Invoices schema

QuickBooks Invoices schema

36 fieldsquickbooks_invoice

Invoices with header amounts, customer and Line[] as JSON (SalesItemLineDetail.ItemRef, Qty, UnitPrice, Amount).

QuickBooks Invoices fields
FieldTypeDescription
idSTRINGQuickBooks entity Id (string). Primary key together with realm_id.
realm_idSTRINGCompany (realm) id, stamped from the RealmId parameter.
sync_tokenSTRINGVersion counter; changes on every edit.
create_timeTIMESTAMP
last_updated_timeTIMESTAMPIncremental cursor.
doc_numberSTRING
txn_dateDATEBusiness date of the transaction (not the edit date).
total_amtFLOAT
currency_idSTRING
currency_nameSTRING
exchange_rateFLOAT
private_noteSTRING
lineJSONLine array kept as JSON. Unnest in SQL: DetailType decides which \*LineDetail object is present.
due_dateDATE
balanceFLOATUnpaid remainder; 0 when fully paid.
customer_idSTRING
customer_nameSTRING
customer_memoSTRING
bill_emailSTRING
email_statusSTRING
print_statusSTRING
sales_term_idSTRING
sales_term_nameSTRING
deposit_to_account_idSTRING
deposit_to_account_nameSTRING
class_idSTRING
class_nameSTRING
department_idSTRING
department_nameSTRING
ship_dateDATE
tracking_numSTRING
total_taxFLOAT
txn_tax_detailJSON
linked_txnJSONHeader-level links (payments, estimates) as JSON: TxnId, TxnType.
home_total_amtFLOAT
home_balanceFLOAT

Items schema

QuickBooks Items schema

25 fieldsquickbooks_item

Products and services with price, purchase cost and the three account links.

QuickBooks Items fields
FieldTypeDescription
idSTRINGQuickBooks entity Id (string). Primary key together with realm_id.
realm_idSTRINGCompany (realm) id, stamped from the RealmId parameter.
sync_tokenSTRINGVersion counter; changes on every edit.
create_timeTIMESTAMP
last_updated_timeTIMESTAMPIncremental cursor.
nameSTRING
fully_qualified_nameSTRING
skuSTRING
typeSTRINGInventory, NonInventory, Service, Category, Group…
descriptionSTRING
unit_priceFLOAT
purchase_costFLOAT
qty_on_handFLOAT
taxableBOOLEAN
track_qty_on_handBOOLEAN
income_account_idSTRING
income_account_nameSTRING
expense_account_idSTRING
expense_account_nameSTRING
asset_account_idSTRING
asset_account_nameSTRING
sub_itemBOOLEAN
parent_idSTRING
parent_nameSTRING
activeBOOLEAN

Journal entries schema

QuickBooks Journal entries schema

15 fieldsquickbooks_journal_entry

Manual and adjusting journal entries; the postings the transaction tables miss.

QuickBooks Journal entries fields
FieldTypeDescription
idSTRINGQuickBooks entity Id (string). Primary key together with realm_id.
realm_idSTRINGCompany (realm) id, stamped from the RealmId parameter.
sync_tokenSTRINGVersion counter; changes on every edit.
create_timeTIMESTAMP
last_updated_timeTIMESTAMPIncremental cursor.
doc_numberSTRING
txn_dateDATEBusiness date of the transaction (not the edit date).
currency_idSTRING
currency_nameSTRING
exchange_rateFLOAT
private_noteSTRING
lineJSONLine\[\] as JSON; JournalEntryLineDetail has PostingType (Debit/Credit), AccountRef and optional Entity {Type, EntityRef}.
adjustmentBOOLEAN
total_amtFLOATSum of one side of the entry.
home_total_amtFLOAT

Payments schema

QuickBooks Payments schema

21 fieldsquickbooks_payment

Customer payments.

QuickBooks Payments fields
FieldTypeDescription
idSTRINGQuickBooks entity Id (string). Primary key together with realm_id.
realm_idSTRINGCompany (realm) id, stamped from the RealmId parameter.
sync_tokenSTRINGVersion counter; changes on every edit.
create_timeTIMESTAMP
last_updated_timeTIMESTAMPIncremental cursor.
txn_dateDATEBusiness date of the transaction (not the edit date).
total_amtFLOAT
currency_idSTRING
currency_nameSTRING
exchange_rateFLOAT
private_noteSTRING
unapplied_amtFLOAT
customer_idSTRING
customer_nameSTRING
deposit_to_account_idSTRING
deposit_to_account_nameSTRING
payment_method_idSTRING
payment_method_nameSTRING
payment_ref_numSTRINGCheck or reference number.
process_paymentBOOLEAN
lineJSONLine\[\] as JSON; each line has Amount and LinkedTxn\[\] {TxnId, TxnType} pointing at the Invoice it settles.

Preferences schema

QuickBooks Preferences schema

17 fieldsquickbooks_preferences

One row per company: home currency, multi-currency flag, fiscal-year and tracking settings.

QuickBooks Preferences fields
FieldTypeDescription
idSTRINGQuickBooks entity Id (string). Primary key together with realm_id.
realm_idSTRINGCompany (realm) id, stamped from the RealmId parameter.
sync_tokenSTRINGVersion counter; changes on every edit.
create_timeTIMESTAMP
last_updated_timeTIMESTAMPIncremental cursor.
home_currencySTRING
multi_currency_enabledBOOLEAN
class_tracking_per_txnBOOLEAN
class_tracking_per_txn_lineBOOLEAN
track_departmentsBOOLEAN
first_month_of_fiscal_yearSTRING
book_close_dateDATE
tax_year_monthSTRING
using_sales_taxBOOLEAN
sales_forms_prefsJSON
vendor_and_purchases_prefsJSON
product_and_services_prefsJSON

Profit and Loss report schema

QuickBooks Profit and Loss report schema

12 fieldsTime seriesquickbooks_report_profit_and_loss

Profit and Loss per run window, one column per month (summarize_column_by=Month), rows nested by account group.

QuickBooks Profit and Loss report fields
FieldTypeDescription
realm_idSTRING
report_nameSTRING
report_timeTIMESTAMPWhen QuickBooks produced the snapshot.
report_basisSTRINGCash or Accrual (absent on aging reports).
start_periodDATE
end_periodDATE
summarize_columns_bySTRING
currencySTRING
header_optionsJSONName/Value pairs; NoReportData=true means an empty report.
accounting_method_paramSTRINGAccountingMethod parameter used for the request (ReportBasis echoes it).
report_rowsJSONNested Section/Data rows as JSON. Flatten in SQL; ColData.id is the Account/Customer/Vendor Id.
report_columnsJSONColumn metadata (ColTitle, ColType) as JSON; index-aligned with every ColData array.

Purchases schema

QuickBooks Purchases schema

26 fieldsquickbooks_purchase

Expenses paid directly (cash, check, card) without a bill.

QuickBooks Purchases fields
FieldTypeDescription
idSTRINGQuickBooks entity Id (string). Primary key together with realm_id.
realm_idSTRINGCompany (realm) id, stamped from the RealmId parameter.
sync_tokenSTRINGVersion counter; changes on every edit.
create_timeTIMESTAMP
last_updated_timeTIMESTAMPIncremental cursor.
doc_numberSTRING
txn_dateDATEBusiness date of the transaction (not the edit date).
total_amtFLOAT
currency_idSTRING
currency_nameSTRING
exchange_rateFLOAT
private_noteSTRING
lineJSONLine array kept as JSON. Unnest in SQL: DetailType decides which \*LineDetail object is present.
payment_typeSTRINGCash, Check or CreditCard.
account_idSTRINGBank or credit-card account the money left.
account_nameSTRING
entity_idSTRINGVendor, Customer or Employee paid.
entity_nameSTRING
entity_typeSTRING
payment_method_idSTRING
payment_method_nameSTRING
creditBOOLEANTrue for a credit-card refund.
print_statusSTRING
department_idSTRING
department_nameSTRING
total_taxFLOAT

Refund receipts schema

QuickBooks Refund receipts schema

26 fieldsquickbooks_refund_receipt

Money refunded to customers.

QuickBooks Refund receipts fields
FieldTypeDescription
idSTRINGQuickBooks entity Id (string). Primary key together with realm_id.
realm_idSTRINGCompany (realm) id, stamped from the RealmId parameter.
sync_tokenSTRINGVersion counter; changes on every edit.
create_timeTIMESTAMP
last_updated_timeTIMESTAMPIncremental cursor.
doc_numberSTRING
txn_dateDATEBusiness date of the transaction (not the edit date).
total_amtFLOAT
currency_idSTRING
currency_nameSTRING
exchange_rateFLOAT
private_noteSTRING
lineJSONLine array kept as JSON. Unnest in SQL: DetailType decides which \*LineDetail object is present.
customer_idSTRING
customer_nameSTRING
deposit_to_account_idSTRINGAccount the refund was paid from.
deposit_to_account_nameSTRING
payment_method_idSTRING
payment_method_nameSTRING
payment_ref_numSTRING
class_idSTRING
class_nameSTRING
department_idSTRING
department_nameSTRING
total_taxFLOAT
home_total_amtFLOAT

Sales by Customer report schema

QuickBooks Sales by Customer report schema

12 fieldsTime seriesquickbooks_report_customer_sales

Sales by Customer Summary for the run window.

QuickBooks Sales by Customer report fields
FieldTypeDescription
realm_idSTRING
report_nameSTRING
report_timeTIMESTAMPWhen QuickBooks produced the snapshot.
report_basisSTRINGCash or Accrual (absent on aging reports).
start_periodDATE
end_periodDATE
summarize_columns_bySTRING
currencySTRING
header_optionsJSONName/Value pairs; NoReportData=true means an empty report.
accounting_method_paramSTRINGAccountingMethod parameter used for the request (ReportBasis echoes it).
report_rowsJSONNested Section/Data rows as JSON. Flatten in SQL; ColData.id is the Account/Customer/Vendor Id.
report_columnsJSONColumn metadata (ColTitle, ColType) as JSON; index-aligned with every ColData array.

Sales receipts schema

QuickBooks Sales receipts schema

27 fieldsquickbooks_sales_receipt

Sales paid at the time of sale (no receivable).

QuickBooks Sales receipts fields
FieldTypeDescription
idSTRINGQuickBooks entity Id (string). Primary key together with realm_id.
realm_idSTRINGCompany (realm) id, stamped from the RealmId parameter.
sync_tokenSTRINGVersion counter; changes on every edit.
create_timeTIMESTAMP
last_updated_timeTIMESTAMPIncremental cursor.
doc_numberSTRING
txn_dateDATEBusiness date of the transaction (not the edit date).
total_amtFLOAT
currency_idSTRING
currency_nameSTRING
exchange_rateFLOAT
private_noteSTRING
lineJSONLine array kept as JSON. Unnest in SQL: DetailType decides which \*LineDetail object is present.
customer_idSTRING
customer_nameSTRING
deposit_to_account_idSTRING
deposit_to_account_nameSTRING
payment_method_idSTRING
payment_method_nameSTRING
payment_ref_numSTRING
bill_emailSTRING
class_idSTRING
class_nameSTRING
department_idSTRING
department_nameSTRING
total_taxFLOAT
home_total_amtFLOAT

Transfers schema

QuickBooks Transfers schema

16 fieldsquickbooks_transfer

Money moved between balance-sheet accounts.

QuickBooks Transfers fields
FieldTypeDescription
idSTRINGQuickBooks entity Id (string). Primary key together with realm_id.
realm_idSTRINGCompany (realm) id, stamped from the RealmId parameter.
sync_tokenSTRINGVersion counter; changes on every edit.
create_timeTIMESTAMP
last_updated_timeTIMESTAMPIncremental cursor.
txn_dateDATEBusiness date of the transaction (not the edit date).
total_amtFLOAT
currency_idSTRING
currency_nameSTRING
exchange_rateFLOAT
private_noteSTRING
amountFLOAT
from_account_idSTRING
from_account_nameSTRING
to_account_idSTRING
to_account_nameSTRING

Vendor Expenses report schema

QuickBooks Vendor Expenses report schema

12 fieldsTime seriesquickbooks_report_vendor_expenses

Expenses by Vendor for the run window.

QuickBooks Vendor Expenses report fields
FieldTypeDescription
realm_idSTRING
report_nameSTRING
report_timeTIMESTAMPWhen QuickBooks produced the snapshot.
report_basisSTRINGCash or Accrual (absent on aging reports).
start_periodDATE
end_periodDATE
summarize_columns_bySTRING
currencySTRING
header_optionsJSONName/Value pairs; NoReportData=true means an empty report.
accounting_method_paramSTRINGAccountingMethod parameter used for the request (ReportBasis echoes it).
report_rowsJSONNested Section/Data rows as JSON. Flatten in SQL; ColData.id is the Account/Customer/Vendor Id.
report_columnsJSONColumn metadata (ColTitle, ColType) as JSON; index-aligned with every ColData array.

Vendors schema

QuickBooks Vendors schema

19 fieldsquickbooks_vendor

Vendors, including inactive ones, with open payable balance.

QuickBooks Vendors fields
FieldTypeDescription
idSTRINGQuickBooks entity Id (string). Primary key together with realm_id.
realm_idSTRINGCompany (realm) id, stamped from the RealmId parameter.
sync_tokenSTRINGVersion counter; changes on every edit.
create_timeTIMESTAMP
last_updated_timeTIMESTAMPIncremental cursor.
display_nameSTRING
company_nameSTRING
primary_emailSTRING
primary_phoneSTRING
balanceFLOATOpen A/P balance owed to the vendor.
currency_idSTRING
currency_nameSTRING
vendor_1099BOOLEAN
acct_numSTRING
term_idSTRING
term_nameSTRING
bill_addr_countrySTRING
bill_addrJSON
activeBOOLEAN

S01 · Why teams pick OWOX

Why collect QuickBooks data into your data warehouse with OWOX?

A wrong revenue number looks exactly like a right one. When your dashboard says one figure and finance says another, finance can point to the books and the accounting rules behind them. You have a query. The QuickBooks connector puts the books in your data warehouse next to Shopify orders and ad spend, so the two numbers are compared line by line in SQL, not argued about across two tools.

Collect to your data warehouse

QuickBooks Online data lands in tables you own in your data warehouse: Google BigQuery, Snowflake, AWS Redshift, AWS Athena or Databricks.

Changes and deletes, not just totals

Every transaction carries its business date and its last edit time, and a change-data-capture table records deleted invoices.

Books next to the store and the ads

Join invoices, bills and the P&L to commerce and marketing data in a Data Mart, with the SQL visible.

How it works

The QuickBooks Online custom connector in the OWOX Data Marts connector builder: the Builder tab with Global configuration and the list of 26 nodes.

R01 · Collect

Collect all your QuickBooks data with zero engineering

The connector has 26 endpoints, each landing in its own table.

17 entity tables. Accounts (quickbooks_account), customers, vendors and items are the lists everything else points to. Sales: invoices (quickbooks_invoice), payments, sales receipts, credit memos and refund receipts. Purchases: bills (quickbooks_bill), bill payments and purchases, the card, cash and check spend that never had a bill. Journal entries hold the adjusting postings the other tables miss; deposits and transfers move money between accounts; company info and preferences hold one row per company, home currency and fiscal-year start included.

One change-data-capture table. quickbooks_cdc_invoice reads Intuit’s change data capture endpoint with a changedSince time and returns every invoice created, updated or deleted since then, with the full invoice as JSON. Deleted invoices carry status = Deleted. This is the only place a delete shows up: a query on last-updated time never returns a deleted row, so quickbooks_invoice keeps the last live version of an invoice that no longer exists. Intuit’s endpoint looks back at most 30 days and returns at most 1,000 changes per request, so the table runs daily and a delete older than its first run is not recovered.

Eight dated report snapshots. Profit and Loss with one column per month, Balance Sheet, Cash Flow, A/R Aging Summary, A/P Aging Summary, Vendor Expenses, General Ledger Detail and Sales by Customer. Each run requests the report for its run window and stores it with start_period and end_period, rows kept as JSON.

The chart of accounts, items, company info and preferences reload in full on every run. The transaction and name-list tables read the records whose MetaData.LastUpdatedTime is after the “Load changes since” date you set, oldest edit first and at most 1,000 per run, so an edited invoice returns with a new last_updated_time and sync_token. A company with more than 1,000 changes since that date needs the date moved forward, or a second Data Mart on a later window, before the table is complete. Line items stay as one line JSON column, every row carries the company id as realm_id, and an HTTP 429 from Intuit is retried with a back-off, using the Retry-After header when Intuit sends one. Range reports run on Accrual or Cash, whichever you choose, and record it in accounting_method_param, so a cash-basis and an accrual-basis P&L never mix in one query.

Authentication is OAuth 2.0 with a refresh token. The platform exchanges the refresh token for an access token on each run. Intuit rotates refresh tokens and expires one left unused for 100 days, so the token is saved in an OWOX credential, where the platform persists the rotated token for the next run.

A custom connector, built in OWOX Data Marts

QuickBooks is not one of the open-source native data connectors. It is a custom connector, built in the connector builder of OWOX Data Marts from Intuit’s Accounting API documentation: 26 nodes, each a request plus the fields it lands. Its whole manifest opens in the builder’s Code tab, so you can see exactly what it fetches.

To set it up:

  1. In OWOX Data Marts, open Connectors and choose the custom connector QuickBooks Online.
  2. Create a credential with your Intuit app’s Client ID and Client Secret, a Refresh Token and the Realm ID, the QuickBooks company id.
  3. Create one Data Mart per table you need and point it at a dataset in your data storage.
  4. Add a Connector Trigger that runs the Data Marts daily.

Run History of the QuickBooks: profit and loss Data Mart, a column of manual QuickBooks Online connector runs on 2026-11-06, each marked Success.

R02 · Report

Build reports with QuickBooks data that everyone trusts

On one company’s books, eight Data Marts load daily into a BigQuery dataset named quickbooks: accounts, customers, invoices, payments, bills, items, A/R aging and P&L. The P&L history from 2026-01-01 to 2026-11-05 was backfilled in 10 segments, every one Success.

Two checks from that setup:

  • A/R aging rebuilt in SQL from open balances in quickbooks_invoice matches the A/R Aging Summary report to the cent.
  • Over July to October, invoices explain 94% of P&L income and bills 71% of P&L expenses. The rest sits in tables the eight Data Marts do not load yet: sales receipts and refunds on the income side, direct purchases (card and cash spend without a bill) on the expense side. Invoices alone are never the revenue number.

Join these tables with orders and ad spend in a data model, and margin by channel comes from one readable query.

R03 · Why OWOX

Runbook for AI agents querying QuickBooks tables

Question Table Date field
Income, expenses and net income by month, as QuickBooks reports them quickbooks_report_profit_and_loss start_period, end_period
Invoiced sales by customer or item quickbooks_invoice, unnest line txn_date
Cash received quickbooks_payment txn_date
Open receivables and aging quickbooks_invoice (balance), checked against quickbooks_report_aged_receivables due_date; end_period
Payables quickbooks_bill, quickbooks_bill_payment txn_date, due_date
Spend without a bill quickbooks_purchase txn_date
What changed or was deleted quickbooks_cdc_invoice last_updated_time
  • Bucket money by txn_date, the business date. last_updated_time is the last edit: use it for freshness, never for revenue by month.
  • Every transaction and list table’s key is realm_id + id. Join on both. Company info and preferences hold one row per realm_id.
  • How the 26 tables fit together is drawn in the QuickBooks data model: quickbooks_company_info is the anchor table on realm_id, and customers, vendors and accounts are the hubs every transaction table joins to. Open it on the model canvas or read the bundle on GitHub.
  • customer_id joins to quickbooks_customer.id, vendor_id to quickbooks_vendor.id, and any *_account_id to quickbooks_account.id.
  • Payment to invoice: unnest quickbooks_payment.line, keep each LinkedTxn entry with TxnType = Invoice, and join its TxnId to quickbooks_invoice.id. Bill payments link to bills the same way.
  • Drop deleted invoices with an anti-join to quickbooks_cdc_invoice where status = Deleted.
  • In report tables, flatten report_rows; ColData.id is the account, customer or vendor id, and report_columns is index-aligned with each ColData array. Where accounting_method_param exists, filter it to one method.

R04 · Why OWOX

Deliver QuickBooks data to the tools your team uses

A Report delivers one Data Mart to one destination, and each Data Mart can feed many destinations.

  • Push mode: OWOX writes the data on a manual or scheduled run. Google Sheets, email, Slack, Microsoft Teams and Google Chat work this way.
  • Pull mode: the tool asks OWOX for the data when a user refreshes it. Data Studio dashboards and Microsoft Excel work this way.
  • AI assistants such as Claude and ChatGPT read the Data Mart through OWOX MCP, not the raw tables, so answers use your definitions.

S03 · Eight outcomes

Why use OWOX connectors to collect your QuickBooks data?

Books next to commerce

Accounting, orders and ad spend sit in one data warehouse, ready to join.

Your data stays yours

The tables sit in a data warehouse you own.

Deletes you can see

A deleted invoice is a row in the CDC table, not a mystery.

Report history you keep

Each report snapshot is stored with its period, so past periods stay queryable.

Scheduled, not exported

A daily Connector Trigger means nobody exports the books by hand.

Readable to the last field

The manifest and every field description are open in the connector builder.

Extend it yourself

To track deletes on bills or payments too, clone the CDC node for that entity.

Define once, reuse everywhere

One Data Mart feeds Sheets, Excel, Data Studio and AI assistants.

What users are saying

Not testimonials. Comment threads.

Real things real customers said — each quote pinned to a specific claim, straight from the quotes database.

A3re: trusting AI
Nodari RizunNodari RizunFounder & CEO, Pürblack®
“AI, by the nature of the models, will hallucinate. And because of that, you need something which will create guardrails to ensure that there are no hallucinations, that you can trust your data.”
C9re: one source of truth
Mark SimmonsMark SimmonsCMO, Pürblack®
“We had six or seven different channels and no single source of truth — it was almost impossible, a lot of guesswork.”
E7re: getting time back
Nodari RizunNodari RizunFounder & CEO, Pürblack®
“We regained time. And time is the one resource that never comes back.”

Start collecting QuickBooks data

Add the custom connector with your Intuit app keys, create one Data Mart per table and schedule a daily run.

Get started free