ml-connector
SYSPROSnowflake

SYSPRO and Snowflake integration

SYSPRO runs manufacturing and distribution operations across procurement, finance, and inventory. Snowflake stores and queries data at scale. Connecting the two pulls financial and operational records from SYSPRO and loads them into Snowflake as a queryable data lake, so you can report, analyze, and reconcile without leaving Snowflake. AP invoices, GL postings, purchase orders, inventory receipts, and supplier master data sync automatically on a schedule you set, keeping Snowflake up to date with your operational ledger.

How SYSPRO works

SYSPRO Adaptive ERP exposes suppliers, invoices, purchase orders, GL accounts, inventory, and customer data through e.net Business Objects REST and SOAP APIs (read-write) and OData REST APIs (read-only). The cloud product and on-premise installations authenticate against a customer-supplied server URL using a session token (obtained by logging on to Utilities/Logon and passing a UserId GUID on all calls), or HTTP Basic Auth with auto-generated SQL credentials for OData. SYSPRO does not push outbound webhooks, so records are read by polling OData tables with timestamp filters on fields like PostDate and InvoiceDate, typically every 5 to 15 minutes for financial data.

How Snowflake works

Snowflake is a cloud data warehouse that stores user-defined tables for financial and operational records. It exposes a SQL API for querying and an HTTP REST API for inserting and updating data, both authenticated with RSA Key Pair Authentication (private key plus JWT) or Programmatic Access Tokens. Snowflake is pull-only; it cannot push webhooks to external endpoints. It detects changes via timestamp watermarks (SELECT WHERE updated_at > last_sync), native Streams for CDC, or scheduled Tasks for external calls. SQL API calls return asynchronous results with statement handles, and the warehouse must have AUTO_RESUME enabled for queries to succeed.

What moves between them

The main flow is unidirectional, from SYSPRO into Snowflake. AP invoices, invoice postings, purchase order headers and details, GL master and balance records, inventory masters and warehouse quantities, customer headers, and supplier master data are polled from SYSPRO on your configured schedule and loaded into corresponding Snowflake tables. Each load captures the full record at the moment of the pull, allowing you to build slowly changing dimension tables, replayable audit logs, and daily reconciliation reports in Snowflake. Writes do not flow back to SYSPRO; Snowflake is a read-mostly destination for data lake and reporting purposes.

How ml-connector handles it

ml-connector accepts the SYSPRO server URL and credentials (session token or HTTP Basic Auth for OData) and Snowflake's account identifier plus Key Pair Authentication materials. It polls SYSPRO's OData tables on a repeating schedule, filtering by timestamp fields to find records created or modified since the last sync, then batches those records into Snowflake table inserts via the SQL API. Because SYSPRO session tokens expire on logoff or timeout, ml-connector renews the token before each poll cycle. Snowflake's asynchronous SQL API returns a statement handle; ml-connector polls that handle until the load completes, then records the high-water timestamp for the next sync. If SYSPRO is unavailable or Snowflake rate-limits a request, ml-connector retries with exponential backoff, preserving the audit trail so failed records can be replayed. Every load is tracked in audit tables so you can answer which records came from which poll, what time SYSPRO saw them, and when Snowflake loaded them.

A real-world example

A mid-sized electronics distributor runs SYSPRO for procurement, AP, and inventory across three distribution centers. The finance team uses Snowflake for analytics and month-end reconciliation. Before the integration, invoices entered in SYSPRO had to be manually exported and loaded into Snowflake weekly, and inventory receipts were reported by hand to Snowflake for cash flow analysis. With SYSPRO and Snowflake connected, invoices flow automatically into Snowflake within minutes of posting, inventory receipts update Snowflake in near real-time, and the finance team can build live reconciliation dashboards showing AP aging, spend by supplier, and warehouse stock levels. Month-end close is faster because the manual export-and-load step is gone.

What you can do

  • Pull invoices, GL postings, purchase orders, and inventory transactions from SYSPRO on a schedule you control, and load them into Snowflake tables.
  • Authenticate SYSPRO with session tokens or HTTP Basic Auth, and Snowflake with RSA Key Pair Authentication.
  • Track the high-water timestamp from the last sync so each poll loads only new or modified records.
  • Retry failed pulls with exponential backoff and maintain a full audit trail so you can replay records if a load fails.
  • Query all SYSPRO data natively in Snowflake without re-keying, joining with your own tables for reporting and analysis.

Questions

What direction does data move between SYSPRO and Snowflake?
Data flows one direction, from SYSPRO into Snowflake. AP invoices, GL postings, purchase orders, inventory, and supplier master records are polled from SYSPRO and loaded into Snowflake tables. Writes do not flow back to SYSPRO; Snowflake is a data lake destination for reporting and analytics.
How does ml-connector handle SYSPRO session tokens and Snowflake Key Pair authentication?
ml-connector logs into SYSPRO using the supplied credentials and obtains a session token (or uses HTTP Basic Auth for OData), then includes that token on every poll request. For Snowflake, ml-connector uses the supplied RSA private key to generate a JWT, presents it as a bearer token, and renews it before expiry. If either authentication fails, ml-connector retries with exponential backoff.
How often are records synced, and what happens if a sync fails?
ml-connector polls SYSPRO on a schedule you set (typically every 5 to 15 minutes for financial data), pulling records modified since the last sync using timestamp filters. If a poll or load fails, ml-connector backs off and retries, and the audit trail preserves which records succeeded and which failed so you can investigate or replay the failed batch.

Related integrations

Connect SYSPRO and Snowflake

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

Get started