Epicor Kinetic and Snowflake integration
Epicor Kinetic runs your manufacturing and distribution finance. Snowflake is your cloud data warehouse. Connecting the two lets you move accounts payable invoices, purchase orders, payments, and GL account hierarchies out of Epicor and into Snowflake tables where your finance team can query, reconcile, and report on them. No manual exports, no spreadsheet imports, no month-end delays waiting for data to be available.
What moves between them
The main flow runs from Epicor Kinetic into Snowflake. After each poll cycle, ml-connector reads Epicor AP invoices, purchase orders, payments, and GL accounts using OData $filter on UpdatedOn to retrieve changes since the last run. These records are inserted or updated into Snowflake tables in your warehouse schema. GL account hierarchies and vendor master records are synced first so every invoice line references valid GL accounts and vendor dimensions. Change detection uses Epicor's UpdatedOn timestamp field filtered through OData; Snowflake Streams can then track downstream transformations if you need them.
How ml-connector handles it
ml-connector stores Epicor credentials encrypted (Basic Auth, API Key, or OAuth2 client ID and secret) and stores your Snowflake private key encrypted as well. For Epicor, it refreshes OAuth2 Bearer tokens before expiry and implements exponential backoff if calls hit Epicor's undocumented rate limits. It polls using OData $filter: UpdatedOn gt {last_sync_timestamp} to retrieve only changed invoices and orders, and uses offset pagination with $skip and $top=100. For Snowflake, it uses Key Pair Authentication to obtain short-lived JWT tokens that expire in one hour, respects Snowflake's requirement that the warehouse has AUTO_RESUME enabled, and inserts records into tables you define in your warehouse schema. If a write fails, the record is retried with exponential backoff, and every record carries a full audit trail so failed syncs can be replayed. Snowflake's case-sensitivity rules are respected: unquoted identifiers are uppercased, so table and column names must be quoted consistently or normalized to uppercase in your schema.
A real-world example
A mid-sized manufacturing company uses Epicor Kinetic for procurement and finance across multiple plants and warehouses. Before the integration, the accounting team exported AP invoices from Epicor once a week, uploaded them to Snowflake manually in CSV format, then ran reports to reconcile invoice totals against GL postings. Month-end close involved chasing down missing invoices and re-uploading corrected extracts. With Epicor and Snowflake connected, AP invoices sync every 8 hours without manual intervention. The finance team can query current invoices and their GL allocations directly from Snowflake, spot discrepancies in real time, and close the books faster. Vendor master records and GL dimensions stay synchronized so every line item references valid accounts.
What you can do
- Extract AP invoices, purchase orders, and GL accounts from Epicor Kinetic using OData polling with timestamp-based change detection.
- Write records into Snowflake tables with your own schema design, supporting transformations and downstream reporting.
- Authenticate to Epicor with OAuth2, Basic Auth, or API Key, and to Snowflake with Key Pair Authentication or programmatic access tokens.
- Handle Epicor token refresh cycles, rate limit backoff, and Snowflake warehouse resume requirements automatically.
- Replay failed syncs with a full audit trail so no record is silently dropped.
Questions
- How does ml-connector handle Epicor Kinetic's lack of webhooks?
- ml-connector polls Epicor Kinetic on a schedule you define, querying for records changed since the last sync using OData $filter on the UpdatedOn timestamp field. This approach means data reaches Snowflake with a latency equal to your polling interval, but no manual configuration is required on the Epicor side.
- What if my Snowflake warehouse is paused when ml-connector tries to write?
- ml-connector respects Snowflake's requirement that AUTO_RESUME is enabled on the warehouse. If the warehouse is paused, Snowflake will resume it automatically, but this adds a short delay to your first write. You can also pin the warehouse to Always On if your data SLA requires sub-minute latency.
- Which Epicor records can be synced to Snowflake?
- The integration supports vendors, AP invoices, purchase orders, AP payments, GL accounts, and parts from Epicor Kinetic. You define the Snowflake table schema, so you can choose which fields to store and how to organize them. More complex analysis like cash application or invoice aging can be computed in Snowflake after the base records are synced.
Related integrations
More Epicor Kinetic integrations
Other systems that connect to Snowflake
Connect Epicor Kinetic and Snowflake
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started