You can connect HubSpot to Power BI in four practical ways: use a managed connector, call the HubSpot API, load HubSpot data into a cloud database, or import exported files. The best choice depends on your data volume, refresh frequency, technical resources, security requirements, and budget.
This guide compares all four methods, shows how the connection works, explains the setup process, and covers the data-model decisions that determine whether your dashboard remains reliable after launch.
- Managed connector: fastest low-code setup.
- Cloud database or warehouse: strongest option for governed, multi-source reporting.
- Direct API: best for controlled prototypes or teams that can maintain the integration.
- CSV export: suitable for occasional analysis only.
Can Power BI connect directly to HubSpot?
Yes, Power BI can report on HubSpot data, but Power BI Desktop does not provide a first-party HubSpot connector in its standard data-source list. A bridge is therefore required between the two platforms.
That bridge may be a purpose-built HubSpot Power BI connector, the HubSpot REST API, an integration platform, or a database that receives HubSpot data. Once the records reach Power BI, you can transform them in Power Query, create relationships and measures, and publish interactive reports to the Power BI service.
Do not confuse Microsoft’s “HubSpot CRM (Independent Publisher)” connector with a native Power BI Desktop connector. Microsoft currently documents that independent connector for products such as Power Automate, Power Apps, Logic Apps, and Copilot Studio. It is not a one-click HubSpot data source inside Power BI Desktop.
Why connect HubSpot to Power BI?
HubSpot’s reports are useful when the analysis stays inside HubSpot. Power BI becomes valuable when you need a custom semantic model, more control over calculations and visual design, or a consolidated view that combines CRM data with finance, advertising, product, service, or operational systems.
A well-designed HubSpot Power BI integration can help you:
- Track pipeline, revenue, sales activity, conversion, and velocity in one report.
- Compare HubSpot leads and opportunities with ad spend from Google Ads, LinkedIn, or Meta.
- Reconcile won deals with invoiced and collected revenue from an accounting or ERP system.
- Create consistent KPI definitions for sales, marketing, finance, and leadership.
- Preserve historical snapshots that show how the pipeline changed over time.
- Apply Power BI row-level security so managers and representatives see the right records.
- Replace recurring spreadsheet exports with an automated refresh process.
Four ways to connect HubSpot to Power BI
There is no universally “best” connection. The right architecture is the simplest one that can meet your reporting, governance, and maintenance requirements.
HubSpot to Power BI connection methods compared
| Method | Best for | Setup effort | Automated refresh | Main trade-off |
|---|---|---|---|---|
| Managed connector | Fast, low-code deployment | Low | Yes | Recurring subscription and vendor dependency |
| Direct API with Power Query | Prototypes and technical teams | Medium to high | Possible, with careful design | You own authentication, pagination, limits, and maintenance |
| Cloud database or warehouse | Scalable, governed, multi-source analytics | Medium to high | Yes | More infrastructure and engineering |
| CSV or Excel export | One-off or infrequent reporting | Low | No | Manual, error-prone, and difficult to scale |
Method 1: Use a managed HubSpot Power BI connector
A managed connector handles most of the extraction work for you. Depending on the product, it may expose HubSpot data directly to Power BI, publish an OData feed, or load the data into a managed SQL database.
Typical setup process
- Choose the data you need. List the objects, properties, history, associations, and refresh frequency required by the report.
- Install or authorize the connector. Sign in to HubSpot and approve only the scopes needed for reporting.
- Run the initial sync. The first extraction may take longer because it loads historical records.
- Connect Power BI. Use the connector’s Power BI integration, OData endpoint, or database credentials.
- Transform and model the tables. Rename technical fields, assign data types, create relationships, and add governed measures.
- Publish and schedule refresh. Test the refresh in the Power BI service rather than assuming a Desktop refresh will behave identically.
Questions to ask before selecting a connector
- Which standard and custom objects are included?
- Does it extract associations, owners, pipelines, property history, and activities?
- How does it handle deleted or merged records?
- Does it perform incremental loads or repeatedly reload every record?
- What is the refresh frequency and expected latency?
- Where is the data stored, and in which region?
- Does the supplier provide encryption, access controls, logs, backups, and a data-processing agreement?
- How are schema changes and HubSpot API updates handled?
- Can you export your data and model if you later change providers?
Choose this method when: time-to-value matters more than owning the pipeline, the subscription is economical compared with internal development, and the provider meets your security and data-coverage requirements.
Method 2: Connect through the HubSpot API and Power Query
A direct API connection gives you control and avoids a connector subscription, but “free” does not mean maintenance-free. The person who builds it becomes responsible for credentials, scopes, endpoints, pagination, retry logic, object relationships, and changes to the API or source schema.
Step 1: Define the reporting scope
Start with the smallest useful set of data. A sales pipeline report commonly needs:
- Deals and relevant deal properties
- Contacts and companies
- Deal-to-contact and deal-to-company associations
- Owners, teams, pipelines, and stages
- Selected activities such as calls, meetings, notes, tasks, and emails
Do not request every property “just in case.” Wide payloads take longer to extract and create a harder model to govern.
Step 2: Create a private app or suitable HubSpot app
For an integration used by one HubSpot account, create a privately distributed app or private app and grant the minimum read scopes required. A simple sales model may need scopes such as crm.objects.deals.read, crm.objects.contacts.read, and crm.objects.companies.read, plus the scopes required for any additional objects.
Use OAuth for an application distributed to multiple customers. HubSpot’s authentication guidance states that multi-customer or Marketplace integrations should use OAuth. Never publish an access token in a blog, query sample, source-control repository, screenshot, or shared parameter file.
Step 3: Test the HubSpot endpoint
HubSpot API requests use the base URL https://api.hubapi.com and send the token in an HTTP authorization header:
Authorization: Bearer YOUR_ACCESS_TOKEN
CRM objects are retrieved from object endpoints, while associations represent relationships such as a deal linked to several contacts or a contact linked to a company. Treat those associations as bridge tables in Power BI instead of assuming every relationship is one-to-one.
Step 4: Build a paginated Power Query function
HubSpot returns paged results. When another page exists, the response includes a cursor in paging.next.after. A production query must continue requesting pages until that cursor is absent.
The following simplified Power Query M pattern illustrates the logic. It intentionally uses a token parameter rather than placing a real token in the code:
let
BaseUrl = "https://api.hubapi.com",
GetPage = (optional After as nullable text) as record =>
let
QueryValues = if After = null
then [limit = "100", properties = "dealname,amount,dealstage,pipeline,closedate,createdate,hs_lastmodifieddate"]
else [limit = "100", after = After, properties = "dealname,amount,dealstage,pipeline,closedate,createdate,hs_lastmodifieddate"],
Response = Json.Document(
Web.Contents(
BaseUrl,
[
RelativePath = "crm/v3/objects/deals",
Query = QueryValues,
Headers = [Authorization = "Bearer " & HubSpotAccessToken]
]
)
),
Rows = Response[results],
NextAfter = try Text.From(Response[paging][next][after]) otherwise null
in
[Rows = Rows, NextAfter = NextAfter],
Pages = List.Generate(
() => GetPage(null),
each List.Count([Rows]) > 0,
each if [NextAfter] = null then [Rows = {}, NextAfter = null] else GetPage([NextAfter]),
each [Rows]
),
Records = List.Combine(Pages),
Output = Table.FromRecords(Records)
in
Output
Important: treat this as an educational starting point, not a complete production connector. A robust implementation should also handle privacy levels, retries, 429 responses, token management, logging, deleted records, incremental loading, schema drift, and Power BI service refresh behavior.
Step 5: Design for API limits
HubSpot applies rate and daily limits that vary by app type and subscription. Its current guidance lists privately distributed app limits from 100 requests per 10 seconds and 250,000 requests per account per day on Free and Starter tiers. Professional and Enterprise tiers have higher limits.
Some endpoints have stricter rules. For example, CRM Search is limited to five requests per second per account, up to 200 records per page, and 10,000 results for a given query.
Use pagination, incremental extraction, batching, caching, and backoff. If the API returns 429 Too Many Requests, wait and retry according to the response and your retry policy. Repeatedly downloading years of unchanged history is both slow and unnecessary.
Step 6: Validate the totals
Before building visuals, compare Power BI totals against controlled HubSpot views. Validate record counts, won revenue, open pipeline, owners, stages, date boundaries, currencies, archived records, and a sample of associations. Document any expected differences.
Choose this method when: you have API and Power Query capability, need a limited set of data, accept ongoing maintenance, and can manage credentials securely.
Method 3: Load HubSpot into a cloud database or warehouse
For larger or more mature analytics environments, extract HubSpot data into Azure SQL Database, Microsoft Fabric, Snowflake, BigQuery, or another governed data platform. Power BI then connects to the prepared analytical layer instead of calling HubSpot during each semantic-model refresh.
The architecture typically looks like this:
Why the warehouse pattern is more scalable
- Reusable data: several reports can use the same prepared tables without repeatedly calling HubSpot.
- Historical analysis: snapshots or change tables can preserve pipeline movement that the current CRM record alone cannot show.
- Cross-system reporting: marketing cost, orders, invoices, targets, and product usage can be joined upstream.
- Governance: credentials, data quality, lineage, retention, and access can be managed centrally.
- Performance: transformations occur in an analytical platform designed for repeatable queries.
- Resilience: reports are less exposed to temporary API latency during every user-facing refresh.
Implementation checklist
- Create a data inventory covering objects, properties, associations, history, and sensitive fields.
- Land raw HubSpot records without prematurely discarding source IDs or timestamps.
- Load incrementally using reliable modified timestamps, with a sensible overlap window for late changes.
- Track deletes, merges, API errors, row counts, and the last successful extraction time.
- Create clean dimensions and fact tables for contacts, companies, deals, activities, owners, stages, and dates.
- Preserve many-to-many associations in bridge tables.
- Add pipeline snapshots if users need “as of” reporting.
- Expose curated views to Power BI and keep technical staging columns out of the report layer.
Choose this method when: HubSpot is one of several sources, historical accuracy matters, multiple reports will reuse the data, or your organization requires stronger control over security, monitoring, and data quality.
Method 4: Export HubSpot data to CSV or Excel
The manual method is straightforward: export records from HubSpot, save the file in a controlled location, and import it into Power BI. It is useful for a proof of concept, a one-off board analysis, or a small dataset that changes infrequently.
Its limitations appear quickly. Users can export different columns or filters, overwrite files, change data types, miss records, or forget the refresh. Associations and activity history may require separate exports, while an audit trail is difficult to maintain.
If you must use files repeatedly, standardize the export definition, file name, folder, columns, data types, owner, and refresh procedure. A SharePoint or OneDrive folder is generally easier to govern than files kept on an individual laptop, but the underlying process is still manual unless the extraction itself is automated.
Choose this method when: the analysis is temporary, automation is not justified, and users understand that the report is only as current and complete as the latest export.
How to model HubSpot data in Power BI
The connection is only the first half of the work. A weak model can produce duplicate revenue, ambiguous relationships, slow reports, and metrics that disagree with HubSpot.
Recommended core tables
- FactDeals: one row per deal, with amount, stage, pipeline, dates, owner, and status fields.
- FactActivities: calls, meetings, emails, notes, and tasks at a consistent analytical grain.
- FactPipelineSnapshots: periodic deal-stage and value snapshots for historical pipeline analysis.
- DimDate: a proper calendar used by created, closed, activity, and snapshot dates.
- DimOwner: sales owner, team, manager, and status attributes.
- DimPipelineStage: pipeline, stage, stage order, probability, open/won/lost classification.
- DimCompany and DimContact: selected attributes required for segmentation.
- Bridge tables: deal-contact, deal-company, contact-company, and any custom many-to-many associations.
Avoid double-counting deal value
A deal can be associated with several contacts. If you flatten those contacts into the deal table, the same deal amount may appear several times. Keep the deal at one row per deal and use a bridge table for associations. Decide how attribution should work before allocating value across contacts, campaigns, or sources.
Separate current state from history
A current deal record tells you where the opportunity is now. It does not automatically tell you what the pipeline looked like at the end of last month or how long the deal spent in every stage. For trustworthy trend and velocity reporting, capture property history where available or store scheduled snapshots in your data platform.
Define the date and currency rules
Agree on the timezone, fiscal calendar, close-date logic, and currency conversion method. A dashboard may be technically correct and still disagree with management reports if one uses UTC, another uses the HubSpot account timezone, or converted revenue uses a different exchange-rate date.
KPIs to include in a HubSpot Power BI dashboard
Sales and pipeline
- Open pipeline value and weighted pipeline
- Pipeline coverage against target
- Deals created, won, and lost
- Win rate by owner, team, source, segment, and period
- Average and median deal size
- Sales-cycle length and time in stage
- Pipeline velocity and stage conversion
- Stale deals and opportunities with no next activity
- Forecast value versus actual closed revenue
Marketing and funnel
- New contacts by original and latest source
- Visitor-to-lead, lead-to-MQL, MQL-to-opportunity, and opportunity-to-customer conversion
- Form submissions and campaign responses
- Cost per lead and customer acquisition cost after joining advertising or finance data
- Pipeline and revenue influenced by campaign
- Email delivery, open, click, reply, bounce, and unsubscribe rates where the source data supports them
Sales activity and productivity
- Calls, meetings, tasks, notes, and one-to-one emails
- Connected-call and meeting-booked rates
- Activity per active opportunity
- First-response time and time since last activity
- Activity-to-opportunity and activity-to-win conversion
Avoid filling the dashboard with every available measure. Each page should support a decision: where to focus pipeline reviews, which channels deserve budget, which opportunities need action, or which stage needs process improvement.
Scheduled refresh, performance, and security
Test refresh in the Power BI service
A query that refreshes in Power BI Desktop is not automatically production-ready. After publishing, configure credentials and test an on-demand refresh in the Power BI service. Microsoft notes that most dynamic web data sources cannot refresh in the service, although queries built with the RelativePath and Query options of Web.Contents are among the exceptions.
Cloud sources such as an accessible Azure SQL Database normally do not require an on-premises data gateway. A gateway is required when the service cannot directly reach the source, and some connector or function scenarios may also require one. Confirm the behavior of your exact architecture before launch.
Use incremental loading where possible
Refresh only records that are new or may have changed, then periodically reconcile against the source. This reduces API consumption and refresh duration. For large models stored in a database or Fabric, partitioning and Power BI incremental refresh can further reduce processing.
Protect credentials and personal data
- Grant the minimum HubSpot scopes required.
- Store tokens in an approved secret-management process, not in shared documents or source control.
- Rotate compromised or unnecessary tokens immediately.
- Exclude sensitive properties that the dashboard does not require.
- Apply least-privilege access at the database, workspace, app, and report levels.
- Use row-level security only after testing both intended access and attempted overreach.
- Document retention, deletion, residency, backup, and incident-response responsibilities.
Common HubSpot Power BI problems and fixes
The API returns 401 Unauthorized
Confirm that the token is active, the authorization header uses the Bearer format, and the app has the required scope. If a token was exposed, rotate it instead of continuing to troubleshoot with a compromised credential.
The API returns 403 Forbidden
The app may lack a required scope, the user or account may not have access to the product feature, or the endpoint may not be available for the account tier. Review the endpoint’s scope and product requirements.
The API returns 429 Too Many Requests
Throttle requests, respect retry guidance, use exponential backoff, reduce unnecessary calls, and prefer incremental or batch extraction. Monitor both short-window and daily consumption.
Power BI is missing records
Check pagination first. Then review filters, archived records, permissions, modified-date windows, timezones, and whether the extraction stopped after an error. Reconcile source and destination counts for each object.
Revenue is higher than HubSpot
Look for duplicated deals after joining contacts, companies, activities, or line items. Confirm the grain of every table and use bridge tables for many-to-many relationships.
Stages display technical IDs
Extract pipeline and stage metadata, then map the internal IDs to labels and stage order. Do not hard-code names that administrators may later change.
Scheduled refresh works in Desktop but fails online
Check Power BI service credentials, privacy settings, gateway requirements, dynamic data-source warnings, unsupported custom connectors, and whether the query constructs URLs dynamically. Test the published semantic model with “Refresh now” before enabling the schedule.
The pipeline history is wrong
A current-state extract cannot recreate every past pipeline position. Use property history or periodic snapshots and define when a stage change becomes effective for reporting.
Which HubSpot Power BI method should you choose?
- Choose a managed connector when you need a fast, supported, low-code deployment.
- Choose a direct API connection for a limited scope when your team can maintain the technical integration.
- Choose a database or warehouse when HubSpot will be combined with other systems, reused across reports, or governed centrally.
- Choose file exports only when the work is occasional and a manual process is acceptable.
For many growing organizations, the long-term answer is a hybrid: a managed extraction tool or custom pipeline loads HubSpot into a governed cloud platform, and Power BI connects to curated reporting tables.
Frequently asked questions
Does Power BI have a native HubSpot connector?
Power BI Desktop does not currently include a first-party HubSpot connector in its standard data-source list. You can connect through a third-party connector, the HubSpot API, an integration platform, a cloud database, or exported files.
What is the easiest way to connect HubSpot to Power BI?
A managed HubSpot Power BI connector is usually the easiest option because it handles authentication, extraction, pagination, and refresh. Check its data coverage, security, storage location, refresh frequency, support, and total cost before committing.
Can I connect HubSpot to Power BI for free?
You can build a direct API connection without paying for a connector, subject to your existing HubSpot, Power BI, infrastructure, and licensing costs. However, development, monitoring, security, and maintenance still consume time. CSV export is another low-cost option for one-off analysis.
Can Power BI refresh HubSpot data automatically?
Yes, if the chosen connector or architecture supports Power BI service refresh and the credentials and gateway requirements are configured correctly. Always test the published semantic model because Desktop and service refresh behavior can differ.
How often should HubSpot data refresh in Power BI?
Match the schedule to the business decision. Daily refresh may be enough for management reporting, while active sales operations may require several refreshes per day. Faster is not always better: consider API limits, model size, source latency, licensing, and the actual time sensitivity of the decision.
Which HubSpot objects should I load first?
For sales reporting, begin with deals, contacts, companies, owners, pipelines, stages, and the associations between them. Add activities, products, line items, tickets, campaigns, and custom objects only when a defined reporting requirement needs them.
Can Power BI show historical HubSpot pipeline changes?
Yes, but a current-state deals table is not enough. You need relevant property history or scheduled pipeline snapshots so the model can reconstruct values and stages at earlier dates.
How do I combine HubSpot with advertising and finance data?
Load each source into a shared data platform or carefully designed Power BI model, then align keys, dates, campaign definitions, currencies, and attribution rules. This makes it possible to calculate measures such as customer acquisition cost, return on ad spend, billed revenue, and lifetime value.
Final thoughts
Connecting HubSpot to Power BI is not simply a matter of moving rows between two applications. The lasting value comes from choosing an architecture that can refresh reliably, preserving the relationships and history that make CRM data meaningful, and defining measures that people trust.
Start with the decisions the dashboard must support. Then choose the simplest connection method that meets the required scale, security, refresh, and maintenance standards. That approach produces a reporting system that remains useful long after the first dashboard is published.
Sources and further reading: HubSpot API usage guidelines and limits; HubSpot API authentication; HubSpot CRM associations; HubSpot CRM search limits; Microsoft Power Query Web connector; Microsoft Power BI data refresh guidance; Microsoft HubSpot CRM independent publisher connector.