AutomationFlowsAI & RAG › Generate AI Tweets Mimicking Any Twitter User's Style with Openai

Generate AI Tweets Mimicking Any Twitter User's Style with Openai

ByPiotr Sobolewski @piotrsobolewski on n8n.io

How it works

Event trigger★★★★☆ complexityAI-powered7 nodesTwitterOpenAI
AI & RAG Trigger: Event Nodes: 7 Complexity: ★★★★☆ AI nodes: yes Added:

This workflow corresponds to n8n.io template #6665 — we link there as the canonical source.

This workflow follows the OpenAI → Twitter 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 →

Download .json
{
  "nodes": [
    {
      "name": "Manual Trigger",
      "type": "n8n-nodes-base.manualTrigger",
      "notes": {
        "text": "### 1. Start Workflow\n\nThis `Manual Trigger` node is used for easy testing of your style mimicry. \n\n**To trigger the workflow manually:** Click the 'Execute Workflow' button in the top right.\n\n**For automation:** You could connect this to a `Webhook` (if you build a simple form to input handles/content) or integrate it with a content calendar system.",
        "position": "right"
      },
      "position": [
        240,
        300
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "name": "Set Target & Content",
      "type": "n8n-nodes-base.set",
      "notes": {
        "text": "### 2. Define Target Handle & New Content\n\nThis `Set` node defines who's style you want to copy and what topic you want to tweet about.\n\n**Setup:**\n1.  **`targetTwitterHandle`:** **IMPORTANT:** Change `@n8n_io` to the Twitter handle (username, e.g., `@elonmusk`, `@TheOnion`) of the user whose style you want to mimic.\n2.  **`newTweetContent`:** Describe clearly what you want the AI to write about in the target style.\n\n**For automation:** These values could come from a previous node (e.g., from a spreadsheet, a form input, or an RSS feed item).",
        "position": "right"
      },
      "position": [
        460,
        300
      ],
      "parameters": {
        "values": [
          {
            "name": "targetTwitterHandle",
            "value": "@n8n_io"
          },
          {
            "name": "newTweetContent",
            "value": "Describe the new features coming in n8n version 1.35 focused on advanced AI integrations and new credential types. Make it exciting!"
          }
        ],
        "options": {}
      },
      "typeVersion": 2
    },
    {
      "name": "Get User's Tweets",
      "type": "n8n-nodes-base.twitter",
      "notes": {
        "text": "### 3. Get User's Recent Tweets\n\nThis `Twitter` node fetches recent tweets from the specified `targetTwitterHandle`. These tweets will serve as examples for the AI to learn the style.\n\n**Setup:**\n1.  **Twitter Credential:** Click 'Credentials' and select 'New Credential'. Choose 'Twitter API'. You'll need to create a Twitter Developer App, get API keys/tokens, and configure them in n8n. Ensure your app has **Read** permissions for user timelines.\n2.  **User ID:** This field automatically pulls the `targetTwitterHandle` from the previous node.\n3.  **Max Results:** Adjust the number of tweets to fetch. More tweets provide more context for the AI, but also consume more tokens in the next step.\n\n**Test this node by executing it and checking the output to ensure tweets are fetched correctly.**",
        "position": "right"
      },
      "position": [
        700,
        300
      ],
      "parameters": {
        "userId": "={{ $json.targetTwitterHandle }}",
        "options": {
          "exclude": [
            "retweets"
          ],
          "maxResults": 30
        },
        "resource": "tweet",
        "operation": "getUserTimeline"
      },
      "credentials": {
        "twitterApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "name": "Prepare Style Examples",
      "type": "n8n-nodes-base.function",
      "notes": {
        "text": "### 4. Prepare Style Examples for AI\n\nThis `Function` node extracts the text content from the fetched tweets and formats them into a clean, list-like string. This string will be embedded directly into the AI prompt.\n\n**Output:** It creates a `tweetExamples` field with formatted tweets and passes along `newTweetContent` for the next step.\n\n**No configuration needed here**; it processes the tweet data.",
        "position": "right"
      },
      "position": [
        940,
        300
      ],
      "parameters": {
        "options": {},
        "function": "let tweetExamples = \"\";\n\nif (items.length === 0) {\n  tweetExamples = \"No example tweets found. Cannot mimic style.\";\n} else {\n  tweetExamples = items.map(item => `- \"${item.json.text}\"`).join('\\n');\n}\n\nreturn [{ json: { tweetExamples: tweetExamples, newTweetContent: items[0].json.newTweetContent } }];"
      },
      "typeVersion": 1
    },
    {
      "name": "AI: Mimic Style & Generate Tweet",
      "type": "n8n-nodes-base.openAi",
      "notes": {
        "text": "### 5. AI: Mimic Style & Generate Tweet (The Magic!)\n\nThis `OpenAI` node is where the core style mimicry happens. It receives the example tweets and your new content, then generates a tweet in the learned style.\n\n**Setup:**\n1.  **OpenAI Credential:** Select your existing OpenAI API Key credential.\n2.  **Model:** Choose `gpt-3.5-turbo` for general use, or `gpt-4o` (or `gpt-4`) for superior style replication at a higher cost.\n3.  **Prompts:** The 'System' prompt provides the example tweets, and the 'User' prompt gives the AI the new content to rewrite.\n\n**Output:** The AI-generated tweet will be in `{{ $node[\"AI: Mimic Style & Generate Tweet\"].json.choices[0].message.content }}`.",
        "position": "right"
      },
      "position": [
        1180,
        300
      ],
      "parameters": {
        "model": "gpt-3.5-turbo",
        "options": {},
        "messages": [
          {
            "role": "system",
            "content": "You are a highly skilled AI specializing in replicating specific writing styles. Your task is to analyze the provided example tweets and then rewrite new content in that exact style. Pay attention to tone, vocabulary, phrasing, brevity, emoji usage, and any unique quirks. The output should be a standalone tweet.\n\nExample Tweets (from target user):\n{{ $json.tweetExamples }}"
          },
          {
            "role": "user",
            "content": "Rewrite the following content as a tweet, mimicking the style of the examples:\n\nOriginal Content: {{ $json.newTweetContent }}"
          }
        ]
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "name": "Consolidate Generated Tweet",
      "type": "n8n-nodes-base.set",
      "notes": {
        "text": "### 6. Consolidate Generated Tweet\n\nThis `Set` node simply consolidates the AI-generated tweet into a clearly named field (`generatedTweet`) for easy access in subsequent nodes (e.g., for publishing or review).\n\n**No configuration needed here**; it just maps the data from the previous AI node.",
        "position": "right"
      },
      "position": [
        1420,
        300
      ],
      "parameters": {
        "values": [
          {
            "name": "generatedTweet",
            "value": "={{ $node[\"AI: Mimic Style & Generate Tweet\"].json.choices[0].message.content }}"
          }
        ],
        "options": {}
      },
      "typeVersion": 2
    },
    {
      "name": "Publish Generated Tweet (Optional)",
      "type": "n8n-nodes-base.twitter",
      "notes": {
        "text": "### 7. Publish Generated Tweet (Optional)\n\nThis `Twitter` node allows you to directly publish the AI-generated tweet to your Twitter account.\n\n**Setup:**\n1.  **Twitter Credential:** Select the same Twitter API credential you used for 'Get User's Tweets'. Ensure your app has **Write** permissions (Tweet, Retweet, etc.).\n2.  **Text:** This field pulls the `generatedTweet` from the previous node.\n\n**IMPORTANT:**\n* **Review before publishing!** The AI might not always get the style perfectly or generate content you want to share. It's highly recommended to review the output first.\n* **To disable auto-publishing:** Simply disconnect this node or set it to 'Inactive' if you only want to review the generated tweet without sending it directly.",
        "position": "right"
      },
      "position": [
        1660,
        300
      ],
      "parameters": {
        "text": "={{ $json.generatedTweet }}",
        "options": {},
        "resource": "tweet",
        "operation": "create"
      },
      "credentials": {
        "twitterApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    }
  ],
  "version": 1,
  "connections": {
    "Manual Trigger": {
      "main": [
        [
          {
            "node": "Set Target & Content",
            "type": "main"
          }
        ]
      ]
    },
    "Get User's Tweets": {
      "main": [
        [
          {
            "node": "Prepare Style Examples",
            "type": "main"
          }
        ]
      ]
    },
    "Set Target & Content": {
      "main": [
        [
          {
            "node": "Get User's Tweets",
            "type": "main"
          }
        ]
      ]
    },
    "Prepare Style Examples": {
      "main": [
        [
          {
            "node": "AI: Mimic Style & Generate Tweet",
            "type": "main"
          }
        ]
      ]
    },
    "Consolidate Generated Tweet": {
      "main": [
        [
          {
            "node": "Publish Generated Tweet (Optional)",
            "type": "main"
          }
        ]
      ]
    },
    "AI: Mimic Style & Generate Tweet": {
      "main": [
        [
          {
            "node": "Consolidate Generated Tweet",
            "type": "main"
          }
        ]
      ]
    }
  }
}

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.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

How it works

Source: https://n8n.io/workflows/6665/ — original creator credit. Request a take-down →

More AI & RAG workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

AI & RAG

Automate professional engagement on X (formerly Twitter) by searching for, filtering, liking, and replying to tweets that match your key topics. This workflow enables you to engage consistently and ef

Twitter, OpenAI
AI & RAG

Ask questions like “How much did I spend on food last month?” and get instant answers from your financial data — directly in Telegram.

Telegram Trigger, OpenAI, Google Sheets +2
AI & RAG

The Problem That it Solves

Google Drive Trigger, OpenAI, Google Drive +5
AI & RAG

This intelligent email automation workflow helps you maximize engagement through domain-based outreach. It utilizes AI-powered personalization and strategic follow-ups to increase response rates. The

Gmail, HTTP Request, Google Sheets +1
AI & RAG

Note: Now includes an Apify alternative for Rapid API (Some users can't create new accounts on Rapid API, so I have added an alternative for you. But immediately you are able to get access to Rapid AP

Form Trigger, Google Sheets Trigger, OpenAI +2