The HubSpot CallRail integration creates or matches a HubSpot contact by phone number for every tracked call, logs the call on that contact's timeline with the recording link and duration, and can write the CallRail source (Google Ads, organic, Business Profile, a print campaign) into a contact property. From there, HubSpot workflows can set lifecycle stage, assign an owner and notify a rep, and HubSpot's reporting can answer which sources produce customers rather than phone activity. This piece covers what the integration does, why phone number formatting decides whether it works, the setup path, the workflows we build on duration and tags, how to push lifecycle changes back to Google Ads, what missed-call text back requires, and the failures we see most.
The HubSpot CallRail integration is the connector CallRail maintains inside its Integrations menu that pushes call, text and form activity into HubSpot as contacts and timeline engagements. It runs mostly one way: CallRail writes into HubSpot, and HubSpot is where your team works the lead.
What the native integration does.
For each tracked call, CallRail sends the caller's number, the tracking number dialed, the source and campaign, the landing page, the duration, whether the call was answered, the recording URL and any tags or lead status. HubSpot receives that as a call engagement on the matched contact, visible on the timeline alongside emails, meetings and notes. Form submissions captured by CallRail's form tracking can be sent the same way, and text conversations can be logged as well.
If no contact matches the caller's number, the integration creates one with the number as the only identifier. It has no name or email until a rep fills it in, which is why the follow-up workflow matters: a contact that is just a phone number sits in the database forever unless someone is prompted to act on it within minutes.
For law firms and medical practices, where the first contact is almost always a call and the intake conversation is where the case or appointment is won or lost, this timeline entry is the record of intake. Recordings attached to the contact let a managing partner or practice manager review how the call went without asking anyone. We have built intake systems on this for law firms and medical practices, and the recording on the timeline is the feature that changes behavior.
Matching contacts by phone number, and why E.164 decides everything.
HubSpot matches the incoming call to a contact by comparing the caller's number with the Phone Number and Mobile Phone Number properties. If the stored number is formatted (512) 555-0134 and the call arrives as +15125550134, matching depends on normalization, which is good but not guaranteed across every format, extension and imported list. The reliable practice is to store every number in E.164 (a plus sign, country code, then the number with no spaces or punctuation) and to keep one number per contact record.
Two habits break this: reps typing numbers by hand in whatever format they like, and CSV imports from old systems that carry dashes, extensions and the occasional letter. Fix both with a workflow that formats the phone property on create or update, or with the phone number formatting option in the property settings, and run a one-time cleanup on the existing database before you connect CallRail. Otherwise the integration creates a duplicate for a caller who already exists and the rep sees an empty record while the real one sits untouched.
“The integration does not fail loudly. It fails by creating a second copy of your best lead and letting the first one go quiet.”
Set up the HubSpot CallRail integration.
Workflows that act on a call within seconds.
Logging a call is bookkeeping. Acting on it is the point. The workflows we build first, in order:
- Notify the owner on any inbound call longer than a threshold (we start at 45 seconds) that has no owner or is in a Lead or Subscriber lifecycle stage, with the recording link in the notification.
- Set lifecycle stage to Marketing Qualified Lead when a call carries the CallRail tag Qualified or the lead status Good Lead, and create a task for the assigned rep due in one hour.
- Create a callback task immediately for any missed or voicemail call from a new contact, assigned round-robin, with a 15-minute due time.
- Set lifecycle stage to Sales Qualified Lead when a rep logs a meeting or an estimate, and stamp the date in a custom property so you can measure time from call to appointment.
- Enroll contacts whose only activity is one short call and no follow-up into a re-engagement sequence after three days, so nothing goes quiet without a decision.
Every trigger above uses the call duration property, the CallRail tag written to a property, or a lifecycle change, all of which exist as soon as the integration is live. None of it requires custom code. What requires discipline is the tag: someone applies Qualified in CallRail, or reps set the lead status in HubSpot, and the workflow reads whichever you choose. Pick one place and make it the rule. The response-time system around these workflows is in our speed-to-lead guide.
Closing the loop to Google Ads from HubSpot.
HubSpot's Ads tool, once the Google Ads account is connected under Marketing, then Ads, can send lifecycle stage changes back to Google Ads as offline conversions. The requirement is that the contact carries a Google click ID. HubSpot captures the GCLID automatically when the contact was created through a HubSpot form on a page with the HubSpot tracking code. A contact created by the CallRail integration from a phone call does not come with a GCLID unless CallRail passes it and you map it to a property.
In practice this means you have two paths. For form leads, HubSpot's native sync works: create the conversion events under Ads, then Events, choose the lifecycle stage that represents a real outcome (Sales Qualified Lead, Opportunity, Customer), and HubSpot sends the conversion to Google Ads with the stored click ID. For call leads, either send the qualified-call conversion directly from CallRail to Google Ads, or map the click ID CallRail captured into a HubSpot property and let the Ads tool use it. Do not do both for the same call or Google Ads will count the lead twice.
Missed-call text back, HubSpot SMS and A2P 10DLC.
The most requested automation after the integration is live is the text that goes out when a call is missed: a short message from the business number saying we saw your call and will ring back in a few minutes. It is worth doing. It is also not something the HubSpot CallRail integration does on its own.
Sending SMS from a HubSpot workflow requires the HubSpot SMS add-on, which is a paid addition, or a separate texting tool connected through a workflow webhook or through Zapier or Make. CallRail's own texting can auto-reply to a missed call from the tracking number, often the fastest route, but the conversation then lives in CallRail rather than HubSpot unless you also log texts through the integration.
Whichever tool sends, the business phone number has to be registered for A2P 10DLC (application-to-person messaging over ten-digit long codes) with the carriers through the sending platform. Registration requires the legal business name, EIN, a use case description and sample messages, and approval takes days to a few weeks. Unregistered traffic is filtered or blocked, so a missed-call text that works in testing and then stops is almost always a registration problem, not a workflow problem. Start the registration the day you decide to text.
Reporting on calls in HubSpot.
Once calls are contacts with sources and lifecycle stages, the reports almost write themselves. These are the ones we build into a standard dashboard.
| Question | Report type | Built on | What it tells you |
|---|---|---|---|
| Which sources produce calls? | Contacts by CallRail Source, count | CallRail Source property, create date | Volume by channel, including print and Business Profile |
| Which sources produce customers? | Contacts by CallRail Source, filtered to Customer lifecycle | CallRail Source, lifecycle stage | Close rate by channel |
| How fast do we follow up? | Custom report on time between first call and first completed task | Call date, task completion date | Response time by rep and by hour of day |
| Who is answering? | Calls by owner with duration and outcome | Call activity properties | Answer rate and talk time by rep |
| What did we spend per customer by channel? | Ads dashboard joined to lifecycle stage by source | Ads tool spend, lifecycle stage | Cost per customer, not cost per call |
The last row is the one that changes budgets, and it only works when the source on the contact is trustworthy, which brings us back to E.164 matching and the CallRail Source property. Reporting is the reward for the boring setup work, and it is the core of what we mean by a lead generation system on our lead systems page.
What usually goes wrong.
- Phone numbers stored in mixed formats, so the integration creates duplicate contacts for existing leads and reps work from the empty copy.
- Two numbers on one contact record (Phone and Mobile both filled with different numbers) and calls from a third number creating yet another contact.
- Spam not blocked in CallRail before the integration, so every robocall becomes a HubSpot contact and inflates contact counts and marketing contact costs.
- The CallRail source mapped onto HubSpot's Original Source property, overwriting HubSpot's own attribution and making every contact look like it came from a phone call.
- Workflows triggered on call duration alone, so long vendor calls become Marketing Qualified Leads and reps stop trusting the notifications.
- Missed-call texts built and tested before A2P 10DLC registration, which work for a day and then stop when carriers filter the unregistered number.
Each of these is visible within a week of go-live if you look at the contacts the integration created. Filter contacts where CallRail Source is known and Email is unknown, sort by create date, and read the first fifty. Duplicates, spam and format problems are all right there.
Does CallRail integrate with HubSpot?
Yes. CallRail has a native HubSpot integration under Settings, Integrations. It creates or matches contacts by phone number, logs each call as a timeline activity with the recording link and duration, can log form submissions and texts, and can write the CallRail source into a contact property. It runs mostly one way, from CallRail into HubSpot, where your team works the lead.
Can HubSpot send phone call conversions to Google Ads?
HubSpot's Ads tool can send lifecycle stage changes to Google Ads as offline conversions when the Google Ads account is connected and the contact has a Google click ID stored. Form leads captured by HubSpot carry the click ID automatically. Call leads created by CallRail need the click ID mapped into a property, or you send the qualified-call conversion from CallRail directly instead.
Why does the CallRail HubSpot integration create duplicate contacts?
Almost always because the caller's number and the stored number are in different formats, or because the contact has a different number in the Phone field than the one they called from. Store one number per contact in E.164 format, turn on phone formatting, and clean the existing database before connecting. Merge duplicates manually; the integration will not merge them.
Do I need HubSpot SMS for missed-call text back?
You need some SMS sender. HubSpot SMS is a paid add-on that lets workflows send texts. Alternatives are CallRail's own missed-call auto-reply from the tracking number or a separate texting tool triggered by a workflow. In every case the sending number must complete A2P 10DLC carrier registration first, or messages will be filtered after a short period.