The Problem With Hint Health
Our client is a healthcare provider – part of an industry where most clinics rely on Hint Health to manage patient records, track memberships, and handle routine billing.
And for day-to-day operations, Hint works well. It keeps patient data organized, makes sure membership is active, and supports clinical workflows. But it doesn’t help teams identify revenue opportunities
There’s no simple way to see which patients are driving the most memberships, which invoices are overdue, or which patients might be ready for renewal or upsell. The data exists, but it’s locked inside a system that isn’t designed for CRM-style visibility or reporting.
So, to get some insights, they turned to HubSpot and us (OneMetric).
At first, the task seemed simple: connect Hint and HubSpot. But it quickly became clear this wasn’t just a standard integration.
Why This Wasn’t a Standard Integration
1. Hint’s Relationship Logic Didn’t Fit HubSpot
In Hint, everything starts with a membership. One person, the payer, pays for it. That membership can cover multiple patients from the same family. All of those patients except one are beneficiaries. They don’t pay, but they receive care under the same plan.
This structure works well inside Hint, but it doesn’t translate easily to HubSpot.
HubSpot doesn’t understand family-based memberships. It doesn’t associate one contact as the payer and others as covered members. And it doesn’t link invoices to a shared membership. Instead, it expects every record to belong to a single person in a company.
To make this work, we had to figure out:
- Who the payer is
- Who the beneficiaries are
- How to link everyone back to the same membership
- And how to sync invoices without duplication or data loss
We couldn’t just sync data through APIs. We had to build a relationship model that mirrored healthcare logic inside a general-purpose CRM and made sure it all updated automatically without breaking anything along the way.
2. QuickBooks Disconnected the Financial Trail
While Hint managed patients and memberships, all invoice data lived in QuickBooks. That meant payments, due amounts, and invoice statuses weren’t visibly connected to the patient or membership records.
There was no easy way to know who had paid, who hadn’t, or what revenue was outstanding. So, we had to bring that data into HubSpot as well. And HubSpot doesn’t allow invoice creation through APIs.
How We Solved It
To make HubSpot work for the way Hint handles patients, memberships, and invoices, we rebuilt the system logic from scratch. Everything from the data structure to the sync workflows had to reflect healthcare relationships, not traditional B2B sales pipelines.
Here’s how we did it, using an example to show how the pieces fit together:
1. Structuring Families, Payers, and Beneficiaries Inside HubSpot
Let’s say a membership covers four people:
- John is the one paying for the plan.
- Jane, Mike, and Sara are added as beneficiaries under the same membership.
In Hint, this is one membership with a payer and multiple covered patients.
To reflect this in HubSpot, we not only mapped standard objects but also renamed them to match the healthcare model:
Hint Concept |
HubSpot Object (Renamed) |
Description |
Patient |
Contact → Renamed to “Patient” |
Represents every individual receiving care |
Membership |
Company → Renamed to “Group” |
Represents the family or household membership |
Payer |
Primary Contact of Membership |
The person responsible for billing |
Beneficiaries |
Associated Patients |
Other individuals covered under the same plan |
Here’s how this looked in practice:
- John, Jane, Mike, and Sara were all stored as Patients (Contacts).
- The Groups (Company object) represented the shared plan/membership.
- John was assigned as the Primary Contact (payer).
- Jane, Mike, and Sara were automatically associated as covered patients in the same group (Company object).
We also added custom properties at both the Patient and Membership levels.
For Patients(Contact):
- Membership Status (Active, Pending, Cancelled)
- Membership Start and Renewal Date
- Assigned Healthcare Provider
- Associated Payer
- Preferred Language
At a Group/Membership level:
- Membership Type (Individual, Family)
- Membership Plan Name
- Membership Cost
- Billing Frequency
- Number of Covered Members
- Renewal Cycle
And above is just a sneak peek, just see the level of mapping:
This structure made it possible to:
- Tracking full households under a single membership
- Automatically identifying who pays and who’s covered
- Triggering role-based workflows and overdue reminders
By renaming HubSpot’s core objects and layering in healthcare logic, we created a CRM experience that felt native to how the client actually worked while preserving the flexibility of the platform.
2. Automating Everything with Firebase
Once the data structure was in place, we needed a way to keep it all in sync. For that, we used Firebase Cloud Functions to power real-time automation.
Every time something changed in Hint like a new patient added, a membership updated, or a status changed, Hint triggered a webhook. Firebase captured that webhook and handled everything downstream.
Here’s what happened behind the scenes:
- Pulled the updated data from Hint
- Transformed it to match HubSpot’s structure
- Checked for existing records
- Created or updated Patients, group, and associations
Example:
If John adds a newborn, Emma, to the plan:
- Hint sends a patient
- Firebase fetches Emma’s data
- Creates her as a new Contact(patient) in HubSpot
- Associates her with the same Company (group)
This layer made sure:
- There are no duplicate records
- Every patient was linked to the correct payer
- Groups always reflected the full household
- The CRM remained clean, usable, and trustworthy without anyone doing manual updates
3. Syncing Invoices Despite API Gaps in HubSpot
Invoice was earlier handled by QuickBooks, but data was generated and managed inside Hint. Shifting this into HubSpot came with its own challenge: HubSpot’s public API didn’t originally support invoice creation.
Midway through the project, HubSpot released a beta version of its Invoice API. It allowed read and write, but still didn’t support updates.
Here’s how we made it work:
- When an invoice was created in Hint, Firebase created a new invoice object in HubSpot using the beta API
- The invoice was linked to the Group and the Primary patient (payer)
- If the status of the invoice changed (e.g., from Pending to Paid), Firebase created a new invoice entry instead of modifying the existing one(with same invoice ID) — staying within API limitations while still keeping history
Each invoice included:
- Invoice ID from Hint
- Invoice status (Pending, Paid, Overdue)
- Invoice date and due date
- Amount billed and amount paid
- Autopay flag and payer contact information
If an invoice became overdue, Firebase also triggered a follow-up task in HubSpot, giving the finance or operations team an actionable reminder.
This gave the client full visibility into payment behavior and status inside HubSpot without needing to check Hint manually.
The Impact
With the integration live, the team no longer had to guess who was paying, who was covered, or what was overdue. Everything from patient profiles to payment status now lives in one connected system.
Here’s what changed:
- 100% visibility into patients, memberships, and invoices — all inside HubSpot
- 20+ hours saved every month on manual reconciliation and data entry
- 3 critical Hint objects (Patient, Membership, Invoice) now fully synced and automated
The front desk no longer chases invoice status. Operations don’t ask “who’s in this membership?” Finance doesn’t cross-check with Hint for overdue payments.
They log into HubSpot, and it’s all there. Real-time, accurate, and actionable.