The LinkedIn automation setup
Five posts a week. About eight seconds of my time per day. Zero dollars in tools. The whole thing runs inside Claude with one scheduled trigger and a small render pipeline. Here's exactly how it works, and what you need to build your own.
What it actually does
- A scheduled trigger fires Mon/Wed/Fri at 10 AM ET.
- It pulls trending AI/builder topics, dedups against my last 7 posts, and drafts the post in my voice.
- A separate grader pass scores the draft on 8 criteria. Anything below 6, it rewrites. Max 2 rewrites.
- A render API turns the approved draft into a 1080x1080 quote card.
- It emails me the post text plus image preview.
- I reply YES. The orchestrator reads the reply, calls the LinkedIn API, and ships the post.
- Three seconds later it's on my feed.
If I don't reply within 45 minutes, it skips. I never get pestered. I never post something I haven't approved.
The five pieces you need
1. A scheduler
Anything that runs a prompt on a cron.
- Claude's native scheduled triggers (what I use —
claude.ai/code/scheduled) - A Windows Task Scheduler or cron job that shells
claude -p "<prompt>" - n8n, Zapier, Pipedream — any of them work
2. A prompt that writes in your voice
This is the piece everyone gets wrong. If you just say "write authentically," Claude defaults to em dashes, colon-pauses, and corporate words. You fix this by:
- Embedding 3 real posts of yours as voice samples
- Hard-banning the patterns you don't want (em/en dashes, "here's what nobody's talking about," "X isn't Y, it's Z")
- Running a separate grader pass with a Voice Authenticity score
- Requiring contractions, always
3. An image renderer
I use Remotion Lambda on AWS. One template, one call, gets a branded quote card back as a URL. Free tier fits about 12 renders a month. Alternatives: @vercel/og (simpler, less flexible), Bannerbear (paid, click-to-build), or just skip images entirely and post text-only.
4. An approval channel
Email is simplest. I use Gmail plus a small Node script that sends an HTML email with the inline image. The orchestrator then polls Gmail for replies (searching for the draft's subject line) and parses "yes" or "no" out of the reply body.
5. LinkedIn API access
Not Zapier. The Zapier LinkedIn action has image bugs and can't do video, carousel, or @mentions. You want direct API access:
- App at
linkedin.com/developers, request "Share on LinkedIn" + "Sign In with LinkedIn (OIDC)" - Scopes:
openid,profile,w_member_social - Token expires every 60 days. There's no refresh token on the free tier. You re-auth manually every ~2 months.
The prompt (structure, not the whole thing)
The live prompt I use is about 4,900 characters. Here's the skeleton:
You are writing a LinkedIn post for <name>. Today is <date>.
STEP 1 — TOPIC
Read these 3 searches:
- "AI news today"
- "AI builder discourse Twitter"
- "new AI papers/products this week"
Pick one topic. Check journal/linkedin-posts/ for the last 7 posts.
If the topic was already covered, pick the next best one.
STEP 2 — FORMAT (day rotation)
Mon = personal lesson
Wed = trend analysis
Fri = contrarian take
STEP 3 — WRITE DRAFT
Length: 1000-1800 chars. Hook in first 10 words.
No em/en dashes. Always use contractions.
Banned words: leverage, synergy, ecosystem, unlock, rewire,
compounds.
Read these 3 voice samples before writing:
- journal/linkedin-posts/2026-04-12.md
- journal/linkedin-posts/2026-04-13.md
- journal/linkedin-posts/2026-04-14.md
STEP 4 — GRADE
Score draft on 8 criteria (1-10 each):
Voice Authenticity, Hook Strength, Value, Format Compliance,
Originality, CTA Quality, Mobile Readability, Personal Detail.
If any score < 6, rewrite. Max 2 rewrites. Then ship best.
STEP 5 — RENDER IMAGE
Extract hook line. POST to render-api with {hook, subtext}.
Save image URL.
STEP 6 — EMAIL FOR APPROVAL
Send HTML email with post body + inline image.
Subject: "LinkedIn draft — <date>"
STEP 7 — WAIT FOR REPLY (45 min budget, 30s poll)
If reply body starts with "yes" → post via LinkedIn API
If "no" or timeout → skip, log to linkedin-health.md
That's the whole architecture. The magic is in the voice guide section (Step 3) and the separate grader (Step 4). Without the grader, the writer rubber-stamps itself.
Why not just Zapier or Buffer
Because neither can write in your voice. They're schedulers for content you already wrote. The whole point of this setup is you don't write the post. Claude does. You approve it in one tap.
Gotchas I hit
- Self-grading in the same pass is a rubber stamp. Writer and grader must be separate model invocations. Non-negotiable.
- LinkedIn API version must be current. It breaks silently when LinkedIn deprecates old versions. I bump it when I see a 426 error.
- Video upload chunks are flaky on Windows. Retry logic, 3 attempts, 60s timeout. You only care if you're posting video.
- UGC Posts API uses
urn:li:member:X, REST Posts API usesurn:li:person:X. Different formats. Wasted an hour on this. - Token expires every 60 days. No refresh. Put a reminder in your calendar.
Time investment
- Day 1: Set up LinkedIn app, auth flow, voice-guide prompt, test single post end-to-end. Maybe 4 hours.
- Day 2: Add grader, dedup, email approval loop. 2-3 hours.
- Day 3: Image renderer + scheduler. 2 hours.
Total: about one day of focused work. Then it runs forever.
If you want it faster
Skip the image renderer. Skip the day-rotation. Skip the grader on day one. Get a single prompt that writes in your voice plus an email approval loop. That's the 80/20. Everything else is polish.
— Manas