The complaint is always phrased the same way: "I set up HubSpot and all my contacts came in automatically. My colleagues did exactly the same thing and nothing synced." It looks like a bug. It is not.
HubSpot's Microsoft 365 integration is really two separate pieces of plumbing that people assume are one. Connecting an inbox handles email. Syncing an address book is a different integration that has to be enabled at portal level and installed by each user.
Here is why the admin's contacts appeared, why everyone else's did not, and how to fix it across a whole team without asking anyone to export a CSV.
Why the admin's contacts appeared and nobody else's did
When the first person sets up a HubSpot portal, the onboarding flow typically offers to bring in contacts from the connected mail account. Accepting that runs a one-off import — which is why the founder or admin sees hundreds of contacts, including people they last emailed years ago, all owned by them.
Every user added afterwards skips that onboarding path. They get an invite, they accept, they connect their inbox because that is what the setup checklist tells them to do — and no import ever runs.
So the difference between the admin and everyone else is not permissions, licensing or mailbox configuration. It is that one account went through an import and the others did not.
Connecting an inbox and syncing contacts are different features
Settings → General → Email → Connect personal email links your mailbox so HubSpot can log, track and send email from within the CRM. It works forward in time only.
Contact synchronisation comes from the Outlook Contacts integration (or Google Contacts on Workspace), installed from the App Marketplace. That is the piece that reads the address book and creates or updates HubSpot contact records.
Both can be connected to the same Microsoft 365 account and neither implies the other. A user can have perfect email logging and zero synced contacts, which is exactly the state most teams end up in.
| Feature | Connect personal email | Outlook Contacts app |
|---|---|---|
| Logs sent and received email to records | Yes | No |
| Imports existing address book | No | Yes |
| Keeps contact details updated over time | No | Yes, two-way where enabled |
| Enabled by | Each user | Admin enables, each user installs |
| Where to find it | Settings → General → Email | App Marketplace → Outlook Contacts |
The fix, in order
First, an admin checks the integration at portal level. If the Outlook Contacts app is disabled — or was only ever authorised for one account — nothing an individual user does will work. Enable it for all the relevant users.
Second, each user installs and completes the setup from their own HubSpot account, authorising their own Microsoft 365 account when prompted. This step cannot be done on someone else's behalf; it is a personal OAuth grant.
Third, confirm the sync direction and any filters. You usually do not want every personal contact in the address book flowing into a shared CRM, so restrict to a contacts folder or category where possible.
Fourth, verify. Ask two users from different roles to check for a known contact within an hour of setup. Initial syncs are not instant, but they are not multi-day either.
When a CSV import is still the right answer
Sync is not always the correct tool. If the address book is messy — years of one-off recipients, personal contacts, dead addresses — importing it wholesale pollutes a CRM that a whole company now depends on.
In those cases a filtered CSV import is better: export, clean, deduplicate, map to the properties you actually use, then import with the correct owner assigned. It is a one-off job rather than an ongoing sync, and it gives you a chance to set ownership deliberately.
Whichever route you take, deduplicate before you scale. Thirty people syncing overlapping address books into one portal creates duplicate contacts fast, and duplicates are far cheaper to prevent than to merge.
| Situation | Best approach |
|---|---|
| Clean, well-maintained business address books | Outlook Contacts sync per user |
| Mixed personal and business contacts | Filtered folder sync, or cleaned CSV import |
| Legacy data from another CRM | CSV import with property mapping |
| Need ongoing updates to contact details | Sync — an import is a snapshot |
| Strict control over what enters the CRM | CSV import, reviewed before upload |
The related question: internal emails about a customer
Once contacts are in place, the next question is almost always about internal threads. If two colleagues discuss a customer and the customer is not on the email, will HubSpot file it under that customer?
No. Association is based on the participants of the email, not on names mentioned in the body. HubSpot is not reading the message and inferring who it is about.
The practical workaround is manual association from the logged activity to the relevant company record. Agree the convention as a team during training — it is a two-second action that keeps internal decisions visible on the customer timeline.
A rollout checklist that avoids the whole problem
Enable the Outlook Contacts integration at portal level before you send a single user invite. Doing it afterwards means chasing people twice.
Send one instruction, not three: accept the invite, connect your inbox, install the contacts app. All in the same sitting, ideally in one group session.
Decide ownership rules first. When two people have the same contact in their address book, whoever syncs first becomes the owner unless you set a rule — and reassigning ownership across hundreds of records later is nobody's favourite afternoon.
If any of this is stalling a rollout, it is usually a 30-minute fix. It is included in our HubSpot CRM setup and automation work and covered under ongoing HubSpot support for portals we maintain.
