# HeyReach to Attio LinkedIn Activity Sync Source: https://neondeerdata.com/docs/integrations/heyreach-to-attio-linkedin-activity-sync/ Enroll Attio People in HeyReach campaigns or lists, and sync LinkedIn activity back to Attio. Incoming activity updates the Person and adds an entry to HeyReach Events. The app is approved by Attio but is not listed in the public App Store. [Get access to the HeyReach app](https://neondeerdata.com/tools/heyreach/#get-access) by submitting your email and Attio workspace slug to receive the install link. ## Video walkthrough [How to Sync HeyReach Activity into Attio](https://www.youtube-nocookie.com/embed/VwNKRBCgRmc) [Watch on YouTube](https://www.youtube.com/watch?v=VwNKRBCgRmc). ## Setup You need a HeyReach API key and an Attio workspace. 1. **[Request access](https://neondeerdata.com/tools/heyreach/#get-access)** Submit your email and Attio workspace slug on the access page to get the install link. 2. **Install the app** Follow the supplied install link and accept the app permissions for your Attio workspace. 3. **Copy your HeyReach API key** In HeyReach, open Settings ยป API and copy or generate the key. 4. **Connect HeyReach** In the Attio app settings, click Add Connection, paste the key as plain text and save. The app creates HeyReach Events and the default subscriptions. 5. **Choose events** Review the defaults and enable any additional events in Workspace Settings. 6. **Save preferences** Save to update the subscriptions. Use the Person record action or bulk action to enroll People. ## Sync behavior ### Attio to HeyReach Open a Person, review the mapped fields and choose a HeyReach campaign or list. Enrollment requires first name, last name and a valid LinkedIn profile URL. Email, company, job title, website, location and description are optional. ### HeyReach to Attio Subscribed events match an Attio Person by LinkedIn URL or email. If no match exists, the app creates a Person. It updates engagement fields and adds an entry to HeyReach Events. ### Default subscriptions Connection accepted, first message reply, every message reply and InMail reply are enabled on connection. The event codes are `connection_request_accepted`, `message_reply_received`, `every_message_reply_received` and `inmail_reply_received`. Additional events are optional. ## Events Enable the events you need in Workspace Settings. Campaign completed is managed at the app level. ### Connection events | Event code | Fires when | | ----------------------------- | ---------------------------------------------------------------------------- | | `connection_request_sent` | A connection request was sent to a LinkedIn profile via a HeyReach campaign. | | `connection_request_accepted` | A LinkedIn profile accepted your connection request. | ### Messaging events | Event code | Fires when | | ------------------------ | ------------------------------------------------------------------------------------------------------ | | `message_sent` | You sent a LinkedIn message through a HeyReach campaign (connection-request copy is not tracked here). | | `message_reply_received` | You received the first reply to a LinkedIn message from a HeyReach campaign. | | `inmail_sent` | You sent a LinkedIn InMail message through a HeyReach campaign. | | `inmail_reply_received` | You received the first reply to a HeyReach-sent InMail. | ### Engagement events | Event code | Fires when | | ---------------- | --------------------------------------------------------------------- | | `follow_sent` | You started following a LinkedIn profile through a HeyReach campaign. | | `liked_post` | You liked a LinkedIn profile's post as part of a HeyReach campaign. | | `viewed_profile` | You viewed a LinkedIn profile as part of a HeyReach campaign. | ### Meta events | Event code | Fires when | | -------------------- | ---------------------------------------------------------------------------------------- | | `lead_tag_updated` | You added or removed a tag on a HeyReach contact. | | `campaign_completed` | A campaign finished sending. Managed at the app level, not through the per-event toggle. | ### Special events | Event code | Fires when | | ------------------------------ | --------------------------------------------------------------------------------------------------- | | `every_message_reply_received` | Captures every reply (not just the first) on LinkedIn messages and InMails from HeyReach campaigns. | ## Event fields Event-specific fields may be blank when HeyReach does not supply them. | Attribute | Description | | -------------------- | ----------------------------------------------------------- | | Event Type | The HeyReach event code (e.g. message_reply_received). | | Campaign Name | The HeyReach campaign the event belongs to. | | Linked Person | The Attio Person matched (or created) for this event. | | LinkedIn Profile URL | The cleaned LinkedIn URL from HeyReach. | | Lead Tags | Any tags HeyReach has on the lead at the time of the event. | | Timestamp | When the event happened in HeyReach. | | Message Metadata | For messaging events: subject, snippet, and direction. | ## Limitations - Bulk enrollment supports up to 250 selected People. - HeyReach rejects legacy LinkedIn URLs using `/pub/`. Correct the profile URL before enrollment. - Events do not update Attio's native Last Interaction field or activity stream. - Company LinkedIn URLs may be missing from HeyReach data. ## Troubleshooting ### Enrollment is rejected Check the Person's first name, last name and LinkedIn URL. Those three values are required. ### No new activity appears Check that the event is enabled and preferences have been saved. Existing events are not a test of a new subscription; trigger a new enabled event. ### Triggering an Attio workflow Use **List entry added** on HeyReach Events, then branch on Event Type. For example, `message_reply_received` can trigger a follow-up task. ## Useful links - [HeyReach (affiliate link)](https://heyreach.io/?via=neon-deer) - [HeyReach help center](https://help.heyreach.io/en/) - [Get access to the HeyReach app](https://neondeerdata.com/tools/heyreach/#get-access)