AutomationFlowsAI & RAG › Auto-publish Latest News on X with AI Content Generation Using Keywords and…

Auto-publish Latest News on X with AI Content Generation Using Keywords and…

Original n8n title: Auto-publish Latest News on X with AI Content Generation Using Keywords and Bright Data

ByDvir Sharon @dvirsharon on n8n.io

A comprehensive n8n automation that fetches the latest news based on keywords, generates AI-powered social media content, and automatically publishes to X (Twitter) with complete tracking and notification systems.

Event trigger★★★★☆ complexityAI-powered16 nodesForm TriggerAgentOpenAI ChatHTTP RequestTwitterGoogle SheetsGmail
AI & RAG Trigger: Event Nodes: 16 Complexity: ★★★★☆ AI nodes: yes Added:

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

This workflow follows the Agent → Form Trigger 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
{
  "id": "UcRJot2fG84lnzNa",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Publish Latest  News on X and Other Social Media Platforms Using Keyword",
  "tags": [],
  "nodes": [
    {
      "id": "9208debf-56cf-4181-adce-b6fd25713142",
      "name": "Check Final Status1",
      "type": "n8n-nodes-base.if",
      "position": [
        -500,
        40
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "or",
          "conditions": [
            {
              "id": "35ed620d-b5d5-4e97-bcc5-52b283d85616",
              "operator": {
                "name": "filter.operator.equals",
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.status }}",
              "rightValue": "ready"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "906db788-b7c8-4f80-90ed-1d9a556e33d9",
      "name": "On form submission",
      "type": "n8n-nodes-base.formTrigger",
      "position": [
        -1500,
        40
      ],
      "parameters": {
        "options": {},
        "formTitle": "News Publisher",
        "formFields": {
          "values": [
            {
              "fieldLabel": "News Name",
              "placeholder": "news",
              "requiredField": true
            },
            {
              "fieldType": "dropdown",
              "fieldLabel": "Country",
              "fieldOptions": {
                "values": [
                  {
                    "option": "US"
                  },
                  {
                    "option": "IN"
                  },
                  {
                    "option": "GB"
                  },
                  {
                    "option": "AU"
                  }
                ]
              },
              "requiredField": true
            }
          ]
        },
        "formDescription": "publish latest news to direct social medial"
      },
      "typeVersion": 2.2
    },
    {
      "id": "e1462542-ddd9-417a-a467-6671e4d68fda",
      "name": "Wait 1 Minutes",
      "type": "n8n-nodes-base.wait",
      "position": [
        -720,
        40
      ],
      "parameters": {
        "amount": 30
      },
      "typeVersion": 1.1
    },
    {
      "id": "53f4a578-b098-459e-bdad-ccf1e9508994",
      "name": "AI Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        0,
        20
      ],
      "parameters": {
        "text": "=You are a professional social media strategist. You'll receive three inputs: a news headline, a URL to the full article, and a country code. \nFirst, understand the headline like a news summary. Then analyze the URL content to extract or simulate key facts, context, quotes, or figures. Use the country code to adjust the tone and hashtags to suit the local audience. \nYour task is to write a post for X (formerly Twitter), within 260 characters, that is clear, engaging, and informative. \n- Do not include any intro, outro, publisher names, or brand mentions. \n- Only output the final tweet text with relevant, topic-based and country-specific hashtags.\n- always output in english langauge.\nhere is the title: \"{{ $json.title }}\" \nhere is the URL: \"{{ $json.url }}\"\ncountry code: \"{{ $json.country }}\"",
        "options": {},
        "promptType": "define"
      },
      "typeVersion": 2
    },
    {
      "id": "cfebdd34-a1f8-47b7-9e2f-8edea038a6b3",
      "name": "OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        0,
        260
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o",
          "cachedResultName": "gpt-4o"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "c9514ac6-f29c-490f-8d33-2409eea93973",
      "name": "Get News URL from Google News",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -220,
        20
      ],
      "parameters": {
        "url": "=https://api.brightdata.com/datasets/v3/snapshot/{{ $json.snapshot_id }}",
        "options": {},
        "sendQuery": true,
        "sendHeaders": true,
        "queryParameters": {
          "parameters": [
            {
              "name": "format",
              "value": "json"
            }
          ]
        },
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "Bearer YOUR_TOKEN_HERE"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "30b391cb-f56f-4d27-b39c-a3db422c249f",
      "name": "Fetch Latest News",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -1240,
        40
      ],
      "parameters": {
        "url": "https://api.brightdata.com/datasets/v3/trigger",
        "method": "POST",
        "options": {},
        "jsonBody": "=[\n  {\n    \"url\": \"https://news.google.com/\",\n    \"keyword\": \"{{ $json['News Name'] }}\",\n    \"country\": \"{{ $json.Country }}\",\n    \"language\": \"\"\n  }\n] ",
        "sendBody": true,
        "sendQuery": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "queryParameters": {
          "parameters": [
            {
              "name": "dataset_id",
              "value": "gd_lnsxoxzi1omrwnka5r"
            },
            {
              "name": "include_errors",
              "value": "true"
            },
            {
              "name": "limit_multiple_results",
              "value": "1"
            }
          ]
        },
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "Bearer YOUR_TOKEN_HERE"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "5982536a-2887-408d-ad8b-ec74fc3b7d52",
      "name": "X",
      "type": "n8n-nodes-base.twitter",
      "position": [
        440,
        20
      ],
      "parameters": {
        "text": "={{ $json.output }}",
        "additionalFields": {}
      },
      "credentials": {
        "twitterOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "eddbcbbe-2ef7-4e44-8799-572a9f368213",
      "name": "tweet to URL",
      "type": "n8n-nodes-base.code",
      "position": [
        680,
        20
      ],
      "parameters": {
        "jsCode": "function generateTweetUrl(tweetId) {\n  if (!tweetId || isNaN(tweetId)) {\n    return null;\n  }\n  return `https://twitter.com/i/web/status/${tweetId}`;\n}\n\n// Loop through all input items and process them\nreturn $input.all().map(item => {\n  const tweetId = item.json.tweetId || item.json.id || item.json.tweet_id;\n  const tweetUrl = generateTweetUrl(tweetId);\n  return {\n    json: {\n      ...item.json,\n      tweetUrl,\n    }\n  };\n});"
      },
      "typeVersion": 2
    },
    {
      "id": "e94dd4c9-2c9f-49a8-bf3b-13491e2f9617",
      "name": "Google Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        940,
        20
      ],
      "parameters": {
        "columns": {
          "value": {
            "Tweet URL": "={{ $json.tweetUrl }}",
            "Tweet Message": "={{ $json.text }}"
          },
          "schema": [
            {
              "id": "Tweet URL",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Tweet URL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Tweet Message",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Tweet Message",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1koxNrwdeuaSBdREuKc7JQh3d9blEk0sQDJ8VgVLjPOo/edit#gid=0",
          "cachedResultName": "Data"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1koxNrwdeuaSBdREuKc7JQh3d9blEk0sQDJ8VgVLjPOo",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1koxNrwdeuaSBdREuKc7JQh3d9blEk0sQDJ8VgVLjPOo/edit?usp=drivesdk",
          "cachedResultName": "Publish Latest  News on Social Media Platforms Using Keyword"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "57fc5e5f-6ecd-4933-be5d-02223eae1d9a",
      "name": "Check Snapshot ID Status",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -960,
        40
      ],
      "parameters": {
        "url": "=https://api.brightdata.com/datasets/v3/progress/{{ $json.snapshot_id }}",
        "options": {},
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "Bearer YOUR_TOKEN_HERE"
            }
          ]
        }
      },
      "typeVersion": 4.2,
      "alwaysOutputData": true
    },
    {
      "id": "1dda70c1-9eca-484e-b109-ca297fcdfe72",
      "name": "Gmail",
      "type": "n8n-nodes-base.gmail",
      "position": [
        1160,
        20
      ],
      "parameters": {
        "sendTo": "=raushan@iwantonlinemarketing.com ",
        "message": "=<p>Hello,</p>  <p>Your news tweet has been published successfully on X (formerly Twitter).</p>  <p>You can view it here: <a href=\"{{ $json['Tweet URL'] }}\" target=\"_blank\">Click to view your tweet</a></p>  <p>Best regards,<br> Team</p>",
        "options": {},
        "subject": "Your News Has Been Published on X (Twitter)"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "8412946a-0b83-4c94-a5e7-bcf11dc77780",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1040,
        -100
      ],
      "parameters": {
        "width": 700,
        "height": 420,
        "content": "## Checking Snapshot ID status in While Loops\n"
      },
      "typeVersion": 1
    },
    {
      "id": "54d35176-cc63-43e2-aabc-bca61fb249af",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -240,
        -120
      ],
      "parameters": {
        "width": 560,
        "height": 520,
        "content": "## Scrap Latest News and Generate Content\ncrapping lastest news from google news and generaint content"
      },
      "typeVersion": 1
    },
    {
      "id": "2992d27f-fb9b-45b2-a4d2-8baffa5faa53",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        920,
        -80
      ],
      "parameters": {
        "width": 560,
        "height": 320,
        "content": "## Update URL in Sheet and Sent Success Mail"
      },
      "typeVersion": 1
    },
    {
      "id": "f1868b0b-c58d-4252-82a7-5399cf22bb0f",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        380,
        -80
      ],
      "parameters": {
        "width": 460,
        "height": 320,
        "content": "## Publishing on X"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "056a411e-ed25-4f5f-ad70-f032b6e21eca",
  "connections": {
    "X": {
      "main": [
        [
          {
            "node": "tweet to URL",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Agent": {
      "main": [
        [
          {
            "node": "X",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "tweet to URL": {
      "main": [
        [
          {
            "node": "Google Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Sheets": {
      "main": [
        [
          {
            "node": "Gmail",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait 1 Minutes": {
      "main": [
        [
          {
            "node": "Check Final Status1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Latest News": {
      "main": [
        [
          {
            "node": "Check Snapshot ID Status",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "On form submission": {
      "main": [
        [
          {
            "node": "Fetch Latest News",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Final Status1": {
      "main": [
        [
          {
            "node": "Get News URL from Google News",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Check Snapshot ID Status",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Snapshot ID Status": {
      "main": [
        [
          {
            "node": "Wait 1 Minutes",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get News URL from Google News": {
      "main": [
        [
          {
            "node": "AI Agent",
            "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.

Pro

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

About this workflow

A comprehensive n8n automation that fetches the latest news based on keywords, generates AI-powered social media content, and automatically publishes to X (Twitter) with complete tracking and notification systems.

Source: https://n8n.io/workflows/4556/ — 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

The workflow runs every hour with a randomized delay of 5–20 minutes to help distribute load. It records the exact date and time a lead is emailed so you can track outreach. Follow-ups are automatical

Google Sheets, Agent, OpenAI Chat +5
AI & RAG

This n8n workflow automates turning short user ideas into production-ready real-estate marketing assets (photorealistic images and optional 360° videos). A form submission seeds a prompt board → an LL

Form Trigger, Google Sheets, Agent +6
AI & RAG

Transform your manual hiring process into an intelligent evaluation system that saves 15-20 minutes per candidate! This workflow automates the entire candidate assessment pipeline - from CSV/XLSX uplo

Form Trigger, Google Sheets, Google Drive +8
AI & RAG

This workflow automates the entire Calendly onboarding and offboarding process for company users. It relies on form submissions, Google Sheets as a source of truth, AI-generated HR emails, man-in-the-

OpenAI Chat, Google Sheets, Form Trigger +4
AI & RAG

This n8n workflow is designed for e-commerce businesses, digital marketers, and content creators who want to automatically generate professional 3D product videos from product images. It's perfect for

Form Trigger, Google Drive, HTTP Request +9