TallyPrime and AvidXchange integration
TallyPrime records your accounting, including supplier ledgers and purchase bills. AvidXchange handles invoice approval and payment execution for accounts payable. Connecting the two means vendor records and purchase bills entered in TallyPrime reach AvidXchange for coding and payment without re-keying, and once AvidXchange settles a payment, the check or ACH detail comes back into TallyPrime as a payment voucher. ml-connector handles the very different access models on each side and moves the data on the cadence you choose.
What moves between them
Vendor ledgers under Sundry Creditors and purchase bills (Purchase vouchers) move from TallyPrime into AvidXchange, along with the GL accounts and groups used for coding. AvidXchange then routes each invoice through its own approval workflow and executes payment. After settlement, ml-connector pulls the completed payment records back from AvidXchange and writes them into TallyPrime as Payment vouchers, allocated against the matching bill. GL accounts are read-only inside AvidXchange, so ml-connector never writes ledger structure back from there. Both directions run on a polling schedule because neither system pushes events.
How ml-connector handles it
ml-connector stores both credential sets encrypted. On the TallyPrime side it talks to a local agent that forwards XML or JSON envelopes to http://localhost:9000, since port 9000 is never reachable from the cloud and ships disabled until the customer enables it. On the AvidXchange side it sends the Company Token and User Token as headers on every AvidConnect call. Vendors are synced first, because an invoice cannot be coded or paid in AvidXchange until its vendor exists there. Tally ledger names map to AvidXchange vendors, Purchase voucher fields map to invoice header and line items with GL codes, and returned payment records map back to Tally Payment vouchers keyed on the bill reference. Because TallyPrime has no idempotency keys, ml-connector tracks which voucher numbers and batch IDs it has already sent so a re-poll does not create duplicates, and it uses the Tally Alter action to update rather than re-import. Dates are sent in Tally's strict YYYYMMDD form, and the company name must match exactly. If TallyPrime is closed, no company is open, or an AvidXchange call fails, the job retries and the record is held for replay.
A real-world example
A regional construction services firm with about 150 staff runs TallyPrime for its books and uses AvidXchange to approve and pay subcontractor and supplier invoices. Before the integration, an AP clerk re-keyed every approved invoice from AvidXchange into TallyPrime, then manually entered each payment once the check or ACH cleared, which left the ledger days behind and full of typing errors. With TallyPrime and AvidXchange connected, vendor and bill data flows out to AvidXchange for coding and approval, and settled payments flow back as payment vouchers automatically. The clerk stops re-typing, and the cash position in TallyPrime stays current.
What you can do
- Push TallyPrime supplier ledgers and purchase bills into AvidXchange so invoices can be coded and paid.
- Pull settled payment records from AvidXchange and write them into TallyPrime as payment vouchers against the right bill.
- Sync vendors first so every invoice has a matching payee in AvidXchange before payment.
- Bridge a local agent in front of the Tally port 9000 server to AvidXchange Company and User tokens.
- Track voucher numbers and batch IDs to prevent duplicates, with retries and replay on every record.
Questions
- Which direction does data move between TallyPrime and AvidXchange?
- Vendors, purchase bills, and GL codes move from TallyPrime into AvidXchange for coding and payment. After AvidXchange executes a payment, the settled check or ACH detail is pulled back into TallyPrime as a payment voucher. GL accounts are read-only inside AvidXchange, so ml-connector does not write ledger structure back from there.
- Why does this integration need a local agent for TallyPrime?
- TallyPrime is a desktop app whose HTTP server on port 9000 is only reachable on the local machine or LAN, and it has no cloud endpoint. ml-connector talks to a small local agent on the customer network that forwards requests to the Tally server and relays the responses. The agent also lets the connector authenticate, since the Tally port itself enforces no token by default.
- How are duplicate vouchers and payments avoided without webhooks?
- Neither TallyPrime nor AvidXchange pushes events, so ml-connector polls both on a schedule. Because TallyPrime has no idempotency keys, ml-connector records which voucher numbers and AvidXchange batch IDs it has already processed and skips anything it has seen. When a record must change, it uses the Tally Alter action instead of importing a second copy.
Related integrations
More TallyPrime integrations
Other systems that connect to AvidXchange
Connect TallyPrime and AvidXchange
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started