Microsoft Dynamics 365 Business Central and Looker integration
Microsoft Dynamics 365 Business Central runs finance, purchasing, sales, and inventory. Looker is the business intelligence layer where that data is modeled and explored on top of a warehouse such as BigQuery or Snowflake. Looker is not an ERP and holds no native vendor, invoice, or GL account objects, so this connection feeds the records Business Central holds into the warehouse tables your Looker model reads from, and runs Looker queries to pull finished figures back. ml-connector reads the agreed entities from the Business Central API v2.0, maps them onto your warehouse schema, and runs on a schedule you control. Because Looker emits no record-level events, the connector drives every step by reading Business Central on a schedule and calling Looker on demand.
What moves between them
The main flow runs from Microsoft Dynamics 365 Business Central into the warehouse that backs Looker. On each scheduled run, ml-connector reads the agreed Business Central entities, such as vendors, customers, purchase and sales invoices, general ledger entries, items, and dimensions, paging through the @odata.nextLink token and filtering on lastModifiedDateTime so only new and changed records are pulled, then loads them into the warehouse tables your Looker model reads from. In the other direction, ml-connector calls the Looker API to run a query or a saved Look and read finished BI figures, such as a GL summary or a vendor spend total, for a flow that needs them. Business Central is the system of record and Looker is read-only, so the connector never posts financial entries into Looker. Cadence follows your reporting needs, from a nightly load to a refresh after month-end close.
How ml-connector handles it
ml-connector stores both credential sets encrypted. For Business Central it holds a Microsoft Entra ID client credentials token for the tenant and targets the company id on the configured environment name, since the environment is part of the URL, and refreshes the token before it expires. For Looker it accepts the per-customer instance URL, posts the API3 client id and secret to the login endpoint, and sends the returned token with the token scheme, not Bearer; because that token lasts only one hour with no refresh token, the connector re-authenticates when a call returns 401 and caches the token in between. Reads page through the @odata.nextLink token, stay under the 20,000 record limit, and use a lastModifiedDateTime filter to pull only changes since the last run, mapping each Business Central entity onto a warehouse table the Looker model reads from. To read figures back, the connector runs a Looker query or Look by its model, explore, and field names, which are instance-specific and must be supplied from the customer's LookML, and it caps a single query at the 5000-row default or uses an async query task for larger pulls. Business Central throttling returns HTTP 429 and Looker defaults to about sixty requests per minute, so both sides back off with exponential delay and jitter. Business Central change subscriptions carry no payload and expire every three days, so the connector renews them before expiry and still fetches the changed resource, and every record carries a full audit trail and can be replayed if a step fails.
A real-world example
A mid-sized distribution business with around 250 staff runs Microsoft Dynamics 365 Business Central for purchasing, sales, inventory, and finance, and its analysts explore company performance in Looker on top of a BigQuery warehouse. Before the integration, someone exported vendor spend, AP and AR invoices, and GL balances from Business Central into spreadsheets each week and hand-loaded them into the warehouse, so the Looker dashboards always trailed the books and reconciling the extracts ate hours. With Microsoft Dynamics 365 Business Central and Looker connected, vendors, invoices, general ledger entries, and items load into the warehouse tables behind the Looker model automatically on a schedule, pulled incrementally by last-modified date, and finance flows that need a modeled figure read it straight from a Looker query. The Explores refresh against current Business Central data and the manual export-and-load step is gone.
What you can do
- Load Business Central vendors, customers, purchase and sales invoices, general ledger entries, items, and dimensions into the warehouse tables behind your Looker model.
- Run Looker queries and saved Looks by model, explore, and field to read finished BI figures back into a flow.
- Bridge the Business Central Microsoft Entra ID client credentials token and Looker's one-hour API3 login token, re-authenticating on a 401.
- Read Business Central incrementally with a lastModifiedDateTime filter and @odata.nextLink paging, staying under the 20,000 record per request limit.
- Treat Looker as a read-only reporting layer, never posting ledger entries into it, with retries and a full audit trail on every record.
Questions
- Which direction does data move between Microsoft Dynamics 365 Business Central and Looker?
- The main flow is Microsoft Dynamics 365 Business Central into the warehouse that backs Looker. Vendors, customers, purchase and sales invoices, general ledger entries, items, and dimensions are read from the Business Central API v2.0 and loaded into the warehouse tables your Looker model reads from. In the other direction ml-connector can run a Looker query or Look to read a finished figure, but Looker is read-only, so no financial entries are ever posted into it.
- Can ml-connector write invoices or GL entries into Looker?
- No. Looker is a business intelligence layer over a data warehouse, not an ERP, so it has no native invoice, vendor, or GL account objects, and its only writable objects are content, users, groups, and scheduled plans. ml-connector loads Business Central records into the warehouse tables behind the Looker model and uses the Looker API only to run queries and Looks for reading.
- How does the integration handle changes when Looker sends no record events?
- Looker has no record-level event stream; its scheduled plans only post results on a cron, and Business Central change subscriptions carry no payload and expire every three days. So ml-connector polls Business Central on a schedule, reading each entity with an OData lastModifiedDateTime filter and @odata.nextLink paging to pull only new and changed records. Because the Looker token lasts only one hour with no refresh token, the connector caches it and re-authenticates whenever a call returns 401.
Related integrations
More Microsoft Dynamics 365 Business Central integrations
Other systems that connect to Looker
Connect Microsoft Dynamics 365 Business Central and Looker
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started