Proud winners of the 2026 CFIN Foodtech Frontier Awards. Learn more →

Connect External Systems

Integrate your ERP, accounting, or custom systems with Tracktile

Connect Tracktile with your existing business systems to create a unified data flow across your organization.

#Common Integrations

System TypeUse CaseApproach
ERPSync products, orders, inventoryWebhooks + API
AccountingPush invoices, sync customersWebhooks
E-commerceImport orders, update stockWebhooks + API
WMSCoordinate warehouse opsReal-time API

#Integration Patterns

#Pattern 1: Event-Driven Sync

Best for: Real-time data synchronization

┌───────────┐     Webhook      ┌──────────────┐
│ Tracktile │ ─────────────→   │ Your System  │
└───────────┘                  └──────────────┘
// Your webhook handler
app.post("/webhooks/tracktile", async (req, res) => {
  // Verify the webhook signature (see Webhook Security docs)
  const event = verifyWebhook(req, process.env.WEBHOOK_SECRET);
 
  // Acknowledge immediately
  res.status(200).send("OK");
 
  // Process asynchronously
  switch (event.kind) {
    case "order.status.changed":
      await erp.createSalesOrder(mapToErpFormat(event));
      break;
    case "shipment.status.changed":
      if (event.currentShipmentStatus === "in_transit") {
        await erp.confirmShipment(event.shipmentId);
      }
      break;
  }
});

#Pattern 2: Scheduled Batch Sync

Best for: Non-critical data, bulk updates

// Run every hour
cron.schedule("0 * * * *", async () => {
  const limit = 100;
  let offset = 0;
  let hasNextPage = true;
 
  while (hasNextPage) {
    const response = await fetch(
      `https://api.tracktile.io/products?offset=${offset}&limit=${limit}`,
      {
        headers: {
          Authorization: "Bearer api-YOUR_TOKEN_HERE",
          "X-Pagination-Format": "page",
        },
      }
    );
    const { results, pagination } = await response.json();
 
    for (const product of results) {
      await erp.upsertProduct(mapToErpFormat(product));
    }
 
    hasNextPage = pagination.hasNextPage;
    offset += limit;
  }
});

#Pattern 3: Two-Way Sync

Best for: Master data management

// Tracktile → ERP (via webhooks)
app.post("/webhooks/tracktile", handleTracktileEvent);
 
// ERP → Tracktile (via API)
app.post("/webhooks/erp", async (req, res) => {
  const erpEvent = req.body;
 
  if (erpEvent.type === "customer.updated") {
    await fetch(
      `https://api.tracktile.io/customers/${erpEvent.data.tracktileId}`,
      {
        method: "PUT",
        headers: {
          Authorization: "Bearer api-YOUR_TOKEN_HERE",
          "Content-Type": "application/json",
        },
        body: JSON.stringify(mapFromErpFormat(erpEvent.data)),
      }
    );
  }
 
  res.status(200).send("OK");
});

#Best Practices

View API Reference →