ml-connector
TallyPrimeShipBob

TallyPrime and ShipBob integration

TallyPrime holds your accounting records and inventory on premise, while ShipBob manages fulfillment and shipping in the cloud. Connecting them keeps your stock levels accurate as orders flow through the warehouse, and every shipment posts automatically into TallyPrime's sales ledger. No more manual re-entry of shipped orders or mismatched inventory counts between your accounting system and your fulfillment center.

How TallyPrime works

TallyPrime is a desktop accounting application that runs locally and exposes ledger accounts, stock items, vouchers (sales, purchase, payment, receipt), and day books through an XML or JSON API on http://<host-ip>:9000. The API requires the HTTP server to be manually enabled in Advanced Settings and the target company to be open in the TallyPrime application. There is no native webhook system; integrations must poll by sending Export Data requests with date ranges and compare results against the last-seen state. Port 9000 is LAN-only and requires a local agent to bridge to cloud connectors.

How ShipBob works

ShipBob is a cloud fulfillment platform that exposes orders, shipments, products, inventory levels, returns, and billing through REST APIs at https://api.shipbob.com or the sandbox environment. Authentication uses OAuth2 access tokens (one-hour lifetime) or personal access tokens, and all calls require an Authorization Bearer header and a shipbob_channel_id header to identify the application channel. ShipBob supports webhooks for order status, shipment tracking, returns, and billing events, with HMAC-SHA256 signature verification.

What moves between them

Inventory flows from TallyPrime to ShipBob: stock items and quantities from TallyPrime are synced to ShipBob's inventory system so fulfillment centers know what is available to pick. Orders and shipments flow the opposite direction: as ShipBob fulfills and ships orders, ml-connector reads the shipment records via webhooks and creates corresponding sales vouchers in TallyPrime's day book, posting revenue and cost of goods sold to the correct ledger accounts. The sync runs on a schedule controlled by your company and responds to ShipBob webhook events as they occur.

How ml-connector handles it

ml-connector bridges TallyPrime's local HTTP server to ShipBob's cloud REST API. On the TallyPrime side, it sends Export Data requests to retrieve stock items and vouchers, and Import Data requests to create or update sales vouchers for fulfilled orders. On the ShipBob side, it uses OAuth2 or a personal access token to read orders, inventory, and shipments, and includes the required shipbob_channel_id header on every call. It registers a webhook endpoint with ShipBob to receive shipment and order status events as they happen, reducing latency versus polling. When a shipment event arrives, ml-connector queries the full shipment and order details, maps the items and costs to TallyPrime ledger accounts, and posts a sales voucher with the correct date and amounts. TallyPrime's lack of native idempotency means ml-connector tracks each voucher by external reference (ShipBob order ID) to avoid duplicate postings. Inventory pushes run on a scheduled interval since TallyPrime is pull-only.

A real-world example

A small e-commerce business in India uses TallyPrime for accounting and maintains a stock ledger of finished goods. They ship through ShipBob's fulfillment centers in regional warehouses. Before the integration, the team exported order and shipment lists from ShipBob each morning, looked up inventory quantities in TallyPrime, then manually entered sales vouchers into the day book. Stock levels drifted because updates from ShipBob arrived hours late. With TallyPrime and ShipBob connected, every shipment posts immediately as a sales voucher, inventory syncs in both directions, and month-end closing starts with balanced accounts instead of reconciliation work.

What you can do

  • Push stock items and quantities from TallyPrime to ShipBob inventory so fulfillment centers always know what is available.
  • Create sales vouchers in TallyPrime automatically when ShipBob fulfills and ships an order, posting revenue and cost of goods sold to the correct ledger accounts.
  • Map ShipBob order and shipment details to TallyPrime ledger accounts and groups so sales are recorded with the right cost center and GST treatment.
  • Handle TallyPrime's local-only port 9000 and desktop-app constraints by running a local agent and managing sequential requests.
  • Receive ShipBob shipment events via webhook and immediately post them to TallyPrime, with fallback polling for missed or delayed events.

Questions

Why does TallyPrime need a local agent but ShipBob does not?
TallyPrime's HTTP server runs on localhost:9000 and is only accessible on the local network. ml-connector needs a local agent on the same machine or LAN as TallyPrime to bridge that port to the cloud. ShipBob is a public cloud API, so ml-connector connects directly from the cloud to ShipBob's REST endpoints.
What happens if TallyPrime is closed or the company is not loaded?
TallyPrime API calls will fail if the application is closed or the target company is not open. ml-connector retries such requests with exponential backoff and alerts you if the application is offline, so you can reopen it. Pending orders queue until TallyPrime is available.
How does ml-connector handle TallyPrime's lack of native idempotency?
TallyPrime creates duplicate vouchers if the same Import Data request is sent twice. ml-connector tracks each posted voucher by ShipBob order ID and checks that reference before posting again, so a retry of a failed shipment does not create a duplicate in the ledger.

Related integrations

Connect TallyPrime and ShipBob

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

Get started