Acumatica and Google Sheets integration
Acumatica Cloud ERP holds finance and procurement records. Google Sheets is a shared spreadsheet that finance teams already live in. This connection keeps a Google Sheet in step with Acumatica so bills, purchase orders, vendors, and GL accounts appear as rows people can read and edit. Approved edits made in the sheet flow back into Acumatica where the API permits writes. 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 Acumatica into Google Sheets. On each scheduled run, ml-connector reads new and changed Acumatica bills, purchase orders, vendors, payments, and GL accounts using the LastModifiedDateTime filter, then writes each record as a row into its matching sheet tab such as Invoices, PurchaseOrders, or Vendors. Edits a user makes in the sheet, such as a corrected vendor address or a coded bill line, are read back and applied to Acumatica through PUT upsert where the entity allows writes. Reference tabs like GLAccounts and Vendors are kept aligned so any coding entered in the sheet references values that exist in Acumatica. The chart of accounts is treated as read-only in the export direction to avoid risky writes.
How ml-connector handles it
ml-connector stores both credential sets encrypted: the Acumatica client ID, secret, and instance URL with its exact endpoint version, and the Google OAuth client ID, secret, and refresh token for the target spreadsheet ID. It exchanges the Google refresh token for an access token and refreshes the Acumatica bearer token when a call returns 401, and it pins the version-locked Acumatica path so a release upgrade does not silently 404. Because neither side offers a dependable push for this pair, it polls Acumatica on your schedule and writes to Sheets with batch update calls, which count as one request against the per-project quota. Each Acumatica field is mapped to a header column discovered from row one, and Acumatica's wrapped value objects are unwrapped into plain cells. A synced-row cursor is kept per tab so the non-idempotent Sheets append never writes the same bill twice. On the read-back path, sheet edits are matched to Acumatica records by natural key and applied through upsert. Rate limit responses, HTTP 429 on both Acumatica and Google, trigger backoff with jitter, and every record carries a full audit trail and can be replayed if a write fails.
A real-world example
A regional construction firm of about 250 staff runs Acumatica for projects, procurement, and accounts payable, but its project managers track committed costs and pending vendor bills in shared Google Sheets because they are faster to open in the field. Before the integration, an accounting clerk exported bill and purchase order lists from Acumatica every few days and pasted them into the managers' sheets, and coding the managers typed back in never made it into the ERP without a second round of manual entry. With Acumatica and Google Sheets connected, each tab refreshes automatically from Acumatica on a schedule, and a manager's vendor or coding edits flow back into the ERP through upsert. The clerk stops copying and pasting, and the project sheets and the ledger stop drifting apart.
What you can do
- Write Acumatica bills, purchase orders, vendors, payments, and GL accounts into matching Google Sheets tabs on a schedule.
- Read approved edits from the sheet and apply them to Acumatica through PUT upsert where the entity allows writes.
- Bridge Acumatica OAuth identity-server login and the Google OAuth refresh-token flow, both stored encrypted.
- Map each Acumatica field to a Sheets header column and unwrap Acumatica value objects into plain cells.
- Track a per-tab synced-row cursor so the non-idempotent Sheets append never duplicates a record.
Questions
- Which direction does data move between Acumatica and Google Sheets?
- The main flow is Acumatica into Google Sheets. Bills, purchase orders, vendors, payments, and GL accounts are written as rows into their matching tabs, and edits made in the sheet are read back into Acumatica through upsert where writes are allowed. The Acumatica chart of accounts is treated as read-only on export to avoid risky changes to the ledger structure.
- How does the integration avoid duplicate rows in the spreadsheet?
- The Sheets API append operation is not idempotent, so re-running a sync would otherwise add the same record twice. ml-connector keeps a synced-row cursor per tab and matches each Acumatica record by its natural key before writing. New records are appended and existing ones are updated in place rather than duplicated.
- Does this pair use webhooks or polling?
- It uses polling. Google Sheets has no native webhook, and its Drive watch channels expire within 24 hours and must be re-registered, while Acumatica push notifications are optional and not guaranteed. ml-connector reads changed Acumatica records on the schedule you set using the LastModifiedDateTime filter and writes them to Sheets in batched calls.
Related integrations
More Acumatica integrations
Other systems that connect to Google Sheets
Connect Acumatica and Google Sheets
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started