Skip to content

[BE-42] QuickBooks Online accounting integration #1229

Description

@yusuftomilola

Overview

An alternative to Xero (BE-41) for hubs whose accountants use QuickBooks Online — North America and South Africa are common markets where QBO dominates. Provides the same auto-sync for invoices and payments.

Context

  • Same architecture pattern as BE-41 (Xero) — OAuth 2.0, token storage, cron sync
  • Package: node-quickbooks or quickbooks-js npm package
  • InvoicesModule and PaymentsModule as data sources

Tasks

  • Create QuickBooksConnection entity: id, accessToken (encrypted), refreshToken (encrypted), realmId (QuickBooks company ID), connectedAt, expiresAt
  • GET /integrations/quickbooks/connect — initiate QuickBooks OAuth 2.0 flow (admin only)
  • GET /integrations/quickbooks/callback — exchange code for tokens; store in QuickBooksConnection
  • DELETE /integrations/quickbooks — disconnect (admin only)
  • GET /integrations/quickbooks/status — returns connection status
  • On invoice PAID event: create matching QuickBooks Invoice
  • On payment SUCCESS event: create QuickBooks Payment record
  • Nightly cron reconciliation job (same pattern as Xero)
  • Store QUICKBOOKS_CLIENT_ID, QUICKBOOKS_CLIENT_SECRET, QUICKBOOKS_ENVIRONMENT (sandbox/production) in ConfigService

Files to Modify / Create

  • New: backend/src/integrations/quickbooks/ (module, entity, controller, service)
  • backend/src/app.module.ts

Metadata

Metadata

Assignees

Labels

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions