QuickBooks Online
Reads a QuickBooks Online company’s accounts, customers, vendors, invoices, bills, payments, bill payments, journal entries and reports, so finance agents can answer from the books. It only reads. It reads in place, in your deployment; only ids, hashes and counts reach LightHouse.
At a glance
Section titled “At a glance”| Collector | QuickBooks Online, version 1.0.0 |
|---|---|
| Reads | Intuit: QuickBooks Online Accounting API (the vendor's documentation) |
| Family | Finance |
| Kind | Accounting |
| Ways to connect | OAuth approval |
| Scopes |
|
| Read only | Yes, except: [object Object] |
| Vendor's API can move money | No |
| Personal data | Financial, Contact |
| Hosts it may contact | quickbooks.api.intuit.com, sandbox-quickbooks.api.intuit.com, oauth.platform.intuit.com, {host} |
| Vendor API versions | Accounting API v3, minorversion 75 |
| Lowest engine version | 0.46.0 |
What it reads
Section titled “What it reads”- Company information.
- Accounts, customers, vendors, invoices, bills, payments, bill payments and journal entries, each with its amounts and currency (the company’s home currency where a record names none).
- Reports: profit and loss, balance sheet, aged receivables, aged payables.
- The first read queries each entity in pages of 1,000. Later reads ask change
data capture (
/cdc) for what changed since the last pull; a record markedDeletedis removed. CDC looks back at most 30 days, so a cursor older than 29 days reads everything again.
It does not read attachments, payroll or inventory.
How to connect
Section titled “How to connect”- In Intuit’s developer portal, make your own app and connect your company to
it, giving the
com.intuit.quickbooks.accountingscope. - In LightHouse, open Setup and admin, Connectors and choose QuickBooks Online.
- Paste the client id, client secret and refresh token, and give the company’s
id (
realm_id) and the environment (productionorsandbox). Your browser seals it to your deployment; LightHouse never sees it.
The credential is JSON in the variable the source names (AAL_QUICKBOOKS by
default): client_id, client_secret, refresh_token, realm_id,
environment.
Permissions
Section titled “Permissions”This collector is read-only in what it does: GET requests (queries, change
data capture and reports), and one POST to Intuit’s token endpoint
(/oauth2/v1/tokens/bearer). Its read-only test proves it on every change.
- The scope is not read-only. Intuit offers one accounting scope,
com.intuit.quickbooks.accounting, which can write; there is no read-only variant. The code cannot narrow it, and it does not refuse it: the health check states it asIntuit's com.intuit.quickbooks.accounting scope can write and has no read-only variant; this connector only reads. What stops a write is that the collector never sends one. - Refused by the code: nothing, by scope.
- Not a funds-moving system: QuickBooks records payments in the ledger; its API does not move money.
- Refresh token: Intuit rolls it; the new one is written back to your own secret store in your deployment at once (not to Intuit), and the previous one lapses a day later.
- Hosts:
quickbooks.api.intuit.comorsandbox-quickbooks.api.intuit.com, andoauth.platform.intuit.comfor the token, over https.
Limits
Section titled “Limits”- Accounting API v3 at
minorversion=75. - Requests are paced (0.15 s apart) and retried on 429 and 5xx; Intuit allows 500 a minute per company.
realm_idmust be digits, andenvironmentproductionorsandbox.- Reports are as Intuit gives them: amounts as text.
Data handling
Section titled “Data handling”- Customers, vendors, invoices and bills hold personal and financial data.
Documents carry the
labelyou give the source (defaultconfidential). - Content is read in place, in your deployment. LightHouse receives ids, hashes and counts, never the records, and never opens the credential.
- Errors carry a status and fixed text, never a provider’s body.
- The data is audit-ready for your own agents; nothing here certifies anyone against any regulation.
Troubleshooting
Section titled “Troubleshooting”| What you see | What it means | What to do |
|---|---|---|
QuickBooks answered HTTP 401 (the app or its consent was refused) |
The client, secret or refresh token was refused | Check the app, or consent again |
realm_id is the company's id, digits |
realm_id is not numeric |
Use the company id from Intuit |
environment is production or sandbox |
The environment is something else | Correct it |
QuickBooks answered HTTP 429 |
Rate limit | Nothing; the collector backs off and continues |
QuickBooks answered HTTP 403 |
The app or user lacks access to the company | Reconnect the company to the app |
Certification
Section titled “Certification”Each entry is a run by Atlantic Agentic Labs, newest first. Only a run against the vendor’s sandbox or a client environment certifies a collector; a certification lasts six months, or less if the vendor publishes an API version the collector does not list. See How collectors are certified.
| Date | Collector | Engine | Vendor API | Method | Expires |
|---|---|---|---|---|---|
| 10 November 2026 | 1.0.0 | 0.46.0 | Accounting API v3, minorversion 75 | Fixtures only: built, not certified | Not applicable |
Security posture
Section titled “Security posture”From the collector’s last scan on the default branch. What each line means, and what blocks a release: Security posture.
| Last scanned | 10 November 2026 |
|---|---|
| Critical findings | 0 |
| High findings | 0 |
| Medium findings | 0 |
| Low findings | 0 |
| Info findings | 0 |
| Release blocked | No |
| Network allow-list check | Pass |
| Read-only behavioural test | Pass |
| SBOM (CycloneDX) | Produced |
| Dependency licences | Pass |
| Scanners | bandit 1.9.4, semgrep 1.181.1, pip-audit 2.10.1, osv-scanner 2.7.0, cyclonedx-py 7.5.0, pip-licenses 5.5.5, gitleaks repository job aal-secrets, hosts_check tools/hosts_check.py, read-only test pytest -m read_only |