Free workflow: AI Content Repurposing — 1 blog post → 4 platforms (Twitter, LinkedIn, Instagram, Facebook)

Hey everyone,

Built this workflow at Automatia BCN and wanted to share a free version with

the community.

**What it does:**

You send a blog post or article via webhook, and it automatically generates

optimized content for 4 platforms:

  • **Twitter/X thread** (5-7 tweets, numbered format)

  • **LinkedIn post** (professional tone, engagement hooks, hashtags)

  • **Instagram caption** (emoji strategy, 20+ hashtags, save-worthy CTA)

  • **Facebook post** (conversational, no external links for better reach)

Each output follows that platform’s specific best practices — it’s not just

the same text reformatted.

**How it works:**

1. Webhook receives your content (POST request)

2. AI analyzes key points, tone, and audience

3. Generates 4 platform-specific outputs in parallel

4. Saves everything to Google Sheets

**Requirements:**

  • OpenAI API key (gpt-4o-mini, costs ~$0.01 per run)

  • Google Sheets (for output storage)

**How to use:**

1. Import the JSON below into n8n

2. Connect your OpenAI and Google Sheets credentials

3. Set the `FLOWSCRIBE_SHEET_ID` environment variable

4. Send a POST request with your content

Example request:

```json

{

"title": "Why Remote Work Is the Future",

"content": "Your article text here (min 50 characters)...",

"brand_voice": "professional yet approachable"

}

The workflow has Sticky Notes inside explaining each section.

This is a Lite version — we also built a full version that generates for 8

platforms (adding TikTok scripts, newsletters, Pinterest, and SEO meta) with

A/B testing and posting schedules. Available at

FlowScribe — AI Content Repurposing Engine (1 Content → 8 Platforms) if you want the complete

package, but this Lite version is fully functional on its own.

Download the workflow JSON:

Get it free (along with 2 more workflows) at:

AutoFlow Free Starter Pack — 3 AI Automation Workflows for n8n

Or import this JSON directly:

{“name”:“FlowScribe Lite — Quick 4-Platform Repurpose”,“nodes”:[{“parameters”:

{“httpMethod”:“POST”,“path”:“flowscribe-lite”,“responseMode”:“responseNode”,"o

ptions":{}},“id”:“trigger-webhook”,“name”:"Receive

Content",“type”:“n8n-nodes-base.webhook”,“typeVersion”:2,“position”:[200,400],

“webhookId”:“flowscribe-lite-input”},{“parameters”:{“jsCode”:"const body =

$input.first().json.body || $input.first().json;\nconst content = body.content

|| body.text || ‘’;\nconst title = body.title || ‘Untitled’;\nconst

brandVoice = body.brand_voice || ‘professional yet approachable’;\n\nif

(!content || content.trim().length < 50) {\n throw new Error('Content must be

at least 50 characters.');\n}\n\nreturn [{\n json: { content, title,

brandVoice, requestId: require(‘crypto’).randomUUID(), processedAt: new

Date().toISOString() }\n}];"},“id”:“validate-input”,“name”:"Validate

Input",“type”:“n8n-nodes-base.code”,“typeVersion”:2,“position”:[400,400]},{"pa

rameters":{“model”:“gpt-4o-mini”,“messages”:{“values”:[{“role”:“system”,"conte

nt":"Analyze the content and extract: 5 key points, core message in one

sentence, 10 hashtags, 5 SEO keywords. Respond in JSON: { keyPoints,

coreMessage, hashtags, seoKeywords }“},{“role”:“user”,“content”:”=Title:

{{$json.title}}\nBrand Voice: {{$json.brandVoice}}\n\nContent:\n{{$json.conten

t}}"}]},“options”:{“temperature”:0.3,“maxTokens”:1000,“responseFormat”:"json_o

bject"}},“id”:“ai-analysis”,“name”:“AI: Quick Analysis”,“type”:"n8n-nodes-base

.openAi",“typeVersion”:1.8,“position”:[600,400],“retryOnFail”:true,“maxTries”:

3,“waitBetweenTries”:2000},{“parameters”:{“jsCode”:"let analysis;\ntry {\n

analysis = JSON.parse($input.first().json.message?.content || ‘{}’);\n} catch

(e) {\n throw new Error('Failed to parse AI analysis: ’ +

e.message);\n}\nconst original = $(‘Validate Input’).first().json;\nreturn [{

json: { …original, analysis } }];"},“id”:“merge-data”,“name”:"Merge

Data",“type”:“n8n-nodes-base.code”,“typeVersion”:2,“position”:[800,400]},{"par

ameters":{“model”:“gpt-4o-mini”,“messages”:{“values”:[{“role”:“system”,"conten

t":"Create a Twitter/X thread (5-7 tweets, each under 280 chars). First tweet:

powerful hook. Last: CTA + hashtags. Use numbered format 1/, 2/. JSON: {

\“thread\”: [\“tweet1\”, …] }“},{“role”:“user”,“content”:”=Title:

{{$json.title}}\nKey Points:

{{JSON.stringify($json.analysis.keyPoints)}}\nCore Message:

{{$json.analysis.coreMessage}}\nBrand Voice:

{{$json.brandVoice}}"}]},“options”:{“temperature”:0.7,“maxTokens”:1200,"respon

seFormat":“json_object”}},“id”:“gen-twitter”,“name”:"Generate: Twitter

Thread",“type”:“n8n-nodes-base.openAi”,“typeVersion”:1.8,“position”:[1040,200]

,“retryOnFail”:true,“maxTries”:3,“waitBetweenTries”:2000},{“parameters”:{"mode

l":“gpt-4o-mini”,“messages”:{“values”:[{“role”:“system”,“content”:"Create a

LinkedIn post: bold first line, short paragraphs, personal insight, end with

question, 3-5 hashtags. 1300-1800 chars. JSON: { \“post\”: \“…\”

}“},{“role”:“user”,“content”:”=Title: {{$json.title}}\nKey Points:

{{JSON.stringify($json.analysis.keyPoints)}}\nCore Message:

{{$json.analysis.coreMessage}}\nBrand Voice:

{{$json.brandVoice}}"}]},“options”:{“temperature”:0.7,“maxTokens”:1000,"respon

seFormat":“json_object”}},“id”:“gen-linkedin”,“name”:"Generate: LinkedIn

Post",“type”:“n8n-nodes-base.openAi”,“typeVersion”:1.8,“position”:[1040,400],"

retryOnFail":true,“maxTries”:3,“waitBetweenTries”:2000},{“parameters”:{“model”

:“gpt-4o-mini”,“messages”:{“values”:[{“role”:“system”,“content”:"Create an

Instagram caption: hook line, micro-story, emojis, CTA, 20-30 hashtags in

separate block. JSON: { \“caption\”: \“…\”, \“hashtags\”: […]

}“},{“role”:“user”,“content”:”=Title: {{$json.title}}\nKey Points:

{{JSON.stringify($json.analysis.keyPoints)}}\nBrand Voice:

{{$json.brandVoice}}"}]},“options”:{“temperature”:0.75,“maxTokens”:1200,"respo

nseFormat":“json_object”}},“id”:“gen-instagram”,“name”:"Generate: Instagram

Caption",“type”:“n8n-nodes-base.openAi”,“typeVersion”:1.8,“position”:[1040,600

],“retryOnFail”:true,“maxTries”:3,“waitBetweenTries”:2000},{“parameters”:{"mod

el":“gpt-4o-mini”,“messages”:{“values”:[{“role”:“system”,“content”:"Create a

Facebook post: relatable opening, story format, 100-250 words, conversation

question at end, no external links, friendly tone. JSON: { \“post\”: \“…\”

}“},{“role”:“user”,“content”:”=Title: {{$json.title}}\nKey Points:

{{JSON.stringify($json.analysis.keyPoints)}}\nBrand Voice:

{{$json.brandVoice}}"}]},“options”:{“temperature”:0.7,“maxTokens”:800,"respons

eFormat":“json_object”}},“id”:“gen-facebook”,“name”:"Generate: Facebook

Post",“type”:“n8n-nodes-base.openAi”,“typeVersion”:1.8,“position”:[1040,800],"

retryOnFail":true,“maxTries”:3,“waitBetweenTries”:2000},{“parameters”:{"jsCode

":"const original = $(‘Merge Data’).first().json;\nconst parse = (n) => { try

{ return JSON.parse($(n).first().json.message?.content || ‘{}’); } catch(e) {

return { error: e.message }; } };\n\nconst result = {\n requestId:

original.requestId,\n title: original.title,\n completedAt: new

Date().toISOString(),\n platforms: {\n twitter: parse('Generate: Twitter

Thread’),\n linkedin: parse(‘Generate: LinkedIn Post’),\n instagram:

parse(‘Generate: Instagram Caption’),\n facebook: parse('Generate: Facebook

Post’)\n }\n};\n\nreturn [{ json: result

}];"},“id”:“collect-results”,“name”:"Collect

Results",“type”:“n8n-nodes-base.code”,“typeVersion”:2,“position”:[1300,500]},{

“parameters”:{“operation”:“append”,“documentId”:{“__rl”:true,“value”:"={{

$env.FLOWSCRIBE_SHEET_ID

}}“,“mode”:“id”},“sheetName”:{”__rl":true,“value”:"Lite

Log",“mode”:“name”},“columns”:{“mappingMode”:“defineBelow”,“value”:{"Request

ID":“={{ $json.requestId }}”,“Title”:“={{ $json.title }}”,“Completed At”:"={{

$json.completedAt }}“,“Twitter Thread”:”={{

JSON.stringify($json.platforms.twitter.thread) }}“,“LinkedIn Post”:”={{

$json.platforms.linkedin.post }}“,“Instagram Caption”:”={{

$json.platforms.instagram.caption }}“,“Facebook Post”:”={{

$json.platforms.facebook.post

}}"}},“options”:{}},“id”:“save-sheets”,“name”:"Save to Google

Sheets",“type”:“n8n-nodes-base.googleSheets”,“typeVersion”:4.5,“position”:[152

0,400],“retryOnFail”:true,“maxTries”:2},{“parameters”:{“respondWith”:“json”,"r

esponseBody":"={{ JSON.stringify({ success: true, requestId: $json.requestId,

title: $json.title, platforms: [‘twitter’, ‘linkedin’, ‘instagram’,

‘facebook’], message: ‘4 platform contents generated. Check Google Sheets.’ })

}}"},“id”:“respond-success”,“name”:"Respond:

Success",“type”:“n8n-nodes-base.respondToWebhook”,“typeVersion”:1.1,“position”

:[1520,600]},{“parameters”:{“content”:"## FlowScribe Lite — Quick 4-Platform

Repurpose\n\nSimplified version with 4 core platforms:\nTwitter/X | LinkedIn |

Instagram | Facebook\n\nFaster processing, lower API cost.\nIdeal for daily

content repurposing.",“width”:350,“height”:200,“color”:6},“id”:“note-overview”

,“name”:“Sticky Note”,“type”:“n8n-nodes-base.stickyNote”,“typeVersion”:1,"posi

tion":[120,160]}],“connections”:{“Receive Content”:{“main”:[[{“node”:"Validate

Input",“type”:“main”,“index”:0}]]},“Validate Input”:{“main”:[[{“node”:"AI:

Quick Analysis",“type”:“main”,“index”:0}]]},"AI: Quick

Analysis":{“main”:[[{“node”:“Merge Data”,“type”:“main”,“index”:0}]]},"Merge

Data":{“main”:[[{“node”:"Generate: Twitter

Thread",“type”:“main”,“index”:0},{“node”:"Generate: LinkedIn

Post",“type”:“main”,“index”:0},{“node”:"Generate: Instagram

Caption",“type”:“main”,“index”:0},{“node”:"Generate: Facebook

Post",“type”:“main”,“index”:0}]]},"Generate: Twitter

Thread":{“main”:[[{“node”:"Collect

Results",“type”:“main”,“index”:0}]]},"Generate: LinkedIn

Post":{“main”:[[{“node”:"Collect

Results",“type”:“main”,“index”:0}]]},"Generate: Instagram

Caption":{“main”:[[{“node”:"Collect

Results",“type”:“main”,“index”:0}]]},"Generate: Facebook

Post":{“main”:[[{“node”:“Collect Results”,“type”:“main”,“index”:0}]]},"Collect

Results":{“main”:[[{“node”:"Save to Google

Sheets",“type”:“main”,“index”:0},{“node”:“Respond: Success”,“type”:“main”,"ind

ex":0}]]}},“settings”:{“executionOrder”:“v1”,“saveManualExecutions”:true},"tag

s":[{“name”:“FlowScribe”,“id”:“flowscribe”},{“name”:“AutoFlow”,“id”:“autoflow”

},{“name”:“Lite”,“id”:“lite”}],“meta”:{“instanceId”:“flowscribe-lite-v1”}}

Happy automating!

— Automatia BCN, Barcelona