ml-connector
TallyPrimeLooker

TallyPrime and Looker integration

TallyPrime handles your daily accounting, invoices, and inventory. Looker models that data and delivers analytics to your business teams. Connecting the two keeps your dashboards fresh without manual data pulls. Vouchers, ledger entries, and GL balances flow from TallyPrime into your warehouse on a schedule you control, and your BI models gain access to authoritative accounting data without re-entry or reconciliation delays.

How TallyPrime works

TallyPrime is a locally-installed accounting application that exposes ledgers, groups, vouchers (purchase, sales, payment, receipt, purchase orders), and stock items through HTTP POST requests to port 9000, accepting XML or JSON request envelopes. Authentication is at the network layer only, with optional application-level credentials (company name, username, password if the company is protected). The HTTP server must be manually enabled in TallyPrime Settings and is accessible only on the local network, requiring an agent on the same LAN as the TallyPrime instance. There are no webhooks or change streams; all data is retrieved via polling using Export Data envelopes with date range filters (YYYYMMDD format), and all matching records are returned in a single response.

How Looker works

Looker is a cloud-based business intelligence platform that models warehouse data and exposes queries, dashboards, and scheduled delivery through a REST API. Authentication uses OAuth2 client credentials, exchanging client_id and client_secret for a bearer token that expires after one hour (no refresh token available; re-authentication is required for each new session). The platform supports querying up to 5000 rows per call and can deliver data to webhooks, email, S3, or SFTP via Scheduled Plans. Looker does not natively store financial data; it models warehouse data sourced from external systems, so ERP data must be loaded into the warehouse tables that Looker queries.

What moves between them

Vouchers and ledger entries move from TallyPrime into Looker's warehouse. ml-connector polls TallyPrime at intervals you choose (5 to 15 minutes practical minimum) for new or modified vouchers and ledger postings within a date range, then loads the transactions into warehouse tables that Looker models reference. Stock items and GL master data are synced periodically to keep Looker's dimensions current. The integration is pull-only from TallyPrime (no writes back) and load-only into Looker (no querying back for reconciliation, but dashboards can surface discrepancies).

How ml-connector handles it

ml-connector runs a local agent on your network connected to the TallyPrime instance, since TallyPrime's HTTP server is not internet-reachable. The agent translates polling requests into TallyPrime's XML envelope format (Export Data with SVFROMDATE and SVTODATE filters in YYYYMMDD format) and extracts matching vouchers and ledger entries by their row IDs. Because TallyPrime returns all results in one response with no pagination, ml-connector tracks the last-seen ID per collection to avoid re-loading duplicate data. On the Looker side, ml-connector stores OAuth2 credentials, handles token refresh by calling /api/4.0/login when the one-hour token expires, and uses a single warehouse connection to load the extracted transactions into staging tables. TallyPrime's single-user design means concurrent requests can cause inconsistent behavior, so ml-connector queues all requests sequentially. Date ranges are filtered at extraction time to minimize payload size, and the warehouse load is appended rather than overwritten so historical analysis is preserved.

A real-world example

A mid-sized business with multiple offices uses TallyPrime for accounting across India and Southeast Asia and has a Google Cloud data warehouse backing their analytics. The finance team needs to monitor cash flow and GL balances across all entities in real time, but previously had to export TallyPrime reports to spreadsheets and manually append them to the warehouse, causing lag and reconciliation errors. With TallyPrime and Looker connected, vouchers and ledger postings appear in the warehouse within minutes of being recorded, and the BI team builds dashboards and alerts that show current cash positions, month-to-date spending by cost center, and inventory levels without waiting for finance to deliver extracts.

What you can do

  • Poll TallyPrime on a schedule and extract vouchers (purchase, sales, payment, receipt, purchase orders) and ledger entries without manual export.
  • Load accounting transactions and GL master data into your warehouse tables so Looker models can reference authoritative financial data.
  • Handle TallyPrime's local HTTP server setup and the required local agent that bridges cloud integration to port 9000.
  • Track extracted records by their TallyPrime row IDs to avoid duplicate loads and preserve full transaction history in your warehouse.
  • Manage OAuth2 token refresh on the Looker side so data delivery remains reliable across the one-hour token expiration cycle.

Questions

Does ml-connector work with TallyPrime's local HTTP server, or do I need to open it to the internet?
ml-connector runs a local agent on your network that connects directly to TallyPrime's port 9000 on the same LAN. The HTTP server does not need to be internet-accessible; the agent bridges your local TallyPrime instance to the cloud integration. You enable the HTTP server in TallyPrime Settings and ensure the agent can reach port 9000 on the machine where TallyPrime is running.
How often can ml-connector poll TallyPrime for new vouchers and ledger entries?
The practical minimum is 5 to 15 minutes because TallyPrime has no webhooks or change streams and is a single-user desktop application. ml-connector polls on a schedule you set, extracting vouchers and ledger postings within a date range filter. More frequent polling increases load on the TallyPrime application; less frequent polling increases the lag before new transactions appear in Looker.
What happens to Looker tokens when they expire, and how does ml-connector handle it?
Looker OAuth2 tokens expire after one hour with no refresh endpoint, so ml-connector calls /api/4.0/login again to obtain a new token before continuing data delivery. This refresh happens automatically during scheduled polls, so you do not need to manually re-authenticate. If a token expires mid-operation, the retry mechanism fetches a fresh token and resumes the load.

Related integrations

Connect TallyPrime and Looker

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

Get started