ml-connector
TallyPrimeTaxJar

TallyPrime and TaxJar integration

TallyPrime runs accounting across small and medium businesses in India and Southeast Asia. TaxJar calculates real-time sales tax and manages nexus and filing obligations in the jurisdictions where you sell. Connecting the two keeps your tax filings accurate without manual transaction entry. Sales vouchers from TallyPrime flow into TaxJar so tax rates are calculated against the right addresses and amounts, and refunds are tracked for credit reporting. TallyPrime remains the source of record for your books while TaxJar handles the tax compliance piece.

How TallyPrime works

TallyPrime is a desktop-first accounting and ERP application widely used in India and Southeast Asia. It exposes ledgers, groups, vouchers (purchase, sales, payment, receipt, purchase order), and stock items through an XML or JSON HTTP API on a local port 9000. The server requires a local agent on the same network as TallyPrime since the port is only LAN-accessible. There are no webhooks; the connector must poll TallyPrime by sending Export Data requests with date range filters and comparing returned voucher IDs against previous exports. Authentication uses the host IP, port, company name, and optionally a company password if the target company is protected.

How TaxJar works

TaxJar is a cloud-based sales tax compliance platform that calculates real-time tax rates, validates addresses, manages nexus across states, and automates transaction reporting to tax authorities. It exposes taxes, transactions, refunds, customers, nexus regions, address validation, and rate lookup endpoints through a REST API at api.taxjar.com. Authentication uses a single API token passed in the Authorization header; TaxJar does not support OAuth2. There are no webhooks or event subscriptions, so the integration is poll-based: transactions are POSTed to TaxJar after they are recorded in TallyPrime, and nexus and rate data is pulled on demand.

What moves between them

TallyPrime sales vouchers (invoices to customers) and refund vouchers flow into TaxJar as transaction records. After each poll of TallyPrime, ml-connector extracts the sales and refund amounts, delivery addresses, line items and taxes, maps them to TaxJar's transaction object schema, and POSTs them to the transactions endpoint for tax calculation and filing. Refunds are sent to the refunds endpoint. Address validation is performed against TaxJar's address database to ensure nexus is correctly identified. The flow is unidirectional from TallyPrime into TaxJar; TallyPrime remains the accounting source of record.

How ml-connector handles it

ml-connector runs a local agent on the TallyPrime network to reach port 9000, since TallyPrime is desktop-only and not cloud-accessible. It polls TallyPrime's Export Data endpoint with date range filters at a configurable interval (typically every 15 to 30 minutes), compares returned voucher IDs against the last-seen state, and extracts new and updated sales and refund records. Each voucher is mapped to a TaxJar transaction: order total, line item amounts, customer shipping address, and any taxes TallyPrime recorded. The transaction is POSTed to TaxJar; if the request returns a 422 Conflict indicating the transaction already exists, ml-connector falls back to a PUT request to update it. The TaxJar API token is stored encrypted in the cell database. Retries use exponential backoff for transient errors, and every record is tracked in the audit log so transactions can be replayed if a downstream call fails.

A real-world example

A mid-sized e-commerce business based in India uses TallyPrime for accounting and inventory, and sells across multiple states where sales tax is due. Before the integration, the finance team manually exported sales and refund records from TallyPrime each day, formatted them for TaxJar, and uploaded them in bulk. Tax rate calculations were delayed by a day, nexus tracking was inconsistent, and discrepancies between TallyPrime and TaxJar created audit friction at month-end. With TallyPrime and TaxJar connected, every sale that hits TallyPrime automatically flows to TaxJar within minutes for real-time tax calculation. Refunds are tracked immediately, nexus is validated on the address, and the tax liability reported to states matches what TallyPrime recorded.

What you can do

  • Poll TallyPrime sales and refund vouchers on a configurable schedule and send them to TaxJar for tax calculation and filing.
  • Map TallyPrime voucher line items, amounts, and customer addresses to TaxJar transaction and refund objects.
  • Validate customer shipping addresses against TaxJar and correct nexus identification before tax is calculated.
  • Store the TaxJar API key encrypted and handle the transition from POST to PUT when a transaction already exists.
  • Track every voucher in the audit log with full request and response detail so transactions can be retried or replayed if needed.

Questions

Does TallyPrime need to be cloud-hosted for the integration to work?
No. TallyPrime runs on a local desktop machine and exposes its API only on port 9000 within the LAN. ml-connector includes a local agent that sits on the same network, reaches TallyPrime on port 9000, and bridges the connection to TaxJar's cloud API. The agent must be deployed near the TallyPrime installation and cannot reach across the internet; it is a local proxy.
How does the integration handle vouchers that already exist in both TallyPrime and TaxJar?
ml-connector tracks voucher IDs from its last poll of TallyPrime. When it encounters a new or updated voucher, it POSTs it to TaxJar as a transaction. If TaxJar returns a 422 Conflict, indicating the transaction already exists, ml-connector falls back to a PUT request to update the existing record with new amounts or line items. The audit log records both the POST attempt and the fallback PUT.
Which TallyPrime vouchers are sent to TaxJar?
Sales vouchers (invoices to customers) and refund vouchers are sent to TaxJar for tax calculation and state filing. Purchase vouchers, payment vouchers, and receipts are not sent since they do not represent customer sales subject to sales tax. Stock items and general ledger entries remain in TallyPrime.

Related integrations

Connect TallyPrime and TaxJar

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

Get started