Acumatica and Salesforce integration
Acumatica runs finance, distribution, and the general ledger. Salesforce runs the sales pipeline, accounts, and orders. Connecting the two means the customer master agrees on both sides, closed Salesforce orders become invoices in Acumatica without re-keying, and sales can see real receivable balances on the account. ml-connector handles the very different APIs on each side and moves the data on a schedule you control. Because Salesforce is a CRM with no AP bills or chart of accounts, the general ledger stays in Acumatica where it belongs.
What moves between them
The main flow moves master data both ways and sales transactions in one direction. ml-connector reads new and changed Salesforce Accounts and Contacts and upserts them into Acumatica Customers and contacts, so the financial customer master reflects the accounts sales is working. Activated Salesforce Orders flow into Acumatica as Sales Invoices, mapped to the matching customer and stock items, with the Salesforce OrderNumber carried as the vendor reference for traceability. In the return direction, Acumatica customer status, credit limit, and AR balance flow back onto Salesforce Account fields so the sales team sees credit reality. GL accounts, AP bills, and journal entries stay in Acumatica, since Salesforce has no equivalent objects, so ml-connector never writes ledger entries into the CRM.
How ml-connector handles it
ml-connector stores both credential sets encrypted. On the Salesforce side it requests a client-credentials bearer token, derives the base URL from the returned instance_url, and fetches a fresh token when the roughly two-hour session expires, since no refresh token is issued. On the Acumatica side it accepts the full tenant URL and the exact endpoint version per customer, and it wraps every field value in a value object as the Contract-Based API requires. Accounts and Contacts are mapped first, so every order line references an Acumatica customer and stock item that already exist. Writes into Salesforce upsert on an External ID field, and writes into Acumatica match on the Order reference and customer ID, so a re-read record updates in place rather than duplicating. Salesforce Change Data Capture events can trigger a sync the moment an order is activated, with a scheduled LastModifiedDateTime poll on Acumatica as the catch-up path; if the connector is offline past the 72-hour CDC window, it falls back to a full SOQL sync. Acumatica rate limits depend on the license tier and return HTTP 429 near 50 percent of the limit, so ml-connector backs off with jitter and respects the concurrent-session cap.
A real-world example
A mid-sized building products distributor with about 300 employees runs Acumatica for inventory, AR, and the general ledger, while the sales team works entirely in Salesforce. Before the integration, a sales coordinator re-typed each won order from Salesforce into Acumatica to raise an invoice, which delayed billing by a day or two, introduced wrong item codes, and left reps quoting customers who were already over their credit limit. With Acumatica and Salesforce connected, activated orders post as Acumatica invoices within the sync window against the right customer and items, and each account in Salesforce shows its live Acumatica balance and credit status. Billing goes out same day, the item errors are gone, and reps stop selling to accounts that are on hold.
What you can do
- Upsert Salesforce Accounts and Contacts into Acumatica Customers so the financial master stays current.
- Post activated Salesforce Orders into Acumatica as Sales Invoices against the matching customer and stock items.
- Push Acumatica customer status, credit limit, and AR balance back onto Salesforce Account fields.
- Authenticate Salesforce with OAuth client credentials and Acumatica with its tenant-specific OAuth login and endpoint version.
- Sync on Change Data Capture events with a polling fallback, idempotent upserts, retries, and a full audit trail on every record.
Questions
- Which direction does data move between Acumatica and Salesforce?
- Master data moves both ways and sales transactions move one way. Accounts and Contacts sync from Salesforce into Acumatica Customers, while customer status, credit limit, and AR balance flow back to Salesforce. Activated Salesforce Orders post into Acumatica as Sales Invoices. GL accounts, AP bills, and journal entries stay in Acumatica, since Salesforce has no equivalent objects, so ml-connector never writes ledger entries into the CRM.
- Can Salesforce hold the invoices and payments instead of Acumatica?
- Generally no, and that is by design. The standard Invoice and Payment objects exist only in Salesforce Revenue Cloud orgs; basic Sales and Service Cloud orgs lack them entirely. ml-connector keeps invoicing, payments, and the general ledger in Acumatica, which is built for that, and uses Salesforce for the account and order records that feed billing.
- How does the integration handle Salesforce token expiry and the version-locked Acumatica URL?
- Salesforce client-credentials tokens expire after about two hours with no refresh token, so ml-connector requests a fresh one on expiry and always derives the base URL from the returned instance_url. For Acumatica it stores the full tenant URL and the exact endpoint version per customer, because a version mismatch in the path returns a 404, and it never hardcodes either value.
Related integrations
More Acumatica integrations
Other systems that connect to Salesforce
Connect Acumatica and Salesforce
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started