ml-connector
Sage 50Looker

Sage 50 and Looker integration

Sage 50 runs your accounting on Windows, but your finance team needs visibility across invoices, customers, vendors, and GL postings in real time. Looker surfaces that data in dashboards and automated reports. Connecting Sage 50 and Looker brings your accounting data into the analytics layer without re-keying or manual extracts, so financial reporting is always current and the team sees the full picture.

How Sage 50 works

Sage 50 is available in two regional editions: US (Sage 50 US, formerly Peachtree Accounting) and UK (Sage 50 Accounts, formerly Sage Line 50). Neither exposes a cloud REST API or webhooks. Integration must run on a Windows machine with direct access to the Sage 50 company data files and uses the local .NET SDK (US) or Sage Data Objects COM layer (UK). Authentication is Windows-local username and password against the Sage 50 user database, with exclusive access control - the integration user cannot be logged in interactively while the SDK session runs. Polling for modified records via LastModifiedDate or TransactionDate is the only supported sync pattern; minimum poll interval is 5 to 15 minutes for near-real-time data.

How Looker works

Looker is a cloud-hosted business intelligence platform that connects to data warehouses and exposes modeled data through REST API. Modern instances use the base URL https://<instance>.cloud.looker.com/api/4.0/, and older deployments use https://<instance>.looker.com:19999/api/4.0/. Authentication is OAuth2 client credentials - exchange client_id and client_secret for a bearer token that expires after 1 hour, then use it in the Authorization header. Looker has no native inbound webhooks for automated push; integration is pull-only via REST API. Looker models warehouse data, not financial data directly, so Sage 50 records must be loaded into your connected data warehouse first, then Looker queries expose them in dashboards.

What moves between them

Sage 50 transaction records - vendors, customers, purchase invoices, sales invoices, purchase orders, sales orders, GL accounts, and general journal entries - flow one direction into Looker via a scheduled pull. The Windows SDK polls Sage 50 by LastModifiedDate or TransactionDate range on a 15-minute to hourly schedule, extracts the modified records, and pushes them into your cloud data warehouse. Looker then models and exposes them through queries and dashboards. This is a read-only flow; Sage 50 is never updated from Looker.

How ml-connector handles it

ml-connector runs on a Windows machine with Sage 50 and direct access to company data files, using the local .NET SDK (US edition) or Sage Data Objects layer (UK edition). At each poll interval, it queries by LastModifiedDate to find modified vendors, invoices, GL accounts, and journal entries, then uploads them to your cloud data warehouse via your chosen transport (REST, SFTP, or cloud storage). Looker consumes from that warehouse and exposes the records through dashboards and scheduled query plans. The integration handles the exclusive-access requirement by using a dedicated integration user account that is never logged in interactively, and it tracks the last poll timestamp so no records are missed across polling windows. Because Sage 50 has no webhooks and the local SDK is pull-only, the poll frequency must balance freshness (15 minutes minimum) against Sage 50 load. Account creation in Sage 50 is supported, but modifying core GL account structure is restricted by the SDK, so dimension mapping is typically done in Looker's model layer.

A real-world example

A mid-size professional services firm uses Sage 50 Accounts (UK edition) to manage invoicing, vendor payments, and GL transactions. Finance staff spend hours each week exporting vendors and invoices from Sage 50 and importing them into a warehouse, then building reports in Looker. With Sage 50 and Looker connected, a scheduled 15-minute poll automatically brings the latest invoices, GL postings, and vendor records into the warehouse, and Looker dashboards always show current AR aging, AP due dates, and departmental expense breakdowns. Month-end close is faster because there is no manual extract-and-load step, and the finance team has self-service visibility into what is posted and what is still in draft.

What you can do

  • Extract Sage 50 vendors, customers, invoices, purchase orders, and GL accounts on a polling schedule and load them into your data warehouse for Looker to model.
  • Automatically detect modified records by LastModifiedDate since the last poll, so every sync is incremental and no data is missed.
  • Handle the exclusive-access requirement of the local SDK by using a dedicated integration user account that runs only during scheduled polling windows.
  • Map Sage 50 GL accounts and dimensional data to your warehouse schema so Looker can expose them in financial dashboards without manual dimension mapping.
  • Maintain a complete audit trail of every extract and load event so you can trace data lineage from Sage 50 into Looker and replay failed imports.

Questions

How does ml-connector access Sage 50 data if there is no cloud API?
ml-connector runs on a Windows machine with Sage 50 installed and uses the local .NET SDK (US edition) or Sage Data Objects COM layer (UK edition) to query the company data files directly. A dedicated integration user account with exclusive access opens each polling window, retrieves modified records by LastModifiedDate, and closes to release the lock. The extracted records are then uploaded to your cloud data warehouse where Looker models them.
Why does the integration require a Windows machine and exclusive access?
Sage 50 is a desktop application with a local SDK that requires direct access to company data files on the same machine or LAN, and the SDK enforces exclusive access - the integration user cannot be logged in interactively while a poll is running. This is a constraint of the on-premise architecture, not a design choice. ml-connector manages the polling schedule so the exclusive-access window is brief and does not disrupt user access.
Does Looker store Sage 50 data directly, or does it pull from a warehouse?
Looker models data from a connected data warehouse (Snowflake, BigQuery, Redshift, etc.), not from Sage 50 directly. ml-connector extracts Sage 50 records and loads them into your warehouse on the poll schedule, and Looker then exposes them through queries, dashboards, and scheduled reports. This separation allows Looker to model and join Sage 50 data with other warehouse tables.

Related integrations

Connect Sage 50 and Looker

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

Get started