// Blog

Connecting CRM Data (HighLevel, Zoho, Salesforce) to Power BI: Power Query, REST API, or Azure Data Factory

October 02, 2026 4 min read
Analytko's client dashboard (Dec 2025) — Professional Services

A question that comes up in almost every sales-ops project: "our leads and deals live in [HighLevel / Zoho / Salesforce / Pipedrive], how do we get that into Power BI?" The honest answer is "it depends on the CRM and the volume," because there are three real paths — a native connector or Power Query against the CRM's REST API, or a staged pipeline through Azure Data Factory (or Fabric) — and picking the wrong one for the situation either wastes a day building something Power BI already does for free, or leaves you with a fragile report that breaks every time the CRM changes a field.

Path 1 — Native connector or direct Power Query

Power BI ships native connectors for the big platforms (Salesforce Objects, Dynamics 365, HubSpot via the Power Query community connector) and, for anything without one, Power Query's Web or OData source can call a REST API directly from Get Data, handling pagination and authentication with a parameterized function.

This is the right call for a single report, a CRM under ~50k records, or a client who doesn't want anything beyond their Power BI license to maintain.

Path 2 — REST API with Power Query, properly parameterized

This is still "just Power Query," but built as a reusable function instead of a one-off query: a parameterized fnGetCrmPage(endpoint, cursor) function that handles the CRM's specific pagination (HighLevel and Zoho both use cursor/offset pagination with a few hundred records per page), wrapped in List.Generate to walk every page until the API signals there's no more data.

Worth the extra setup time whenever more than one report (or more than one CRM object) needs the same source, even if volume is still moderate.

Path 3 — Azure Data Factory (or Fabric Data Factory) staging layer

For real volume — six figures of contacts, deal history going back years, or a CRM combined with other sources into one model — move the extraction out of Power BI entirely. An ADF (or Fabric) pipeline calls the CRM's REST API on a schedule, lands the raw response in a Data Lake (or a staging database), and Power BI reads the already-cleaned, already-incremental table instead of hitting the CRM at all.

How to decide

Three questions settle it in practice: how many reports need this CRM data (one → Path 1, several → Path 2), how large is the object you're pulling (under ~50k rows, either Power Query path is fine; well past that, Path 3), and does the CRM need combining with other sources into one model anyway (if yes, that data warehouse layer is already Path 3's staging area, so the CRM extraction belongs there too). Most CRM-to-Power-BI requests we see start as "just connect it" and turn into Path 3 within a year, once a second report or a second data source shows up — building the parameterized Power Query function in Path 2 from day one keeps that migration from being a full rewrite later.

If you're stuck between "a connector should just work" and "this needs real plumbing" for your CRM, talk to us — we'll tell you which path actually fits your volume, not the one that sounds the most impressive.

Want this done for you?
We build it end-to-end, in your tenant, with documentation.
See the service
// Keep reading

Need this built for your team?

30 minutes. No sales pitch. Just an honest conversation about your data and how we'd approach it.