Overview
HeyReach is RevyOps’s LinkedIn outreach integration. It lives under the LinkedIn channel in Integrations (separate from the email sequencer integrations like Instantly or SmartLead) and is currently the only LinkedIn platform RevyOps supports. Once connected, RevyOps ingests LinkedIn campaign events from HeyReach — connection requests, messages, InMails, replies, and lead tags — in near real time and writes them to each contact’s LinkedIn message timeline. It can also push your RevyOps Do Not Contact list back into HeyReach, and pull a one-time historical import of every lead in your HeyReach lists.Prerequisites
- An active HeyReach account with an API key (HeyReach Settings → API → Copy API Key)
- Admin access to the client workspace in RevyOps
- Your RevyOps
client_id(find it under Settings → Workspace) if you’re setting up the webhook manually
Connecting Your HeyReach Account
1
Open the HeyReach integration
In RevyOps, go to Integrations, switch to the LinkedIn channel, and open HeyReach.
2
Paste your API key
Copy your key from HeyReach Settings → API → Copy API Key and paste it into the HeyReach API Key field, then click Verify & Connect. RevyOps validates the key live against HeyReach before continuing.
3
Webhook registration
If the key is valid, RevyOps attempts to register the webhook automatically (see below). If automatic registration fails, you’ll be dropped into manual setup instead.
Webhook Setup
RevyOps registers a webhook per HeyReach event type, all pointed at one URL:{client_id} with your RevyOps workspace ID.
1
RevyOps creates the webhook automatically
After your API key verifies, RevyOps calls HeyReach’s webhook API and registers one webhook per event type below, all pointed at your client’s webhook URL. You don’t need to do anything in the HeyReach dashboard for this step.
2
Re-checks for existing webhooks first
Before creating anything, RevyOps lists your account’s existing webhooks and skips any event type that’s already registered against the same URL. Reopening the integration panel or retrying setup won’t create duplicate webhooks.
3
Fall back to manual setup if needed
If automatic registration fails (for example, an API key with restricted permissions), RevyOps shows an error and drops you into a manual step: copy the webhook URL, then in HeyReach go to Settings → Webhooks → Add Webhook and paste it in yourself.
Of these, RevyOps actively processes message events (connection/message/InMail sent, replies) and
LEAD_TAG_UPDATED as full timeline/disposition updates. FOLLOW_SENT, LIKED_POST, VIEWED_PROFILE, and CAMPAIGN_COMPLETED are received but currently only used to upsert a basic contact record (name, LinkedIn URL, and any list custom fields) — they don’t write timeline entries.
RevyOps registers
EVERY_MESSAGE_REPLY_RECEIVED and deliberately does not register MESSAGE_REPLY_RECEIVED. The latter only fires on a lead’s first reply and registering both used to double-log that first reply. EVERY_MESSAGE_REPLY_RECEIVED alone captures every reply with no gaps.Agency Setup (Global Webhook)
For agencies managing multiple client workspaces, register a single agency-wide webhook instead of one per client:- Message events (connection/message/InMail sent, replies) are routed by matching the HeyReach campaign name against each client’s Campaign Mapping keywords.
LEAD_TAG_UPDATEDcarries no campaign name, so it’s routed by looking up which of the agency’s HeyReach-connected clients already has a LinkedIn message history with that lead’s profile URL. If more than one client has messaged the same lead, the event is fanned out to all of them. Auto-tag events are intended to route the same way, but see the note above about their reliability — an auto-tag event can also silently fail to route to any client.
Status & Label Classification
HeyReach tag values are managed manually inside RevyOps — there’s no live lookup of tag names from your HeyReach account. When a new tag arrives on a webhook event that RevyOps hasn’t seen before, it’s automatically registered under Other Statuses so you can classify it later. From the HeyReach integration panel, click Edit Labels to sort tags into three buckets:- Interested Statuses — leads with these tags count as interested in your reports
- Blocked Statuses — leads with these tags are pulled from active HeyReach campaigns (see below)
- Other Statuses — everything else, shown for visibility but not otherwise acted on
contact_status field in RevyOps, rather than only updating its disposition/label on the LinkedIn message timeline. This is enabled by default when you complete setup.
Cross-Platform Do Not Contact Sync
RevyOps unifies Do Not Contact signals from every connected platform into one suppression list, then pushes it out to HeyReach so a lead suppressed anywhere is never contacted from HeyReach again.- Real-time sync: when a contact is marked DNC anywhere in RevyOps — including by receiving a HeyReach tag you’ve classified as a Blocked status — RevyOps calls HeyReach’s
GetCampaignsForLeadandStopLeadInCampaignAPIs to pull that lead out of every HeyReach campaign where their status isPendingorInSequence. - Historical sync: contacts marked DNC before the integration was connected aren’t picked up by the real-time path. Use the Sync Historical DNC List button in the integration panel to push those retroactively.
- This sync can be turned off per integration with the DNC sync toggle in the integration panel.
Historical Contact Backfill
RevyOps can do a one-time import of every lead across every HeyReach list into your workspace as LinkedIn contacts. This is triggered by a RevyOps super-admin, not from the client-facing Integrations page — ask your RevyOps contact to run it once your HeyReach API key is connected. What it does:- Paginates every HeyReach list and every lead in it, creating or updating a LinkedIn contact for each (name, company, position, headline, location, LinkedIn photo, and any HeyReach custom fields).
- If a lead has an email address on file in HeyReach, RevyOps also creates/finds a matching email contact and merges it with the LinkedIn contact into a single Person record, so the same prospect shows up as one entity across channels.
- Progress (lists completed, contacts processed, contacts/sec, ETA) is persisted as the backfill runs, so a failed or interrupted run resumes from where it left off rather than starting over.
Data Mapped
Message and reply events write an entry to the contact’s LinkedIn message timeline:LEAD_TAG_UPDATED events (and, when they route correctly, the auto-tag events — see the note above) update the contact’s disposition or label rather than writing a message:
Managing Webhooks
- No duplicates on reconnect: before registering anything, RevyOps checks your account’s existing webhooks and skips any event type already pointed at your webhook URL, so re-running setup never creates duplicate registrations.
- Automatic disable on archive or reconfigure: when a client is archived, or when you click reconfigure on an already-connected HeyReach integration, RevyOps finds the webhooks pointed at that client’s URL and disables them in HeyReach.
- Listing and deleting individual webhooks by ID is available to RevyOps admins as an internal support tool, not from the client-facing integration panel.
Troubleshooting
API key shows as invalid
API key shows as invalid
RevyOps checks the key against HeyReach’s
CheckApiKey endpoint. A 401/403 response means the key is wrong or has been revoked — generate a new one from HeyReach Settings → API.Automatic webhook setup failed
Automatic webhook setup failed
This is usually an API key without webhook-management permissions. Fall back to the manual step: copy the webhook URL from the integration panel and add it yourself under HeyReach Settings → Webhooks.
Tag events aren't updating contact status
Tag events aren't updating contact status
Tag events only route correctly on the agency-wide webhook if the lead already has HeyReach message history with that client — RevyOps has no campaign name to match on for tag events, so it looks up ownership by matching the lead’s LinkedIn URL against clients that have already messaged them. If the lead was tagged before HeyReach ever sent a message/connection event for them, the event has nowhere to route and is dropped. Adding a per-client webhook doesn’t help here: a client mapped to the agency webhook has its per-client webhook events skipped by design, to avoid double-processing. Make sure the lead has at least one prior HeyReach message event logged for that client first.
A new tag shows up under Other Statuses instead of Interested/Blocked
A new tag shows up under Other Statuses instead of Interested/Blocked
This is expected — RevyOps doesn’t know how to classify a tag it hasn’t seen before, so it lands in Other Statuses until you reclassify it from Edit Labels.