Pick the one key every tool shares, the email address, and join the tools on it by person, not by dashboard. Google Analytics covers anonymous visits; HubSpot, Mailchimp and Calendly all know people by email. Stitch those three by address, lay the traffic beside them, and you have one funnel with one honest gap.
That is the short answer. The longer one is about what each tool actually knows, why their numbers never agree, and which of the three practical ways to do the join fits the time you have. None of them is free, and none of them shows you everything. It helps to know in advance what you are giving up.
What does each tool actually know?
Each tool is accurate about its own slice. None of them was built to see the others.
Google Analytics knows about visits. It sees sessions, pages, events and the source that brought each session in: a search, a referral, a campaign link, a direct visit. It is built not to know who anyone is. Its terms forbid sending personal information such as email addresses into it, so a visitor in GA4 is a device and a cookie, never a name.
HubSpot knows about contacts and deals. Once someone fills in a form or is added by hand, HubSpot holds their email, their lifecycle stage, the deals attached to them and, if its tracking code is on your site, the original source of their first recorded visit. It is the closest thing most small companies have to a list of people and what happened to them.
Mailchimp knows about subscribers and campaigns. It can tell you who received each email, who opened it and who clicked which link, all keyed to an email address. Treat opens with care: some mail apps load images automatically, which records an open whether or not a person read anything. Clicks are the firmer signal.
Calendly knows about meetings. Every booking comes with the invitee’s name and email, the time they booked, the time of the meeting, whether it was cancelled or rescheduled, and the answers to any questions on your booking form. For many B2B companies it is the first place a stranger becomes a real conversation.
Put those four side by side and the pattern is plain. One tool sees traffic and cannot name it. Three tools name people and cannot see the traffic. The funnel you want runs through all four.
One tool sees traffic and cannot name it. Three tools name people and cannot see the traffic.
Why do the dashboards never agree?
Every tool counts a different thing and calls it by the same name.
The first reaction to four dashboards is to look for the one that is right. It rarely helps, because most of the disagreement is not error. It is four definitions of the same word.
The usual reasons, in rough order of how often they cause the gap.
- Different units. GA4 counts sessions and users, which are devices. HubSpot counts contacts. Mailchimp counts subscribers. Calendly counts bookings. One person can be three users, one contact, one subscriber and two bookings.
- Different credit rules. GA4 and HubSpot assign a conversion to a source using different attribution rules, so the same signup can be credited to organic search in one and to an email in the other.
- Different clocks. One tool dates a lead by when the contact was created, another by when the form was submitted, another by when the meeting takes place. Time zone settings can shift late-evening events into the next day.
- Different blind spots. Ad blockers and declined cookie banners hide some visits from analytics, while the same person’s booking still lands in Calendly.
- Duplicates. A person who books with a work address and subscribes with a personal one is two people to every tool.
None of this is fixed by picking a winner. It is fixed by deciding, once, what each stage of your funnel means, which tool owns that stage, and which date counts. Write that on one page before you build anything. Every joined view is only as good as the definitions under it.
Why is the email address the join key?
It is the only identifier that survives across the tools that know people.
HubSpot, Mailchimp and Calendly were built by different companies for different jobs, but all three store the same field: an email address. That makes it the natural key. A contact in HubSpot, a subscriber in Mailchimp and an invitee in Calendly with the same address are, for practical purposes, the same person.
Time is the second key. Once you have joined events to a person, the order of those events is the story: first visit recorded in HubSpot, newsletter click, booking, deal. Order is what turns three lists into a journey.
Before joining on email, clean it. Small differences break the match.
- Lowercase every address and trim spaces at both ends.
- Decide whether to treat work and personal addresses for the same person as one. If you do, keep a short mapping list rather than editing the source data.
- Watch for role addresses such as info@ or sales@ that stand for many people.
Email is not a perfect key. It is simply the best one available to a small company that does not control a login for every visitor. Use it, and write down where it fails.
What are the three ways to join them?
By hand, by dashboard, or by person. Each answers a different set of questions.
The first way is a spreadsheet you rebuild every week. Export contacts and deals from HubSpot, the campaign activity report from Mailchimp and the list of scheduled events from Calendly. Clean the email column in each, then use a lookup to pull matching rows together into one sheet: one row per person, one column per stage, with dates. Put last week’s GA4 traffic totals in a separate tab. It is slow and it breaks when a column is renamed, but it costs nothing and it teaches you exactly how your data fits together.
The second way is a BI tool. Looker Studio, Google’s free dashboard tool, connects natively to Google sources such as GA4. HubSpot, Mailchimp and Calendly usually come in through partner connectors, many of them paid. The result is a single page where traffic, email performance, bookings and deals sit next to each other and refresh on their own. What most connectors deliver is totals by day or by campaign, not one row per person, so the charts sit beside each other rather than joined. You see that bookings rose in the week the newsletter went out. You cannot see whether the people who booked were the people who clicked.
The third way is a system that stitches every event to a person. It pulls records from each tool, joins them on the email address, orders them by time and keeps doing it as new data arrives. Customer data platforms and data warehouses can be set up to do this, with engineering time. Some services do it for you. This is the only approach that answers person-level questions routinely: what did the people who booked have in common, what did they touch first, how long did they take.
| Approach | Effort | What it can answer | What it cannot |
|---|---|---|---|
| Weekly spreadsheet | A few hours every week by hand; more the first time | Who moved from click to booking to deal, for a small list of people | Anything in real time; anything at volume; it depends on one person doing it every week |
| BI tool with connectors (e.g. Looker Studio) | A day or two to set up; connector fees; fixes when a source changes | How each tool’s totals move over time, side by side, refreshed automatically | Whether the same people appear across stages; first touch per person; time from click to booking |
| System that stitches by person | Engineering time to build and maintain, or a paid service | Person-level journeys, first touch, time to book, what converters had in common | Anonymous visitors before they give an email; causes, since the joins show correlation only |
What do you lose, whichever way you choose?
The anonymous visit. The stitched funnel starts at the first moment someone tells you who they are.
Most of the people who visit your site never give you an email. They read, they leave, some of them come back. Google Analytics can count them, but by design it cannot name them, so none of the three approaches can join them to a person. Your joined funnel will begin at the form fill, the subscription or the booking, not at the first visit.
There are partial bridges. HubSpot’s tracking code, once a visitor becomes a contact, can attach the original source of their earliest tracked visit to their record. Campaign links with UTM parameters survive into form submissions if your forms capture them. A booking form can simply ask how the person heard about you. Each of these recovers part of the early journey for people who later identify themselves. None of them recovers anything for people who never do.
The honest way to live with this is to keep two views and not pretend they are one. Traffic, from analytics, as a count of visits by source. People, from the joined tools, as a journey from first known touch to deal. Put them on the same page if you like. Do not draw a line from one to the other that the data cannot support.
Where should a small team start?
With the spreadsheet, once, even if you plan to automate.
Build the join by hand for one month of data before you pay for anything. You will find the duplicate addresses, the stages nobody defined, the booking form that does not ask the question you need. Those problems follow you into every tool you buy, so it is cheaper to meet them in a spreadsheet.
In twelve answers we collected on 29 September 2026 (ChatGPT, Claude and Gemini, with and without web search), HubSpot, Mailchimp and Looker Studio were each named in all twelve, Zapier in eight and Supermetrics in seven. The common advice was to make HubSpot the home for known people and put analytics traffic beside it on a dashboard. That is a sensible start. It is the second approach in the table, and it is worth knowing where it stops.
Move to a dashboard when the weekly rebuild starts to crowd out the work it was meant to inform. Move to person-level stitching when the questions you actually ask are about people: who converted, what they touched first, what the ones who did not convert had in common. When you get there, keep writing the count of people next to every rate.
One place for the whole funnel does not mean one tool. It means one key, one set of definitions, and an honest line where the anonymous part ends.
Questions people ask next
Can I connect Google Analytics to HubSpot contacts by email?
Not directly. Google Analytics is designed not to hold email addresses, and its terms forbid sending them. HubSpot’s own tracking code can record the source of a contact’s earliest tracked visit once they become a contact, which is the usual bridge.
Why do HubSpot and Google Analytics show different lead numbers?
They count different things. GA4 counts events and sessions by device and credits them with its own attribution rules; HubSpot counts contacts and dates them by when the record was created. Decide which tool owns each stage and stick to it.
Is Looker Studio enough to see my whole funnel?
It is enough to see every tool’s totals side by side and updated automatically. Most connectors deliver totals by day or campaign rather than one row per person, so it cannot show whether the same people moved from click to booking to deal.
What is the cheapest way to join Mailchimp and Calendly data?
Export both, lowercase and trim the email column, and match them in a spreadsheet with a lookup. It costs only time, and doing it once by hand shows you the data problems any tool would inherit.
Can Throughline join my CRM, Mailchimp, Calendly and analytics for me?
Yes. It reads those tools every morning, joins the people in them on the email address, and reports findings with the join, the window and the sample behind each one. Anonymous visits stay a separate count.