Slack + LinkedIn drafts from any URL, review-ready
You know the feeling. You find a great URL to share, then lose 45 minutes turning it into something “LinkedIn-ready,” chasing an image, and copying drafts into Slack for feedback.
This Slack LinkedIn drafts automation hits content marketers first, but founders and agency leads get stuck in the same loop. The outcome is simple: one URL becomes a post draft plus a matching visual, delivered to Slack in a reviewable format.
Below you’ll see how the workflow runs, where approvals happen, and what to tweak so drafts sound like you (not like everyone else).
How This Automation Works
See how this solves the problem:
n8n Workflow Template: Slack + LinkedIn drafts from any URL, review-ready
flowchart LR
subgraph sg0["On form submission Flow"]
direction LR
n0["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/form.svg' width='40' height='40' /></div><br/>On form submission"]
n1@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat Model", pos: "b", h: 48 }
n2@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set Post", pos: "b", h: 48 }
n3@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set Params", pos: "b", h: 48 }
n4@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set Post1", pos: "b", h: 48 }
n5@{ icon: "mdi:robot", form: "rounded", label: "Image Prompt Generator", pos: "b", h: 48 }
n6@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set Image Prompt", pos: "b", h: 48 }
n7@{ icon: "mdi:robot", form: "rounded", label: "Check Post Text Feedback", pos: "b", h: 48 }
n8@{ icon: "mdi:robot", form: "rounded", label: "Check Image Feedback", pos: "b", h: 48 }
n9@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set Image Prompt1", pos: "b", h: 48 }
n10@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set Image Prompt2", pos: "b", h: 48 }
n11@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat Model1", pos: "b", h: 48 }
n12@{ icon: "mdi:cog", form: "rounded", label: "Generate on-brand image", pos: "b", h: 48 }
n13["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/slack.svg' width='40' height='40' /></div><br/>Final Version"]
n14["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/form.svg' width='40' height='40' /></div><br/>Generate Image"]
n15["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/slack.svg' width='40' height='40' /></div><br/>Human Revision of Text"]
n16["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/slack.svg' width='40' height='40' /></div><br/>Human Review of Visual"]
n17@{ icon: "mdi:robot", form: "rounded", label: "Generate Post Text", pos: "b", h: 48 }
n18["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/airtop.svg' width='40' height='40' /></div><br/>Get Page"]
n18 --> n3
n2 --> n15
n4 --> n17
n3 --> n17
n14 --> n6
n6 --> n5
n1 -.-> n7
n9 --> n12
n10 --> n12
n17 --> n2
n0 --> n18
n11 -.-> n8
n8 --> n10
n8 --> n13
n16 --> n8
n15 --> n7
n5 --> n9
n12 --> n16
n7 --> n4
n7 --> n6
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n0,n14 trigger
class n5,n7,n8,n17 ai
class n1,n11 aiModel
classDef customIcon fill:none,stroke:none
class n0,n13,n14,n15,n16,n18 customIcon
The Challenge: Turning Good Links Into Review-Ready LinkedIn Posts
Sharing a URL on LinkedIn should be easy. In practice, it turns into a mini production cycle: skim the page, pull the key points, draft the post, rewrite the hook twice, then hunt for an image that doesn’t look like generic stock. After that comes the real slowdown. Feedback arrives in scattered Slack messages, someone suggests a different angle, and you’re juggling “final_v3_really_final” text in three places. Multiply that by a few posts a week and it becomes a quiet time leak that steals momentum.
It adds up fast. Here’s where it breaks down.
- Drafts get created in too many places, so your “source of truth” keeps moving.
- Teams spend about an hour per post just compressing a long page into something skimmable.
- Visuals are an afterthought, which means inconsistent branding and weaker engagement.
- Approvals happen in chat fragments, so edits get missed and posts stall for days.
The Fix: URL-to-LinkedIn Drafts With Slack Approvals
This workflow turns one input (a web page URL) into a complete LinkedIn draft package that’s easy to review. You submit the URL through a simple form along with optional instructions like “make it more opinionated” or “focus on the case study results.” The automation scrapes the page content using Airtop, then an AI model writes a clear, educational post designed for LinkedIn’s format. Next, a second AI step creates a visual prompt aligned to the post, and a sub-workflow renders that into a branded image. Finally, everything is sent into Slack with dedicated review messages for text and visuals, so feedback can trigger revisions instead of starting the process over.
The workflow starts with a form submission and a scrape of your target URL. From there, AI generates the post and a matching visual prompt, then hands off image rendering to a sub-workflow. Slack becomes the review hub: approve, request revisions, or decline, and the workflow routes the next action automatically.
What Changes: Before vs. After
| What This Eliminates | Impact You’ll See |
|---|---|
|
|
Real-World Impact
Say you share 3 URLs per week (a blog post, a case study, and a product update). Manually, a typical cycle is about 45 minutes to write a decent post plus maybe 30 minutes to sort out a visual, then another 15 minutes wrangling feedback in Slack. Call it about 1.5 hours per post, or roughly 4-5 hours each week. With this workflow, you spend about 5 minutes submitting the URL and notes, then review the draft in Slack when it arrives. You’re usually down to about 30 minutes total time across the whole week.
Requirements
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Slack for review, approvals, and revision feedback.
- Airtop to scrape and extract web page content.
- OpenAI credentials (get them from your OpenAI dashboard’s API keys page)
Skill level: Intermediate. You’ll connect accounts, add credentials, and adjust a couple of prompts and Slack destinations.
Need help implementing this? Talk to an automation expert (free 15-minute consultation).
The Workflow Flow
A URL kicks everything off. A form trigger collects the page link and any instructions (tone, audience, what to highlight), so you don’t have to rewrite briefs each time.
The page is scraped and cleaned up. Airtop extracts the web page content, and n8n maps the fields into a consistent payload that the writing model can understand.
Draft and visual concept are generated. One AI step writes the LinkedIn post, another produces a visual prompt, and the workflow stores that output so it’s easy to revise without redoing everything.
Slack becomes the approval system. The workflow sends text for review, routes feedback through classifiers (approve vs revise vs decline), and triggers reprocessing when revisions are requested. When it’s approved, Slack receives the final post and the final image, ready to publish.
You can easily modify the writing style and the image branding rules based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Form Trigger
Set up the two intake forms that start the workflow: one for full post generation and one for image-only requests.
- Open Form Intake Trigger and set Form Title to
LinkedIn Post Generatorand Form Description toFill out these fields and you'll have a full LinkedIn post ready to go in a minute.. - In Form Intake Trigger > Form Fields, add Page URL (required) and Instructions (textarea) as shown.
- Open Image-Only Intake and set Form Title to
Generate Imageand Form Description toStart here if you have the post and just want to generate and revise the visual for it. - In Image-Only Intake > Form Fields, add a required Post textarea field.
Step 2: Connect Airtop for Web Scraping
Configure the web scraping node that extracts page content for the post draft.
- Open Scrape Web Page and set Resource to
extractionand Operation toscrape. - Set URL to
={{ $json['Page URL'] }}and Session Mode tonew. - Credential Required: Connect your
airtopApicredentials in Scrape Web Page.
Step 3: Set Up Processing and AI Generation
Map inputs, generate the draft post, and produce the visual prompt with OpenAI.
- In Map Input Fields, map fields using expressions: URL to
={{ $('Form Intake Trigger').item.json['Page URL'] }}, Instructions to={{ $('Form Intake Trigger').item.json.Instructions }}, and Webpage_content to={{ $json.data.modelResponse.scrapedContent.text }}. - Open Compose Post Draft and keep the full prompt in Text, including
{{ $json.Instructions }},{{ $json.Post }}, and{{ $json.Webpage_content }}. Credential Required: Connect youropenAiApicredentials. - In Assemble Post Payload, set URL to
={{ $('Map Input Fields').item.json.URL }}and Post to={{ $json.output }}to package the draft for review. - Open Initialize Image Prompt and set Post to
={{ $json.Post || $('Assemble Post Payload').item.json.Post}}to support both trigger paths. - In Create Visual Prompt, keep the detailed prompt in Text and leave Resource as
assistant. Credential Required: Connect youropenAiApicredentials. - In Store Prompt Output, map Image_prompt to
={{ $json.output }}so the prompt is available to the sub-workflow.
Step 4: Configure Reviews, Revisions, and Delivery
Set up the Slack review loop, classification, revisions, and final delivery of the post and visual.
- Open Request Text Review and set Message to
=---------------- {{ $json.Post }} ----------------- Based on: {{ $json.URL }}, Operation tosendAndWait, and Response Type tofreeText. Credential Required: Connect yourslackOAuth2Apicredentials. - In Classify Text Feedback, keep Input Text as
={{ $json.data.text }}; this routes feedback to Apply Text Revisions and Initialize Image Prompt based on classification. - In Apply Text Revisions, set Instructions to
={{ $json.data.text }}and Post to={{ $('Assemble Post Payload').item.json.Post }}so revisions re-enter Compose Post Draft. - Open Run Sub-Workflow (Configure Required), select the workflow in Workflow ID, and confirm Workflow Inputs map Prompt to
={{ $json.Image_prompt }}and Image_drive_id to={{ $json.Image_id }}. - In Request Visual Review, set Message to
=---------------- POST {{ $('Initialize Image Prompt').item.json.Post }} IMAGE PROMPT {{ $('Store Prompt Output').item.json.Image_prompt }} IMAGE {{ $('Run Sub-Workflow (Configure Required)').item.json.Branded_view_url[0] }} -----------------and keep Operation assendAndWait. Credential Required: Connect yourslackOAuth2Apicredentials. - In Classify Visual Feedback, keep Input Text as
={{ $json.data.text }}; classification routes to Build Prompt Revisions for edits or Post Final Delivery for approvals. - Open Post Final Delivery and set Text to
=---------------- FINAL POST AND VISUAL {{ $('Initialize Image Prompt').item.json.Post }} {{ $('Run Sub-Workflow (Configure Required)').item.json.Branded_view_url[0] }}. Credential Required: Connect yourslackOAuth2Apicredentials.
Step 5: Test and Activate Your Workflow
Validate both intake paths and confirm Slack approvals loop correctly before turning the workflow on.
- Click Execute Workflow and submit the Form Intake Trigger form with a valid URL to confirm Scrape Web Page and Compose Post Draft create a draft.
- Verify Request Text Review posts to Slack and returns feedback to Classify Text Feedback. A successful run should either revise the post via Apply Text Revisions or proceed to Initialize Image Prompt.
- Test the Image-Only Intake path by submitting a post and ensuring Create Visual Prompt and Run Sub-Workflow (Configure Required) produce an image link.
- Confirm Post Final Delivery sends the final post and image URL to Slack when visual feedback is approved.
- Once all paths work, toggle the workflow Active for production use.
Watch Out For
- Slack credentials can expire or need specific permissions. If things break, check the n8n Credentials page and your Slack app scopes first.
- If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
- Default prompts in AI nodes are generic. Add your brand voice early or you’ll be editing outputs forever.
Common Questions
Usually in about an hour once your credentials are ready.
Yes. You’ll mostly connect Slack and Airtop, then paste in OpenAI credentials. If you can handle basic app connections, you can run it.
Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in Airtop and OpenAI API usage, which varies with how long the pages are and how many drafts you generate.
Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.
You can. Most customizations happen in the “Compose Post Draft” prompt and in how you map inputs inside “Map Input Fields.” Teams commonly add a “post style preset” field (technical vs story-driven), enforce a brand glossary (products, capitalization, banned phrases), and tweak the Slack review messages so approvals go to the right channel. If you already have a design system, swap the image sub-workflow for your own branded image generator and keep the rest the same.
It’s usually an expired token or missing Slack app scopes. Reconnect Slack in n8n Credentials, confirm the workflow can post to the target channel, and double-check you didn’t rename or archive the channel used for review. If failures happen only during busy periods, rate limits can also be the culprit, so spacing executions out helps.
For most teams, it comfortably handles dozens of drafts per day, and the main limiter is how quickly you want Slack reviews to happen.
Often, yes, because this workflow isn’t just “URL in, message out.” You’ve got scraping, two AI generation paths (text plus visual prompt), a sub-workflow for image rendering, and a feedback loop that classifies responses and triggers revisions. n8n handles that kind of branching without making you pay extra for every router and every step. Zapier or Make can still work if you want something lightweight, like sending a draft to Slack with no revisions. If you’re unsure which direction fits your team, Talk to an automation expert.
Once this is running, a good URL stops being a “later” task and becomes a draft your team can approve the same day. Honestly, that kind of speed changes your content rhythm.
Need Help Setting This Up?
Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.