GroundworkGroundwork
Admin & Integrations

Connect your accounting system

Who can do this: Admin or Controller

Before you begin

Settle the boundary before you connect anything. Groundwork owns operations and the job cost sub-ledger; your accounting system owns the general ledger, the chart of accounts, financial statements, and statutory output. The connector's job is to keep those two in agreement, not to move the general ledger into Groundwork. Have admin credentials for the accounting system, and have your controller confirm the account mapping before the first sync, because a wrong mapping propagates into the GL and takes real work to unwind.

Steps

  1. Go to Settings → Integrations and select your connector (QuickBooks Online or ERPNext).
  2. Authenticate. QuickBooks uses OAuth, so you'll be handed off to Intuit and returned with a token; ERPNext uses an API key and secret generated on the ERPNext side.
  3. Import the chart of accounts. Groundwork reads the accounts rather than creating them, since the accounting system is the source of truth for the chart.
  4. Map cost codes to GL accounts. This is the mapping that determines where job cost lands in the books, and it's the step worth doing slowly.
  5. Configure which record types push. Approved invoices, bills, payments, and job-cost distribution are the usual set. Nothing pushes on draft status, only on approval.
  6. Run the connector in a read-only or test posture first if your accounting system supports a sandbox, and reconcile one period end to end before going live.
  7. Activate the connector. From this point, approved records push automatically as events rather than on a nightly batch.

What happens next

The push from Groundwork to the accounting system is event-driven on approval. The return path comes back as a webhook so payments and bill status recorded in accounting appear in Groundwork without polling. A scheduled drift detector runs behind both as a read-only safety net and writes anything it finds to a conflict register instead of silently overwriting either side, so a disagreement surfaces as something to decide rather than as data that quietly changed.

Where the record lives

Connector configuration, sync history, and the conflict register live under Settings → Integrations. The tie-out itself is under Finance → Reconciliation, which shows line by line where the job cost sub-ledger and the general ledger agree and where they don't, down to the specific transaction.

Troubleshooting

A record pushed to the wrong GL account: fix the cost-code mapping, then correct the entry on the accounting side. Groundwork does not reach into the GL to reverse a posting, deliberately, since the general ledger's corrections belong to the general ledger.

The conflict register keeps flagging the same records: something is editing those records on both sides. Decide which system owns that field and stop writing it from the other one; the register is telling you about a process problem rather than a sync bug.

Nothing is syncing after activation: confirm the connector is both configured and activated. A configured but inactive connector is inert by design, so that connecting it in a test window doesn't start pushing to the live books.

Still stuck?

Send this straight to support (it goes directly to support@groundworkai.io).