LinkedIn bloque le scraping direct. Le modèle sécurisé 2026 utilise l'opérateur site:linkedin.com de Google pour afficher les publications publiques et les récupère via Scavio dans les nœuds de requête HTTP n8n. Pas de cookies LinkedIn, aucun risque de compte.
Prérequis
- n8n Cloud ou auto-hébergé
- Une clé API Scavio
- Un mot-clé cible ou un nom de concurrent
Parcours
Étape 1: Ajouter un déclencheur de planification n8n
Exécuter toutes les 30 minutes pour un signal frais.
// Schedule Trigger
Interval: 30 minutesÉtape 2: Ajouter un nœud de requête HTTP à Scavio
Appeler Scavio avec une requête site:linkedin.com/posts.
// HTTP Request node
Method: POST
URL: https://api.scavio.dev/api/v1/search
Headers: x-api-key: {{$env.SCAVIO_API_KEY}}
Body: {
"query": "site:linkedin.com/posts {{$json.keyword}}",
"num_results": 20
}Étape 3: Analyser organic_results
Chaque publication renvoie un titre (auteur + extrait) et une URL.
// n8n Code node
return items[0].json.organic_results.map(r => ({
json: { author: r.title.split('|')[0], url: r.link, snippet: r.snippet }
}));Étape 4: Dédupliquer par rapport aux exécutions précédentes
Stocker les URL déjà vues dans une table de données n8n pour ignorer les doublons.
// Data Table node
Action: Upsert
Key: url
Table: linkedin_posts_seenÉtape 5: Acheminer les nouvelles publications en aval
Envoyer vers Slack, Airtable, ou un second workflow pour enrichissement.
// Slack node
Message: New LinkedIn post by {{$json.author}}: {{$json.url}}Exemple Python
import os, requests
API_KEY = os.environ['SCAVIO_API_KEY']
def linkedin_posts(keyword):
r = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY},
json={'query': f'site:linkedin.com/posts {keyword}', 'num_results': 20})
return r.json().get('organic_results', [])
for p in linkedin_posts('AI agents gtm'):
print(p['link'])Exemple JavaScript
const API_KEY = process.env.SCAVIO_API_KEY;
export async function linkedinPosts(keyword) {
const r = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST',
headers: { 'x-api-key': API_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({ query: `site:linkedin.com/posts ${keyword}`, num_results: 20 })
});
return (await r.json()).organic_results || [];
}Sortie attendue
List of public LinkedIn posts matching the keyword with author, URL, and snippet. Runs every 30 minutes, new posts only.