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

# FreshBooks audit profile, Vortex IQ

> What the Vortex IQ FreshBooks health audit checks: FreshBooks: Cash-Flow, AR Aging, Invoice Reconciliation & Expense Hygiene

**[Nerve Centre KPIs](/nerve-centre/kpi-cards/freshbooks) · [Audit Profile](/nerve-centre/kpi-cards/freshbooks/audit) · [Sentiment Settings](/nerve-centre/kpi-cards/freshbooks/sentiment)**

The questions a small-business owner or bookkeeper asks at 9am on Monday: how much cash is outstanding and what is overdue, did every storefront order get invoiced, did the Stripe/PayPal money that landed actually get recorded against FreshBooks invoices, and are expenses categorised so the quarterly tax estimate isn't a fire drill. Cross-references the ecommerce platforms (BigCommerce / Adobe Commerce / Shopify) and the payment gateways (Stripe / PayPal) - an ecom order with no matching FreshBooks invoice, a PSP payout with no matching FreshBooks payment, or overdue AR on a customer still placing new orders are the killer reconciliation findings no single tool sees.

## What this audit checks

### Authentication & access

* OAuth2 token refresh against /auth/oauth/token succeeds (grant\_type=refresh\_token, client\_id + client\_secret + refresh\_token)
* Identity probe GET /auth/api/v1/users/me returns the token owner with at least one business\_membership carrying account\_id (and business\_id if Projects is used)
* Granted scopes cover the resources the cards read (user:invoices:read, user:payments:read, user:clients:read, user:expenses:read)
* Sustained 429 / rate-limit responses indicate the OAuth app quota is saturated by other integrations

### Cash-flow & AR health

* Sent invoices overdue >30d with outstanding balance and no payment recorded (recoverable cash sitting idle)
* AR aged 60+ days above 15% of total outstanding balance
* Days Sales Outstanding (DSO) above 60 days over trailing 30d
* Total outstanding AR rising >20% vs trailing 30d without a matching rise in invoice volume (collections drag)

### Invoicing hygiene

* Invoices stuck in draft >7d (revenue not yet billed to the client)
* Sent invoices with no view event after 14d (delivery / email problem)
* Invoices missing a due\_date (no aging signal - falls out of collections rhythm)
* Partial payments left open >30d without a follow-up reminder

### Expense & tax readiness

* Expenses with no category assigned in the last 90d (quarterly tax estimate hard to compute)
* Expense total spiking >25% vs prior 90d period without a matching revenue change
* Duplicate expenses (same amount + vendor + date) suggesting a double-import

### Cross-channel: FreshBooks vs ecommerce & payments reconciliation

* Storefront order has no matching FreshBooks invoice after the sync window (sibling = bigcommerce.order / shopify.order / adobe\_commerce.order, by po\_number/order\_reference or client email)
* Stripe/PayPal payout has no matching FreshBooks payment within the reconciliation window (sibling = stripe.charge / paypal.transaction, by amount+date - AR overstated / double-count risk)
* Ecom customer with completed orders absent from FreshBooks client master after 7d (sibling = bigcommerce.customer / shopify.customer, by email)
* Customer with AR aged 60+ days still placing new ecom orders (credit risk compounding, sibling = ecommerce customer by email)

## Data sources

* `POST /auth/oauth/token` - OAuth2 token refresh
* `GET /auth/api/v1/users/me` - Identity / account\_id + business\_id resolution probe
* `GET /accounting/account/{account_id}/invoices/invoices` - Invoices - AR, aging, DSO, overdue, status, outstanding
* `GET /accounting/account/{account_id}/payments/payments` - Payments - recorded payments for PSP reconciliation
* `GET /accounting/account/{account_id}/users/clients` - Clients - customer master parity by email
* `GET /accounting/account/{account_id}/expenses/expenses` - Expenses - categorisation + tax-readiness checks
