Sage 300 and Looker integration
Sage 300 manages accounts payable, accounts receivable, general ledger, and purchase orders across mid-market businesses. Looker turns data into insight. Connecting the two lets your finance team see real-time Sage 300 transactions in interactive dashboards and scheduled reports, without exporting and re-loading. AP invoices, AR receipts, GL journal batches, and purchase orders move from Sage 300 into Looker on a polling schedule you control.
What moves between them
Sage 300 financial and operational records flow one direction into Looker for analytics. ml-connector polls Sage 300 for AP invoices, AR receipts, GL journal batches, purchase orders, and inventory on a schedule tied to your financial close calendar. The records are extracted and either pushed to a Looker data action endpoint or loaded into a warehouse connected to Looker, where they are modeled into dashboards, looks, and scheduled reports. Master data such as vendors, customers, and GL accounts are aligned first so transaction records reference valid dimensions.
How ml-connector handles it
ml-connector handles the fundamental auth difference between the two systems: Sage 300 uses HTTP Basic Auth with uppercase credentials sent with every request, while Looker uses OAuth2 bearer tokens that expire after 1 hour. ml-connector caches credentials encrypted, transforms Sage 300's uppercase-only requirement at the request layer, and refreshes Looker's bearer token on every 401 response to avoid stale tokens mid-sync. Since Sage 300 is pull-only with no webhooks, ml-connector polls on a schedule; OData filters ($filter=DocumentDate gt '2026-01-01') and pagination ($skip, $top) ensure only new and changed records are read each run. Because Looker does not store financial master data, the mapping is handled upfront: Sage 300 vendors map to Looker dimension keys in the warehouse model, GL accounts to cost centers or profit centers, and items to product hierarchies. ml-connector tracks Sage 300 company and module context (AP, AR, GL, PO) so each record lands in the correct Looker looks and dashboards. Every record carries a full audit trail so failed deliveries can be replayed.
A real-world example
A mid-sized manufacturing distributor runs Sage 300 on-premise for AP, AR, GL, and inventory. The CFO needs weekly cash flow forecasts, vendor aging summaries, and margin analysis by product line, but today's process is manual: export AP and AR aging from Sage 300, export inventory on-hand from the warehouse, upload to spreadsheets, and build Looker dashboards by hand. With Sage 300 and Looker connected, each night ml-connector polls Sage 300 for the day's invoices, receipts, and GL transactions, and loads them into the warehouse. The next morning, Looker dashboards refresh automatically with current AP aging, AR collections status, margin trends, and inventory turnover, and stakeholders get scheduled email reports without re-keying.
What you can do
- Poll Sage 300 for AP invoices, AR receipts, GL journal batches, and purchase orders on a schedule, using OData filters to fetch only new records.
- Transform Sage 300's HTTP Basic Auth uppercase-only credentials and load records into Looker dashboards and looks without manual extraction.
- Refresh Looker OAuth2 bearer tokens on expiry so long-running syncs do not fail mid-stream.
- Map Sage 300 company codes, modules, vendors, GL accounts, and items to Looker dimensions so each transaction lands in the correct dashboard.
- Audit and replay every record movement from Sage 300 into Looker, so failed Scheduled Plans or Looker changes can be recovered without losing financial data.
Questions
- Which direction does data move between Sage 300 and Looker?
- Data flows one direction: from Sage 300 into Looker. AP invoices, AR receipts, GL journal batches, and purchase orders are polled from Sage 300 and loaded into Looker's data warehouse or delivered via Looker Scheduled Plans. Looker is a read-only analytics layer, so no updates flow back to Sage 300.
- How does ml-connector handle Sage 300's uppercase-only HTTP Basic Auth requirement?
- ml-connector stores Sage 300 credentials encrypted and transforms them to uppercase at the request layer, so the integration works with normal username and password formats. The API user must be created in Sage 300 Administrative Services with the Web API security group assigned; the built-in Admin user does not have API privileges.
- What happens when Looker's OAuth2 token expires after 1 hour?
- ml-connector detects the 401 response and re-authenticates immediately by exchanging the client_id and client_secret for a new bearer token. Since Looker has no refresh token, ml-connector must call the login endpoint again; the integration tracks token age to avoid expiry in the middle of a large sync.
Related integrations
More Sage 300 integrations
Other systems that connect to Looker
Connect Sage 300 and Looker
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started