This workflow corresponds to n8n.io template #17813 — we link there as the canonical source.
This workflow follows the Agent → Gmail recipe pattern — see all workflows that pair these two integrations.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"id": "bDQlTb3hD9Duq3Rc",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "Multi-Angle Article-to-Carousel Publisher",
"tags": [],
"nodes": [
{
"id": "c4e3f660-eee6-44a4-9ef7-87180e5a20f4",
"name": "RSS Feed Trigger",
"type": "n8n-nodes-base.rssFeedReadTrigger",
"position": [
-1664,
-288
],
"parameters": {
"feedUrl": "https://techcrunch.com/feed/",
"pollTimes": {
"item": [
{
"mode": "everyMinute"
}
]
}
},
"typeVersion": 1
},
{
"id": "5fdc04c9-06c3-40da-982d-6838045a0b2f",
"name": "AI Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
-1344,
-288
],
"parameters": {
"text": "=You are an expert content strategist.\n\nAnalyze this TechCrunch article.\n\nTitle:\n{{ $('RSS Feed Trigger').item.json.title }}\n\nContent:\n{{ $('RSS Feed Trigger').item.json.contentSnippet }}\n\nURL:\n{{ $('RSS Feed Trigger').item.json.link }}\n\nYour task is to identify 3 unique LinkedIn content angles.\n\nEach angle should target a different audience.\n\nPossible audiences:\n- Developers\n- Founders\n- Marketers\n- SaaS builders\n- AI enthusiasts\n\nReturn ONLY valid JSON.\n\n{\n \"angles\": [\n {\n \"audience\": \"\",\n \"angle\": \"\",\n \"hook\": \"\"\n }\n ]\n}",
"options": {},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 3.1
},
{
"id": "adb93799-9793-481d-aff2-54605a21ae8f",
"name": "Structured Output Parser",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
-1168,
-96
],
"parameters": {
"jsonSchemaExample": "{\n \"angles\": [\n {\n \"audience\": \"Developers\",\n \"angle\": \"How autonomous vehicles are changing software engineering\",\n \"hook\": \"Everyone is talking about AI replacing developers. The bigger shift is happening elsewhere.\"\n },\n {\n \"audience\": \"Founders\",\n \"angle\": \"What startups can learn from robotaxi competition\",\n \"hook\": \"The next billion-dollar opportunity isn't another chatbot.\"\n },\n {\n \"audience\": \"Marketers\",\n \"angle\": \"How this news can become engaging LinkedIn content\",\n \"hook\": \"Most people will share this news. Here's how to stand out instead.\"\n }\n ]\n}"
},
"typeVersion": 1.3
},
{
"id": "5d5369a8-0fc1-4122-ba29-a6cb6990a1ef",
"name": "Google Gemini Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
-1376,
-96
],
"parameters": {
"options": {}
},
"credentials": {
"googlePalmApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.1
},
{
"id": "1844a01c-e96d-49ee-8913-34a0fb02cb19",
"name": "Split Out",
"type": "n8n-nodes-base.splitOut",
"position": [
-944,
-288
],
"parameters": {
"options": {},
"fieldToSplitOut": "output.angles"
},
"typeVersion": 1
},
{
"id": "f4da0538-11a1-42e7-ba12-83bf7c5ca21f",
"name": "Generate a post from an article URL with AI",
"type": "@postnitro/n8n-nodes-postnitro-ai.postNitro",
"onError": "continueErrorOutput",
"position": [
-528,
-288
],
"parameters": {
"brandId": "cmi93qz66000wl504dtl0nloh",
"presetId": "cmr96cp9i0001k1040wqqpip9",
"operation": "aiFromArticle",
"articleUrl": "={{ $('RSS Feed Trigger').item.json.link }}",
"templateId": "cmrnc0pvm000ql504luhyx3at"
},
"credentials": {
"postNitroApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "f4abd467-9967-4b5b-b0a8-4bd86c730e26",
"name": "Limit",
"type": "n8n-nodes-base.limit",
"position": [
-768,
-288
],
"parameters": {},
"typeVersion": 1
},
{
"id": "49cae764-d733-440f-a340-053d32582272",
"name": "scheduled post for instagram",
"type": "@postnitro/n8n-nodes-postnitro-ai.postNitro",
"position": [
-256,
-304
],
"parameters": {
"status": "DRAFT",
"designId": "={{ $json.data.result.designId }}",
"resource": "scheduledPost",
"postContent": {
"instagram": "={{ $('Split Out').item.json.hook }}"
},
"scheduledAt": "={{ $now.plus(1, 'day').toFormat('yyyy-MM-dd HH:mm:ss') }}",
"platformSettings": {
"instagramPostSettings": "{\n \"postType\": \"carousel\",\n \"postAsStory\": false\n}"
},
"selectedAccounts": [
"cms5zbt61000ijw04kgql7mzx"
]
},
"credentials": {
"postNitroApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "c34719ff-1812-4314-882f-c7375e7a8430",
"name": "scheduled post for linkdin",
"type": "@postnitro/n8n-nodes-postnitro-ai.postNitro",
"position": [
-256,
-480
],
"parameters": {
"status": "DRAFT",
"designId": "={{ $json.data.result.designId }}",
"resource": "scheduledPost",
"postContent": {
"linkedin": "={{ $('Split Out').item.json.hook }}"
},
"scheduledAt": "={{ $now.plus(1, 'day').toFormat('yyyy-MM-dd HH:mm:ss') }}",
"platformSettings": {
"linkedinPostSettings": "{\n \"postType\": \"document\",\n \"postTitle\": null\n}"
},
"selectedAccounts": [
"cmrabkwrp0001jp04tateajp3"
]
},
"credentials": {
"postNitroApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "cbc43f64-2154-4d9d-9ebe-873910fd9050",
"name": "Send a message",
"type": "n8n-nodes-base.gmail",
"position": [
-176,
192
],
"parameters": {
"sendTo": "user@example.com",
"message": "=Error: {{ $json.error }} Article: {{ $('RSS Feed Trigger').item.json.link }} Angle attempted: {{ $('Split Out').item.json.angle }}",
"options": {},
"subject": "=\u26a0\ufe0f Failed to generate post \u2014 {{ $('Split Out').item.json.angle }}"
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"typeVersion": 2.2
},
{
"id": "075f8147-4f1f-4a25-a50c-9d8c0a62ec0b",
"name": "Merge",
"type": "n8n-nodes-base.merge",
"position": [
-16,
-400
],
"parameters": {
"mode": "combine",
"options": {},
"combineBy": "combineByPosition"
},
"typeVersion": 3.2
},
{
"id": "00cd78ec-b2b0-4c39-9563-36974a6c1c22",
"name": "Send a message1",
"type": "n8n-nodes-base.gmail",
"position": [
224,
-400
],
"parameters": {
"sendTo": "user@example.com",
"message": "=A new post was generated and scheduled as a draft on both platforms. Angle: {{ $('Split Out').item.json.angle }} Audience: {{ $('Split Out').item.json.audience }} LinkedIn: {{ $('scheduled post for linkdin').item.json.status }} (scheduled {{ $('scheduled post for linkdin').item.json.scheduledFor }}) Instagram: {{ $('scheduled post for instagram').item.json.status }} (scheduled {{ $('scheduled post for instagram').item.json.scheduledFor }}) Review both drafts in your PostNitro dashboard before publishing.",
"options": {},
"subject": "=\u2705 Post scheduled \u2014 {{ $('Split Out').item.json.audience }}"
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"typeVersion": 2.2
},
{
"id": "4863dde7-d523-44ce-acd3-9a69b277d9be",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2320,
-704
],
"parameters": {
"color": "#FFBE6F",
"width": 592,
"height": 960,
"content": "## Multi-Angle Article-to-Carousel Publisher\n\nWatches a TechCrunch RSS feed for new articles. An AI agent identifies \n3 distinct content angles (different audiences), and each angle is \nturned into its own carousel and scheduled as a draft on both LinkedIn \nand Instagram. Sends a confirmation or failure email per angle.\n\n### How it works\n1. **RSS Feed Trigger** polls TechCrunch for new articles.\n2. **AI Agent** (Gemini) analyzes the article and returns 3 angles, \n each with an audience, angle description, and hook.\n3. **Split Out** turns the 3 angles into separate items.\n4. **PostNitro AI** generates a carousel design per angle, using the \n article URL.\n5. Each angle branches into two parallel drafts:\n - \u2705 **LinkedIn** draft (document post)\n - \u2705 **Instagram** draft (carousel post)\n6. **Merge** syncs both platform results per angle.\n7. \u2705 Success \u2192 one email per angle confirming both drafts.\n8. \u274c Failure \u2192 error emailed with the article link and angle attempted.\n\n### Setup\n\u2610 Connect **PostNitro Embed** account (templateId, brandId, presetId)\n\u2610 Connect **Google Gemini** account (API key from aistudio.google.com)\n\u2610 Connect **Gmail** account\n\u2610 Confirm LinkedIn and Instagram account IDs in both scheduled-post nodes\n\u2610 Confirm the RSS feed URL (currently TechCrunch)\n\n### Customization\n- Swap `feedUrl` to monitor a different source\n- Change poll frequency (currently every minute)\n- Adjust `scheduledAt` offset (currently +1 day)"
},
"typeVersion": 1
},
{
"id": "6dd16d42-7650-4263-a29d-0a2ab1795815",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1440,
-528
],
"parameters": {
"width": 448,
"height": 576,
"content": "## 2. Identify content angles\nAI analyzes the article and returns 3 angles (audience, angle, hook) \nas structured JSON."
},
"typeVersion": 1
},
{
"id": "cb6df8d2-c82d-4b24-8161-5cd8ba68dce4",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1696,
-512
],
"parameters": {
"width": 224,
"height": 352,
"content": "## 1. Watch for new articles\nPolls the TechCrunch feed for new posts."
},
"typeVersion": 1
},
{
"id": "5bc02cd1-0341-4e5e-98e2-f95e67671288",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-304,
-704
],
"parameters": {
"width": 448,
"height": 608,
"content": "## 5. Success: draft on both platforms\nCreates a LinkedIn + Instagram draft per angle, then syncs both \nbefore notifying."
},
"typeVersion": 1
},
{
"id": "9d117ea2-7265-4111-a19f-ebf948edf9c0",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
-624,
-528
],
"parameters": {
"width": 288,
"height": 416,
"content": "## 4. Generate carousel design\nBuilds a carousel from the article URL via PostNitro AI."
},
"typeVersion": 1
},
{
"id": "17b88262-f1e8-481a-9ba3-73abd167ce31",
"name": "Sticky Note6",
"type": "n8n-nodes-base.stickyNote",
"position": [
-976,
-528
],
"parameters": {
"width": 336,
"height": 416,
"content": "## 3. Process angles individually\nSplits angles into separate items; Limit caps how many run per \nexecution."
},
"typeVersion": 1
},
{
"id": "99eaeace-cac4-4a8a-b59b-f035b951bf0a",
"name": "Sticky Note7",
"type": "n8n-nodes-base.stickyNote",
"position": [
-256,
32
],
"parameters": {
"color": "#C64600",
"width": 400,
"height": 320,
"content": "## 6. Failure: alert\nEmails the article link and angle if carousel generation fails."
},
"typeVersion": 1
},
{
"id": "b918880d-4d5c-4af2-bfab-a9b7b608a6f7",
"name": "Sticky Note8",
"type": "n8n-nodes-base.stickyNote",
"position": [
160,
-624
],
"parameters": {
"width": 352,
"height": 416,
"content": "## 7. Success: notify\nEmails a summary confirming both drafts were created."
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"binaryMode": "separate",
"availableInMCP": false,
"executionOrder": "v1"
},
"versionId": "a670f390-9695-4211-8d3d-4246ecf7c549",
"nodeGroups": [],
"connections": {
"Limit": {
"main": [
[
{
"node": "Generate a post from an article URL with AI",
"type": "main",
"index": 0
}
]
]
},
"Merge": {
"main": [
[
{
"node": "Send a message1",
"type": "main",
"index": 0
}
]
]
},
"AI Agent": {
"main": [
[
{
"node": "Split Out",
"type": "main",
"index": 0
}
]
]
},
"Split Out": {
"main": [
[
{
"node": "Limit",
"type": "main",
"index": 0
}
]
]
},
"RSS Feed Trigger": {
"main": [
[
{
"node": "AI Agent",
"type": "main",
"index": 0
}
]
]
},
"Google Gemini Chat Model": {
"ai_languageModel": [
[
{
"node": "AI Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Structured Output Parser": {
"ai_outputParser": [
[
{
"node": "AI Agent",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"scheduled post for linkdin": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 0
}
]
]
},
"scheduled post for instagram": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 1
}
]
]
},
"Generate a post from an article URL with AI": {
"main": [
[
{
"node": "scheduled post for linkdin",
"type": "main",
"index": 0
},
{
"node": "scheduled post for instagram",
"type": "main",
"index": 0
}
],
[
{
"node": "Send a message",
"type": "main",
"index": 0
}
]
]
}
}
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
gmailOAuth2googlePalmApipostNitroApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow monitors the TechCrunch RSS feed, uses Google Gemini to generate three distinct LinkedIn content angles per article, then uses PostNitro AI to build a carousel design and schedule matching draft posts for LinkedIn and Instagram, sending Gmail notifications for…
Source: https://n8n.io/workflows/17813/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
This workflow polls the TechCrunch RSS feed for new articles, uses Google Gemini to generate three LinkedIn content angles, then uses PostNitro to create a carousel design and schedule draft posts for
22-Automate_Multi_Platform_Social_Media_Content_Creation. Uses outputParserStructured, lmChatGoogleGemini, lmChatOpenAi, httpRequest. Event-driven trigger; 57 nodes.
This workflow contains community nodes that are only compatible with the self-hosted version of n8n.
This comprehensive n8n workflow automates the complete process of generating professional interior design moodboards from concept to client delivery. Users submit a design brief through a form, and th
Youtube Video: https://youtu.be/42-oHh9w9Eo This workflow listens for Slack @mentions, uses Google Gemini to classify the request and extract invoice details, then reads and updates Google Sheets, gen