LinkedIn-posts inplannen zonder tool: de API kan het niet

LinkedIn posts inplannen kan niet via de officiele API. Die kan alleen direct plaatsen, zonder veld voor een publicatietijdstip. Elke tool die je scheduling verkoopt, lost dat op met een timer aan hún kant: jouw post staat bij hen klaar en zij drukken op het moment zelf op de knop.

Ik heb die timer bij mij gezet. Dat is een middag werk en het scheelt me een abonnement, maar dat is niet waarom ik het deed.

Zeventien posts die ik al geplaatst had

Ik ontdekte in augustus dat zeventien van mijn drafts allang op LinkedIn stonden. Mijn eigen mappen wisten dat niet.

Dat komt doordat ik met de hand plaatste en achteraf reconstrueerde wat eruit was gegaan. Die reconstructie matcht op de openingszin van een post tegen een wekelijkse export. Dat werkt totdat een post begint met een hashtag, of totdat je hem net iets anders formuleert voor je op plaatsen drukt.

Het is een klein probleem met een vervelende eigenschap: je merkt het niet. Er gaat niets stuk. Er is alleen een map die iets anders denkt dan de werkelijkheid.

Wat ik niet wist over de LinkedIn API

Ik ging ervan uit dat inplannen een API-functie was. Dat is het niet.

De officiële Posts API kan alleen direct posten. Er is geen veld waarin je een tijdstip meegeeft. Dat geldt voor iedereen, ook voor Buffer, Hootsuite en Postiz.

Wat die tools doen is je post opslaan in hun eigen database en de API aanroepen zodra hun timer afloopt. Je betaalt dus voor een wachtrij. De publicatie zelf is één API-call die jij ook kunt doen.

Dat was het moment waarop ik besloot die wachtrij bij mij te zetten. Niet uit principe, maar omdat mijn posts al in mijn eigen mappen staan met een geplande datum erin. De wachtrij bestond al. Er zat alleen geen uitvoerder achter.

Het mechanisme

Elke post is een markdown-bestand met een kop erboven. Daar staat wanneer hij eruit moet, tot wanneer hij houdbaar is, en of er beeld bij hoort.

Een timer kijkt elk kwartier of er iets aan de beurt is. Zo ja, dan gaat die ene post eruit. Eén per run, zodat een achterstand niet in één keer leegloopt over je volgers.

Weigeren doet hij vaker dan plaatsen, en dat is de bedoeling. Hij weigert als de houdbaarheidsdatum voorbij is, als het slot meer dan anderhalf uur geleden was, als de tekst leeg is, en als er beeld bij hoort zonder alt-tekst. Die laatste is de nuttigste. Ik had die regel al opgeschreven en hield me er niet altijd aan.

Het token is 60 dagen geldig, het refresh-token een jaar. Bij negen posts per week zit ik ver onder de limiet van honderd API-calls per dag. In de praktijk betekent dat: één keer per jaar opnieuw inloggen.

De val die ik er bijna in liet zitten

Voordat ik dit publiceerde heb ik het ontwerp door een panel van modellen laten lezen. Een daarvan vond iets dat ik zelf niet had gezien.

Ik stelde de URL van de geplaatste post zelf samen, uit het id dat LinkedIn teruggeeft. Dat lijkt logisch. Maar LinkedIn maakt zijn eigen URL, en die leidt hij af uit de posttekst, niet uit het id dat jij kreeg. Dezelfde post heeft daardoor twee verschillende adressen, in twee verschillende nummerreeksen.

Het gevolg zou zijn dat mijn database dezelfde post twee keer opslaat: één keer zoals ik hem plaatste, één keer zoals mijn scraper hem later terugvindt. De unieke sleutel die dat had moeten voorkomen ziet twee verschillende teksten en laat het gebeuren.

Wat dit voorbeeld waard maakt is niet de fout zelf. Het is dat er niets van zou zijn opgevallen. Geen foutmelding, geen rode test, alleen een tabel die stilletjes dubbel telt. Precies de categorie fouten waar ik in mijn werk het meeste tijd aan kwijt ben, en waarom ik ontwerpen laat nakijken voordat er een regel code bestaat.

Wat je zelf moet regelen

Dit is de enige echte horde, en het is ongeveer twintig minuten werk. Je hebt een LinkedIn-bedrijfspagina nodig, ook als je alleen vanaf je persoonlijke profiel post. De pagina is er om je app te kunnen verifiëren, niet om te publiceren.

  1. Maak een LinkedIn-pagina aan en maak jezelf super admin.
  2. Maak een app aan op developer.linkedin.com en koppel hem aan die pagina.
  3. Vraag twee producten aan: Share on LinkedInenSign In with LinkedIn using OpenID Connect. Dit is self-serve, geen partnerprogramma, dus je wacht niet op goedkeuring van LinkedIn.
  4. Verifieer de app via je pagina. Je genereert een link en keurt die als super admin zelf goed.
  5. Voeg http://localhost:8765/callback toe als redirect-URL.
  6. Zet je client id en secret in het configuratiebestand.
  7. Draai het auth-commando. Er opent een browser, je keurt goed, en het token wordt lokaal opgeslagen.

Stap 1 tot en met 4 kan alleen jij doen, want ze vragen om jouw account. De rest is knip- en plakwerk.

De plugin waarmee je LinkedIn posts inplannen zelf draait

Ik heb dit als installeerbare plugin verpakt, zodat je het niet hoeft na te bouwen:

github.com/Vinix24/linkedin-publisher

Hij leest je eigen map met posts, kent je eigen weekschema, en publiceert er één per keer. Alle paden en tijdslots komen uit configuratie, dus je hoeft geen code aan te passen om hem op jouw mappen te laten draaien.

De URL van een geplaatste post neemt hij over uit wat LinkedIn teruggeeft. Hij stelt hem niet zelf samen. Dat is de fout uit de vorige paragraaf, en die geef ik liever niet mee.

Waar dit niet over gaat

Inplannen lost het plaatsen op, niet het erbij zijn.

De eerste dertig tot zestig minuten na een post bepalen wat hij doet, en elke reactie hoort een antwoord te krijgen. Een timer die om tien uur afgaat terwijl jij in een klantgesprek zit, levert een post op die niemand opvangt. Dat is meetbaar slechter dan met de hand plaatsen op een moment dat het wel kan.

Daarom stuurt het script een melding op het moment dat hij vuurt. Dat is een halve oplossing en ik weet het. De echte vraag is of mijn agenda leidend moet zijn, en of een afspraak een slot moet kunnen blokkeren. Die knoop heb ik nog niet doorgehakt.

Wat ik wel weet: mijn mappen en de werkelijkheid lopen niet meer uit elkaar. Zeventien keer was genoeg.

Lees ook: Deterministische kwaliteitspoorten: controles die niet van een oordeel afhangen

Veelgestelde vragen

Vincent van Deth

AI Strategy & Architecture

Vincent van Deth bouwt productiesystemen met AI voor het MKB. Hij is de maker van VNX, een multi-agent LLM orchestrator, en helpt teams betrouwbare AI-automatisering te shippen — zonder bullshit.

Reacties

Je e-mailadres wordt niet gepubliceerd. Reacties worden beoordeeld voor plaatsing.

Reacties laden...