Documentation Technique : LinkedIn Sourcing Automatisé
ID: 8Qqc4lqsQ9c27MEE Version: 1.0.0 Score Qualité: 93/100 Date: 2026-01-26 Créé par: Utilia AI
Vue d’ensemble
Automatiser le sourcing de candidats LinkedIn avec enrichissement email et scoring IA pour qualification automatique.
Objectif
Ce workflow automatise l’intégralité du processus de sourcing RH :
- Scraping de profils LinkedIn selon des critères de recherche
- Enrichissement avec emails professionnels via Hunter.io
- Scoring IA de chaque candidat (compétences, expérience, carrière)
- Sauvegarde dans Airtable avec analyse complète
- Ajout automatique des candidats qualifiés aux séquences Lemlist
Déclencheur
| Propriété | Valeur |
|---|---|
| Type | Schedule Trigger |
| Node | Schedule Trigger |
| Fréquence | Configurable (recommandé : 1-2x/semaine) |
| Mode | Cron ou intervalle |
Flux de données
LinkedIn Search → Apify Scraper → Split → Clean → Dedup → Hunter → AI Score → Airtable → Lemlist
Architecture
SCRAPING ENRICHISSEMENT SCORING IA OUTREACH
─────────────────────────────────────────────────────────────────────────
Schedule Configuration Apify Split Clean Check Filter
Trigger → Variables → Scraper → Out → Data → Existing → New
│
▼
Extract Domain
│
▼
Hunter Email
│
▼
Merge Data
│
▼
┌───────────────────┐
│ AI Agent │
│ (GPT-4o-mini) │
│ + Output Parser │
└───────────────────┘
│
▼
Parse Response
│
▼
Save Airtable
│
▼
Score Check
/ \
≥70 <70
│ │
▼ ▼
Lemlist NoOp
│ (end)
▼
Update Status
Nodes (20 nodes principaux)
| # | Node | Type | Rôle |
|---|---|---|---|
| 1 | Schedule Trigger | scheduleTrigger | Déclenchement automatique |
| 2 | Configuration Variables | set | Paramètres centralisés |
| 3 | HTTP Request - Apify | httpRequest | Scraping LinkedIn via Apify |
| 4 | Split Candidates | splitOut | Séparation en items |
| 5 | Clean Candidate Data | set | Normalisation données |
| 6 | Check Existing Candidate | airtable | Vérification doublon |
| 7 | Filter New Candidates | filter | Filtrage nouveaux |
| 8 | Extract Company Domain | code | Extraction domaine |
| 9 | Hunter Find Email | hunter | Enrichissement email |
| 10 | Merge Enriched Data | set | Fusion données |
| 11 | AI Candidate Scoring | agent | Évaluation IA |
| 12 | OpenAI GPT-4o-mini | lmChatOpenAi | Modèle de langage |
| 13 | JSON Output Parser | outputParserStructured | Parsing JSON |
| 14 | Parse AI Response | code | Fusion score + candidat |
| 15 | Save to Airtable | airtable | Persistance |
| 16 | Score Threshold Check | if | Filtrage qualifiés |
| 17 | Add to Lemlist Campaign | lemlist | Ajout séquence |
| 18 | Update Contact Status | airtable | MAJ statut |
| 19 | Unqualified Candidate | noOp | Fin non-qualifiés |
| 20 | Error Trigger (Template) | errorTrigger | Gestion erreurs |
Détail des nodes critiques
Schedule Trigger
Type: n8n-nodes-base.scheduleTrigger
Version: 1.2
Configuration:
- Fréquence configurable
- Recommandation : 1-2x/semaine pour éviter spam LinkedIn
Configuration Variables
Type: n8n-nodes-base.set
Version: 3.4
Variables définies:
| Variable | Type | Description |
|---|---|---|
| linkedinSearchUrl | string | URL de recherche LinkedIn |
| apifyApiKey | string | Clé API Apify (env) |
| maxCandidates | number | Limite profils (défaut: 50) |
| minScoreForOutreach | number | Seuil contact (défaut: 70) |
| lemlistCampaignId | string | ID campagne Lemlist (env) |
HTTP Request - Apify LinkedIn Scraper
Type: n8n-nodes-base.httpRequest
Version: 4.2
Configuration:
- URL:
https://api.apify.com/v2/acts/curious_coder~linkedin-profile-scraper/run-sync-get-dataset-items - Method: POST
- Timeout: 5 minutes (300000ms)
- Retry: 3 tentatives, délai 5s
Body JSON:
{
"searchUrl": "{{ linkedinSearchUrl }}",
"maxProfiles": {{ maxCandidates }},
"proxyConfiguration": {
"useApifyProxy": true
}
}
AI Candidate Scoring
Type: @n8n/n8n-nodes-langchain.agent
Version: 1.7
Modèle: GPT-4o-mini (température 0.3)
Prompt:
Analyse ce profil de candidat et attribue un score de 0 à 100.
Profil:
- Nom: {{ fullName }}
- Titre: {{ headline }}
- Entreprise actuelle: {{ company }}
- Localisation: {{ location }}
- Compétences: {{ skills }}
Critères:
1. Pertinence compétences techniques (40%)
2. Niveau expérience (30%)
3. Progression carrière (20%)
4. Localisation (10%)
Réponds en JSON: {"score": number, "strengths": [], "concerns": [], "recommendation": "CONTACT"|"MAYBE"|"SKIP", "personalizedMessage": "string"}
Sortie structurée:
{
"score": 85,
"strengths": ["10 ans expérience", "Stack moderne"],
"concerns": ["Localisation éloignée"],
"recommendation": "CONTACT",
"personalizedMessage": "Votre expertise React..."
}
Score Threshold Check
Type: n8n-nodes-base.if
Version: 2.2
Conditions (AND):
aiScore >= 70emailnon vide
Sorties:
- True → Add to Lemlist Campaign
- False → Unqualified Candidate (NoOp)
Gestion des erreurs
| Pattern | Configuration |
|---|---|
| Retry | 3 tentatives sur tous les nodes API |
| Délai | 2-5 secondes entre tentatives |
| On Error | Continue Regular Output |
| Timeout | 5 minutes pour Apify |
Error Workflow (Template)
Le workflow inclut un template de gestion d’erreurs :
- Error Trigger → Slack Alert
- À déployer dans un workflow séparé
- Centralise toutes les erreurs
Credentials requis
| Service | Type | Configuration |
|---|---|---|
| Apify | API Key | Variable env APIFY_API_KEY |
| Hunter.io | API Key | n8n Credentials |
| OpenAI | API Key | n8n Credentials |
| Airtable | API Key | Variable env AIRTABLE_BASE_ID |
| Lemlist | API Key | Variable env LEMLIST_CAMPAIGN_ID |
| Slack | OAuth | n8n Credentials (optionnel) |
Variables d’environnement
# Configuration requise dans n8n Settings > Variables
APIFY_API_KEY=apify_api_XXXXX
AIRTABLE_BASE_ID=appXXXXXXXX
LEMLIST_CAMPAIGN_ID=cam_XXXXXXXX
Structure Airtable
Table: Candidats
| Champ | Type | Description |
|---|---|---|
| Nom Complet | Single line text | Prénom + Nom |
| Prénom | Single line text | - |
| Nom | Single line text | - |
| Email professionnel | ||
| LinkedIn URL | URL | Profil LinkedIn |
| Titre | Single line text | Headline LinkedIn |
| Entreprise | Single line text | Entreprise actuelle |
| Localisation | Single line text | Ville/Pays |
| Compétences | Long text | Liste compétences |
| Score AI | Number | Score 0-100 |
| Points Forts | Long text | Analyse IA |
| Points Faibles | Long text | Analyse IA |
| Recommandation | Single select | CONTACT, MAYBE, SKIP |
| Message Personnalisé | Long text | Icebreaker IA |
| Statut | Single select | Nouveau, Ajouté à Séquence Email |
| Date Import | Date | Timestamp traitement |
Coûts estimés
| Service | Coût estimé |
|---|---|
| Apify | ~$0.02/profil (selon plan) |
| Hunter.io | 50-500 req/mois (selon plan) |
| OpenAI | ~$0.01/candidat (GPT-4o-mini) |
| Airtable | Gratuit jusqu’à 1000 records |
| Lemlist | Selon plan |
Pour 50 candidats/run : ~$2-5 total
Maintenance
Logs à surveiller
- Erreurs Apify (rate limits, proxies)
- Erreurs Hunter (quotas)
- Erreurs OpenAI (tokens)
- Airtable (limites records)
Points de défaillance potentiels
- Apify rate limits : Espacer les runs, utiliser proxies
- Hunter quotas : Monitorer usage mensuel
- LinkedIn changes : Le scraper Apify peut nécessiter updates
- Airtable limites : Archiver vieux records si > 50k
Changelog
| Date | Version | Changements |
|---|---|---|
| 2026-01-26 | 1.0 | Publication initiale |
Support
Créé par: Utilia AI Contact: hello@utilia-ai.com Site: https://utilia-ai.fr Localisation: La Rochelle, France
Documentation générée automatiquement par Utilia AI