Acumatica and ServiceTitan integration
Acumatica Cloud ERP runs financial management, AP, AR, and the general ledger. ServiceTitan runs field-service operations: dispatch, jobs, invoicing, payments, and purchasing. Connecting the two keeps the books in Acumatica in agreement with the work happening in the field. Job invoices, payments, customer records, and the AP bills ServiceTitan creates when a purchase order is received all post into Acumatica without re-keying, mapped to the right GL accounts and cost centers. ml-connector handles the very different APIs on each side and moves the data on a schedule you control.
What moves between them
The main flow runs from ServiceTitan into Acumatica. As field jobs are completed and invoiced, ml-connector reads ServiceTitan invoices and payments and posts them into Acumatica as AR invoices and AP payments, allocated to the GL account and subaccount that match the originating business unit. The inventory bills ServiceTitan generates from received purchase orders flow into Acumatica as AP bills against the linked vendor. Customer records are aligned so an account exists on both sides before any financial document references it. GL accounts and cost centers are read from Acumatica and mapped, since ServiceTitan has no chart-of-accounts API, and the cadence is event-driven on ServiceTitan webhooks with a scheduled poll as a catch-up.
How ml-connector handles it
ml-connector stores both credential sets encrypted and runs two separate auth flows: it fetches a ServiceTitan client-credentials token, caches it for its 15-minute life, and sends it with the ST-App-Key header on every call, while obtaining an Acumatica OAuth token against the customer instance URL with the endpoint version pinned to the ERP release. ServiceTitan invoices, payments, and customers map to Acumatica AR invoices, payments, and customers, and the read-only inventory bill from a received PO maps to an Acumatica AP bill. Because ServiceTitan exposes no GL accounts, business units are mapped to Acumatica subaccounts and cost centers up front so every posting lands on a valid account, and all values are wrapped in the value-object shape Acumatica requires. Reads are driven by ServiceTitan HMAC-SHA256 webhooks, verified against the raw body, with a scheduled poll on Acumatica LastModifiedDateTime as a catch-up because both webhook systems can drop deliveries. ServiceTitan returns HTTP 429 above 60 calls per second and Acumatica throttles by license tier, so ml-connector backs off with jitter, dedupes the duplicate deliveries both platforms can send, and replays any record whose downstream call fails, with a full audit trail on every step.
A real-world example
A regional HVAC and plumbing contractor with about 90 technicians runs ServiceTitan for dispatch, job invoicing, and field purchasing, and runs Acumatica as the corporate accounting system across three branches. Before the integration, the accounting team exported invoice and payment registers from ServiceTitan each week and re-entered the totals into Acumatica by hand, then spent the first days of month-end close reconciling branch revenue against the ledger and matching received-material bills to the right vendors. With Acumatica and ServiceTitan connected, each job invoice and payment posts into Acumatica automatically, allocated to the GL account for its branch through the business-unit mapping, and the AP bills from received purchase orders land against the correct vendor. Month-end close starts with revenue and payables already reconciled, and the weekly re-keying step is gone.
What you can do
- Post ServiceTitan job invoices and payments into Acumatica as AR invoices and payments, allocated to the correct GL accounts.
- Bring the AP bills ServiceTitan generates from received purchase orders into Acumatica against the matching vendor.
- Keep customer records aligned between ServiceTitan and Acumatica before any financial document references them.
- Map ServiceTitan business units to Acumatica subaccounts and cost centers, since ServiceTitan has no chart-of-accounts API.
- Drive syncs from ServiceTitan HMAC-signed webhooks with a scheduled Acumatica poll as a catch-up, plus retries and a full audit trail.
Questions
- Which direction does data move between Acumatica and ServiceTitan?
- The main flow is ServiceTitan into Acumatica. Job invoices, payments, customers, and the AP bills ServiceTitan creates from received purchase orders move into Acumatica as AR invoices, payments, customers, and AP bills. GL accounts and cost centers are read from Acumatica and used for mapping, since ServiceTitan exposes no chart-of-accounts endpoint of its own.
- How are AP bills handled when ServiceTitan cannot create them directly?
- ServiceTitan does not let you write AP bills through the API. Instead, a bill is generated inside ServiceTitan when a purchase order is received with auto-create-bill enabled. ml-connector reads that derived inventory bill and posts it into Acumatica as an AP bill against the linked vendor, so payables stay complete without manual entry.
- How does the integration bridge the two different authentication methods?
- ServiceTitan uses an OAuth client-credentials token that expires after 15 minutes plus a required ST-App-Key header on every call, while Acumatica uses OAuth 2.0 against the customer instance URL with the endpoint version pinned to the ERP release. ml-connector stores both credential sets encrypted, caches and refreshes each token on its own schedule, and sends the App Key with every ServiceTitan request so neither side returns 401.
Related integrations
More Acumatica integrations
Other systems that connect to ServiceTitan
Connect Acumatica and ServiceTitan
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started