Integrations
Send attribution data to Attio
Attio has no marketing reporting of its own, so put the attribution on the person record: create the LJ attribute set once, then let LeadJourney keep it filled with first-touch and last-touch data.
Attio is a CRM, not a marketing suite – there's no campaign report waiting for your ad data. So the way to answer “which campaign brought this person in?” inside Attio is to put the answer on the person record, as attributes your team can see, filter and group by.
LeadJourney fills those attributes for you. The one thing it can't do is create them, so that's your part – and it's a one-time job.
Why you create the attributes by hand
LeadJourney asks Attio for read-only access to your object configuration. Creating an attribute needs write access to it, so the integration deliberately can't reshape your data model – it only writes values into attributes that already exist.
(In HubSpot the same field set is created automatically, as the LeadJourney Properties group. Attio has no equivalent, which is why this article exists.)
Before you start
- Attio is connected – see Connect Attio.
- Full access to the People object in Attio. Admins can always create attributes; members need full access to the object.
- Tracking is live – see Install the tracking script.
Connected Attio a while ago? Re-authorize once
Writing records needs a permission that was added to the Attio app later. A workspace that connected before then can read fine but can't write, and destinations fail. Open the Attio integration and click Re-authorize once – your triggers and settings are kept.
Step by step
Create the attributes on the Person object
In Attio, open any People table view, click the ⋮ icon in the top right and choose Manage attributes, then Create attribute. (The long way round: your workspace name → Account settings → Objects → the object → the Attributes tab → Create attribute.)
Give each attribute the name from the table below and pick its type. Everything is Text except the two dates and the touchpoint count.
| Attio attribute | Type | LeadJourney value |
|---|---|---|
| LeadJourney Click ID | Text | Click ID |
| LJ First Channel | Text | First source |
| LJ Last Channel | Text | Last source |
| LJ First Campaign | Text | First campaign name |
| LJ Last Campaign | Text | Last campaign name |
| LJ First Ad | Text | First ad name |
| LJ Last Ad | Text | Last ad name |
| LJ First Keyword | Text | First keyword text |
| LJ Last Keyword | Text | Last keyword text |
| LJ First Landing Page | Text | First click entry page |
| LJ Last Landing Page | Text | Last click entry page |
| LJ First Full URL | Text | First click entry full URL |
| LJ Last Full URL | Text | Last click entry full URL |
| LJ First Referrer | Text | First click referrer domain |
| LJ Last Referrer | Text | Last click referrer domain |
| LJ First Country | Text | First click country |
| LJ Last Country | Text | Last click country |
| LJ First City | Text | First click city |
| LJ Last City | Text | Last click city |
| LJ First Device | Text | First click device type |
| LJ Last Device | Text | Last click device type |
| LJ First OS | Text | First click OS |
| LJ Last OS | Text | Last click OS |
| LJ First Browser | Text | First click browser |
| LJ Last Browser | Text | Last click browser |
| LJ First Click Date | Date and timestamp | First click time |
| LJ Last Click Date | Date and timestamp | Last click time |
| LJ Last Ad Click ID | Text | Ref ID (click id) |
| LJ Total Touchpoints | Number | Touchpoints |
URLs go in a Text attribute
Attio has no URL type. Landing pages, full URLs and referrers are all Text – Attio's own docs say Text attributes are what URLs go in.
Don't rename the slug afterwards
Attio derives each attribute's slug – its API identifier – from the name you type here, and the slug is what LeadJourney writes into. You can change a slug later in Attio (⋮ → Change slug), but doing so breaks the mapping until you re-point it in LeadJourney. Get the names right the first time instead.
Add the destination
In LeadJourney, open Settings → Apps → Attio, scroll to Send to Attio and click + Add destination:
- Create this Attio record: Person.
- When this happens: New Lead.
- Write mode: Upsert – update the person if they already exist, otherwise create them.
- Matching attribute: Email addresses.
Why match on email and not on the click ID
An Upsert finds the existing record through a unique attribute, and Attio doesn't allow custom unique attributes on the standard People object – your LeadJourney Click ID attribute can hold the value, but it can't be the matching key. Email addresses is the one that works. It's also the identifier LeadJourney is most likely to have.
Map the fields
Under Map fields, add one row per attribute: pick the Attio column on the left and the LeadJourney value on the right, following the table in step 1.
The matching attribute fills its own row automatically, so Email addresses ← Email is already there. Find latest data shows real example values from your workspace, which is the quickest way to confirm a mapping does what you expect before you save.
Click Create destination when you're done.
Start small, then extend
You don't have to map all 29 at once. Email, click ID, first and last channel, and first and last campaign already answer most questions. Open the destination again later and add the rest with + Add field.
Check the first deliveries
Each destination row has Pause / Resume, Edit and Delete. Below them, Sync history lists every delivery with its Status – Success, Failed or Skipped – plus the event, object, mode, time and a detail line, and a Retry button for the ones that didn't land.
Convert a test lead on your own site and watch it appear.
How the values behave over time
Three rules are worth knowing before your team starts trusting these fields:
- An empty value never overwrites a filled one. If LeadJourney has nothing for an attribute on a given push, that attribute is left alone rather than being cleared.
- First-touch fields stay stable. LeadJourney re-sends the same first-touch values every
time, so
LJ First Campaignkeeps naming the campaign that actually started the relationship. - Last-touch fields move.
LJ Last Campaignand its siblings update as the person comes back through new ads – which is the point of having both halves.
What LeadJourney can't fill today
Four fields from the HubSpot property set have no source field on the New Lead event, so there's nothing to map them to in Attio. Skip them unless you want the two CRMs to look identical:
| Field | Why |
|---|---|
| LJ First Ad Click ID | Only the last click's platform click ID (gclid, fbclid, …) travels with a lead, as Ref ID. There's no first-touch equivalent. |
| LJ First Placement | Placement is carried by the New Click event, not the lead. |
| LJ Last Placement | Same reason. |
| LJ Lead Journey URL | LeadJourney builds this deep link when it provisions HubSpot's own properties; it isn't part of the outbound field catalog. |
Troubleshooting
Every delivery fails
Almost always the missing write permission. Open the Attio integration and click Re-authorize once, then Retry a failed delivery from Sync history.
An attribute stays empty in Attio
Either the attribute isn't mapped in the destination, or LeadJourney genuinely has no value for that lead – a lead with one recorded click has no distinct first and last touch to report, and empty values are skipped rather than written. Use Find latest data to see what a real lead carries.
A lead doesn't reach Attio at all
Upsert needs the matching value. A lead with no email address can't be matched to a person record – the delivery shows up in Sync history with the reason. Check Missing leads if the lead never appeared in LeadJourney either.
The mapping broke after a change in Attio
Renaming an attribute is safe; changing its slug is not, because the slug is what LeadJourney writes into. Re-open the destination and re-pick the column.
Common questions
Related articles
Connect Attio
Connect your Attio workspace in minutes, with no API keys and no webhooks to wire by hand. Authorize once, map CRM record events like new people, new deals, new companies and stage changes onto your conversions, and push LeadJourney data back into Attio.
Connect Close
Connect your Close organization in minutes, with no API keys and no webhooks to wire by hand. Authorize once, map CRM events like new leads, new contacts, new opportunities and closed-won deals onto your conversions, and push LeadJourney data back into Close.