Integrations
Connect HubSpot
Connect your HubSpot account in minutes, with no API keys and no webhooks to wire by hand. Authorize once, map CRM events like new contacts, form submissions and deal-stage changes onto your conversions, and push LeadJourney data back into HubSpot.
Connecting HubSpot turns CRM events – new contacts, new deals, lifecycle and deal-stage changes – into LeadJourney conversions, automatically attributed to the campaign, ad set and ad that earned them. You authorize HubSpot once (no keys to copy, no webhook URLs to paste by hand), then map each HubSpot event onto one of your conversion types. Mapped events flow through the same postback pipeline as your offline conversions, so they automatically pick up every ad postback you've already configured. The same screen also lets you send LeadJourney clicks, leads and conversions back into HubSpot as records.
Before you start
Have these ready so the connection works end to end:
- An active LeadJourney workspace and a HubSpot account you can sign in to.
- Tracking is live – clicks have to be recorded first so CRM records can be matched back to a campaign. See Install the tracking script.
- A way to capture the click ID on your HubSpot records – typically a hidden form field that stores LeadJourney's click ID on the contact (see the callout below).
- At least one conversion type to map onto (e.g.
WonClient). Set these up first in the Events Manager.
Where to find it
Open Settings → Apps, or go to
app.leadjourney.io/settings?slug=apps. Click
the HubSpot card to open the integration (or use ?slug=apps&app=hubspot). While you're
not connected you'll see a “Connect your HubSpot account” card; once connected, the same
screen shows your account and portal, the LeadJourney Properties setting, your triggers
and the Send to HubSpot panel.
Step by step
Authorize LeadJourney from HubSpot
On the Connect your HubSpot account card, click Connect with HubSpot. You'll be redirected to HubSpot to sign in and approve LeadJourney's access, and to choose which HubSpot account to connect.
The grant gives read access to your contacts and deals, plus permission to subscribe to CRM object events (so LeadJourney can pick up creations and property changes) – there are no keys to copy and no webhook URLs to paste. After you approve, HubSpot sends you back and you'll see a “HubSpot connected” confirmation.
Syncing starts when you connect
LeadJourney tracks new HubSpot events from the moment you connect. Data from before the connection is not imported.
Check the connection details
Once connected, the header shows a Live pill (or Needs reconnect if something breaks), plus Re-authorize and Disconnect buttons. Below it you'll see the Connection status, your Account with its Portal ID, Active triggers (active out of total) and the Connected since date.
Add a trigger
In the Triggers panel – “Each trigger maps a HubSpot event to one of your conversions.” – click Add trigger. In the New HubSpot trigger dialog:
- App: HubSpot (already selected).
- Trigger: choose the HubSpot event from the card grid, e.g. a created record, a property change or a form submission. Each card shows a short description, and Search triggers… narrows the list.
- Form (form submission triggers only): pick the HubSpot form to watch. A form that isn't listed (e.g. a meetings booking form) can be used by pasting its form ID into the search and clicking Use this form ID.
- Property (property-change triggers only): pick which property to watch, e.g. Lifecycle stage, Lead status or Deal stage.
- Target value (optional): leave blank to fire on any change, or pin it to a value. For Deal stage this becomes a dropdown of your pipeline stages (with Any stage change as the default); Meeting outcome offers Scheduled, Completed, Rescheduled, No-show and Canceled.
- LeadJourney Event: pick the conversion type this HubSpot event should record, e.g.
WonClient. (No options? Create one under Settings → Events first.)
Click Continue.
Deal stages come from your pipelines
When you watch the Deal stage property, LeadJourney loads your HubSpot pipelines and lists every stage as Pipeline · Stage, so you can fire a conversion exactly when a deal reaches, say, Sales Pipeline · Closed won.
Receive data and confirm the mapping
The dialog opens a three-tab flow:
- Receive Data: click Find latest data to load recent records for the trigger you picked (for a form trigger, recent submissions of that form). If a target value is set, only records currently in that state are shown. If nothing appears, create or update a record in HubSpot and check again, then select a record and click Continue with selected record.
- Configure Mapping: map the HubSpot record onto LeadJourney columns. New triggers start
with Email, Full name, Phone, click_id, Revenue and Cash collected,
pre-filled where LeadJourney finds a likely property. Select several properties to join them
with a space, or pick
static:for a fixed value. Add custom field brings back a removed column or adds one of your workspace's custom fields, and Create new field creates one (type Text, Number or Currency). On Deal triggers you can also pull values from the associated contact (contact.…). Mappingclick_idis recommended but optional (see the callout below). - Filtering (optional): click Add Another Filter and set a path, an operator (equals, not equals, contains, greater than, exists and more) and a value. Each filter is tested against the record you selected and shows PASS or FAIL, with a summary like “Your trigger would have fired”.
Save & Continue takes you from the mapping to the filters. Click Activate to finish (Save trigger when editing), or Save and continue later to keep your progress.
How HubSpot records link to the right campaign
HubSpot doesn't capture LeadJourney's click ID on its own – you store it on the record and
map it here. The usual setup is a hidden field on your HubSpot form that holds the
visitor's click_id (LeadJourney's tracking script fills it in), written to a contact
property. On the Configure Mapping tab, point click_id at that property and every
contact or deal arrives already tied to the click – and therefore the campaign, ad set and
ad – that earned it. On a form submission trigger, the hidden field shows up as Click ID
(lj_click_id) when submissions carry it. No click ID? LeadJourney falls back to matching
on email or phone.
Managing your triggers
Each trigger appears as a row (e.g. Deal · dealstage changed → conversion type, Meeting booked → conversion type or Form · (form name) submitted → conversion type) with an Active / Paused pill and a summary of how many fields and filters it uses.
- Pause / Resume: use the toggle to stop a trigger temporarily without deleting it.
- Edit: change the trigger, mapping, filters or target conversion. The URL gets a
trigger_idparameter, so you can share a link that opens that trigger directly. - Delete: type
deleteand click Delete trigger. The mapping and filters can't be recovered; other triggers keep running. - Add another: use Add trigger again to map more HubSpot events (new contacts, new deals, stage changes) onto different conversions.
LeadJourney Properties in HubSpot
When connected, the LeadJourney Properties panel adds a “LeadJourney Properties” group to your HubSpot contacts and keeps first and last touchpoint attribution (channel, campaign, ad, click IDs, landing page, device and more) filled on every contact LeadJourney can match. Use the On / Off switch to pause these writes. The property group stays in place either way.
Send data back to HubSpot
The Send to HubSpot panel pushes LeadJourney clicks, conversions and leads into HubSpot as records, no Zapier needed. Click + Add destination, then:
- Create this HubSpot record: choose Contact, Deal, Company or Lead.
- When this happens: pick the LeadJourney event. For a conversion event you can narrow it with Conversion type, or leave it on Any conversion type.
- Write mode: Create always creates a new record, Update only updates an existing match and skips if none is found, Upsert updates the match if one exists, otherwise creates.
- Matching property (Update and Upsert): the HubSpot property that identifies an existing record (email is the usual choice for contacts). For deals, companies and leads in Update mode you can also pick Contact email or Contact phone to find the record via its linked contact.
- Map fields: pick a HubSpot property, then the LeadJourney value to write into it. Select several values to join them with a space, or type a fixed value and click Add. Find latest data shows real example values (you can filter by click ID or lead ID); + Add field adds another row. In Update mode, only the properties you map are changed.
Click Create destination. If the dialog warns that your connection doesn't grant write access for that record type, reconnect HubSpot (Re-authorize in the header) to grant it. Each destination row has Pause / Resume, Edit and Delete (deleting stops new records; existing HubSpot records are not affected). The Sync history table lists every delivery with its Status (Success, Failed or Skipped), event, object, mode, time and detail, and a Retry button for failed or skipped ones.
Reconnecting
If HubSpot revokes the app, the connection is lost, or HubSpot is unreachable, the header flips to Needs reconnect and a banner explains why (e.g. “HubSpot revoked your app” or “HubSpot is unreachable”). Click Reconnect to re-run the authorization. To refresh granted permissions while everything still works, use Re-authorize in the header. In both cases your triggers and settings are kept.
Disconnecting
To remove HubSpot, click Disconnect in the header, type disconnect and confirm with
Disconnect HubSpot. This is deliberate because it's destructive:
Disconnect deletes your triggers
Disconnecting permanently removes the HubSpot connection, deletes every trigger and revokes the OAuth grant. HubSpot events stop flowing into your conversions immediately. You can reconnect later, but your trigger configuration won't be restored – you'll set them up again.
Troubleshooting
No records when you click “Find latest data”?
Nothing has happened in HubSpot for that trigger yet, or no record is currently at the target value you set. Create or update a matching record (a new contact, a new deal, a stage change or a form submission), then click Find latest data again. The matching record should appear so you can finish the mapping.
Records come in but aren't attributed to a campaign?
LeadJourney needs to know which click the record belongs to. Check that (1) the tracking script is installed and recording clicks, (2) your HubSpot form stores the click ID on the record and the trigger maps click_id to that property, and (3) the trigger is Active. As a fallback, email or phone can be used to match.
Header shows “Needs reconnect”?
HubSpot has revoked the grant, the connection is gone, or the API is unreachable. Click Reconnect in the banner to re-authorize. Your triggers are preserved.
A destination shows Failed or Skipped deliveries?
Open Sync history and read the Detail column. Update skips when no match is found, and a missing write permission makes HubSpot reject the push (re-authorize to grant it). Fix the destination, then click Retry.
Common questions
Related articles
Send events from a custom CRM
A developer reference for the Conversion API. Fire a webhook (postback) from your own CRM or backend whenever a pipeline stage changes, and LeadJourney matches it back to the ad click. Includes the endpoint, authentication, the full payload reference and copy-ready example requests in cURL, Node.js, PHP and Python.
Connect Salesforce
Connect your Salesforce organization with one authorization, no API keys to copy. Map Salesforce record events like new leads, new opportunities and stage changes onto your conversions, and push LeadJourney data back into Salesforce as records.