{
  "meta": {
    "templateCredsSetupCompleted": false
  },
  "name": "AI Content Repurposer: turn each new blog/RSS post into LinkedIn, X & a content-calendar draft",
  "tags": [],
  "nodes": [
    {
      "id": "b2c3d4e5-0001-4a10-9a01-bb2222220001",
      "name": "Overview",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1280,
        40
      ],
      "parameters": {
        "width": 540,
        "height": 780,
        "content": "## \ud83d\udd01 AI Content Repurposer\n\n**Who it's for:** Founders, marketers, agencies and creators who publish long-form content (blog, newsletter, YouTube) and want it turned into social posts automatically \u2014 without hiring a writer for every channel.\n\n**What it does:** On a schedule it pulls the newest item from any RSS feed, then an AI rewrites it in *your* brand voice into:\n- an SEO-optimized blog rewrite (title + meta description)\n- a LinkedIn post\n- an X / Twitter thread\n\nEvery piece is logged to a Google Sheets **content calendar**, sent to you as a **Gmail draft** to review, and shared in **Slack**.\n\n### How it works\n1. **Schedule Trigger** runs daily.\n2. **Set Brand & Source** holds your feed URL, audience and tone \u2014 *edit this one node*.\n3. **Get Latest Article** + **Take Newest Only** fetch one fresh post.\n4. **Repurpose into Content** returns `{ seo_title, meta_description, blog_post, linkedin_post, twitter_thread, hashtags }`.\n5. **Save to Content Calendar**, **Draft for Review** and **Share in Slack** distribute it.\n\n### Setup (~5 min)\n- Add **OpenAI**, **Google Sheets**, **Gmail** & **Slack** credentials.\n- Open **Set Brand & Source**: paste your RSS feed, audience and brand voice.\n- Pick your sheet & Slack channel, then activate."
      },
      "typeVersion": 1
    },
    {
      "id": "b2c3d4e5-0002-4a10-9a01-bb2222220002",
      "name": "Warning",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1280,
        840
      ],
      "parameters": {
        "color": 3,
        "width": 540,
        "height": 220,
        "content": "## \u26a0\ufe0f Before you run\n- Each run = ~1 OpenAI call. Use a cheap model (e.g. `gpt-4o-mini`).\n- **Take Newest Only** keeps the run to a single post so you don't reprocess the whole feed; raise the limit to backfill.\n- Output is saved as a **draft** \u2014 review before publishing. Connect a LinkedIn / X / Buffer node later to auto-publish.\n- This template ships **without credentials** \u2014 connect your own OpenAI, Google Sheets, Gmail & Slack accounts."
      },
      "typeVersion": 1
    },
    {
      "id": "b2c3d4e5-0003-4a10-9a01-bb2222220003",
      "name": "Section: Source",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -680,
        -20
      ],
      "parameters": {
        "color": 4,
        "width": 880,
        "height": 600,
        "content": "## 1 \u00b7 Pick up the latest content\nRun on a schedule, define your brand voice + feed, then fetch the single newest post.\n**Edit only the \"Set Brand & Source\" node.**"
      },
      "typeVersion": 1
    },
    {
      "id": "b2c3d4e5-0004-4a10-9a01-bb2222220004",
      "name": "Section: Repurpose",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        220,
        -20
      ],
      "parameters": {
        "color": 5,
        "width": 360,
        "height": 600,
        "content": "## 2 \u00b7 Repurpose with AI\nRewrite the source into an SEO blog post, a LinkedIn post and an X/Twitter thread \u2014 all in your brand voice \u2014 as structured JSON."
      },
      "typeVersion": 1
    },
    {
      "id": "b2c3d4e5-0005-4a10-9a01-bb2222220005",
      "name": "Section: Distribute",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        600,
        -20
      ],
      "parameters": {
        "color": 6,
        "width": 540,
        "height": 600,
        "content": "## 3 \u00b7 Distribute & review\nLog every piece to a Google Sheets content calendar, send yourself a Gmail draft to review, and share it in your team's Slack channel."
      },
      "typeVersion": 1
    },
    {
      "id": "b2c3d4e5-0010-4a10-9a01-bb2222220010",
      "name": "Every Day",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -620,
        240
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "hours",
              "hoursInterval": 24
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "b2c3d4e5-0011-4a10-9a01-bb2222220011",
      "name": "Set Brand & Source",
      "type": "n8n-nodes-base.set",
      "position": [
        -380,
        240
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "s1",
              "name": "rss_feed_url",
              "type": "string",
              "value": "https://blog.n8n.io/rss/"
            },
            {
              "id": "s2",
              "name": "audience",
              "type": "string",
              "value": "Founders and marketers who want practical automation tips"
            },
            {
              "id": "s3",
              "name": "brand_voice",
              "type": "string",
              "value": "Clear, helpful and confident. No hype, no emojis-spam, no jargon. Short sentences. Lead with the value."
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "b2c3d4e5-0012-4a10-9a01-bb2222220012",
      "name": "Get Latest Article",
      "type": "n8n-nodes-base.rssFeedRead",
      "position": [
        -140,
        240
      ],
      "parameters": {
        "url": "={{ $json.rss_feed_url }}",
        "options": {}
      },
      "typeVersion": 1.1
    },
    {
      "id": "b2c3d4e5-0013-4a10-9a01-bb2222220013",
      "name": "Take Newest Only",
      "type": "n8n-nodes-base.limit",
      "position": [
        80,
        240
      ],
      "parameters": {
        "maxItems": 1
      },
      "typeVersion": 1
    },
    {
      "id": "b2c3d4e5-0014-4a10-9a01-bb2222220014",
      "name": "Repurpose into Content",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "position": [
        300,
        240
      ],
      "parameters": {
        "text": "=You are a senior content strategist. Repurpose the source content below for the brand.\n\nAudience: {{ $('Set Brand & Source').item.json.audience }}\nBrand voice: {{ $('Set Brand & Source').item.json.brand_voice }}\n\nSource title:\n{{ $json.title }}\n\nSource content:\n{{ $json.contentSnippet || $json.content }}\n\nSource link: {{ $json.link }}\n\nReturn:\n- seo_title: a punchy, search-friendly title (<= 60 chars).\n- meta_description: a 150-160 char summary for SEO.\n- blog_post: a rewritten, original blog post in markdown (~400-600 words) in the brand voice. Do not copy sentences verbatim.\n- linkedin_post: a LinkedIn post (hook + value + soft CTA), no more than 1300 chars.\n- twitter_thread: an X/Twitter thread as an array of tweets, each <= 270 chars.\n- hashtags: 3-5 relevant hashtags as a single string.",
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 1.5
    },
    {
      "id": "b2c3d4e5-0015-4a10-9a01-bb2222220015",
      "name": "OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        260,
        480
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o-mini",
          "cachedResultName": "gpt-4o-mini"
        },
        "options": {}
      },
      "typeVersion": 1.2
    },
    {
      "id": "b2c3d4e5-0016-4a10-9a01-bb2222220016",
      "name": "Parse Content (JSON)",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        440,
        480
      ],
      "parameters": {
        "jsonSchemaExample": "{\n  \"seo_title\": \"5 Automations That Save Teams 10 Hours a Week\",\n  \"meta_description\": \"Practical, no-code automations any team can set up this week to cut busywork and move faster.\",\n  \"blog_post\": \"## Intro\\n...\",\n  \"linkedin_post\": \"Most teams lose hours to copy-paste work...\",\n  \"twitter_thread\": [\"1/ Most teams waste 10 hrs/week on busywork. Here are 5 fixes:\", \"2/ ...\"],\n  \"hashtags\": \"#automation #nocode #productivity\"\n}"
      },
      "typeVersion": 1.2
    },
    {
      "id": "b2c3d4e5-0017-4a10-9a01-bb2222220017",
      "name": "Save to Content Calendar",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        660,
        100
      ],
      "parameters": {
        "columns": {
          "value": {
            "Date": "={{ $now.toISO() }}",
            "Status": "Draft",
            "SEO Title": "={{ $json.output.seo_title }}",
            "Source Link": "={{ $('Take Newest Only').item.json.link }}",
            "Source Title": "={{ $('Take Newest Only').item.json.title }}",
            "LinkedIn Post": "={{ $json.output.linkedin_post }}",
            "Twitter Thread": "={{ $json.output.twitter_thread.join('\\n\\n') }}"
          },
          "schema": [],
          "mappingMode": "defineBelow",
          "matchingColumns": []
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "id",
          "value": "gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "YOUR_GOOGLE_SHEET_ID"
        }
      },
      "typeVersion": 4.5
    },
    {
      "id": "b2c3d4e5-0018-4a10-9a01-bb2222220018",
      "name": "Draft for Review",
      "type": "n8n-nodes-base.gmail",
      "position": [
        660,
        300
      ],
      "parameters": {
        "message": "=SEO TITLE\n{{ $json.output.seo_title }}\n\nMETA DESCRIPTION\n{{ $json.output.meta_description }}\n\n=== BLOG POST ===\n{{ $json.output.blog_post }}\n\n=== LINKEDIN ===\n{{ $json.output.linkedin_post }}\n\n=== X / TWITTER THREAD ===\n{{ $json.output.twitter_thread.join('\\n\\n') }}\n\n{{ $json.output.hashtags }}",
        "options": {},
        "subject": "=Content draft: {{ $json.output.seo_title }}",
        "resource": "draft",
        "emailType": "text"
      },
      "typeVersion": 2.1
    },
    {
      "id": "b2c3d4e5-0019-4a10-9a01-bb2222220019",
      "name": "Share in Slack",
      "type": "n8n-nodes-base.slack",
      "position": [
        660,
        500
      ],
      "parameters": {
        "text": "=:memo: *New content ready to review:* {{ $json.output.seo_title }}\nFrom: {{ $('Take Newest Only').item.json.link }}\n\n*LinkedIn draft:*\n{{ $json.output.linkedin_post }}",
        "select": "channel",
        "resource": "message",
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": "",
          "cachedResultName": ""
        },
        "operation": "post",
        "otherOptions": {}
      },
      "typeVersion": 2.3
    }
  ],
  "settings": {
    "executionOrder": "v1"
  },
  "connections": {
    "Every Day": {
      "main": [
        [
          {
            "node": "Set Brand & Source",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Take Newest Only": {
      "main": [
        [
          {
            "node": "Repurpose into Content",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Repurpose into Content",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Get Latest Article": {
      "main": [
        [
          {
            "node": "Take Newest Only",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Brand & Source": {
      "main": [
        [
          {
            "node": "Get Latest Article",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Parse Content (JSON)": {
      "ai_outputParser": [
        [
          {
            "node": "Repurpose into Content",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Repurpose into Content": {
      "main": [
        [
          {
            "node": "Save to Content Calendar",
            "type": "main",
            "index": 0
          },
          {
            "node": "Draft for Review",
            "type": "main",
            "index": 0
          },
          {
            "node": "Share in Slack",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}