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.

Create the attributes
Once, on the Person object in Attio.
Add a destination
One rule in Settings → Apps → Attio.
Map the fields
LeadJourney value → Attio attribute.
Everything after step one keeps running on its own.

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 attributeTypeLeadJourney value
LeadJourney Click IDTextClick ID
LJ First ChannelTextFirst source
LJ Last ChannelTextLast source
LJ First CampaignTextFirst campaign name
LJ Last CampaignTextLast campaign name
LJ First AdTextFirst ad name
LJ Last AdTextLast ad name
LJ First KeywordTextFirst keyword text
LJ Last KeywordTextLast keyword text
LJ First Landing PageTextFirst click entry page
LJ Last Landing PageTextLast click entry page
LJ First Full URLTextFirst click entry full URL
LJ Last Full URLTextLast click entry full URL
LJ First ReferrerTextFirst click referrer domain
LJ Last ReferrerTextLast click referrer domain
LJ First CountryTextFirst click country
LJ Last CountryTextLast click country
LJ First CityTextFirst click city
LJ Last CityTextLast click city
LJ First DeviceTextFirst click device type
LJ Last DeviceTextLast click device type
LJ First OSTextFirst click OS
LJ Last OSTextLast click OS
LJ First BrowserTextFirst click browser
LJ Last BrowserTextLast click browser
LJ First Click DateDate and timestampFirst click time
LJ Last Click DateDate and timestampLast click time
LJ Last Ad Click IDTextRef ID (click id)
LJ Total TouchpointsNumberTouchpoints

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:

  1. Create this Attio record: Person.
  2. When this happens: New Lead.
  3. Write mode: Upsert – update the person if they already exist, otherwise create them.
  4. 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 Campaign keeps naming the campaign that actually started the relationship.
  • Last-touch fields move. LJ Last Campaign and 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:

FieldWhy
LJ First Ad Click IDOnly the last click's platform click ID (gclid, fbclid, …) travels with a lead, as Ref ID. There's no first-touch equivalent.
LJ First PlacementPlacement is carried by the New Click event, not the lead.
LJ Last PlacementSame reason.
LJ Lead Journey URLLeadJourney 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