Mirror a LinkedIn post to Bluesky and Threads
Publish once on LinkedIn; auto-draft Bluesky and Threads versions.
https://getposta.app/assets/workflows/linkedin-cross-post-to-bluesky-threads.json- You’ll need:Posta API token, OpenAI API key
The X→Bluesky migration left a lot of people wanting “post once, mirror everywhere.” This workflow does it the clean way — driven by Posta’s outbound webhooks, not a leaky cron poll. When a LinkedIn post goes live, Posta sends a signed post.published webhook; the workflow verifies it, fetches the caption, and uses an LLM to compress it into a Bluesky and a Threads draft for you to review.
How it works
- Posta webhook — receives
post.published(point a Posta outbound webhook scoped to LinkedIn at this node’s URL). - Verify signature (Code) — checks
HMAC-SHA256(secret, "{X-Posta-Timestamp}.{rawBody}")in constant time and stops on mismatch. - Get LinkedIn post — fetches the published post’s caption from the Posta API.
- Compress per network (LLM) — returns a Bluesky variant (≤300 chars) and a Threads variant, links preserved, LinkedIn opener dropped.
- Create Bluesky / Threads drafts (Posta) — created as drafts so nothing publishes without your say-so.
- Slack review ping — posts both Posta dashboard links so you can review and publish from one place.
Verifying the webhook
Posta signs each delivery as HMAC-SHA256(secret, "{timestamp}.{body}") and sends X-Posta-Signature, X-Posta-Timestamp, and X-Posta-Event headers. The Code node enables the Webhook’s Raw Body option and verifies the bytes that were signed — never a re-serialized copy.
Tips
- Set the Bluesky and Threads Posta account ids on the two Create-post nodes (grab them from the Get many social accounts Posta node).
- Want it fully hands-off? Drop the “draft” intent so the mirrored posts publish immediately instead of waiting for review.
- Add more targets by duplicating a Create-post node and pointing it at another account id.