Event signal:page.visited| Destination:HubSpot| Use case:CRM + SMS Purchase Targeting| Typical setup:~15 minutes
Workflow outcome
The workflow begins with page.visited from a high-intent commercial page and ends with HubSpot holding the offer, revisit, and phone-ready context the downstream follow-up path needs.
That is especially useful for coaching platforms, online program sellers, and creator businesses where one well-timed follow-up can materially change conversion. The event handoff becomes immediate instead of buried in manual review or ad hoc scripts.
Why teams care
High-ticket and coaching funnels often surface intent through repeated behavior before a lead ever asks for help. Several visits to the same sales page usually mean something different from one casual glance.
That signal only matters if it reaches the CRM while it is still actionable. Updating the contact after a delayed export or spreadsheet review is usually too late.
Once teams care about repeated visit thresholds, phone availability, and proving that the CRM handoff really landed, the one-off script version of this workflow stops being enough.
What it depends on
These pages stay focused on the workflow outcome, but the setup still needs the right workspace, destination connection, and event path underneath.
You need a workspace and publishable key so your product can emit page.visited.
Authorize HubSpot in Meshes and confirm the intent properties or high-intent lists you plan to use already exist.
Read moreYour product should emit page.visited with email, phone, plan_viewed, and visit_count when the repeated behavior becomes actionable.
Prepare the HubSpot workflow that should react when the contact is marked high intent and has the context needed for the next outreach step.
The source event
For HubSpot, the payload needs to explain who showed purchase intent, which offer they were looking at, and why this visit should count as a meaningful signal rather than routine browsing.
Event payload
page.visited{
"user_id": "usr_9914",
"email": "jordan@elevatecoach.com",
"phone": "+13125551212",
"page_url": "/offers/growth-coaching",
"visit_count": 4,
"plan_viewed": "growth-coaching"
}What matters most
HubSpot uses email as the stable contact identifier for the intent update.
phone
Makes the contact eligible for the phone-aware follow-up path your team has already configured.
page_url
Shows exactly which pricing, checkout, or sales surface created the intent signal.
visit_count
Separates meaningful repeat intent from one-off browsing behavior.
plan_viewed
Adds offer-level context so follow-up reflects what the lead actually explored.
Field mapping view
| Event field | Destination target | Why it matters |
|---|---|---|
| HubSpot contact email | Identifies which contact record should receive the intent update. | |
| phone | HubSpot phone property | Keeps the contact ready for the downstream follow-up path that depends on phone context. |
| page_url | High-intent page property or audit field | Makes the commercial surface visible inside the CRM without another lookup. |
| visit_count | Intent score or revisit-band property | Explains why this visit crossed the threshold for a sales or lifecycle response. |
| plan_viewed | Offer-interest property or list logic | Lets downstream HubSpot workflows branch based on the program or offer the lead explored. |
The destination connection
In your Meshes workspace, connect HubSpot and confirm the intent properties and any high-intent lists already exist. That gives you a clean CRM model to target when you create the Meshes rules for repeated pricing, checkout, or sales-page behavior.
Where Meshes matters
Most teams do not need another destination. They need the destination to stay in sync without embedding its delivery quirks, retries, and mapping logic into the product code path.
In Meshes, reserve this page.visited route for meaningful repeat behavior on pricing, checkout, or sales pages. Create HubSpot property-update rules for the intent fields you care about, and add a high-intent list rule when your HubSpot workflow uses list membership as the handoff into follow-up.
A sample event
This is the part teams like: the source event stays readable and product-shaped while Meshes owns the destination-facing complexity.
TypeScript example
import MeshesEventsClient from '@mesheshq/events';
const events = new MeshesEventsClient(process.env.WORKSPACE_PUBLISHABLE_KEY!);
await events.emit({
event: 'page.visited',
resource: 'sales_page',
resource_id: 'growth-coaching',
payload: {
user_id: 'usr_9914',
email: 'jordan@elevatecoach.com',
phone: '+13125551212',
page_url: '/offers/growth-coaching',
visit_count: 4,
plan_viewed: 'growth-coaching',
},
});Destination outcome
Use Send Test Event in Meshes or emit page.visited when the repeat-visit threshold is crossed, then inspect the HubSpot contact. The intent fields or list state should update immediately so the HubSpot workflow that owns high-intent follow-up can decide what happens next.
Operational visibility
The difference between a nice demo and a usable product workflow is whether you can see what happened when the destination is slow, misconfigured, or unavailable.
In Meshes
page.visited event appears in Meshes and the HubSpot rule is matched.Why teams buy Meshes
What's next
Use Case
See the broader page.visited purchase-intent pattern across HubSpot, ActiveCampaign, and team alerts.
Integration
Review the HubSpot connection flow, supported actions, and event result details.
Open linkDocs
Use the Meshes events API or SDK to emit page.visited from your product.
Compare
Compare real-time purchase-intent routing with maintaining custom page scoring, retries, and CRM update glue yourself.
Open linkGuide
Route repeated page intent into Intercom tags instead of CRM properties when in-app follow-up is the goal.
Open linkGuide
See another HubSpot guide where behavioral events update CRM state from real product progress.
Open linkpage.visited when the behavior becomes meaningful and let Meshes handle the HubSpot handoff, retries, and delivery trail your follow-up path depends on.