Sage 100 and Snowflake integration
Sage 100 runs accounting and operations on your servers. Snowflake stores and queries data in the cloud. Connecting them gives your finance team a live, queryable copy of your GL, invoices, purchase orders, and vendors in Snowflake, without manual exports or ETL scripts. Month-end close, vendor reconciliation, and cash flow analysis become self-service. ml-connector handles the bridge between your on-premises Sage 100 agent and Snowflake's REST API, managing auth, polling cadence, and data normalization.
What moves between them
The main flow is Sage 100 into Snowflake. ml-connector polls AP invoices, purchase orders, GL entries, and vendors from Sage 100 on your chosen schedule (typically 15 minutes for AP and PO, hourly for vendors, daily for GL accounts), and pushes normalized rows into Snowflake staging tables via SQL inserts or direct API calls. Sage 100 is the source of truth; Snowflake holds the queryable replica. The two systems never sync data back into Sage 100.
How ml-connector handles it
ml-connector runs on your local network with access to the Sage 100 agent (BOI COM or SOAP endpoint) and egress to Snowflake. It stores both credential sets encrypted: Sage 100 username and password for each company code, and Snowflake API keys or tokens. For Sage 100, it includes the company code with every SOAP or BOI call, handles the multi-segment GL account format by storing the customer's account structure template, and retries failed writes with exponential backoff when COM record locks occur. For Snowflake, it uses Key Pair Authentication or bearer tokens and manages JWT token expiry. Before the first sync, ml-connector maps Sage 100 GL accounts and vendor IDs to Snowflake columns so downstream analytics land on consistent dimensions. Polling uses DateLastUpdated or DateCreated fields from Sage 100 to detect new and changed records. Every row carries a full audit trail showing the source timestamp, the sync batch, and any transformation applied. If a Snowflake write fails, ml-connector stores the record and retries on the next cycle.
A real-world example
A mid-market manufacturing firm runs Sage 100 for AP, GL, and inventory on servers in their plant, and uses Snowflake for company-wide analytics and reporting. Before the integration, their finance team exported Sage 100 vendor statements and GL trial balances as CSV exports weekly, then loaded them into Snowflake manually or via brittle scripts that broke whenever GL account structures changed. With Sage 100 connected to Snowflake, new invoices and GL postings flow automatically into Snowflake tables every 15 minutes. Their finance team now has a live GL replica, can query vendor aging without re-keying, and run month-end close scripts the moment the payables cycle finishes, instead of waiting for the next scheduled export.
What you can do
- Poll Sage 100 AP invoices, purchase orders, GL entries, and vendors on a schedule you control, and push normalized rows into Snowflake tables.
- Handle Sage 100 company codes, SOAP authentication, and multi-segment GL account formats without custom code.
- Detect new and changed records using DateLastUpdated or DateCreated fields, and insert or upsert them into Snowflake with a full audit trail.
- Manage Sage 100 concurrent-write locks with exponential backoff retries, and track failed records for replay.
- Authenticate Snowflake with Key Pair Authentication or bearer tokens, and manage JWT expiry automatically.
Questions
- Does ml-connector require changes to my Sage 100 server?
- Yes, you must enable Web Services access for the user account that ml-connector will use, and you need a local Windows agent with access to the Sage 100 BOI COM interface if you want AP, GL, and PO data (SOAP covers only Customers and Sales Orders). The agent can run as a Windows service on your server or on a network machine with network access to Sage 100. ml-connector connects to the agent over HTTPS.
- Which Sage 100 records can flow into Snowflake?
- AP invoices, purchase orders, GL entries, vendors, customer contacts, and sales orders. AP and PO are pulled every 15 minutes by default, GL accounts daily, and vendors hourly. Snowflake tables are created to your schema, and ml-connector normalizes Sage 100's multi-segment GL format into flat columns so your finance team can query and pivot without parsing account codes.
- What happens if Snowflake is unavailable when ml-connector tries to sync?
- ml-connector stores failed records in its local queue and retries on the next polling cycle with exponential backoff. Sage 100 continues to operate normally and poll cycles resume as soon as Snowflake is reachable. The full audit trail shows when each record was attempted and when it finally succeeded.
Related integrations
More Sage 100 integrations
Other systems that connect to Snowflake
Connect Sage 100 and Snowflake
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started