ml-connector
TallyPrimeShipStation

TallyPrime and ShipStation integration

TallyPrime runs accounting and inventory for small and mid-sized businesses. ShipStation manages orders from multiple sales channels and arranges shipments. Connecting the two keeps your order pipeline and your inventory in agreement. Sales orders from your marketplace, store, or B2B channel flow into TallyPrime as purchase orders and shipment delivery notes, inventory is updated as goods move, and financial records stay synchronized without re-entry.

How TallyPrime works

TallyPrime is a desktop accounting application widely used in India and Southeast Asia. It exposes ledgers, groups, vouchers (purchase, sales, payment, receipt, purchase order), and stock items through an HTTP endpoint on port 9000 that accepts XML or JSON requests. The endpoint requires a local agent on the TallyPrime host since the server is LAN-accessible only. Authentication is optional but typically includes the company name and optionally a password if the company is protected. TallyPrime has no native webhooks; data is retrieved by polling with date range filters.

How ShipStation works

ShipStation is a cloud shipping platform accessed via REST API. ShipStation V2 API provides label creation, batch operations, inventory, and purchase orders; the V1 API handles orders, customers, products, and warehouses. ShipStation accepts API Key authentication in HTTP headers (V2) or HTTP Basic Auth (V1). ShipStation supports outbound webhooks for order and shipment events, but webhook payloads contain only pointers to the resource; the actual data requires an authenticated follow-up GET request. ShipStation rate limits are 200 requests per minute on V2 and 40 requests per minute on V1.

What moves between them

Sales orders and shipments flow from ShipStation into TallyPrime. When a new order is placed in ShipStation, ml-connector converts it to a Purchase Order voucher in TallyPrime and allocates it to the correct ledger. As the order ships, a Delivery Note voucher is created with the shipped stock items, quantity, and reference back to the original order. Inventory is decremented in TallyPrime as shipments are confirmed. Reference data such as stock items and customer ledger accounts are aligned so orders map to valid TallyPrime entities. ShipStation is the source of truth for order and shipment state; TallyPrime reflects that state for accounting and inventory purposes.

How ml-connector handles it

ml-connector runs a local polling loop that regularly fetches new orders and shipment updates from ShipStation via its REST API, extracting the order ID, customer, item SKU, quantity, and destination. It converts each order into TallyPrime's Voucher envelope format (Import Data action with a TALLYMESSAGE containing the voucher XML) and posts it via HTTP to port 9000 on the TallyPrime host. Because TallyPrime has no idempotency mechanism, ml-connector tracks order IDs and voucher states to avoid duplicate Import calls. ShipStation webhooks supplement polling for real-time notifications; ml-connector validates webhook signatures and queues the follow-up GET to ShipStation to fetch full order details. Port 9000 must be manually enabled in TallyPrime Advanced Configuration. Since TallyPrime is single-user and lock-prone, ml-connector sequences requests and includes retry logic with exponential backoff. Rate limits on ShipStation are respected via the X-Rate-Limit headers; TallyPrime has no rate limits but throughput is constrained by the Windows machine running it.

A real-world example

A mid-sized e-commerce merchant in India operates a TallyPrime instance for accounting and inventory on a local server, and uses ShipStation to aggregate orders from their Shopify store, Amazon Seller Central, and B2B marketplace. Before the integration, the operations team manually downloaded the day's orders from ShipStation, re-entered them as Purchase Order vouchers in TallyPrime, and then manually updated stock quantities in both systems as shipments left the warehouse. Reconciliation at month-end meant chasing discrepancies between ShipStation's shipment records and TallyPrime's stock levels, with no single source of truth. With TallyPrime and ShipStation connected, each order arriving in ShipStation is automatically posted as a voucher in TallyPrime, shipments are logged as Delivery Notes with quantities, inventory is decremented in real time, and the two systems stay aligned without manual entry.

What you can do

  • Convert ShipStation orders into TallyPrime Purchase Order vouchers, allocating them to the correct customer ledger accounts.
  • Create Delivery Note vouchers in TallyPrime when shipments are confirmed in ShipStation, updating stock quantities.
  • Sync product SKUs and inventory levels between ShipStation and TallyPrime so orders reference valid stock items.
  • Authenticate ShipStation via API Key and TallyPrime via the local port 9000 endpoint with optional company password.
  • Poll ShipStation and TallyPrime on a schedule you set, with built-in deduplication and full audit trail on every order and shipment.

Questions

Which direction does data move between TallyPrime and ShipStation?
The main flow is ShipStation into TallyPrime. Orders and shipment data move from ShipStation into TallyPrime as vouchers and inventory updates. Reference data such as stock item SKUs and customer accounts are synced so orders map to valid TallyPrime entities. TallyPrime is read to fetch current inventory and ledger state; ShipStation is the source of truth for order and shipment events.
Why does TallyPrime require a local agent and how does the integration handle it?
TallyPrime's HTTP server on port 9000 is LAN-accessible only and is not enabled by default. ml-connector includes a local agent that runs on the same machine or LAN as TallyPrime and bridges cloud requests to the local endpoint. The port must be manually enabled in TallyPrime Advanced Configuration. Since TallyPrime is single-user, the agent sequences requests to avoid lock contention.
What happens if ShipStation reports an order that TallyPrime has already received?
ml-connector tracks order IDs and avoids duplicate Import Data calls, since TallyPrime has no native idempotency. If a shipment is marked as already processed, ml-connector skips the Delivery Note creation. If an order is updated in ShipStation (e.g., quantity change), ml-connector detects the change via polling or webhook and updates the corresponding TallyPrime voucher.

Related integrations

Connect TallyPrime and ShipStation

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

Get started