ml-connector
AcumaticaDeel

Acumatica and Deel integration

Acumatica Cloud ERP runs finance and operations. Deel runs global hiring, payroll, and contractor management across many countries. Connecting the two keeps your workforce records and your general ledger in agreement. New hires and terminations in Deel line up with the Employee list in Acumatica, and the workforce cost on Deel billing invoices posts into Acumatica without manual re-keying. ml-connector handles the different APIs on each side and moves data on a schedule you control.

How Acumatica works

Acumatica Cloud ERP exposes Employee, Account, JournalTransaction, Vendor, Bill, and Payment records through its Contract-Based REST API, JSON over HTTPS on a tenant-specific URL. Authentication uses OAuth 2.0 through the built-in identity server, or legacy cookie and session login. Endpoint paths are version-locked, so the URL version must exactly match the customer's ERP release or the call returns 404, and every field value is wrapped in a value object. Acumatica can push change events through its Push Notifications system, secured by a shared-secret header rather than a signed payload, and most integrations also poll on LastModifiedDateTime as a reliable fallback.

How Deel works

Deel exposes HRIS people, contracts, billing invoices, Deel-fee invoices, contractor worker invoices, and payslips through the Deel REST API v2, JSON over HTTPS. Server-to-server calls use a Bearer organization token that does not expire and carries fine-grained read and write scopes such as accounting read and people read. Deel also offers OAuth2 with 30-day access tokens. Deel sends outbound webhooks for events like hris.employee.created and hris.employee.terminated, signed with an HMAC-SHA256 header that must be verified against the raw body. Deel has no vendor master, purchase orders, or items, so cost data is read from invoice and payment payloads.

What moves between them

The main flow runs from Deel into Acumatica. ml-connector reads Deel HRIS people and writes corresponding Employee records into Acumatica, so headcount and departments reflect Deel hires, terminations, and rehires. After each billing cycle it reads Deel billing invoices and contractor payments and posts the workforce cost into Acumatica as journal transactions or AP bills, mapped to the matching GL accounts. Reference data such as departments and GL accounts is aligned so each cost line lands on a valid Acumatica account. Acumatica is the system of record for finance, so ml-connector does not write GL postings back into Deel.

How ml-connector handles it

ml-connector stores both credential sets encrypted. On the Deel side it sends the Bearer organization token and adds the x-client-id header when OAuth2 is used, and verifies the HMAC-SHA256 webhook signature against the raw request body before processing any event. On the Acumatica side it requests an OAuth 2.0 token from the tenant identity server, accepts the full instance URL per customer since Acumatica publishes no shared base URL, and pins the endpoint version to the customer's ERP release so paths resolve. Deel hires and terminations can arrive by webhook for near real-time updates, while invoice and payment data is polled on a schedule tied to your billing calendar. Departments and GL accounts are mapped first so every Employee and cost line references a value that already exists in Acumatica, and field values are wrapped in the value objects Acumatica requires. Writes to Acumatica use upsert checks on natural keys to avoid duplicates, and both Deel and Acumatica return HTTP 429 when throttled, so ml-connector backs off with jitter and retries, with a full audit trail on every record.

A real-world example

A 400-person software company runs Acumatica Cloud ERP for finance and uses Deel to employ engineers and contractors across a dozen countries through employer-of-record and contractor agreements. Before the integration, the finance team downloaded Deel billing invoices each month, sorted the labor cost by team, and keyed the totals into Acumatica journals by hand, while HR separately updated the Acumatica employee list from a spreadsheet. With Acumatica and Deel connected, new hires and leavers flow into the Acumatica Employee list, and each cycle's Deel invoices post as journal entries allocated to the right GL accounts and departments. Month-end close starts with workforce cost already booked, and the manual export and re-keying steps are gone.

What you can do

  • Keep the Acumatica Employee list aligned with Deel hires, terminations, and rehires across all countries.
  • Post workforce cost from Deel billing invoices into Acumatica as journal transactions or AP bills.
  • Map Deel departments and cost data to valid Acumatica GL accounts so every line lands on a real account.
  • Bridge Deel Bearer token auth and Acumatica OAuth 2.0, pinning the endpoint version to the customer's ERP release.
  • Take Deel employee events by webhook and poll invoices on your billing schedule, with retries and a full audit trail.

Questions

Which direction does data move between Acumatica and Deel?
The main flow is Deel into Acumatica. HRIS people, billing invoices, and contractor payments move from Deel into Acumatica, where they become Employee records and journal or AP postings. Acumatica is the finance system of record, so ml-connector does not write general ledger entries back into Deel.
Does the integration use Deel webhooks or polling?
It uses both. Deel sends signed webhooks for events such as hris.employee.created and hris.employee.terminated, which ml-connector verifies with the HMAC-SHA256 signature against the raw body for near real-time headcount updates. Invoice and payment data is polled on a schedule tied to your billing calendar, since that data settles on a cycle rather than per event.
How does ml-connector handle Acumatica's version-locked endpoints?
Acumatica endpoint paths must exactly match the running ERP version or the call returns 404. ml-connector accepts the full tenant URL and the endpoint version per customer and uses them on every request. It also wraps field values in the value objects Acumatica requires and uses upsert checks on natural keys so repeated writes do not create duplicates.

Related integrations

Connect Acumatica and Deel

Free to use. Add your credentials, ping your real systems, and see if we fit.

Get started