Sage Intacct and ServiceTitan integration
Sage Intacct runs accounting and finance for service businesses. ServiceTitan runs field dispatch, scheduling, and job invoicing. Connecting them keeps your accounts payable, inventory, and vendor records aligned. When a technician schedules a service job in ServiceTitan, the resulting inventory bill and purchase orders can flow into Intacct automatically, allocated to the correct cost centers and vendor accounts. Vendor master data stays synchronized so invoices post to valid accounts.
What moves between them
The main flow is ServiceTitan into Sage Intacct. After a service job completes and an inventory bill is generated in ServiceTitan, ml-connector reads the bill and its associated purchase orders and posts them into Intacct's AP module as APBILL records, mapped to the vendor and GL account configured for that job type. Vendor master data flows in both directions so invoices reference valid vendors in Intacct. The sync runs on a schedule tied to your billing cycle, and ServiceTitan webhook events can also trigger real-time syncs where enabled.
How ml-connector handles it
ml-connector manages Sage Intacct's 50-minute session cache by storing the sessionid and refreshing it before expiry, eliminating session timeout outages during long polling runs. It handles Intacct's XML serialization requirements, including stripping forbidden C0 control characters before escaping entity references, and parses XML responses for application-level errormessage tags since HTTP 200 does not guarantee success. On the ServiceTitan side, ml-connector caches OAuth2 tokens for their full 900-second lifespan and refreshes them only when a call returns 401, and it reads AP bills and purchase orders on a schedule or via webhook push where configured. Vendor records are mapped first so AP bills reference VENDOR records that already exist in Intacct. Cost centers and job types are matched between the systems so each bill posts to the correct GL account and dimension. ServiceTitan AP bills are read-only, so ml-connector never writes financial entries back to ServiceTitan. Every record carries a full audit trail and can be replayed if a downstream API call fails.
A real-world example
A regional HVAC contractor runs ServiceTitan for field dispatch, job scheduling, and invoicing across 12 service territories, and uses Sage Intacct for accounting and AP. Before the integration, the back-office team received service reports from ServiceTitan, manually created inventory bills in Intacct by matching job type to the correct vendor, and entered costs by hand, a process that took 6 to 8 hours per week and introduced posting errors. With ServiceTitan and Sage Intacct connected, each completed job's inventory bill flows into Intacct automatically at cost, allocated to the vendor and GL account for that service type, and month-end close is accelerated because all AP transactions are posted and reconciled.
What you can do
- Post ServiceTitan inventory bills and purchase orders into Sage Intacct as AP bills, allocated to the correct vendors and GL accounts.
- Synchronize vendor master data bidirectionally so both systems reference the same vendors and account numbers.
- Cache Intacct session tokens and ServiceTitan OAuth2 tokens to eliminate authentication round-trips and timeout failures.
- Handle ServiceTitan webhooks for real-time bill and purchase order events, with fallback to polling on your billing cycle.
- Parse Intacct XML responses for application-level errors and strip control characters automatically.
Questions
- How does ml-connector handle Sage Intacct's session-based authentication and the 50-minute session timeout?
- ml-connector stores the sessionid in encrypted memory and tracks its creation time. Before the session expires, ml-connector automatically refreshes it by calling getAPISession again with the stored credentials. This prevents timeout errors during long polling runs and allows uninterrupted syncs across multiple API calls.
- What happens if ServiceTitan inventory bills are read-only in the API?
- ServiceTitan generates AP bills automatically when a Purchase Order is marked received with auto-create-bill enabled. ml-connector reads these read-only bills from ServiceTitan and posts them into Sage Intacct as APBILL records. ml-connector never attempts to write bills back to ServiceTitan, so the read-only constraint is not a limitation.
- Can ServiceTitan and Sage Intacct sync in real-time, or is polling the only option?
- ServiceTitan supports outbound webhooks with HMAC-SHA256 signature verification, so job completion and billing events can trigger immediate syncs. Sage Intacct has no webhook system, so inbound changes are read by polling on a schedule you control. Both models are supported: webhook-driven push from ServiceTitan, or poll-based pull from Intacct on your billing cycle.
Related integrations
More Sage Intacct integrations
Other systems that connect to ServiceTitan
Connect Sage Intacct and ServiceTitan
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started