Lancer un import LinkedIn via l'API
POST /v1/imports fait ce que font les écrans de sourcing : il crée une liste et la remplit depuis LinkedIn. C'est par là que les contacts entrent dans un espace de travail via l'API — tous les autres endpoints travaillent sur des gens déjà présents.
Un appel
curl -X POST https://api.getswimlane.com/v1/imports \
-H "Authorization: Bearer wpa_…" \
-H "Content-Type: application/json" \
-d '{
"source": "post_engagement",
"listName": "Commentateurs webinaire",
"postUrl": "https://www.linkedin.com/posts/…"
}'
Vous nommez la liste vous-même : rien n'est déduit de LinkedIn, contrairement à l'application qui fabrique un nom à partir de l'auteur du post.
Les sept sources
source |
Qui est récupéré | Champs requis |
|---|---|---|
post_engagement |
tous ceux qui ont réagi ou commenté un post | postUrl |
competitor_engagement |
ceux qui réagissent aux posts récents de quelqu'un d'autre | profileUrl |
profile_engagement |
ceux qui réagissent à vos propres posts | — |
profile_visitors |
ceux qui ont visité votre profil entre deux dates | from, to |
people_search |
une recherche de personnes, écrite comme un persona en langage courant | persona |
topic_search |
un sujet transformé en recherche booléenne | topic, strategy |
suggested_contacts |
les personnes que LinkedIn vous suggère | — |
Pour topic_search, strategy vaut thematic_search (les gens qui parlent du sujet) ou lead_magnet_hunter (ceux qui demandent une ressource à ce propos).
Une source à qui manque un champ répond 422 import.missing_parameters, en nommant les champs.
Ce qui se passe ensuite
L'appel répond 202 avec la liste, et cette liste est vide. La collecte tourne en arrière-plan sur votre propre session LinkedIn, à un rythme humain. Deux façons de la suivre :
GET /v1/queue?method=Import.PostEngagement— la tâche, son statut et son résultat.GET /v1/lists/<uuid>— lestatuspassescheduled → importing → done(ouerror).
Votre limite quotidienne d'imports est réclamée à l'exécution, pas à l'appel. Un import lancé au-delà de la limite attend le lendemain au lieu d'échouer : mettre une journée de sourcing en file d'un coup ne casse rien. Idem pour vos horaires de bureau virtuels — une exécution en dehors est reportée à la prochaine ouverture, pas perdue.
Garder une liste qui se remplit
Ajoutez recurring: true et la même source continue d'alimenter la liste :
{
"source": "competitor_engagement",
"listName": "Engagés Acme",
"profileUrl": "https://www.linkedin.com/in/acme-founder/",
"recurring": true
}
La réponse contient un recurringImport avec son propre uuid. Gestion :
GET /v1/imports/recurring— toutes les planifications, avecnextRunAtetlastRunAt.PATCH /v1/imports/recurring/<uuid>avec{"isActive": false}pour mettre en pause,truepour reprendre.DELETE /v1/imports/recurring/<uuid>pour l'arrêter définitivement. La liste et les contacts déjà importés sont conservés.
Deux choses à anticiper :
- L'intervalle n'est pas réglable. Il est tiré au hasard dans une fourchette à chaque exécution — environ 2 à 4 heures, 12 à 24 pour les suggestions de LinkedIn. Une cadence d'horloge est l'un des signaux d'automatisation les plus faciles à repérer :
frequencyHoursindique donc le dernier intervalle utilisé, pas un intervalle que vous choisissez. - Pour
profile_visitors, chaque répétition lit les sept derniers jours, quels que soient lesfromettode la première exécution.
Le montage à connaître
Un import récurrent plus une campagne continue font un pipeline qui s'alimente seul : l'import ajoute des gens à la liste, et une campagne créée avec continuous: true sur cette liste enrôle les nouveaux venus au prochain balayage. Mis en place une fois, de nouveaux prospects sont contactés sans que personne n'ouvre l'application.
C'est aussi la raison d'y aller délibérément. Chaque contact trouvé par l'import recevra un message : pointez-le donc vers une source avec laquelle vous seriez content d'avoir une conversation.
Voir Référence de l'API publique Swimlane pour le reste des endpoints.
