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 →
{
"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.
gmailOAuth2googleSheetsOAuth2ApiopenAiApitwitterOAuth2Api
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 →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
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
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
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
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-
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