ml-connector
TallyPrimeProcore

TallyPrime and Procore integration

TallyPrime runs accounting and inventory for businesses in India and Southeast Asia. Procore runs construction projects and project finances in the cloud. Connecting them keeps your purchase orders and supplier invoices in sync across both systems, so project costs flow from TallyPrime's ledger into Procore's budget and commitment tracking without re-entry. Requisitions approved in Procore flow back to TallyPrime to update GL accounts and create payment vouchers.

How TallyPrime works

TallyPrime exposes GL accounts, groups, vouchers (purchase, sales, payment, receipt orders), and stock items through a local HTTP server on port 9000 with XML or JSON request envelopes. Authentication is optional at the transport layer (network security via firewall or VPN is standard), with application-level credentials including optional company password. TallyPrime has no webhooks or event stream, so the connector polls via periodic Export Data requests with date range filters, comparing returned record IDs against the last seen state.

How Procore works

Procore exposes vendors, purchase order contracts, requisitions, payment applications, direct costs, budget line items, change orders, and projects through REST APIs requiring OAuth2 client credentials. Tokens expire every 1.5 hours. Procore also supports webhooks for real-time push on changes to commitments, requisitions, and direct costs, though webhooks require a publicly accessible HTTPS endpoint. Most endpoints require company_id and project_id as path parameters.

What moves between them

The main flow is bidirectional. Purchase orders and supplier invoices from TallyPrime are read on a schedule and synced to Procore as purchase order contracts and vendor records, with cost codes mapped to TallyPrime GL accounts and departments. Procore requisitions and approved payment applications flow back to TallyPrime as payment vouchers and ledger entries, allocated to the correct GL accounts and cost dimensions. Cost codes are aligned in both directions so commitments and expenses land on valid TallyPrime accounts.

How ml-connector handles it

ml-connector accepts the TallyPrime host IP and port (default 9000, which must be manually enabled in TallyPrime Settings) and stores the optional company password encrypted. On the TallyPrime side it enforces sequential requests since TallyPrime is a single-user desktop application, polls with date range filters on a configurable schedule (typically every 10-15 minutes given practical latency), and uses Alter actions to update existing masters rather than attempting reimport. On the Procore side it obtains an OAuth2 bearer token once per session, refreshes it before expiry (tokens last 1.5 hours), and validates that cost codes and projects exist before writing commitment records. Because TallyPrime has no idempotency mechanism, ml-connector tracks the last exported record ID for each entity type so the same voucher is not imported twice. Procore's company_id and project_id are required on all project-scoped requests, so ml-connector uses project context from the configuration to route each write. TallyPrime's lack of error codes means ml-connector parses returned XML blocks for LINEERROR and IMPORTRESULT text to determine success, and it retries failed exports with exponential backoff in case TallyPrime is temporarily unavailable or the target company is not yet open.

A real-world example

A small construction company operates out of a single office in India using TallyPrime for accounting and GST compliance and Procore for managing multiple commercial real estate projects. Before the integration, the accounts manager exported TallyPrime's daily purchase orders once per day, opened Procore, and manually created matching vendor records and purchase contracts, mapping TallyPrime's GL codes to Procore's cost codes. When a project manager approved a requisition in Procore, someone had to log into TallyPrime and write a payment voucher to record the approval. With TallyPrime and Procore connected, each new TallyPrime purchase order automatically appears in Procore the next polling cycle, and project manager requisitions flow back to TallyPrime as payment entries without manual re-entry. Month-end reconciliation between TallyPrime's GL and Procore's committed costs is now straightforward because both systems are fed from the same source records.

What you can do

  • Sync TallyPrime purchase orders and supplier invoices to Procore as purchase order contracts and vendor records, mapped to cost codes.
  • Read Procore requisitions and approved payment applications and write them back to TallyPrime as payment vouchers and GL entries.
  • Manage OAuth2 token lifecycle on Procore with automatic refresh before expiry.
  • Handle TallyPrime's single-user design by enforcing sequential requests and tracking exported record IDs to prevent duplicates.
  • Maintain a complete audit trail and support replay on failures due to network issues or temporary unavailability.

Questions

How does ml-connector access TallyPrime if it runs on a local desktop?
TallyPrime exposes a local HTTP server on port 9000 (must be manually enabled in TallyPrime Settings via Advanced Configuration) that accepts XML/JSON export and import envelopes. ml-connector runs a local agent on the same LAN or machine to POST requests to that endpoint. The agent is configured with the TallyPrime host IP, port, company name, and optional company password.
Does the integration work bidirectionally?
Yes. TallyPrime purchase orders and invoices flow to Procore as purchase contracts and vendors. Procore requisitions and approved payment applications flow back to TallyPrime as payment vouchers and GL entries. Cost codes are mapped in both directions so expenses land on valid TallyPrime GL accounts.
What happens if TallyPrime is offline or the application closes?
ml-connector retries failed exports with exponential backoff, but the sync stalls until TallyPrime is running and the target company is open. Because TallyPrime offers no idempotency mechanism, ml-connector tracks the last exported record ID for each entity to ensure re-attempted exports do not create duplicates once TallyPrime is available again.

Related integrations

Connect TallyPrime and Procore

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

Get started