L'essentiel
  • Un script Python de 150 lignes, Notion et un VPS suffisent pour automatiser la publication LinkedIn, coût 0 euro hors VPS.
  • Notion filtre les posts avec statut 'Prêt' et date de publication passée, le script vérifie et publie toutes les heures via cron.
  • L'API LinkedIn utilise des URN pour identifier l'auteur et le payload doit être structuré en JSON avec les champs spécifiques de l'API v2.
  • Le cron doit pointer vers le chemin absolu du Python du venv, pas vers python3 du système.
  • L'API officielle w_member_social est gratuite pour un usage personnel jusqu'à 1 à 3 posts par jour.

TL;DR : Un script Python de 150 lignes, l’API Notion et un VPS. C’est tout ce qu’il te faut pour ne plus jamais oublier de publier sur LinkedIn. Coût : 0€ (hors VPS), gain de temps : 3h/semaine.

Je vais te dire ce qui m’a vraiment déclenché ce projet. Un dimanche soir. J’ai une idée de post LinkedIn. Je l’écris dans un coin de Notion, je me dis “je le posterai demain matin”. Le lendemain matin, j’ai oublié. Trois jours plus tard, je retrouve la note. Le moment est passé.

Ça s’est répété une dizaine de fois avant que je me pose la vraie question : est-ce que le problème c’est ma discipline, ou c’est mon process ? Spoiler : c’était le process.

1. La Logique du Pipeline

L’idée est simple : utiliser Notion comme hub de rédaction et Python comme bras armé pour la publication.

[Notion DB] → [Script Python] → [LinkedIn API] → [Post publié]
      ↑                ↓
  [Tu rédiges]   [Cron job sur VPS]
  1. Tu rédiges tes posts dans Notion avec une date et un statut “Prêt”.
  2. Un script Python interroge la base toutes les heures.
  3. Si un post est mûr, il est envoyé sur LinkedIn.
  4. Le statut passe à “Publié” dans Notion.

2. Prérequis et Setup

Il te faut :

  • Un compte LinkedIn Developer.
  • Un token d’intégration Notion.
  • Un VPS (type Hetzner) pour faire tourner le script 24/7.
pip install notion-client requests python-dotenv

3. Le Script Python : Lire Notion

Voici le cœur du système pour extraire tes brouillons :

def get_posts_to_publish():
    now = datetime.now(timezone.utc).isoformat()
    response = notion.databases.query(
        database_id=DATABASE_ID,
        filter={
            "and": [
                {"property": "Statut", "select": {"equals": "Prêt"}},
                {"property": "Date de publication", "date": {"on_or_before": now}}
            ]
        }
    )
    # ... extraction du contenu ...
    return posts

4. Poster sur LinkedIn via l’API

L’API LinkedIn utilise des URN (Uniform Resource Names). Voici comment envoyer ton texte :

def publish_post(content: str):
    payload = {
        "author": f"urn:li:person:{PERSON_ID}",
        "lifecycleState": "PUBLISHED",
        "specificContent": {
            "com.linkedin.ugc.ShareContent": {
                "shareCommentary": {"text": content},
                "shareMediaCategory": "NONE"
            }
        },
        "visibility": {"com.linkedin.ugc.MemberNetworkVisibility": "PUBLIC"}
    }
    # ... envoi du POST ...

5. Déployer sur un VPS

Une fois ton script prêt, transfère-le sur ton VPS et configure un crontab :

crontab -e
# Lancer le script toutes les heures
0 * * * * /home/user/linkedin-automation/venv/bin/python /home/user/linkedin-automation/main.py >> /home/user/linkedin-automation/logs/cron.log 2>&1

Si tu débutes avec les serveurs, j’ai documenté comment configurer un VPS Hetzner de A à Z.

6. Pourquoi Notion plutôt qu’un outil tiers ?

Le vrai bénéfice n’est pas l’automatisation en elle-même. C’est la discipline que le système crée.

Tes idées, brouillons et posts publiés sont au même endroit. Pas de dashboard complexe à apprendre : tu écris dans Notion, tu valides, le code fait le reste. Et tu possèdes ton pipeline. Pas d’abonnement SaaS à 50€/mois qui peut disparaître ou augmenter ses tarifs du jour au lendemain.

C’est exactement pour ça que ce pipeline alimente la promotion de Copyboost depuis le lancement. J’écris les posts en avance, je les programme dans Notion, le script s’occupe de la publication pendant que je travaille sur le produit.

Ce que ce pipeline change vraiment

Ce pipeline m’a économisé environ 3 heures par semaine depuis que je l’ai mis en place. Le setup prend une après-midi. Après, tu n’y penses plus.

Ce qui change vraiment, c’est que tu passes de « j’aurais dû poster » à « c’est déjà publié ». Pour un solopreneur qui gère un produit en parallèle, ce changement de posture vaut beaucoup plus que le temps gagné.