Auto-share new beehiiv posts to LinkedIn and Slack
The moment a new beehiiv issue goes live, publish a native LinkedIn share and ping your team in Slack so marketing can amplify it.
Build me an agent workflow that turns every newly published beehiiv issue into a native-feeling LinkedIn share, then announces it in Slack so marketing knows to amplify.
Trigger: run on a cron. Every hour between 8am and 6pm local time Monday through Friday, plus once at 9am local time on Saturday and Sunday. The workflow keeps a high-water mark of the newest publish_date it has ever processed and uses that on the next run to find only issues published since then.
On each run, do the following:
1. Call beehiiv List Posts for my publication, filtered to status=confirmed, ordered newest first. Compare each result's publish_date to the stored high-water mark and collect any posts newer than it. Skip anything whose status is not confirmed (drafts, scheduled, archived). Also skip anything whose post ID has already been processed (dedupe by post ID so we never repost the same issue, even if the schedule overlaps).
2. For each new post, call beehiiv Get Post with content expansion so you have the full body, the title, the web URL, the subtitle if present, and the authors. Also grab the last 3 to 5 previously published posts (any status=confirmed) via List Posts + Get Post so you can read the newsletter's actual voice.
3. Draft the LinkedIn share as plain text (no markdown, LinkedIn does not render it). Match the tone you learned from the recent posts. Use this structure:
- Line 1: a scroll-stopping hook pulled from the piece itself (a surprising claim, stat, or reframe from the body). Never start with "Excited to share" or "New post".
- A blank line, then a one-sentence framing of what the post is about.
- Three tight takeaways as bullets, each a single line, starting with a bold-feeling verb. Use standard bullet characters that render on LinkedIn (for example a small arrow or dash).
- A short CTA ("Full breakdown here" / "Read the whole thing") followed by the post's public web URL on its own line.
Keep the whole thing under about 1300 characters so it fits above LinkedIn's "see more" fold gracefully. No em dashes. No hashtags unless the newsletter's own voice uses them.
4. Publish the draft using linkedin Create Post as a text-only post from the connected LinkedIn identity (default to the personal profile the user connected; if they configured a company page URN, post as that page instead). Capture the returned post URN and build the public LinkedIn share URL from it.
5. Send a Slack notification via slackbot Send a Message to the channel the user picked (default #marketing). The message should include: the newsletter issue title, the beehiiv web URL, the LinkedIn share URL that just went live, and a preview of the copy that was posted (the first ~500 characters, as a code block or quoted section). Format it so it's scannable at a glance.
6. Update the high-water mark to the newest publish_date processed on this run, and record every post ID that was successfully shared so the dedupe set survives across runs.
Error handling: if LinkedIn Create Post fails, do not update the dedupe record for that post so it retries on the next run, and post a Slack message flagging the failure with the post title and the error. If beehiiv List Posts returns nothing new, exit quietly without sending Slack noise.
Inputs the user should configure once at setup: the beehiiv publication ID, the LinkedIn identity to post as (personal vs. company page URN), the Slack channel to notify, the local timezone for the cron schedule, and optionally an override for the tone ("punchy", "analytical", "warm") that beats the learned voice.
Additional information
What does this prompt do?
- Watches your beehiiv publication and picks up any newly published issue on a schedule you choose.
- Turns each new post into a LinkedIn share with a scroll-stopping opener, three tight takeaways, a short call to action, and the link back to the full read.
- Publishes the LinkedIn post for you, then drops a note in a Slack channel with the title, the LinkedIn share link, and a preview of what went live.
- Learns your newsletter's voice from your recent issues so the LinkedIn copy sounds like you, not like a template.
What do I need to use this?
- A beehiiv workspace where you can create an API key (Owner or Admin role).
- A LinkedIn account you want the posts published from, connected once through General Input.
- A Slack workspace where the General Input bot can post into the channel you pick (for example your #marketing or #announcements channel).
How can I customize it?
- Change the schedule. The default runs hourly on weekday business hours and once each weekend morning, but you can make it faster, slower, or timezone-specific.
- Pick a different Slack channel, or add multiple channels so the right teams get pinged.
- Tune the LinkedIn template. Swap the number of bullets, add a signature emoji, force a specific hashtag set, or ask it to always end with a question.
Frequently asked questions
Will this repost old newsletter issues the first time it runs?
Can it accidentally share the same post twice?
Does it share drafts or archived posts?
Can I have it post to a LinkedIn Company Page instead of my personal profile?
What if I want to approve the LinkedIn copy before it goes live?
Related templates
Stop copy-pasting every newsletter to LinkedIn.
Connect beehiiv, LinkedIn, and Slack once, and Geni turns every new issue into a native LinkedIn share and a team ping automatically.