ml-connector
TallyPrimeRamp

TallyPrime and Ramp integration

TallyPrime runs your accounting and inventory on premises in India and Southeast Asia. Ramp manages corporate spend and bills in the cloud. Connecting the two keeps your bill records and GL accounts in sync across systems. Purchase vouchers entered in TallyPrime post into Ramp's accounting dimensions, and vendor bills created in Ramp can be read back into TallyPrime for reconciliation. ml-connector handles the transport gap between TallyPrime's local HTTP port and Ramp's REST API, and bridges the authentication difference so data moves on schedule.

How TallyPrime works

TallyPrime is a desktop accounting application widely used in India and Southeast Asia. It exposes ledger entries, vouchers, stock items, and groups through XML or JSON POST requests to http://<host-ip>:9000, a local HTTP server that must be manually enabled in application settings. TallyPrime requires the company name in the request envelope and optionally username and password if the company is password-protected. All requests are synchronous and return data in a single response; there is no pagination or webhooks. The application is single-user, so concurrent requests may cause inconsistency; integration must keep requests sequential. Polling is the only sync method available, with practical intervals of 5 to 15 minutes.

How Ramp works

Ramp is a corporate spend management platform offering REST API access to bills, vendors, purchase orders, GL accounts, and accounting dimensions. Authentication uses OAuth2 client credentials flow, with access tokens valid for 10 days. Ramp accepts JSON request bodies and supports webhooks for real-time push notifications of bill, transaction, vendor, and payment events with HMAC-SHA256 signature verification. Vendors cannot be created directly via API; they are created implicitly when a bill is created. Purchase orders are read-only. GL accounts and custom field writes require explicit accounting read and write scopes.

What moves between them

The primary flow is TallyPrime into Ramp. Purchase vouchers, payment vouchers, and sales vouchers from TallyPrime are read via polling and mapped into Ramp as bills and transactions, with cost allocations mapped to Ramp GL accounts and departments. Vendor data from TallyPrime purchase documents is read and matched against existing Ramp vendors; new vendors referenced in vouchers cannot be auto-created in Ramp and must be added manually or via separate flow. Ramp bill events can be received via webhook and written into TallyPrime as purchase vouchers or accounting entries if needed, though the primary direction is TallyPrime to Ramp.

How ml-connector handles it

ml-connector runs a local agent on the same network as TallyPrime to reach port 9000, since the HTTP server is LAN-only. It stores the Ramp OAuth2 client credentials encrypted and refreshes the access token before expiry (tokens last 10 days, so refresh every 9). For TallyPrime, it stores the company name, host IP, and optional credentials, then polls the target company's voucher log and ledger at intervals you define (typically daily or after each TallyPrime close). For each voucher, it maps the ledger account names to Ramp GL accounts using a configured mapping table; if a GL account is not found, the record is held for manual review with full context logged. TallyPrime returns no error codes, so ml-connector checks for LINEERROR or IMPORTRESULT blocks in the XML response to detect failures. Since TallyPrime has no delete operation and duplicate Import calls create duplicate vouchers, ml-connector tracks the last successful voucher ID and checks the export list against that state before importing anything new. Bills written to Ramp use the vendor ID if the vendor already exists; unmatched vendors are skipped and logged so procurement can add them out of band.

A real-world example

A mid-sized trading company based in India uses TallyPrime for accounting, inventory, and GST compliance, and Ramp for corporate spend management and bill pay in US dollar accounts. Before integration, the finance team exported purchase vouchers from TallyPrime every week and manually re-entered the bills into Ramp, then spent time reconciling vendor names and GL account mapping between the two systems. With TallyPrime and Ramp connected, each purchase voucher flows into Ramp automatically on a daily schedule, mapped to the correct GL account and department, and the bill records in Ramp stay in sync with the source transaction in TallyPrime. Vendor master mismatches are flagged clearly so the team can resolve them once instead of discovering them during close.

What you can do

  • Poll TallyPrime purchase and payment vouchers daily and post them into Ramp as bills and transactions, mapped to the correct GL accounts.
  • Map TallyPrime ledger account names to Ramp GL accounts using a configurable mapping table, with validation before posting.
  • Authenticate TallyPrime via company name and optional credentials on the local HTTP port, and Ramp via OAuth2 client credentials.
  • Detect and skip duplicate vouchers by tracking the last successful import ID in TallyPrime's export list.
  • Receive Ramp bill events via webhook and optionally write them back into TallyPrime as accounting entries for two-way sync.

Questions

Why does ml-connector need a local agent on the TallyPrime network?
TallyPrime's HTTP server listens only on port 9000 on the local network and cannot be accessed from the cloud. ml-connector deploys a small agent on the same LAN as TallyPrime to reach the port and relay requests to the cloud connector service. The agent is stateless and stores no data; all credentials and logic remain encrypted in the cloud.
What happens if a TallyPrime voucher references a GL account that does not exist in Ramp?
ml-connector validates every GL account name against Ramp before posting. If an account is not found, the voucher is held in a failed-record queue with full context logged. The finance team can review the mismatch, update the TallyPrime voucher or add the GL account to Ramp, and ml-connector will retry on the next poll cycle.
How does ml-connector prevent duplicate vouchers when polling TallyPrime?
TallyPrime has no delete operation and duplicate Import calls create duplicates. ml-connector tracks the ID of the last successfully imported voucher from each poll and compares the next export list against that ID. It only imports vouchers that came after that point, so even if a poll is retried, no voucher is imported twice.

Related integrations

Connect TallyPrime and Ramp

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

Get started