This workflow corresponds to n8n.io template #6613 — we link there as the canonical source.
This workflow follows the Facebookgraphapi → Google Sheets 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": "7nrbRUkisTTkK3e8",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "Automate Distribution Content Google Sheet & Slack",
"tags": [],
"nodes": [
{
"id": "409d8e05-ad6e-4b6f-ba9e-7e26fe070ec5",
"name": "Google Sheets Trigger",
"type": "n8n-nodes-base.googleSheetsTrigger",
"position": [
0,
0
],
"parameters": {
"event": "rowUpdate",
"options": {},
"pollTimes": {
"item": [
{
"mode": "everyMinute"
}
]
},
"sheetName": {
"__rl": true,
"mode": "id",
"value": "[YOUR_SHEET_NAME]"
},
"documentId": {
"__rl": true,
"mode": "url",
"value": "https://docs.google.com/spreadsheets/d/YOUR_SPREADSHEET_ID_HERE/edit"
}
},
"credentials": {
"googleSheetsTriggerOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "f04569fe-ffd0-4ae5-b284-c71ce26a3f43",
"name": "Content Parameters",
"type": "n8n-nodes-base.set",
"position": [
224,
0
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "f2c1b112-f4ae-40ec-a916-2a8d8af0cd76",
"name": "social_media_text_core",
"type": "string",
"value": "={{ $json.Title }} - {{ $json.Short_Description }}\\nRead more: {{ $json.URL }}\\n{{ $json.Hashtags }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "3ce6b53b-43ad-4b9f-8a97-5e551501f8d5",
"name": "Check Facebook Post",
"type": "n8n-nodes-base.if",
"position": [
448,
0
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "6b10eac9-d290-4250-a573-8f2b6e0969f5",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
},
"leftValue": "={{ $json.Post_to_Facebook }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "97c1ef75-dcf9-4239-939a-947de498668c",
"name": "Post Message",
"type": "n8n-nodes-base.facebookGraphApi",
"position": [
672,
-96
],
"parameters": {
"edge": "={{ $json.social_media_text_core }}",
"node": "[YOUR_FACEBOOK_PAGE_ID]",
"options": {},
"httpRequestMethod": "POST"
},
"typeVersion": 1
},
{
"id": "cd54bbdc-25b7-47b5-9e84-b9bc94b95e66",
"name": "Check Twitter Post",
"type": "n8n-nodes-base.if",
"position": [
672,
96
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "097807a3-4bd8-4d58-b2d5-4d07691c8139",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
},
"leftValue": "={{ $json.Post_to_Twitter }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "4410a6ce-2687-4400-97fe-05903676325a",
"name": "Create Tweet",
"type": "n8n-nodes-base.twitter",
"position": [
896,
0
],
"parameters": {
"text": "={{ $json.social_media_text_core }}",
"additionalFields": {}
},
"credentials": {
"twitterOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 2
},
{
"id": "d71eda0c-5b96-40ac-9e72-0a68c3dff971",
"name": "Check LinkedIn Post",
"type": "n8n-nodes-base.if",
"position": [
896,
192
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "35e581d3-16a2-4e9b-88ff-cc8aba9816d2",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
},
"leftValue": "={{ $json.Post_to_LinkedIn }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "930262d9-f0d2-44d1-b702-b95eb8baddcc",
"name": "Share Update",
"type": "n8n-nodes-base.linkedIn",
"position": [
1120,
192
],
"parameters": {
"text": "={{ $json.social_media_text_core }}\n{{ $json.URL }}",
"postAs": "organization",
"organization": "[YOUR_LINKEDIN_ORG_ID]",
"additionalFields": {},
"binaryPropertyName": "=",
"shareMediaCategory": "IMAGE"
},
"credentials": {
"linkedInOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "699e0dcc-ca88-463e-8cb7-6ed2942c8677",
"name": "Update Publication Status",
"type": "n8n-nodes-base.googleSheets",
"position": [
1344,
192
],
"parameters": {
"columns": {
"value": {},
"schema": [],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "name",
"value": "[YOUR_SHEET_NAME]"
},
"documentId": {
"__rl": true,
"mode": "id",
"value": "[YOUR_GOOGLE_SHEET_CONTENT_ID]"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.6
},
{
"id": "6218283b-1cbe-4e22-babe-334073a76ebc",
"name": "Send Slack Notification",
"type": "n8n-nodes-base.slack",
"position": [
1568,
192
],
"parameters": {
"text": "=New content \"{{ $json.Title }}\" successfully published to social media! \ud83c\udf89 Check: {{ $json.URL }}",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "id",
"value": "[YOUR_SLACK_CHANNEL_ID]"
},
"otherOptions": {}
},
"credentials": {
"slackApi": {
"name": "<your credential>"
}
},
"typeVersion": 2.3
},
{
"id": "1e56067d-18c2-4c40-926c-69e07c78fd9b",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-64,
-176
],
"parameters": {
"color": 3,
"width": 1840,
"height": 608,
"content": "# Flow"
},
"typeVersion": 1
},
{
"id": "cb142585-3cfb-4475-95f8-82d4e7ca5742",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-64,
496
],
"parameters": {
"color": 5,
"width": 1840,
"height": 3504,
"content": "# \"Automated Social Media Content Distribution System,\"\n\n---\n\n### Automated Social Media Content Distribution System\n\n* **Problem Solved:** Many Small and Medium-sized Enterprises (SMEs) struggle with consistently promoting their new content (e.g., blog posts, news updates, announcements) across various social media platforms. The manual process of copying and pasting content to Facebook, Twitter, and LinkedIn every time there's an update is time-consuming, prone to errors, and often leads to delays, resulting in missed audience engagement.\n\n* **Solution Overview:** This n8n workflow automates the entire content distribution process to your social media channels. Simply add the details of your new content (title, URL, short description, image URL, and social media posting preferences) into a single row in a Google Sheet. The system will then automatically publish it to your selected social media platforms, update its publication status in the sheet, and notify your team of the successful distribution. This ensures efficiency, consistency, and frees up your valuable time.\n\n* **For Whom:** This workflow is ideal for:\n * **Small and Medium-sized Enterprises (SMEs):** To automate their marketing efforts without needing dedicated social media managers.\n * **Content Creators & Bloggers:** To effortlessly share new articles and updates across their online presence.\n * **Marketing Teams:** To streamline content promotion and ensure consistent brand messaging.\n * **Anyone looking for a free and efficient way to cross-post content.**\n\n### How It Works (Workflow Stages) \u2699\ufe0f\n\nThis system transforms manual, repetitive tasks into a smooth, automated content distribution pipeline:\n\n1. **Content Submission & Trigger:**\n * You add a new row to your designated Google Sheet with all the content details (Title, URL, Description, Image URL, Hashtags, and boolean flags for which platforms to post to).\n * The **Google Sheets Trigger** node immediately detects this new entry, initiating the workflow.\n\n2. **Content Preparation:**\n * The **Set** node takes the raw data from your Google Sheet and formats it into a cohesive text string (`social_media_text_core`) that is suitable for posting across different social media platforms.\n\n3. **Conditional Social Media Posting:**\n * A series of **If** nodes (`Check Facebook Post`, `Check Twitter Post`, `Check LinkedIn Post`) sequentially check your preferences (based on the `Post_to_Facebook`, `Post_to_Twitter`, `Post_to_LinkedIn` columns in your sheet).\n * If a platform is marked `TRUE`, the corresponding social media node (`Facebook`, `Twitter`, `LinkedIn`) is activated to publish your content. If `FALSE`, that platform is skipped, and the workflow moves to the next check.\n\n4. **Status Update & Notification:**\n * After attempting to post to all selected platforms, the **Google Sheets (Update)** node updates the `Publication_Status` column of your original row to \"Published.\" This prevents re-posting and provides a clear record.\n * Finally, the **Slack (Notification)** node sends an alert to your chosen Slack channel, confirming that the content has been successfully distributed.\n\n### Setup Steps \ud83d\udee0\ufe0f (Build It Yourself!)\n\nFollow these detailed steps to build and implement this workflow in your n8n instance:\n\n1. **Prepare Your Google Sheet:**\n * Create a new Google Sheet (e.g., named \"Social Media Posts\").\n * Set up the following **exact** column headers in the first row:\n `Title`, `URL`, `Short_Description`, `Image_URL`, `Hashtags`, `Post_to_Facebook`, `Post_to_Twitter`, `Post_to_LinkedIn`, `Publication_Status`\n * Fill in a test row with some sample data, ensuring `TRUE`/`FALSE` values for the posting flags.\n\n2. **Gather Your API Keys & Credentials:**\n * **Google Sheets Credential**: You'll need an OAuth2 credential for Google Sheets in n8n to allow read/write access to your sheet.\n * **Facebook Credential**: An OAuth2 credential for Facebook with permissions to post to your selected Page.\n * **Twitter Credential**: A Twitter API credential (API Key, API Secret, Access Token, Access Token Secret) from your Twitter Developer App.\n * **LinkedIn Credential**: An OAuth2 credential for LinkedIn with permissions to share updates to your profile or organization page.\n * **Slack Credential**: A Slack API token (Bot User OAuth Token) for sending messages to your channel.\n\n3. **Build the n8n Workflow Manually (10 Nodes):**\n * Start a new workflow in n8n.\n * Drag and drop each of the following nodes onto the canvas and connect them as described below:\n\n 1. **Google Sheets Trigger**\n * **Name:** `Google Sheets Trigger`\n * **Parameters:**\n * **Authentication:** Select your Google Sheets credential.\n * **Spreadsheet ID:** `[Copy the ID from your Google Sheet's URL]`\n * **Sheet Name:** `[Your Sheet Name, e.g., 'Sheet1' or 'Content']`\n * **Watch For:** `Rows`\n * **Events:** `Added`\n * **Connections:** Output to `Set Content Parameters`.\n\n 2. **Set**\n * **Name:** `Set Content Parameters`\n * **Parameters:**\n * **Values to Set:** Add a new value:\n * **Type:** `String`\n * **Name:** `social_media_text_core`\n * **Value:** `={{ $json.Title }} - {{ $json.Short_Description }}\\nRead more: {{ $json.URL }}\\n{{ $json.Hashtags }}`\n * **Connections:** Output to `Check Facebook Post`.\n\n 3. **If**\n * **Name:** `Check Facebook Post`\n * **Parameters:**\n * **Value 1:** `={{ $json.Post_to_Facebook }}`\n * **Operation:** `is true`\n * **Connections:** `True` output to `Post Facebook Message`. `False` output to `Check Twitter Post`.\n\n 4. **Facebook**\n * **Name:** `Post Facebook Message`\n * **Parameters:**\n * **Authentication:** Select your Facebook credential.\n * **Page ID:** `[YOUR_FACEBOOK_PAGE_ID]`\n * **Message:** `={{ $json.social_media_text_core }}`\n * **Link:** `={{ $json.URL }}`\n * **Picture:** `={{ $json.Image_URL }}`\n * **Options:** `Published` (checked)\n * **Connections:** Output to `Check Twitter Post`.\n\n 5. **If**\n * **Name:** `Check Twitter Post`\n * **Parameters:**\n * **Value 1:** `={{ $json.Post_to_Twitter }}`\n * **Operation:** `is true`\n * **Connections:** `True` output to `Create Tweet`. `False` output to `Check LinkedIn Post`.\n\n 6. **Twitter**\n * **Name:** `Create Tweet`\n * **Parameters:**\n * **Authentication:** Select your Twitter credential.\n * **Tweet:** `={{ $json.social_media_text_core }}`\n * **Image URL:** `={{ $json.Image_URL }}`\n * **Connections:** Output to `Check LinkedIn Post`.\n\n 7. **If**\n * **Name:** `Check LinkedIn Post`\n * **Parameters:**\n * **Value 1:** `={{ $json.Post_to_LinkedIn }}`\n * **Operation:** `is true`\n * **Connections:** `True` output to `Share LinkedIn Update`. `False` output to `Update Publication Status`.\n\n 8. **LinkedIn**\n * **Name:** `Share LinkedIn Update`\n * **Parameters:**\n * **Authentication:** Select your LinkedIn credential.\n * **Resource:** `Share Update`\n * **Type:** `Organization` or `Personal` (Choose as appropriate)\n * **Organization ID:** `[YOUR_LINKEDIN_ORG_ID]` (If `Organization` type selected)\n * **Content:** `={{ $json.social_media_text_core }}`\n * **Content URL:** `={{ $json.URL }}`\n * **Image URL:** `={{ $json.Image_URL }}`\n * **Connections:** Output to `Update Publication Status`.\n\n 9. **Google Sheets**\n * **Name:** `Update Publication Status`\n * **Parameters:**\n * **Authentication:** Select your Google Sheets credential.\n * **Spreadsheet ID:** `[YOUR_GOOGLE_SHEET_CONTENT_ID]`\n * **Sheet Name:** `[Your Sheet Name, e.g., 'Sheet1' or 'Content']`\n * **Operation:** `Update Row`\n * **Key Column:** `URL`\n * **Key Value:** `={{ $json.URL }}`\n * **Values:** Add a new value:\n * **Column:** `Publication_Status`\n * **Value:** `Published`\n * **Connections:** Receives connections from both `Share LinkedIn Update` and the `False` branch of `Check LinkedIn Post`.\n\n 10. **Slack**\n * **Name:** `Send Slack Notification`\n * **Parameters:**\n * **Authentication:** Select your Slack credential.\n * **Chat ID:** `[YOUR_SLACK_CHANNEL_ID]`\n * **Text:** `New content \"{{ $json.Title }}\" successfully published to social media! \ud83c\udf89 Check: {{ $json.URL }}`\n * **Connections:** Output to `Update Publication Status`.\n\n4. **Final Steps & Activation:**\n * **Test the Workflow:** Before activating, manually add a new row to your Google Sheet or use n8n's \"Execute Workflow\" button (if available for triggers). Observe the flow through each node to ensure it behaves as expected and posts to your social media accounts.\n * **Activate Workflow:** Once you are confident it's working correctly, turn the workflow \"Active\" in the top right corner of your n8n canvas.\n\nYou now have a fully automated system for distributing your content across social media from a simple Google Sheet!"
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "3633890b-8499-45ab-ac18-321c35959730",
"connections": {
"Share Update": {
"main": [
[
{
"node": "Update Publication Status",
"type": "main",
"index": 0
}
]
]
},
"Check Twitter Post": {
"main": [
[
{
"node": "Create Tweet",
"type": "main",
"index": 0
}
],
[
{
"node": "Check LinkedIn Post",
"type": "main",
"index": 0
}
]
]
},
"Content Parameters": {
"main": [
[
{
"node": "Check Facebook Post",
"type": "main",
"index": 0
}
]
]
},
"Check Facebook Post": {
"main": [
[
{
"node": "Post Message",
"type": "main",
"index": 0
}
],
[
{
"node": "Check Twitter Post",
"type": "main",
"index": 0
}
]
]
},
"Check LinkedIn Post": {
"main": [
[
{
"node": "Share Update",
"type": "main",
"index": 0
}
]
]
},
"Google Sheets Trigger": {
"main": [
[
{
"node": "Content Parameters",
"type": "main",
"index": 0
}
]
]
},
"Update Publication Status": {
"main": [
[
{
"node": "Send Slack Notification",
"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.
googleSheetsOAuth2ApigoogleSheetsTriggerOAuth2ApilinkedInOAuth2ApislackApitwitterOAuth2Api
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Okay, here are the "How It Works" and "Setup Steps" for your "Automated Social Media Content Distribution System," presented clearly in Markdown.
Source: https://n8n.io/workflows/6613/ — 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 enables multi-platform social media posting using Google Sheets as the control center.
This workflow is built for creators, solopreneurs, SaaS founders, and agencies looking to automate their social media content process from idea to publication. It combines the power of OpenAI, Google
This workflow automates the post-publish process for YouTube videos, combining advanced SEO optimization, cross-platform promotion, and analytics reporting. It is designed for creators, marketers, and
Credentials-Setup. Uses twitter, reddit, googleDocs, googleDrive. Event-driven trigger; 43 nodes.
This AI-powered workflow streamlines your social media posting process, transforming hours of manual caption writing, image uploading, and scheduling into a fully automated system. You define the topi