Push warm LinkedIn contacts into HubSpot, Salesforce or Pipedrive
Swimlane has no native sync with HubSpot, Salesforce or Pipedrive. You connect them yourself with the Swimlane public API, webhooks, and n8n or Make, which both offer HubSpot, Salesforce and Pipedrive modules. This article shows the two designs that work and which one to choose.
Decide what "warm" means first
Don't copy every contact into your CRM. Swimlane creates a contact for every person you talk to or import, and your CRM would fill with people who never answered. Pick a signal your team applies by hand, for example:
- a tag such as "Send to CRM", added when a conversation turns into a real opportunity;
- or a list such as "Qualified", that reps move contacts into.
A tag is the most reliable signal, because the API can filter on it (tag_id).
Design 1: scheduled hand-off on a tag (recommended)
Tags don't send webhooks, so the automation checks for tagged contacts on a schedule.
- In Swimlane, create two tags: "Send to CRM" and "In CRM". Note their ids with
GET https://api.getswimlane.com/v1/tags(a tag appears there once it is used on a contact). - In n8n or Make, schedule a workflow every 15 minutes.
- Call
GET /v1/contacts?tag_id=<Send to CRM id>&per_page=100. - For each contact, call
GET /v1/companies/<uuid>for the first of itscompanyUuidsto get the company name. - Search your CRM for an existing person (by LinkedIn URL or name and company). Create the person if missing, update it otherwise.
- Set the tags back through
POST /v1/contacts/<uuid>/tags: the contact's currenttagIds, minus "Send to CRM", plus "In CRM". This call replaces all tags, so always send the full list.
The step-by-step API calls are in Connect Swimlane to n8n and Connect Swimlane to Make.
Design 2: real-time on contact events
- Create a webhook subscribed to Contact Created and/or Contact Updated (see Set up webhooks).
- In the workflow, drop
testevents, then read the full contact withGET /v1/contacts/<uuid>. - Keep it only if it belongs to your qualified list (
listUuids) or carries your tag (tagIds). - Create or update the CRM record.
This design reacts within about a minute, but contact.updated also fires when imports or the inbox sync refresh a contact, so the workflow runs often. Filter early.
Map the fields
What Swimlane gives you through the API:
firstName,lastName: often the only identity you have.email,phone,website: usually empty for LinkedIn contacts, unless someone filled them in.headline,location,countryIso.- LinkedIn profile:
https://www.linkedin.com/in/<linkedinId>. Store it in a CRM property; it is the best key for spotting duplicates. - Company: the name from
GET /v1/companies/<uuid>. uuid: store it in a custom CRM property so updates find the right record.pipelineStageUuid: the stage the contact sits in, if you want to mirror a Swimlane stage in a CRM deal stage. Read stage names withGET /v1/pipelines/<uuid>/stages.
Not available through the API or webhooks: conversations and messages, notes, ICP fit, reminders and activity history. Link back to the contact's LinkedIn profile instead of trying to copy the thread.
CRM-specific notes
- HubSpot: contacts are matched on email by default. Without an email, search on your LinkedIn URL property first, or you will create duplicates.
- Salesforce: create Leads rather than Contacts if the person isn't tied to an Account yet. Store the Swimlane uuid in a custom field.
- Pipedrive: create the Person, then the Organization from the company name, and a Deal if the tag means "opportunity".
Keep one direction
Treat Swimlane as the source for LinkedIn conversations and your CRM as the source for deals. Syncing both ways through the API is possible (contacts, tags, lists, pipeline stages) but easily creates loops. If you write back, do it only on tags or pipeline stages, which don't send webhooks.
