This workflow corresponds to n8n.io template #12847 — we link there as the canonical source.
This workflow follows the Airtable → Chainllm 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": "877ioymbRzPHfCJehk_eQ",
"name": "TEMPL - Repurpose LK posts to X",
"tags": [
{
"id": "YidW5yq6nFH1kWx6",
"name": "Twitter",
"createdAt": "2026-01-18T10:55:00.843Z",
"updatedAt": "2026-01-18T10:55:00.843Z"
},
{
"id": "g3ZPlgdz6fhFzBWM",
"name": "LinkedIn",
"createdAt": "2025-08-07T16:29:08.849Z",
"updatedAt": "2025-08-07T16:29:08.849Z"
},
{
"id": "gEcmTxdEuNwBQ6jK",
"name": "Airtable",
"createdAt": "2025-09-06T18:57:59.051Z",
"updatedAt": "2025-09-06T18:57:59.051Z"
},
{
"id": "oAJYcGVigztuUBgh",
"name": "Apify",
"createdAt": "2025-09-28T15:56:08.736Z",
"updatedAt": "2025-09-28T15:56:08.736Z"
},
{
"id": "qNP3W9JI3jWy9tgy",
"name": "Templates",
"createdAt": "2025-09-22T19:45:32.302Z",
"updatedAt": "2025-09-22T19:45:32.302Z"
}
],
"nodes": [
{
"id": "0af109fe-a87a-4f3d-bfc7-ec7affd9105c",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
224,
1120
],
"parameters": {
"width": 688,
"height": 1248,
"content": "# Repurpose LinkedIn posts to X (Twitter)\n\n## How it works\n\n### Weekly (Sunday)\n- Fetches your recent LinkedIn posts via Apify scraper\n- Extracts carousel/PDF content using OpenAI vision (if applicable)\n- Transforms each post into 2 variations using Claude AI: a standalone tweet + a thread (3-7 tweets)\n- Saves everything to Airtable with \"Pending\" status\n\n### Daily (12:30)\n- Searches for approved tweets with publication date in the past\n- Posts standalone tweets or full threads to X\n- Updates status to \"Tweeted\"\n\n### Manual trigger (button clicked)\n- Use the \"TWEET NOW\" button in Airtable to publish a specific tweet immediately.\n\n\n## Setup\n\n- [ ] Create an Airtable base with 3 tables: 'Config', 'LK Posts', and 'X Tweets' - or duplicate it from this link: https://airtable.com/appiS2JpMdnxAS5o4/shrXh9iXTnL9fX63L/tbl7B3JblukFTGrAo/viwgajzRGnydUDjnw\n- [ ] Update the Config table with your LinkedIn profile URL\n- [ ] Configure the \u2018TWEET NOW\u2019 button in Airtable with the following URL formula:\n```\"https://your-n8n-server-url/webhook/post-tweet?id=\"&RECORD_ID()```\n- [ ] Connect your API credentials: Apify, OpenAI, OpenRouter, X/Twitter\n- [ ] Adjust the schedule triggers to your timezone\n- [ ] Activate the workflow\n\n\n## Customization\n\n- AI prompt: Edit the \"ConvertPostIntoTweets\" node to adjust tone and style.\n- LLM model: Replace the OpenRouter node with OpenAI or any other LLM node in \"ConvertPostIntoTweets\" if you prefer a different model.\n- Posting delay: Change schedule_tweets_days_after_lk in the Config table.\n- Schedule: Modify \"Weekly_OnSunday\" and \"Daily_AtNoon\" triggers.\n- Scraping: Adjust max_posts and posted_limit in Config table."
},
"typeVersion": 1
},
{
"id": "b3d48bbe-3c65-48a2-8aa3-50c92760cfa5",
"name": "ScrapeLastPosts",
"type": "@apify/n8n-nodes-apify.apify",
"position": [
1872,
1424
],
"parameters": {
"actorId": {
"__rl": true,
"mode": "url",
"value": "https://console.apify.com/actors/A3cAPGpwBEG8RJwse"
},
"timeout": {},
"operation": "Run actor and get dataset",
"customBody": "={\n \"includeQuotePosts\": false,\n \"includeReposts\": false,\n \"maxComments\": 0,\n \"maxPosts\": {{ $('FormatConfig').item.json.max_posts }},\n \"maxReactions\": 0,\n \"postedLimit\": \"{{ $('FormatConfig').item.json.posted_limit }}\",\n \"scrapeComments\": false,\n \"scrapeReactions\": false,\n \"targetUrls\": [\n \"{{ $('FormatConfig').item.json.profile_url }}\"\n ]\n}"
},
"credentials": {
"apifyApi": {
"name": "<your credential>"
}
},
"executeOnce": true,
"retryOnFail": false,
"typeVersion": 1,
"alwaysOutputData": true
},
{
"id": "d60c9a11-7ad8-4416-91f8-12710aa0f1b3",
"name": "LoopOverPosts",
"type": "n8n-nodes-base.splitInBatches",
"position": [
2272,
1424
],
"parameters": {
"options": {}
},
"typeVersion": 3
},
{
"id": "bbf2b91f-b09c-4668-9e7c-c943ebcc6887",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
4336,
1120
],
"parameters": {
"color": 7,
"width": 528,
"height": 672,
"content": "## 4. Save LK posts in Airtable"
},
"typeVersion": 1
},
{
"id": "8b264b15-8292-44d9-8751-2d465b1a8d88",
"name": "Structured Output Parser",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
5488,
1632
],
"parameters": {
"jsonSchemaExample": "{\n \"thread_variation\": {\n \"tweets\": [\n {\n \"tweet_number\": 1,\n \"content\": \"Tweet text here\",\n \"character_count\": 245\n },\n {\n \"tweet_number\": 2,\n \"content\": \"Tweet text here\",\n \"character_count\": 198\n }\n ],\n \"total_tweets\": 5,\n \"thread_summary\": \"Brief description of the thread's narrative arc\",\n \"hook_type\": \"bold_claim|numbers|question|contrast|pattern_interrupt\"\n },\n \"standalone_variation\": {\n \"content\": \"Complete standalone tweet text\",\n \"character_count\": 234,\n \"format_used\": \"stat_insight|before_after|lesson|contrarian\"\n },\n \"original_post_summary\": \"One-sentence summary of the LinkedIn post\",\n \"recommended_format\": \"thread|standalone\"\n}"
},
"typeVersion": 1.3
},
{
"id": "f2db4dd1-c36c-4898-a39b-4e703bb287c4",
"name": "Switch",
"type": "n8n-nodes-base.switch",
"position": [
2752,
1424
],
"parameters": {
"rules": {
"values": [
{
"outputKey": "no_post_found",
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "loose"
},
"combinator": "and",
"conditions": [
{
"id": "1c7de4b8-3885-4bcb-9326-d0a7af6da5a0",
"operator": {
"type": "string",
"operation": "empty",
"singleValue": true
},
"leftValue": "={{ $('SearchExistingPost').item?.json?.id ?? null }}",
"rightValue": ""
}
]
},
"renameOutput": true
},
{
"outputKey": "not_converted_yet",
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "loose"
},
"combinator": "and",
"conditions": [
{
"id": "de5953db-21f6-4026-9169-7f8637ae4944",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $('SearchExistingPost')?.item?.json?.Status ?? null }}",
"rightValue": "Scrapped"
}
]
},
"renameOutput": true
},
{
"outputKey": "already_converted_or_posted",
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "loose"
},
"combinator": "and",
"conditions": [
{
"id": "ea1fa20e-182e-404f-94f5-710bc24c494f",
"operator": {
"type": "string",
"operation": "notEquals"
},
"leftValue": "={{ $('SearchExistingPost')?.item?.json?.Status ?? null }}",
"rightValue": "Scrapped"
}
]
},
"renameOutput": true
}
]
},
"options": {},
"looseTypeValidation": true
},
"typeVersion": 3.4
},
{
"id": "80897200-fb92-448c-8a25-bcc8fdd33fc5",
"name": "ConvertPostIntoTweets",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
5344,
1424
],
"parameters": {
"text": "=# Role\n\nYou are an AI Content Repurposing Specialist focused on transforming LinkedIn posts into engaging X (Twitter) content. Your expertise lies in condensing long-form professional content into punchy, hook-driven tweets while preserving the core message and maximizing engagement potential. You understand platform-specific best practices, audience behavior differences, and copywriting techniques that drive interaction on X.\n\n# Constraints\n\n- Generate exactly 2 variations: one thread format (3-7 tweets) and one standalone tweet\n- Keep each tweet under 280 characters; aim for 150-250 characters for standalone tweets\n- Preserve the core message and key insights from the original LinkedIn post\n- Transform professional LinkedIn tone into conversational, punchy X style\n- Use maximum 2 hashtags per tweet\n- Start threads with a strong hook that works independently\n- Write each thread tweet to stand alone while contributing to the narrative\n- Use clear language with active voice and strong verbs\n- Write for X's broader, more casual audience\n- Base all content on information present in the original post\n- Use standard punctuation (dots and commas instead of em dashes)\n\n# Inputs\n\n- **LinkedIn post content** (mandatory):\n```\n{{ $('MergePost').item.json?.Content || $('MergePost').item.json?.fields?.Content }}\n```\n- **LinkedIn carousel content** (facultative):\n```\n{{ $('MergePost').item?.json['Carousel Content'] || $('MergePost').item.json?.fields['Carousel Content'] }}\n```\n\n# Instructions\n\n## Content Analysis Workflow\n\n1. **Read and understand the LinkedIn post:**\n - Identify the main message or core insight\n - Extract key statistics, data points, or concrete examples\n - Determine the narrative structure (story, lesson, tips, opinion, etc.)\n - Note any emotional elements or personal experiences\n - Identify the target audience and their pain points\n2. **Assess repurposing potential:**\n - Determine if content works better as a thread (multiple points, story arc) or standalone (single insight)\n - Identify the strongest hook or attention-grabbing element\n - List 3-5 key points that must be preserved\n - Note any time-sensitive or trending elements\n\n## Thread Format Creation (Variation 1)\n\n**Structure Requirements:**\n\n- **Tweet 1 (Hook):** Must grab attention and work as standalone\n - Use one of these hook formulas:\n - Bold claim: \"Most people get X wrong. Here's why:\"\n - Numbers: \"5 lessons from [experience]:\"\n - Question: \"Want to [outcome]? Here's how:\"\n - Contrast: \"Everyone says X. The truth is Y:\"\n - Pattern interrupt: \"Unpopular opinion:\"\n - End with thread indicator: \ud83e\uddf5 or \"Here's what happened:\" or similar\n- **Tweets 2-6 (Body):** One clear point per tweet\n - Each tweet = one idea, stat, or step\n - Use line breaks for readability (1-2 sentences per line)\n - Keep concrete examples and data\n - Build narrative momentum\n - **Final Tweet (Conclusion):**\n - Summarize the key lesson or takeaway\n - Include a call-to-action (question, request for engagement, link)\n - Optional: Add relevant link or credit\n\n**Transformation Rules:**\n- Convert long paragraphs into single-sentence tweets\n- Replace \"I learned that...\" with direct statements\n- Remove hedging language (\"maybe\", \"I think\", \"perhaps\")\n- Use \"you\" instead of \"one\" or passive voice\n- Add emphasis through line breaks, not length\n- Keep the strongest 1-2 examples, cut the rest\n\n## Standalone Tweet Creation (Variation 2)\n\n**Extract the Core Insight:**\n\n1. Identify the single most valuable takeaway from the LinkedIn post\n2. Condense it into 150-250 characters\n3. Make it punchy and immediately valuable\n\n**Standalone Tweet Requirements:**\n\n- Must work completely independently (no context needed)\n- Should be the \"headline\" version of the LinkedIn post\n- Include the key stat or insight if present\n- End with engagement driver (question, bold statement, or call-to-action)\n- Can reference full story with \"Full story: [link]\" if URL provided\n\n**Standalone Tweet Formulas:**\n\n- Stat + Insight: \"[Surprising stat]. Here's why it matters: [insight]\"\n- Before/After: \"We went from X to Y by doing Z.\"\n- Lesson format: \"Biggest lesson from [experience]: [insight]\"\n- Contrarian: \"Hot take: [controversial statement]. Here's why: [brief reason]\"\n\n## Character Count Management\n\n1. **For each tweet, verify:**\n - Character count \u2264 280 (use exact counting, including spaces and emoji)\n - If over limit: remove filler words, use contractions, simplify phrasing\n - Aim for 250-270 characters max to leave room for platform variations\n2. **Optimization techniques:**\n - Replace \"and\" with \"&\" when appropriate\n - Use \"\u2192\" instead of \"leads to\" or \"results in\"\n - Replace \"because\" with \"bc\" sparingly (only if desperate for characters)\n - Remove unnecessary adjectives and adverbs\n - Use numerals (5) instead of words (five)\n\n\n## Tone Transformation\n\nTransform from LinkedIn professional to X conversational:\n\n**LinkedIn \u2192 X Conversions:**\n\n- \"I'm excited to share\" \u2192 [Cut completely, start with insight]\n- \"In my experience\" \u2192 [Direct statement]\n- \"This is particularly important\" \u2192 \"This matters:\"\n- \"I would recommend\" \u2192 \"Do this:\"\n- \"It's worth noting that\" \u2192 [Cut]\n- Multi-clause sentences \u2192 Short, punchy sentences\n\n## Quality Assurance Checklist\n\nBefore finalizing, verify each variation:\n- Thread: 3-7 tweets, each \u2264280 characters\n- Standalone: 150-250 characters\n- First tweet (thread) works independently\n- Core message preserved from original post\n- Tone is conversational, not corporate\n- Includes engagement hook (question/CTA)\n- No more than 2 hashtags total\n- Active voice used throughout\n- No fabricated information\n- Character counts are accurate\n\n## Response Formatting\n\nStructure your response as a JSON object:\n{\n \"thread_variation\": {\n \"tweets\": [\n {\n \"tweet_number\": 1,\n \"content\": \"Tweet text here\",\n \"character_count\": 245\n },\n {\n \"tweet_number\": 2,\n \"content\": \"Tweet text here\",\n \"character_count\": 198\n }\n ],\n \"total_tweets\": 5,\n \"thread_summary\": \"Brief description of the thread's narrative arc\",\n \"hook_type\": \"bold_claim|numbers|question|contrast|pattern_interrupt\"\n },\n \"standalone_variation\": {\n \"content\": \"Complete standalone tweet text\",\n \"character_count\": 234,\n \"format_used\": \"stat_insight|before_after|lesson|contrarian\"\n },\n \"original_post_summary\": \"One-sentence summary of the LinkedIn post\",\n \"recommended_format\": \"thread|standalone\"\n}\n\n# Conclusions (Expected Outputs)\n\n- JSON-structured response containing two complete variations of the LinkedIn post\n- Thread variation with 3-7 interconnected tweets, each under 280 characters\n- Standalone variation with single punchy tweet between 150-250 characters\n- All content transformed from professional to conversational tone\n- Core message and key insights preserved from original post\n- Each tweet optimized for X engagement with proper hooks and CTAs\n- Character counts validated for all tweets\n- Recommendation on which format likely performs better\n- Clear documentation of transformation decisions and insights preserved\n\n# Solutions (Error Handling)\n\n- **If post_content is missing or empty**: Return error: \"No LinkedIn post content provided. Please include post_content in the linkedin_post object.\"\n- **If post_content is too short (<50 characters)**: Return error: \"LinkedIn post content too brief. Minimum 50 characters required for meaningful repurposing.\"\n- **If post_content is extremely long (>5000 characters)**: Focus on first 2-3 main points and note in response: \"Original post was very long. Thread focuses on primary insights. Consider splitting into multiple pieces.\"\n- **If no clear hook or insight can be extracted**: Use the most interesting stat or claim as the hook and note: \"Post lacks strong hook. Used most compelling element available.\"\n- **If content is too technical or niche**: Simplify language while preserving accuracy and note in response: \"Simplified technical language for broader X audience.\"\n- **If individual tweet exceeds 280 characters after optimization**: Aggressively cut filler words, use abbreviations, or split into two tweets. Flag in response if meaning might be compromised.\n- **If thread would require more than 7 tweets**: Condense to 7 maximum by combining related points or cutting less essential details. Note in response: \"Thread condensed to 7 tweets. Some supporting details omitted.\"\n- **If standalone tweet cannot capture essence in 250 characters**: Extend up to 280 characters maximum and note: \"Standalone required full character limit due to complexity.\"\n- **If original post has no clear takeaway or lesson**: Create thread around the narrative/story itself and note: \"Post is experiential. Thread focuses on narrative rather than explicit lesson.\"\n- **If post_url is provided**: Include it in the final tweet of thread or at end of standalone with \"Read more:\" prefix\n- **If metadata suggests time-sensitive content**: Add temporal context to hook (e.g., \"Right now,\" \"In 2026,\") and note recommendation urgency\n\n# JSON Schema for Output\n{\n \"type\": \"object\",\n \"properties\": {\n \"thread_variation\": {\n \"type\": \"object\",\n \"properties\": {\n \"tweets\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"tweet_number\": {\n \"type\": \"integer\"\n },\n \"content\": {\n \"type\": \"string\",\n \"maxLength\": 280\n },\n \"character_count\": {\n \"type\": \"integer\"\n }\n },\n \"required\": [\"tweet_number\", \"content\", \"character_count\"]\n },\n \"minItems\": 3,\n \"maxItems\": 7\n },\n \"total_tweets\": {\n \"type\": \"integer\"\n },\n \"thread_summary\": {\n \"type\": \"string\"\n },\n \"hook_type\": {\n \"type\": \"string\",\n \"enum\": [\"bold_claim\", \"numbers\", \"question\", \"contrast\", \"pattern_interrupt\"]\n }\n },\n \"required\": [\"tweets\", \"total_tweets\", \"thread_summary\", \"hook_type\"]\n },\n \"standalone_variation\": {\n \"type\": \"object\",\n \"properties\": {\n \"content\": {\n \"type\": \"string\",\n \"minLength\": 150,\n \"maxLength\": 280\n },\n \"character_count\": {\n \"type\": \"integer\"\n },\n \"format_used\": {\n \"type\": \"string\",\n \"enum\": [\"stat_insight\", \"before_after\", \"lesson\", \"contrarian\"]\n }\n },\n \"required\": [\"content\", \"character_count\", \"format_used\"]\n },\n \"original_post_summary\": {\n \"type\": \"string\"\n },\n \"recommended_format\": {\n \"type\": \"string\",\n \"enum\": [\"thread\", \"standalone\"]\n }\n },\n \"required\": [\"thread_variation\", \"standalone_variation\", \"original_post_summary\", \"recommended_format\"]\n}",
"batching": {},
"promptType": "define",
"hasOutputParser": true
},
"retryOnFail": true,
"typeVersion": 1.9
},
{
"id": "7659255a-4fe1-4676-981f-62d0fba796b2",
"name": "SplitThreadVariations",
"type": "n8n-nodes-base.splitOut",
"position": [
5856,
1424
],
"parameters": {
"options": {},
"fieldToSplitOut": "output.thread_variation.tweets"
},
"typeVersion": 1
},
{
"id": "4558ed79-8dda-4233-97f8-7c72629c58dd",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
4880,
1120
],
"parameters": {
"color": 7,
"width": 1632,
"height": 672,
"content": "## 5. Convert LK post into tweets and save them in Airtable\n\nWe compute a defaut tweet publication date = LK post date + nb of days in Config table"
},
"typeVersion": 1
},
{
"id": "06bcc2b7-7c4e-4e0f-b2d1-5ad9c449d656",
"name": "IfIsCarousel",
"type": "n8n-nodes-base.if",
"position": [
3088,
1328
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "5e688c12-09b2-4b63-a9e0-edddd304368f",
"operator": {
"type": "string",
"operation": "notEmpty",
"singleValue": true
},
"leftValue": "={{ $('LoopOverPosts').item.json?.document?.transcribedDocumentUrl ?? null }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.3
},
{
"id": "e07e0f07-4f75-4b20-89a6-c796cb0b05e1",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
2160,
1120
],
"parameters": {
"color": 7,
"width": 2160,
"height": 672,
"content": "## 4. Extract LinkedIn post and carousel content"
},
"typeVersion": 1
},
{
"id": "67385f5f-631c-40a7-8a8f-0af35459e4b0",
"name": "GetCarouselFile",
"type": "n8n-nodes-base.httpRequest",
"position": [
3360,
1232
],
"parameters": {
"url": "={{ $('LoopOverPosts').item.json.document.transcribedDocumentUrl }}",
"options": {},
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Accept",
"value": "*/*"
},
{
"name": "Accept-Encoding",
"value": "gzip, deflate, br"
},
{
"name": "Connection",
"value": "keep-alive"
},
{
"name": "User-Agent",
"value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}
]
}
},
"typeVersion": 4.3,
"alwaysOutputData": true
},
{
"id": "d422b4f8-1507-4c24-abb6-8a1718795dbb",
"name": "MergePost",
"type": "n8n-nodes-base.merge",
"position": [
4688,
1424
],
"parameters": {},
"typeVersion": 3.2
},
{
"id": "893cabda-41da-456b-97c0-30e89adafce2",
"name": "MergeContent",
"type": "n8n-nodes-base.merge",
"position": [
4112,
1328
],
"parameters": {},
"typeVersion": 3.2,
"alwaysOutputData": true
},
{
"id": "9c8ed31a-cd3f-4758-9111-b54c82511a48",
"name": "MergeTweets",
"type": "n8n-nodes-base.merge",
"position": [
6320,
1408
],
"parameters": {},
"typeVersion": 3.2
},
{
"id": "5fcfe105-e692-4932-ae20-83ea99b203be",
"name": "Webhook_OnPostTweet",
"type": "n8n-nodes-base.webhook",
"position": [
1072,
2048
],
"parameters": {
"path": "post-tweet",
"options": {}
},
"typeVersion": 2.1
},
{
"id": "2b4a6ade-7817-46c0-beac-612d98cf339d",
"name": "SearchExistingPost",
"type": "n8n-nodes-base.airtable",
"position": [
2528,
1440
],
"parameters": {
"base": {
"__rl": true,
"mode": "list",
"value": "appiS2JpMdnxAS5o4",
"cachedResultUrl": "https://airtable.com/appiS2JpMdnxAS5o4",
"cachedResultName": "LinkedIn2Twitter"
},
"table": {
"__rl": true,
"mode": "list",
"value": "tblzy5zMwaTWaTHof",
"cachedResultUrl": "https://airtable.com/appiS2JpMdnxAS5o4/tblzy5zMwaTWaTHof",
"cachedResultName": "LK Posts"
},
"options": {},
"operation": "search",
"filterByFormula": "={LK Post ID}='{{ $json.id }}'"
},
"credentials": {
"airtableTokenApi": {
"name": "<your credential>"
}
},
"typeVersion": 2.1,
"alwaysOutputData": true
},
{
"id": "69c22ddc-1ae2-410a-92df-758ad65983da",
"name": "SavePost",
"type": "n8n-nodes-base.airtable",
"position": [
4448,
1328
],
"parameters": {
"base": {
"__rl": true,
"mode": "list",
"value": "appiS2JpMdnxAS5o4",
"cachedResultUrl": "https://airtable.com/appiS2JpMdnxAS5o4",
"cachedResultName": "LinkedIn2Twitter"
},
"table": {
"__rl": true,
"mode": "list",
"value": "tblzy5zMwaTWaTHof",
"cachedResultUrl": "https://airtable.com/appiS2JpMdnxAS5o4/tblzy5zMwaTWaTHof",
"cachedResultName": "LK Posts"
},
"columns": {
"value": {
"Date": "={{ $('LoopOverPosts').item.json.postedAt.date }}",
"Status": "Scrapped",
"Content": "={{ $('LoopOverPosts').item.json.content }}",
"Post URL": "={{ $('LoopOverPosts').item.json.linkedinUrl }}",
"LK Post ID": "={{ $('LoopOverPosts').item.json.id }}",
"Post Doc URL": "={{ $('LoopOverPosts').item.json?.document?.transcribedDocumentUrl ?? null }}",
"Post Img URL": "={{ $('LoopOverPosts').item.json?.postImages[0]?.url ?? null }}",
"Carousel Content": "={{ JSON.stringify($('MergeContent').item.json?.slides ?? null) }}"
},
"schema": [
{
"id": "LK Post ID",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "LK Post ID",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Status",
"type": "options",
"display": true,
"options": [
{
"name": "Scrapped",
"value": "Scrapped"
},
{
"name": "Converted",
"value": "Converted"
},
{
"name": "Tweeted",
"value": "Tweeted"
}
],
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Date",
"type": "dateTime",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Date",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Content",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Content",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Carousel Content",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Carousel Content",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Post URL",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Post URL",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Post Img URL",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Post Img URL",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Post Doc URL",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Post Doc URL",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "create"
},
"credentials": {
"airtableTokenApi": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "418983c9-1ec9-459b-b3a8-df168076f987",
"name": "CreateStandaloneTweet",
"type": "n8n-nodes-base.airtable",
"position": [
5856,
1232
],
"parameters": {
"base": {
"__rl": true,
"mode": "list",
"value": "appiS2JpMdnxAS5o4",
"cachedResultUrl": "https://airtable.com/appiS2JpMdnxAS5o4",
"cachedResultName": "LinkedIn2Twitter"
},
"table": {
"__rl": true,
"mode": "list",
"value": "tblGhyo7vlTUNkfoX",
"cachedResultUrl": "https://airtable.com/appiS2JpMdnxAS5o4/tblGhyo7vlTUNkfoX",
"cachedResultName": "X Tweets"
},
"columns": {
"value": {
"Status": "Pending",
"Content": "={{ $json.output.standalone_variation.content }}",
"Tweet Nb": 0,
"Variation": "Standalone",
"LK Post ID": "={{ $('LoopOverPosts').item.json.id }}",
"Publication Date": "={{ $('ComputeTweetDate').item.json.tweet_post_date }}"
},
"schema": [
{
"id": "Unique ID",
"type": "string",
"display": true,
"removed": false,
"readOnly": true,
"required": false,
"displayName": "Unique ID",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "LK Post ID",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "LK Post ID",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Status",
"type": "options",
"display": true,
"options": [
{
"name": "Pending",
"value": "Pending"
},
{
"name": "Rejected",
"value": "Rejected"
},
{
"name": "Approved",
"value": "Approved"
},
{
"name": "Tweeted",
"value": "Tweeted"
}
],
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Variation",
"type": "options",
"display": true,
"options": [
{
"name": "Standalone",
"value": "Standalone"
},
{
"name": "Thread",
"value": "Thread"
}
],
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Variation",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Tweet Nb",
"type": "number",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Tweet Nb",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Content",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Content",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Publication Date",
"type": "dateTime",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Publication Date",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Post Now",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "Post Now",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "create"
},
"credentials": {
"airtableTokenApi": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "6977f048-d52b-4a86-bc56-168b6d295f0f",
"name": "CreateThreadTweet",
"type": "n8n-nodes-base.airtable",
"position": [
6080,
1424
],
"parameters": {
"base": {
"__rl": true,
"mode": "list",
"value": "appiS2JpMdnxAS5o4",
"cachedResultUrl": "https://airtable.com/appiS2JpMdnxAS5o4",
"cachedResultName": "LinkedIn2Twitter"
},
"table": {
"__rl": true,
"mode": "list",
"value": "tblGhyo7vlTUNkfoX",
"cachedResultUrl": "https://airtable.com/appiS2JpMdnxAS5o4/tblGhyo7vlTUNkfoX",
"cachedResultName": "X Tweets"
},
"columns": {
"value": {
"Status": "Pending",
"Content": "={{ $json.content }}",
"Tweet Nb": "={{ $json.tweet_number }}",
"Variation": "Thread",
"LK Post ID": "={{ $('LoopOverPosts').item.json.id }}",
"Publication Date": "={{ $('ComputeTweetDate').item.json.tweet_post_date }}"
},
"schema": [
{
"id": "Unique ID",
"type": "string",
"display": true,
"removed": false,
"readOnly": true,
"required": false,
"displayName": "Unique ID",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "LK Post ID",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "LK Post ID",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Status",
"type": "options",
"display": true,
"options": [
{
"name": "Pending",
"value": "Pending"
},
{
"name": "Rejected",
"value": "Rejected"
},
{
"name": "Approved",
"value": "Approved"
},
{
"name": "Tweeted",
"value": "Tweeted"
}
],
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Variation",
"type": "options",
"display": true,
"options": [
{
"name": "Standalone",
"value": "Standalone"
},
{
"name": "Thread",
"value": "Thread"
}
],
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Variation",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Tweet Nb",
"type": "number",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Tweet Nb",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Content",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Content",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Publication Date",
"type": "dateTime",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Publication Date",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Post Now",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "Post Now",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "create"
},
"credentials": {
"airtableTokenApi": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "364583fc-d92f-4779-8bf9-a7b5c5f879bf",
"name": "UpdatePostStatus",
"type": "n8n-nodes-base.airtable",
"position": [
6064,
1232
],
"parameters": {
"base": {
"__rl": true,
"mode": "list",
"value": "appiS2JpMdnxAS5o4",
"cachedResultUrl": "https://airtable.com/appiS2JpMdnxAS5o4",
"cachedResultName": "LinkedIn2Twitter"
},
"table": {
"__rl": true,
"mode": "list",
"value": "tblzy5zMwaTWaTHof",
"cachedResultUrl": "https://airtable.com/appiS2JpMdnxAS5o4/tblzy5zMwaTWaTHof",
"cachedResultName": "LK Posts"
},
"columns": {
"value": {
"Status": "Converted",
"LK Post ID": "={{ $('LoopOverPosts').item.json.id }}"
},
"schema": [
{
"id": "id",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "id",
"defaultMatch": true
},
{
"id": "LK Post ID",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "LK Post ID",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Status",
"type": "options",
"display": true,
"options": [
{
"name": "Scrapped",
"value": "Scrapped"
},
{
"name": "Converted",
"value": "Converted"
},
{
"name": "Tweeted",
"value": "Tweeted"
}
],
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Date",
"type": "dateTime",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Date",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Content",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Content",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Post URL",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Post URL",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Post Img URL",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Post Img URL",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Post Doc URL",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Post Doc URL",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"LK Post ID"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "update"
},
"credentials": {
"airtableTokenApi": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "b63a7ee3-2996-47a1-be6f-a1b4c8980f32",
"name": "GetTweet",
"type": "n8n-nodes-base.airtable",
"position": [
1456,
2048
],
"parameters": {
"id": "={{ $json.query.id }}",
"base": {
"__rl": true,
"mode": "list",
"value": "appiS2JpMdnxAS5o4",
"cachedResultUrl": "https://airtable.com/appiS2JpMdnxAS5o4",
"cachedResultName": "Growth Machine"
},
"table": {
"__rl": true,
"mode": "list",
"value": "tblGhyo7vlTUNkfoX",
"cachedResultUrl": "https://airtable.com/appiS2JpMdnxAS5o4/tblGhyo7vlTUNkfoX",
"cachedResultName": "X Tweets"
},
"options": {}
},
"credentials": {
"airtableTokenApi": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "08c9822d-b0d7-4a57-ba92-5738982ec5e9",
"name": "SwitchStatusAndVariation",
"type": "n8n-nodes-base.switch",
"position": [
1968,
2320
],
"parameters": {
"rules": {
"values": [
{
"outputKey": "standalone",
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "1b039897-7aff-4529-bfad-e16656605571",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
},
"leftValue": "={{ $json.Status == 'Approved' && $json.Variation == 'Standalone' }}",
"rightValue": ""
}
]
},
"renameOutput": true
},
{
"outputKey": "thread",
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "ef60251a-bf97-4eef-b177-91d82747fe30",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
},
"leftValue": "={{ $json.Status == 'Approved' && $json.Variation == 'Thread' }}",
"rightValue": ""
}
]
},
"renameOutput": true
},
{
"outputKey": "not_approved",
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "3e16d4ef-aeac-487f-a216-8138ff13521b",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
},
"leftValue": "={{ $json.Status !== 'Approved' }}",
"rightValue": ""
}
]
},
"renameOutput": true
}
]
},
"options": {}
},
"typeVersion": 3.4
},
{
"id": "ac82b4e3-e5f0-4a6b-9581-3f7b10120657",
"name": "PostStandaloneTweet",
"type": "n8n-nodes-base.twitter",
"position": [
2416,
2128
],
"parameters": {
"text": "={{ $json.Content }}",
"additionalFields": {}
},
"credentials": {
"twitterOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 2
},
{
"id": "1d837de6-8ced-4b72-98c8-0939d863bc75",
"name": "SearchAllThreadTweets",
"type": "n8n-nodes-base.airtable",
"position": [
2656,
2464
],
"parameters": {
"base": {
"__rl": true,
"mode": "list",
"value": "appiS2JpMdnxAS5o4",
"cachedResultUrl": "https://airtable.com/appiS2JpMdnxAS5o4",
"cachedResultName": "LinkedIn2Twitter"
},
"sort": {
"property": [
{
"field": "Tweet Nb"
}
]
},
"table": {
"__rl": true,
"mode": "list",
"value": "tblGhyo7vlTUNkfoX",
"cachedResultUrl": "https://airtable.com/appiS2JpMdnxAS5o4/tblGhyo7vlTUNkfoX",
"cachedResultName": "X Tweets"
},
"options": {},
"operation": "search",
"filterByFormula": "=AND({LK Post ID}='{{ $('SwitchStatusAndVariation').item.json['LK Post ID'] }}', {Variation}='{{ $('SwitchStatusAndVariation').item.json.Variation }}')"
},
"credentials": {
"airtableTokenApi": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "13b16f3f-4dcf-4bd7-b7b0-cb39c2eb50aa",
"name": "UpdateStandaloneTweetStatus",
"type": "n8n-nodes-base.airtable",
"position": [
2672,
2128
],
"parameters": {
"base": {
"__rl": true,
"mode": "list",
"value": "appiS2JpMdnxAS5o4",
"cachedResultUrl": "https://airtable.com/appiS2JpMdnxAS5o4",
"cachedResultName": "LinkedIn2Twitter"
},
"table": {
"__rl": true,
"mode": "list",
"value": "tblGhyo7vlTUNkfoX",
"cachedResultUrl": "https://airtable.com/appiS2JpMdnxAS5o4/tblGhyo7vlTUNkfoX",
"cachedResultName": "X Tweets"
},
"columns": {
"value": {
"id": "{{ $json.query.id }}",
"Status": "Tweeted"
},
"schema": [
{
"id": "id",
"type": "string",
"display": true,
"removed": false,
"readOnly": true,
"required": false,
"displayName": "id",
"defaultMatch": true
},
{
"id": "Unique ID",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "Unique ID",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "LK Post ID",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "LK Post ID",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Status",
"type": "options",
"display": true,
"options": [
{
"name": "Pending",
"value": "Pending"
},
{
"name": "Rejected",
"value": "Rejected"
},
{
"name": "Approved",
"value": "Approved"
},
{
"name": "Tweeted",
"value": "Tweeted"
}
],
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Variation",
"type": "options",
"display": true,
"options": [
{
"name": "Standalone",
"value": "Standalone"
},
{
"name": "Thread",
"value": "Thread"
}
],
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Variation",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Tweet Nb",
"type": "number",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Tweet Nb",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Content",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Content",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Publication Date",
"type": "dateTime",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Publication Date",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Post Now",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "Post Now",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"id"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "update"
},
"credentials": {
"airtableTokenApi": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "b509b247-fc01-4154-9a1a-d896800a492b",
"name": "InitTemporaryTweetId",
"type": "n8n-nodes-base.dataTable",
"position": [
2432,
2464
],
"parameters": {
"columns": {
"value": {
"name": "tweet_id",
"value": "={{''}}"
},
"schema": [
{
"id": "name",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "name",
"defaultMatch": false
},
{
"id": "value",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "value",
"defaultMatch": false
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"filters": {
"conditions": [
{
"keyName": "name",
"keyValue": "tweet_id"
}
]
},
"options": {},
"operation": "upsert",
"dataTableId": {
"__rl": true,
"mode": "list",
"value": "P1OpzB1QUCvmqmuk",
"cachedResultUrl": "/projects/o8fPOY5GNHi4Bzy3/datatables/P1OpzB1QUCvmqmuk",
"cachedResultName": "temporary_variables"
}
},
"typeVersion": 1.1
},
{
"id": "6faeec85-b1d6-48a1-9986-f2c79e3b0412",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
960,
1824
],
"parameters": {
"color": 7,
"width": 320,
"height": 544,
"content": "## 1. (A) Manual trigger : when clicked on \"TWEET NOW\" button in Airtable"
},
"typeVersion": 1
},
{
"id": "17771166-9e30-4612-92aa-47bc73817f8a",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
2320,
2048
],
"parameters": {
"color": 7,
"width": 768,
"height": 288,
"content": "## 4. Post a standalone tweet"
},
"typeVersion": 1
},
{
"id": "63238249-04ee-49cb-a93b-7ce171a2a0d4",
"name": "PostFirstThreadTweet",
"type": "n8n-nodes-base.twitter",
"position": [
3936,
2400
],
"parameters": {
"text": "={{ $('LoopOverTweets').item.json.Content }}",
"additionalFields": {}
},
"credentials": {
"twitterOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 2
},
{
"id": "0aebbcb7-3432-4365-95d3-7e45985fa02e",
"name": "GetLastTweetId",
"type": "n8n-nodes-base.dataTable",
"position": [
3232,
2480
],
"parameters": {
"filters": {
"conditions": [
{
"keyName": "name",
"keyValue": "tweet_id"
}
]
},
"matchType": "allConditions",
"operation": "get",
"dataTableId": {
"__rl": true,
"mode": "list",
"value": "P1OpzB1QUCvmqmuk",
"cachedResultUrl": "/projects/o8fPOY5GNHi4Bzy3/datatables/P1OpzB1QUCvmqmuk",
"cachedResultName": "temporary_variables"
}
},
"typeVersion": 1.1
},
{
"id": "8eca34f6-b762-4152-99ca-fc016fec78fa",
"name": "IfEmpty",
"type": "n8n-nodes-base.if",
"position": [
3504,
2480
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "aba9099c-316e-41
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.
airtableTokenApiapifyApiopenAiApiopenRouterApitwitterOAuth2Api
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Automatically scrape LinkedIn posts with Apify, transform them into optimized tweets and threads using Claude AI, store them in Airtable for approval, and publish to X on a daily schedule.
Source: https://n8n.io/workflows/12847/ — 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.
AI Social Media Publisher from WordPress. Uses manualTrigger, googleSheets, lmChatOpenRouter, outputParserStructured. Event-driven trigger; 20 nodes.
This workflow automates the process of creating and publishing social media posts across multiple platforms (Twitter/X, Facebook, LinkedIn, and Instagram) based on content from a WordPress post. It us
This workflow is ideal for individuals, marketers, agencies, and brands who want to effortlessly automate the entire blogging and social media process—from idea generation to promotion. Its primary go
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
N8N Automated Twitter Reply Bot Workflow