Webhook
Pushing Data to a Webhook
Syft can export account and lead data to any webhook endpoint. The shape of the webhook payload depends on which type of motion you create:
- Identify Leads and Push (Leads motion): Pushes enriched lead data when a new lead is identified. Enable this by creating a leads motion.
- Push Contacts and their Actions (Sessions motion): Pushes session activity along with the visitor who performed it. Enable this by creating a sessions motion.
Webhook Payload by Motion Type
The objects included in each webhook call depend on the motion type:
| Object | Leads Motion | Sessions Motion |
|---|---|---|
| Company | ✓ | ✓ |
| Lead (contact info) | ✓ | — |
| Visitor (contact info) | — | ✓ |
| Session | — | ✓ |
| — | ✓ |
Both the Lead object and the Visitor object share the same Contact schema — they contain identical fields (email, name, job title, activity summaries, etc.). The difference is contextual:
- In a Leads motion, the contact is sent as the Lead — it represents a newly identified or qualified lead and is the primary focus of the webhook. The Lead is always identified (i.e., has enriched profile data).
- In a Sessions motion, the same contact data is sent as the Visitor — it provides context about who performed the session, while the Session object carries the primary activity details. The Visitor may be anonymous — if Syft has not yet identified the person, contact fields like email and name will be empty.
Exported Fields
Company Object
Contact Fields
The following fields are used for both the Lead object (in leads motions) and the Visitor object (in sessions motions).
Session Object
LinkedIn Object
Sessions motions send a LinkedIn object when the session is LinkedIn activity. Ad impressions and clicks are not included.
LinkedIn Activity Types
direction is from the contact's side. inbound means the contact reached out, outbound means your team did. It is empty when the side is not known.
| What happened | action | direction | description |
|---|---|---|---|
| The contact sent a DM to your teammate | Sent Message | inbound | sent a DM to Alice |
| Your teammate sent a DM to the contact | Received Message | outbound | received a DM from Alice |
| The contact commented on a post | Comment | commented on a LinkedIn post | |
| The contact reacted to a post | Like | reacted to a LinkedIn post | |
| The contact sent your teammate a connection request | Sent Connection Request | inbound | sent a connection request |
| Your teammate accepted the contact's request | Sent Connection Request Accepted | inbound | was accepted as a connection |
| Your teammate sent the contact a connection request | Received Connection Request | outbound | received a connection request |
| The contact accepted your teammate's request | Received Connection Request Accepted | outbound | accepted your connection request |
| The contact became a connection, side not known | New Connection | is a new LinkedIn connection | |
| The contact followed your teammate | New Follower | inbound | started following you on LinkedIn |
| The contact followed your company page | New Company Follower | inbound | started following your company on LinkedIn |
| The contact viewed your teammate's profile | Profile View | inbound | viewed your LinkedIn profile |
| The contact published a post | New Post | posted on LinkedIn |
message_text holds the full DM text for DMs and the stored comment text (first 100 characters) for comments. teammate, teammate_handle and conversation_url are set for DMs only. The other fields are null when they do not apply.
Syft never sends a DM with a teammate who has Share DM activity turned off. If that DM is the only LinkedIn action in the session, no webhook is sent for it.
Example: a DM from the contact
{
"action": "Sent Message",
"post_id": "2-MTk4ZTYx",
"post_url": "https://www.linkedin.com/messaging/thread/2-MTk4ZTYx",
"syft_purchase_intent": "High",
"timestamp": "2026-10-08T10:00:00.000Z",
"postId": "2-MTk4ZTYx",
"intent": "High",
"postUrl": "https://www.linkedin.com/messaging/thread/2-MTk4ZTYx",
"direction": "inbound",
"description": "sent a DM to Alice Chen",
"message_text": "Hi Alice, we saw your post on pipeline attribution. Can we book 20 minutes next week?",
"teammate": "Alice Chen",
"teammate_handle": "alice-chen",
"conversation_url": "https://www.linkedin.com/messaging/thread/2-MTk4ZTYx",
"occurred_at": "2026-10-08T10:00:00.000Z"
}
Example: a connection request accepted
{
"action": "Received Connection Request Accepted",
"post_id": "pat-prospect",
"post_url": "https://www.linkedin.com/in/pat-prospect",
"syft_purchase_intent": "Low",
"timestamp": "2026-10-06T10:00:00.000Z",
"postId": "pat-prospect",
"intent": "Low",
"postUrl": "https://www.linkedin.com/in/pat-prospect",
"direction": "outbound",
"description": "accepted your connection request",
"message_text": null,
"teammate": null,
"teammate_handle": null,
"conversation_url": null,
"occurred_at": "2026-10-06T10:00:00.000Z"
}