← Back to Organization Settings

QuickBooks Online Integration Setup

Sync customers between CivilTakeoff and QuickBooks Online, and push finalized CTO estimates into QBO as Estimates. This integration is billed only by your QuickBooks plan; CivilTakeoff adds no additional fees.

Simpler than Procore: There's no company-level install step. Any CTO org admin can click Connect and authenticate with their QuickBooks account directly.
1

Connect your QuickBooks account

  1. In CivilTakeoff, go to Organization Settings → Integrations.
  2. On the QuickBooks Online card, click Connect.
  3. Intuit will ask you to sign in with your QuickBooks Online credentials. Choose the company you want to sync, then click Connect.
  4. You'll be redirected back to CTO. The QuickBooks card should show Connected with your QBO company name.

CivilTakeoff uses Intuit's standard OAuth 2.0 flow. We only request the com.intuit.quickbooks.accounting scope; accounting data only, no payments or payroll.

2

Import your customers and vendors

After connecting, CivilTakeoff offers a one-click import. We pull every customer and vendor from QuickBooks, automatically link any that already exist in CivilTakeoff (matched by email or name), and create the rest.

  • Inactive QuickBooks entries are imported as archived in CivilTakeoff. Toggle "Show archived" on the customer or vendor list to view them.
  • Ambiguous matches (a CivilTakeoff customer is already linked to a different QuickBooks customer) are sent to a review inbox in Manage Mappings. Resolve by linking, creating a new entry, or dismissing.
  • Re-sync anytime via the Re-sync from QuickBooks button in Manage Mappings to pull entities added later.
  • Webhooks automatically import brand-new customers and vendors as they're created in QuickBooks.
3

Enable real-time sync via webhooks (optional)

CTO can receive near-real-time updates when customers change in QBO. This requires configuring the webhook URL in Intuit's Developer Portal; it's not API-registrable like Procore. Your CTO account manager usually handles this for you.

If you're a CTO customer doing the integration yourself (rare), the webhook URL to register in the Developer Portal is:

https://app.vertigraph.com/api/integrations/webhook/quickbooks

Without webhooks, sync still works; you can click Sync Now on mappings manually, or edits made in CTO will push to QBO automatically on save.

4

Configure sync rules

Click Manage Mappings on the QuickBooks card to open the sync workspace. Inside, you can configure:

  • Direction per entity type; Customers can sync in either direction or both; Estimates are push-only (CTO → QBO).
  • Field-level toggles; exclude specific fields (e.g., phone) from sync.
  • Auto-matching; suggest QBO Customer matches for CTO customers by email/name.
5

Pushing estimates to QBO

When a CTO estimate is finalized and its project has a linked customer:

  1. CTO resolves the customer's QBO Customer via the mapping.
  2. CTO creates a QBO Estimate with your DocNumber = CTO estimate name.
  3. Every line item pushes under a shared service Item named “CivilTakeoff Estimate Line” that we auto-create in your QBO company on first push. You can rename or re-categorize this Item in QBO if you prefer a different account coding.
  4. If the estimate is re-pushed later (e.g., re-finalized after changes), the same QBO Estimate is updated; no duplicates.

A future release will support mapping CTO line items to specific QBO Items (for per-SKU accounting). For now every line uses the single generic Item.

6

Troubleshooting

Connection shows “Expired”

Intuit refresh tokens expire after 100 days of inactivity. CTO runs a weekly keep-alive refresh, but if yours lapsed (e.g., a long pause in activity), click Disconnect and then Connect to re-authenticate.

“No QBO customer mapping for this estimate”

The estimate's project customer doesn't have a matching QBO Customer yet. Open Manage Mappings → Customers and link that CTO customer to their QBO Customer (or click Auto-match).

“No income accounts found”

The first estimate push creates a service Item, which requires at least one Income-type account. Add any Income account in QBO (Accounting → Chart of Accounts → New) and retry.

Estimate lines show no price in QBO

Check that your CTO line items have unit_rate and total_amount set. Push copies whichever is present; if both are 0, the QBO line shows $0.

Still stuck?

Email support@vertigraph.com with the QBO company name (not realm ID; easier for us to look up) and the time of the error.

What data CivilTakeoff accesses

  • Customers; read to suggest matches; upsert when you push edits from CTO (subject to your sync rules)
  • Estimates; create/update when a CTO estimate is finalized
  • Items; auto-create one “CivilTakeoff Estimate Line” Item on first push; read to look up the Item for subsequent pushes
  • Accounts; read to find an Income account for the CTO Item (never modified)

We do NOT read or write invoices, payments, bills, vendors, employees, payroll, or any financial report. Our OAuth scope is limited to com.intuit.quickbooks.accounting, which QBO restricts to the entities listed above.