ml-connector
Epicor KineticTableau

Epicor Kinetic and Tableau integration

Epicor Kinetic runs your finance and operations. Tableau turns your data into dashboards and reports. Connecting the two keeps your BI platform fed with the latest AP, PO, customer, and GL data from your ERP without manual extract or re-keying. Finance teams get real-time visibility into spend, aging, and compliance through Tableau without waiting for a batch job. ml-connector polls Epicor on a schedule you control and refreshes Tableau datasources so your dashboards always reflect the current state.

How Epicor Kinetic works

Epicor Kinetic exposes vendors, AP invoices, purchase orders, AP payments, customers, parts, GL accounts, and Business Activity Queries (BAQs) through REST endpoints with OData v4 filtering and offset pagination. Cloud instances use a tenant-specific URL (https://<tenant>.epicorsaas.com/<instance>/api/v2/odata/<Company>/), while on-premises servers use their own hostnames. Authentication options include Basic Auth, API Key (required in addition to bearer token), OAuth2 client credentials (cloud only), or Token Resource Service (on-premises). Epicor has no native outbound webhooks, so data is retrieved by polling with OData $filter on date fields to capture changes since the last sync. Complex write operations require a two-step pattern: GetNewXxx followed by UpdateMaster. Bearer tokens expire in approximately one hour.

How Tableau works

Tableau is available as Tableau Cloud (SaaS) or Tableau Server (self-hosted) and exposes datasources, workbooks, views, projects, users, groups, and schedules through REST API version 3.29. Authentication uses Personal Access Token (PAT) with session token exchange (recommended for integrations), Connected App with JWT, or username/password. The session token is valid for 240 minutes by default. Tableau supports 24 webhook event types including datasource creation, update, deletion, refresh start/succeeded/failed, and workbook events. Views are read-only derived objects and cannot be written to. Webhooks do not include HMAC signature verification, so secret validation must be handled in the URL path or query parameters.

What moves between them

Data flows from Epicor Kinetic into Tableau on a polling schedule. Vendor master records, AP invoices, purchase orders, and GL accounts are queried from Epicor using OData filters on UpdatedOn timestamps, then mapped to Tableau datasources in designated projects. Tableau datasources are refreshed on completion of each sync cycle so dashboards and reports display current balances, aging, and spend data. Tableau views remain read-only and are not updated by the integration. The sync runs on a schedule you define (daily, weekly, or after batch runs in Epicor).

How ml-connector handles it

ml-connector stores both credential sets encrypted: Epicor's API Key and bearer token (refreshed hourly before expiry), and Tableau's Personal Access Token (exchanged for session token on each datasource refresh call). On the Epicor side, ml-connector accepts the full tenant URL and company segment, constructs OData queries with $filter (e.g., UpdatedOn gt 2026-06-10T14:30:00Z), and uses offset pagination ($top=100&$skip=0) to retrieve batches of records. For AP invoices and POs, which require two-step writes in Epicor, ml-connector follows the GetNewXxx/UpdateMaster pattern to ensure proper object state. On the Tableau side, ml-connector maps Epicor entities to datasources by project and initiates refresh requests via the extract refresh endpoints (Cloud) or schedule triggers (Server). Tableau session tokens expire after 240 minutes, so ml-connector refreshes the PAT and obtains a fresh session token before each datasource refresh. If a refresh fails due to token expiry or network timeout, ml-connector retries with exponential backoff. All records are logged with full audit trail including source record IDs, mapped dimensions, and refresh status.

A real-world example

A mid-sized manufacturing company runs Epicor Kinetic for procurement, AP, and GL. The finance team uses Tableau dashboards to monitor vendor spend, AP aging, and purchase order status. Before the integration, the BI team manually exported monthly AP snapshots from Epicor and loaded them into Tableau, causing dashboards to lag by days and requiring rework when invoices were posted or voided in Epicor after the export. With Epicor Kinetic and Tableau connected, vendor and invoice data flows automatically on a daily schedule. Tableau dashboards refresh overnight so finance has current AP aging and spend by vendor every morning, eliminating manual exports and keeping the BI layer in sync with the ERP.

What you can do

  • Poll Epicor Kinetic vendors, AP invoices, purchase orders, and GL accounts on a schedule you define, using OData filters on UpdatedOn to capture only changed records.
  • Map Epicor entities to Tableau datasources by project and refresh Tableau extracts on completion of each sync cycle.
  • Authenticate Epicor with API Key plus bearer token (refreshed hourly to prevent expiry), and Tableau with Personal Access Token session flow (refreshed every 240 minutes).
  • Handle the Epicor two-step write pattern for complex objects and avoid polling unchanged records by anchoring to the previous sync timestamp.
  • Track the full audit trail of every vendor, invoice, and GL account record including source ID, mapped dimension, and Tableau refresh status.

Questions

Which direction does data flow between Epicor Kinetic and Tableau?
Data flows from Epicor Kinetic into Tableau. Vendors, AP invoices, purchase orders, customers, parts, and GL accounts are polled from Epicor and published to Tableau datasources where they are refreshed and made available for dashboards and reports. Tableau views are read-only and no data flows back to Epicor.
How does ml-connector handle Epicor's lack of webhooks and the need to poll for changes?
ml-connector queries Epicor using OData $filter on the UpdatedOn date field to retrieve only records changed since the last sync. Offset pagination ($top=100&$skip=0) retrieves records in batches. The sync runs on a schedule you control (daily, weekly, after batch runs), so dashboards refresh on a cadence aligned with your business cycle rather than waiting for a push from Epicor.
What happens if the Epicor or Tableau authentication token expires during a sync?
Epicor bearer tokens expire in approximately one hour, so ml-connector refreshes the token before expiry by exchanging the API Key. Tableau session tokens expire after 240 minutes (default), so ml-connector obtains a fresh session token by exchanging the Personal Access Token before each datasource refresh. If either call fails due to token expiry, ml-connector retries with exponential backoff and logs the event in the audit trail.

Related integrations

Connect Epicor Kinetic and Tableau

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

Get started