Sage 100 and ServiceTitan integration
ServiceTitan runs field service dispatch and job invoicing for HVAC, plumbing, and electrical contractors. Sage 100 runs accounting and AP. Connecting them keeps your cost codes in sync and moves vendor invoices from ServiceTitan into Sage 100's AP automatically, so finance teams no longer re-key invoices by hand. ml-connector deploys a local Windows agent on your Sage 100 server to bridge the two, handling the very different APIs and the vendor matching that makes reconciliation fast.
What moves between them
ServiceTitan invoices and AP bills flow into Sage 100's accounts payable on a poll schedule you control, typically every 15 to 30 minutes. Vendors are synced bidirectionally so new vendors in either system can be matched by name and code. GL accounts are read from Sage 100 to align job cost codes and service categories with valid account dimensions. The integration flags duplicate invoices (by reference number and amount) to prevent double-entry in AP.
How ml-connector handles it
ml-connector runs a Windows service on your Sage 100 server. It caches OAuth2 tokens from ServiceTitan, refreshing every 14 minutes, and makes SOAP calls to Sage 100 with your configured company code and user credentials. For each ServiceTitan invoice, it matches the vendor in Sage 100 by code or name, fetches the matching GL account from Sage 100 for the job cost code or service category, and creates an AP invoice record in Sage 100 with the job reference and amount. Duplicate detection uses the invoice reference number and amount to prevent re-entry. Because Sage 100 COM locks records during concurrent writes, ml-connector backs off and retries on lock timeouts. ServiceTitan's AP bills are read as reference data but not written back, since they are auto-generated and read-only.
A real-world example
A plumbing and electrical contractor runs ServiceTitan for job dispatch, scheduling, and invoicing across 12 service trucks and an office. They also run Sage 100 for accounting, AP, and cost tracking by job. Before the integration, office staff exported service invoices from ServiceTitan daily and manually entered them into Sage 100 AP, a process that took 45 minutes per day and often contained vendor-name mismatches. With ServiceTitan and Sage 100 connected, each invoice flows into AP automatically and is matched to the job cost code in Sage 100, so reconciliation is immediate and the manual data entry step is gone.
What you can do
- Sync ServiceTitan invoices and AP bills into Sage 100 accounts payable on a poll schedule you control.
- Match vendors across both systems by code or name, and auto-create missing vendors in Sage 100.
- Align job cost codes and service categories with Sage 100 GL accounts so invoices post to the correct dimension.
- Prevent duplicate invoices in Sage 100 AP by checking reference number and amount.
- Run as a Windows service on your Sage 100 server, handling OAuth2 token refresh and SOAP credential routing.
Questions
- Does the integration require changes to Sage 100 or ServiceTitan?
- No schema changes. On the Sage 100 side, you must enable the configured user for Web Services in Sage 100 admin (off by default). On the ServiceTitan side, you create an OAuth2 application in the Developer Portal with the permissions to read invoices, AP bills, vendors, and purchase orders. ml-connector does the rest.
- Why is a local Windows agent required instead of a cloud connection?
- Sage 100 is on-premises only and does not expose a cloud API. The SOAP surface is limited to AR and sales orders, so AP and GL access requires the BOI COM layer, which runs only on a Windows machine with Sage 100 installed. ml-connector runs the agent on that machine to bridge to ServiceTitan's cloud REST API.
- What happens if an invoice already exists in Sage 100 AP?
- ml-connector checks for duplicates by matching the ServiceTitan invoice reference number and amount against existing Sage 100 AP invoices. If a match is found, the record is skipped and flagged in the audit log. This prevents double-entry if the integration is paused and resumed or if an invoice is re-sent.
Related integrations
More Sage 100 integrations
Other systems that connect to ServiceTitan
Connect Sage 100 and ServiceTitan
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started