SYSPRO and ServiceTitan integration
SYSPRO runs ERP operations for distribution and manufacturing. ServiceTitan manages field service dispatch, scheduling, and invoicing for HVAC, plumbing, electrical, and related trades. Connecting the two keeps your service operations and your financial records in agreement. Invoices created in ServiceTitan are recorded in SYSPRO's AP, inventory adjustments flow both directions, and vendor data stays current across both systems without re-keying.
What moves between them
The main flow runs from ServiceTitan into SYSPRO. When a service technician completes a job and generates an invoice in ServiceTitan, ml-connector polls the ServiceTitan API, reads the new invoice, maps the service items to SYSPRO inventory codes, extracts the vendor and cost information, and posts the resulting AP invoice into SYSPRO's AP module, allocated to the correct GL accounts. Vendor master data, purchase orders, and inventory adjustments flow in both directions so SYSPRO and ServiceTitan stay in sync on who supplies what and current stock levels. SYSPRO AP invoices are read via polling on a 15-minute cadence aligned with your service dispatch schedule.
How ml-connector handles it
ml-connector stores SYSPRO session credentials encrypted and obtains a fresh session token by logging in to the Utilities/Logon endpoint on each polling cycle, then queries OData with timestamp filters to fetch new AP invoices. On the ServiceTitan side, ml-connector exchanges OAuth2 client credentials at the auth endpoint, caches the token for its 15-minute lifetime, and includes the required ST-App-Key header on every API call to avoid 401 errors. Because SYSPRO OData is read-only, AP writes go through e.net Business Objects using XML payloads, which ml-connector prepares from ServiceTitan invoice data. ServiceTitan's AP Bills are read-only, so ml-connector does not attempt to write them back. Vendor records in both systems are mapped by code so invoices from ServiceTitan land on the correct vendor in SYSPRO. The integration handles ServiceTitan rate limits (60 calls per second) with exponential backoff and retries, and tracks the OAuth token expiry to prevent mid-batch 401 errors. Every invoice carries a full audit trail and can be replayed if a downstream AP posting fails.
A real-world example
A regional HVAC and plumbing service company runs SYSPRO ERP to manage purchasing, inventory, and accounts payable across five branch locations, and uses ServiceTitan to schedule technicians, manage customer jobs, and generate service invoices. Before the integration, dispatchers and office staff manually entered each day's completed service work from ServiceTitan into SYSPRO as vendor invoices at the end of each shift, wasting 2-3 hours daily and creating reconciliation gaps between what was invoiced and what was recorded in AP. With SYSPRO and ServiceTitan connected, each service invoice flows automatically from ServiceTitan into SYSPRO AP with the correct branch, technician, and service item details, eliminating manual data entry and keeping the ERP AP ledger current within minutes of invoice generation.
What you can do
- Post ServiceTitan service invoices into SYSPRO as AP invoices, mapped to the correct GL accounts and vendors.
- Keep vendor master records synchronized between ServiceTitan and SYSPRO so invoices post to valid vendors.
- Sync inventory adjustments and purchase orders in both directions between the two systems.
- Authenticate SYSPRO with session tokens and ServiceTitan with OAuth2 client credentials plus the required API key header.
- Poll SYSPRO OData on a configurable schedule with retries, timestamp filtering, and a full audit trail on every invoice.
Questions
- Which direction does data move between SYSPRO and ServiceTitan?
- The main flow is ServiceTitan into SYSPRO. Service invoices created in ServiceTitan are posted into SYSPRO's AP module as vendor invoices. Vendor records, purchase orders, and inventory are synchronized in both directions so both systems stay current. SYSPRO AP invoices are read-only from ServiceTitan's perspective.
- Why does SYSPRO require polling instead of pushing?
- SYSPRO Cloud ERP does not support outbound webhooks. ml-connector polls the OData endpoint on a schedule you define (typically 15 minutes), using timestamp filters on InvoiceDate and PostDate to fetch only new records. This approach is efficient and aligns with your service dispatch cadence.
- How does ml-connector handle ServiceTitan's OAuth2 token expiry and API key requirements?
- ml-connector obtains an OAuth2 bearer token at the auth endpoint and caches it for its full 15-minute lifetime to avoid re-authentication on every call. Every API request includes the required ST-App-Key header, and the integration monitors token expiry to refresh before a request fails with 401. This prevents outages from credential mismanagement.
Related integrations
More SYSPRO integrations
Other systems that connect to ServiceTitan
Connect SYSPRO and ServiceTitan
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started