ml-connector
TallyPrimeADP

TallyPrime and ADP integration

TallyPrime runs accounting, inventory, and payroll for businesses in India and Southeast Asia. ADP handles payroll processing and worker records across your company. Connecting the two keeps your general ledger in agreement with your payroll costs and headcount. After each payroll run, ADP generates labor cost GL documents that post into TallyPrime's general ledger allocated to the correct cost centers, and worker records keep both systems aligned without re-keying.

How TallyPrime works

TallyPrime is a desktop accounting application that exposes ledgers, groups, vouchers, and stock items through XML or JSON POST requests to a local HTTP server (default port 9000). The server requires manual enablement in TallyPrime Settings and is only LAN-accessible, so a local agent running on the same machine or network is needed to bridge cloud integrations to TallyPrime. No native webhooks or event subscriptions are available; polling is the only sync mechanism. Authentication is optional at the transport layer (network-level security via firewall or VPN), but company access requires the company name and optionally username and password. All requests use a request envelope with TALLYREQUEST fields to control operations (Import Data for writes, Export Data for reads), and responses may contain errors as XML text rather than structured error codes.

How ADP works

ADP exposes workers, payroll input, pay distributions, GL documents, cost centers, and validation tables through ADP API Central, a REST/JSON API that requires OAuth2 client credentials and a mutual TLS client certificate. The client certificate is mandatory on all connections and the TLS handshake will fail without it. Calls are made to base URL https://api.adp.com/ (production) or https://api.uat-adp.com/ (sandbox), and the service supports OData query parameters on most collection endpoints. ADP can push event notifications for worker hire, termination, rehire, and payroll changes to a registered endpoint, but all mutations go through dedicated /events/ endpoints rather than direct PUT or PATCH operations. GL documents generated by payroll are read-only and cannot be written back. ADP enforces per-node rate limits (75-195 calls per minute depending on tier) and returns HTTP 429 when limits are exceeded.

What moves between them

The main flow is from ADP into TallyPrime. After each payroll run, ml-connector reads ADP's general ledger documents and worker records and polls TallyPrime's day book on a schedule tied to your payroll calendar. Labor cost GL documents from ADP are mapped to TallyPrime ledgers and cost centers, then posted as vouchers into TallyPrime's general ledger. Worker changes (hires, terminations) in ADP update corresponding records in TallyPrime so headcount is synchronized. Reference data such as cost centers and departments are aligned in both directions so payroll allocations land on valid TallyPrime dimensions. No financial data flows back from TallyPrime to ADP, since ADP GL documents are read-only.

How ml-connector handles it

ml-connector stores ADP client credentials and mTLS certificate encrypted and presents the certificate on every HTTPS request, refreshing the OAuth2 bearer token when calls return 401. For TallyPrime, it requires the target host IP and port (default 9000), company name, and optional credentials; all TallyPrime calls are sequential to avoid inconsistent behavior on the single-user desktop application. Polling intervals are tied to your payroll schedule rather than fixed frequency. On the TallyPrime side, ml-connector polls day books with date range filters (SVFROMDATE, SVTODATE in YYYYMMDD format) and compares returned voucher IDs against last-seen state to detect new records; because TallyPrime returns all matching records in a single response with no pagination, the connector tracks state between polls. ADP rate limits return HTTP 429 per-node, so ml-connector backs off and retries with exponential jitter. Cost centers are validated before posting to TallyPrime. Every voucher and GL posting carries an audit trail and can be replayed if a downstream call fails. TallyPrime has no native idempotency, so ml-connector uses Alter actions for updates and avoids duplicate Import requests.

A real-world example

A mid-sized services firm runs TallyPrime for accounting and inventory across two offices in India, and uses ADP Workforce Now for payroll across both locations. Before the integration, the accountant exported payroll registers from ADP monthly, manually calculated labor cost allocations by cost center, and entered them as journal vouchers in TallyPrime, a process taking 3-4 days each month-end and prone to posting errors. After payroll processing, the worker headcount in TallyPrime often drifted from ADP due to delayed hires and terminations. With TallyPrime and ADP connected, payroll GL documents flow automatically into TallyPrime immediately after each pay run, allocated to the correct cost center for each office, and worker changes sync in both directions. Month-end close is compressed to hours, and the labor accounts reconcile without manual intervention.

What you can do

  • Post ADP payroll general ledger documents into TallyPrime's general ledger after every pay run, mapped to the correct cost centers and ledger accounts.
  • Keep TallyPrime worker records and headcount synchronized with ADP hires, terminations, and rehires in real time.
  • Map ADP cost centers and departments to TallyPrime groups and ledger dimensions so payroll allocations land on valid accounts.
  • Authenticate ADP with OAuth2 and the required mutual TLS client certificate, and access TallyPrime through its local HTTP server with company and optional user credentials.
  • Poll TallyPrime day books and ADP GL documents on a payroll-calendar schedule, with retries on rate limits and a full audit trail on every voucher.

Questions

How does ml-connector reach TallyPrime if it is a desktop application?
TallyPrime runs a local HTTP server on port 9000 that must be manually enabled in TallyPrime Settings. ml-connector requires a local agent running on the same machine or local network as TallyPrime to bridge the gap between the cloud connector and the LAN-only server. The agent makes XML or JSON POST requests to http://<tally-host-ip>:9000 with the company name and optional credentials.
Why does ADP require a mutual TLS certificate and how does it affect the integration?
ADP requires a client certificate at the TLS layer on every connection in addition to OAuth2 credentials for authentication. ml-connector stores the certificate encrypted and presents it on each request. Because certificates have expiry dates, ml-connector tracks the certificate's remaining validity and alerts when renewal is needed to prevent outages.
How does ml-connector handle TallyPrime's lack of webhooks and pagination?
TallyPrime has no webhooks or event subscriptions, so ml-connector polls day books on a schedule tied to your payroll calendar using date range filters. TallyPrime returns all matching records in a single response without pagination, so ml-connector compares returned voucher IDs against the last-seen state to identify new records and avoid duplicates.

Related integrations

Connect TallyPrime and ADP

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

Get started