Skip to main content

QuickBooks: Audit Log

The Audit Log is an immutable, appendonly record of every QuickBooksrelated action that's ever happened on this store — staged entries, edits, approvals, rej...

Written by Ryan VanVuren

The Audit Log is an immutable, append-only record of every QuickBooks-related action that's ever happened on this store — staged entries, edits, approvals, rejections, voids, settings changes, mapping updates, OAuth connects. It's the canonical source of "who did what, when?"

Audit Log overview

Every QB action recorded. Filterable by date and event type, with humanized summaries in the Details column.

Who can use this: Admins only. The Manager, Shift Lead, Buyer, and Cashier roles don't have QuickBooks access.


Where to find it

From the sidebar: QuickBooks > Audit Log. Direct URL: /admin/{typeNum}/quickbooks/audit-log.

By default the page loads the last 30 days, sorted newest first.


What gets logged

Every meaningful action writes one row. The system never deletes or modifies a logged row — once a fact is recorded, it stays.

Event type

When it fires

Who triggers

sync_staged

Nightly close ingest creates a pending entry

System

sync_restaged

Re-sync from Sync Log creates a fresh entry

Admin (Re-sync)

sync_posted

Entry successfully posts to QBO

System (auto) or Admin (manual)

sync_failed

QBO rejects a post attempt

System / Admin

re_synced

Auto retry of a previously-failed sync

System

manual_sync

Admin-triggered ad-hoc sync

Admin

edited

Pending entry was modified before approval

Admin

approved

Admin approved a pending entry

Admin

rejected

Admin rejected a pending entry

Admin

voided

Posted entry voided in QBO

Admin

settings_changed

Any setting changed (sync mode, thresholds, memo, etc.)

Admin

mapping_updated

Account mapping for a field changed

Admin

connected / disconnected

OAuth state changed

Admin

Each row captures: actor (user id + name), timestamp, IP address (when from a web action), business date the event relates to (if any), and a JSON payload with event-specific details.


Filters

Filter toolbar — date range + event type + refresh + export

Filter

Default

Notes

From / To

Last 30 days

Any range; older periods load on demand

Event

All events

One of the 13 event types above

The Refresh button reloads with the current filters. Export CSV downloads everything matching the current filters as a CSV — useful for handing to auditors or accountants.


Humanized Details column

Rather than dumping raw JSON, the Details column shows a per-event-type summary in plain English:

Humanized Details summaries

Event

Old display

New summary

settings_changed

{"key":"syncMode","oldValue":"auto","newValue":"manual"}

syncMode: auto → manual

sync_posted

{"journalEntryId":"160","docNumber":"BK-pc00-20260501"}

Posted to QBO · Doc #BK-pc00-20260501 (clickable)

sync_failed

{"error":"..."}

Error: <actual error message>

edited

{"editReason":"...", "changes":{...}}

Reason: <editReason> or Changed N fields

rejected

{"reason":"..."}

Reason: <rejection reason>

voided

{"reason":"...","docNumber":"..."}

Reason: <reason> · Doc #BK-pc00-... (clickable)

The summaries pull from the event's stored details JSON — same data, friendlier rendering.


Doc # → QBO deep-link

Wherever a posted or voided event's Details column shows a Doc #BK-..., that doc number is a clickable link that opens the journal entry directly in QuickBooks Online — right page, right company. Hover for the cue underline + external-link icon.

The same deep-link pattern works in the Sync Log DocNumber column and the Dashboard activity feed.


Expanded row — full payload

Every row is expandable (click the ▶ chevron) to show the raw payload JSON in a tinted panel:

Expanded row showing pretty-printed JSON

Pretty-printed JSON for events that carry one; "No additional details" for events that don't (e.g. approved typically has no payload).

Use this when the Details summary doesn't have the specific field you need — the full payload is always there.


CSV export

The Export CSV button downloads every row matching the current filters as a CSV file. Columns include the actor, timestamp, event type, business date, and the full details JSON flattened to a string.

Useful for:

  • Handing to your accountant for a period review

  • Auditor requests ("show me every action on Q1 close data")

  • Long-term archival outside the BuyerKiosk database

The export is capped at 10,000 rows per file — use the date filters to narrow if you need more.


How is this different from the Sync Log?

Audit Log = "every action that happened, in order"

  • Multiple rows per entry (staged + edited + approved + sync_posted + voided = 5 rows for one business date if it went the full route)

  • Append-only, immutable, capturing actor + IP + timestamp

  • Optimized for compliance and "who/when?" investigations

Sync Log = "what entries posted (or tried to post) to QBO?"

  • One row per business date

  • Shows the final state (posted / failed / etc.)

  • Optimized for "did Tuesday's entry land?"

Use the Sync Log for daily operational checks. Use the Audit Log when you need the full lifecycle or an actor.


What's next

Did this answer your question?