This workflow corresponds to n8n.io template #8630 — we link there as the canonical source.
This workflow follows the Agent → HTTP Request 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": "7vlFEfwMDxHgN4T5",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "Twitter Auto Liking (Profile Post Extractor) - Creators Hub",
"tags": [
{
"id": "Tl9QVfvwkdFQyffg",
"name": "n8n Creators Hub",
"createdAt": "2025-08-01T09:19:22.310Z",
"updatedAt": "2025-08-01T09:19:22.310Z"
}
],
"nodes": [
{
"id": "c6e770b5-380e-4732-a13c-b1edd7cfd7f1",
"name": "Wait1",
"type": "n8n-nodes-base.wait",
"position": [
-112,
-832
],
"parameters": {
"amount": 15
},
"typeVersion": 1.1
},
{
"id": "6d9a71e8-f02e-4efa-ad2d-1405794b4591",
"name": "Get Random Post",
"type": "n8n-nodes-base.code",
"position": [
-2544,
-832
],
"parameters": {
"jsCode": "const data = $input.all().map(item => item.json);\n\nif (!data || data.length === 0) {\n throw new Error('No Instagram posts data found');\n}\n\n// Get a random post\nconst randomPost = data[Math.floor(Math.random() * data.length)];\n\n// Return only postUrl and description\nreturn {\n json: {\n postUrl: randomPost.tweetUrl\n }\n};"
},
"typeVersion": 2
},
{
"id": "35c31150-4817-46ca-a455-ee96931ecbb1",
"name": "Create CSV Binary",
"type": "n8n-nodes-base.code",
"position": [
-1040,
-832
],
"parameters": {
"jsCode": "// Extract correct values\nconst tweetUrl = $('Get Random Post').first().json.postUrl;\n\n// Clean utility\nconst clean = str => String(str || \"\").replace(/[\\u200B-\\u200D\\uFEFF]/g, \"\").trim();\n\n// Escape and quote single data row\nconst row = [\n `\"${clean(tweetUrl).replace(/\"/g, '\"\"')}\"`\n];\n\n// Convert to buffer without header or BOM\nconst csvBuffer = Buffer.from(row.join(\",\") + \"\\n\", \"utf8\");\n\n// Return binary file\nreturn [\n {\n binary: {\n data: {\n data: csvBuffer,\n mimeType: \"text/csv\",\n fileName: \"phantombuster_clean.csv\"\n }\n }\n }\n];\n"
},
"typeVersion": 2
},
{
"id": "2658a86d-7a7a-473a-8042-ce8ddd903073",
"name": "Upload CSV",
"type": "n8n-nodes-base.microsoftSharePoint",
"position": [
-848,
-832
],
"parameters": {
"site": {
"__rl": true,
"mode": "list",
"value": "plemeo.sharepoint.com,f304c34c-1252-4b99-a852-059c2036c718,c3bf26ab-bf44-4334-8e5b-e8b680bb9e1d",
"cachedResultName": "plemeo"
},
"folder": {
"__rl": true,
"mode": "list",
"value": "01M45PWAY4RSXX7PGSC5CL27V2Y7XYSNQZ",
"cachedResultName": "Phantombuster"
},
"fileName": "twitter_posts_to_like.csv",
"operation": "upload",
"fileContents": "data",
"requestOptions": {}
},
"credentials": {
"microsoftSharePointOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "a0c010f7-412c-4965-a553-b93a42ed1470",
"name": "Get Response",
"type": "n8n-nodes-base.phantombuster",
"position": [
128,
-832
],
"parameters": {
"agentId": "7281446865767808",
"operation": "getOutput",
"additionalFields": {}
},
"credentials": {
"phantombusterApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "7a3f97aa-8a1d-4cca-ab24-a1cacbc9ee92",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2096,
-1360
],
"parameters": {
"color": 5,
"width": 1400,
"height": 400,
"content": "## Get Twitter Posts By Scraping defined Profiles\n"
},
"typeVersion": 1
},
{
"id": "b2c79320-dc4f-42c4-90c0-22b9f496b990",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-672,
-944
],
"parameters": {
"width": 980,
"height": 300,
"content": "## Launch Autoliking Agent to Like Tweet\n"
},
"typeVersion": 1
},
{
"id": "647d5d1d-6f10-4b40-831c-c9cb1dda30b9",
"name": "Get Autoliking Agent",
"type": "n8n-nodes-base.phantombuster",
"position": [
-560,
-832
],
"parameters": {
"agentId": "275516550112020",
"operation": "get"
},
"credentials": {
"phantombusterApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "cab368e6-7e0d-4e2b-8f12-3652003898c3",
"name": "Launch AL Agent",
"type": "n8n-nodes-base.phantombuster",
"position": [
-336,
-832
],
"parameters": {
"agentId": "275516550112020",
"jsonParameters": true,
"additionalFields": {
"argumentsJson": "={\n \"spreadsheetUrl\": \"{{$('Upload CSV').item.json['@content.downloadUrl']}}\",\n \"sessionCookie\": \"{{ $('Set ENV Variables').first().json.ENV_SESSION_COOKIE }}\"\n}"
}
},
"credentials": {
"phantombusterApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "627f9fcc-6a94-46c2-8c7c-2c64f5bc9c4f",
"name": "Set ENV Variables",
"type": "n8n-nodes-base.set",
"position": [
-912,
-1680
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "e24e8c1a-c6c9-4ae2-a0ef-e0e7369dc262",
"name": "ENV_SEARCH_HASHTAGS",
"type": "string",
"value": "={{ $json.output.parseJson().hashtag }}"
},
{
"id": "cf050595-8ad9-4f78-bca4-f463e8b9982e",
"name": "ENV_SESSION_COOKIE",
"type": "string",
"value": "={{ $('Select Cookie').first().json.output.parseJson().session_cookie }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "96caed29-d191-4da5-9d34-045c2c7a676f",
"name": "Schedule Trigger",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-2032,
-1680
],
"parameters": {
"rule": {
"interval": [
{
"field": "hours",
"triggerAtMinute": 5
}
]
}
},
"typeVersion": 1.2
},
{
"id": "cca8b3ac-2470-48f0-b53f-68b9ba7f61b4",
"name": "Update file",
"type": "n8n-nodes-base.microsoftSharePoint",
"position": [
-1216,
-832
],
"parameters": {
"file": {
"__rl": true,
"mode": "list",
"value": "01M45PWA3IDDODOJRNIRH3WEA77A27CBYU",
"cachedResultName": "twitter_posts_already_liked.csv"
},
"site": {
"__rl": true,
"mode": "list",
"value": "plemeo.sharepoint.com,f304c34c-1252-4b99-a852-059c2036c718,c3bf26ab-bf44-4334-8e5b-e8b680bb9e1d",
"cachedResultName": "plemeo"
},
"folder": {
"__rl": true,
"mode": "list",
"value": "01M45PWAY4RSXX7PGSC5CL27V2Y7XYSNQZ",
"cachedResultName": "Phantombuster"
},
"fileName": "twitter_posts_already_liked.csv",
"operation": "update",
"fileContents": "data",
"requestOptions": {},
"changeFileContent": true
},
"credentials": {
"microsoftSharePointOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "36fee782-f44a-4a74-b0e6-d32deba563a0",
"name": "Download file",
"type": "n8n-nodes-base.microsoftSharePoint",
"position": [
-2368,
-832
],
"parameters": {
"file": {
"__rl": true,
"mode": "list",
"value": "01M45PWA3IDDODOJRNIRH3WEA77A27CBYU",
"cachedResultName": "twitter_posts_already_liked.csv"
},
"site": {
"__rl": true,
"mode": "list",
"value": "plemeo.sharepoint.com,f304c34c-1252-4b99-a852-059c2036c718,c3bf26ab-bf44-4334-8e5b-e8b680bb9e1d",
"cachedResultName": "plemeo"
},
"folder": {
"__rl": true,
"mode": "list",
"value": "01M45PWAY4RSXX7PGSC5CL27V2Y7XYSNQZ",
"cachedResultName": "Phantombuster"
},
"requestOptions": {}
},
"credentials": {
"microsoftSharePointOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "d0031b62-cf49-4ba1-81cf-ea06d245b24c",
"name": "Check if in List",
"type": "n8n-nodes-base.code",
"position": [
-2000,
-832
],
"parameters": {
"jsCode": "const randomPost = normalizeUrl($('Get Random Post').first().json.postUrl);\nconst allItems = $('Extract from File').all();\n\nif (!allItems || allItems.length === 0) {\n return [{ json: { isDuplicate: false } }];\n}\n\nfunction normalizeUrl(url) {\n if (typeof url !== 'string') {\n console.log(\"\ud83d\udea8 NOT A STRING:\", url);\n return '';\n }\n return url.trim().toLowerCase().replace(/\\/$/, '');\n}\n\n// Helper function to get postUrl value regardless of BOM\nfunction getPostUrl(item) {\n const json = item.json;\n // Try normal field name first\n if (json.postUrl) return json.postUrl;\n \n // Look for any field containing \"postUrl\"\n const postUrlKey = Object.keys(json).find(key => key.includes('postUrl'));\n return postUrlKey ? json[postUrlKey] : null;\n}\n\nconsole.log(\"\u2705 randomPost:\", randomPost);\nconsole.log(\"\u2705 allItems:\", allItems);\n\nlet isDuplicate = false;\n\nfor (const item of allItems) {\n const candidateRaw = getPostUrl(item);\n const candidate = normalizeUrl(candidateRaw);\n\n console.log(`\ud83d\udfe0 Comparing:\\n\u2192 raw: ${candidateRaw}\\n\u2192 normalized: ${candidate}\\n\u2192 target: ${randomPost}`);\n\n if (candidate === randomPost) {\n isDuplicate = true;\n break;\n }\n}\n\nreturn [{ json: { isDuplicate } }];"
},
"typeVersion": 2
},
{
"id": "f36f1ef6-8869-4517-ad3c-850b1796df3e",
"name": "If",
"type": "n8n-nodes-base.if",
"position": [
-1824,
-832
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "bcef43b3-e773-45ba-b245-19ab3fc1e508",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
},
"leftValue": "={{ $('Check if in List').first().json.isDuplicate }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "c7fc61b1-a07c-4b05-a16b-f0aef290e15f",
"name": "Wait2",
"type": "n8n-nodes-base.wait",
"position": [
-2704,
-832
],
"parameters": {},
"typeVersion": 1.1
},
{
"id": "e61e59bb-ea2a-43c3-8392-41a6d37d9166",
"name": "Prepare Updated Data",
"type": "n8n-nodes-base.code",
"position": [
-1600,
-832
],
"parameters": {
"jsCode": "const existingUrls = $('Extract from File').all().map(item => {\n // Get the first key (which has the BOM) and use its value\n const firstKey = Object.keys(item.json)[0];\n return { postUrl: item.json[firstKey] };\n});\n\nconsole.log(\"existingUrls: \", existingUrls);\n\nconst randomPost = $('Get Random Post').first().json.postUrl;\nconsole.log(\"randomPost: \", randomPost);\n\nreturn [\n ...existingUrls,\n { postUrl: randomPost }\n].map(entry => ({ json: entry }));"
},
"typeVersion": 2
},
{
"id": "787a8e4d-0db7-4d64-a944-563c25aabe6f",
"name": "Extract from File",
"type": "n8n-nodes-base.extractFromFile",
"position": [
-2176,
-832
],
"parameters": {
"options": {
"headerRow": true
}
},
"typeVersion": 1,
"alwaysOutputData": true
},
{
"id": "8b8f121a-4559-47df-ba4a-e8be3c244eab",
"name": "Convert to File",
"type": "n8n-nodes-base.convertToFile",
"position": [
-1392,
-832
],
"parameters": {
"options": {}
},
"typeVersion": 1.1
},
{
"id": "3577e201-49d7-4532-a89d-25003d7e1de9",
"name": "Get Available Session Cookies",
"type": "n8n-nodes-base.microsoftSharePoint",
"position": [
-1776,
-1680
],
"parameters": {
"file": {
"__rl": true,
"mode": "list",
"value": "01M45PWA34GI5X5O5IFVHKQPOE25PSALOH",
"cachedResultName": "twitter_session_cookies.txt"
},
"site": {
"__rl": true,
"mode": "list",
"value": "plemeo.sharepoint.com,f304c34c-1252-4b99-a852-059c2036c718,c3bf26ab-bf44-4334-8e5b-e8b680bb9e1d",
"cachedResultName": "plemeo"
},
"folder": {
"__rl": true,
"mode": "list",
"value": "01M45PWAY4RSXX7PGSC5CL27V2Y7XYSNQZ",
"cachedResultName": "Phantombuster"
},
"requestOptions": {}
},
"credentials": {
"microsoftSharePointOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "f6dd4baa-cdd1-4b55-b6b4-22f368feb428",
"name": "Extract Cookies",
"type": "n8n-nodes-base.extractFromFile",
"position": [
-1552,
-1680
],
"parameters": {
"options": {},
"operation": "text"
},
"typeVersion": 1
},
{
"id": "d1265483-a58c-4822-87e1-a2de388469e5",
"name": "Select Cookie",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
-1264,
-1680
],
"parameters": {
"text": "=################## PROMPT ##################\n\n**ROLE:** You are a session-cookie selector.\n\n**CURRENT BERLIN TIME** \nDate\u2009&\u2009time : {{ $now.setZone('Europe/Berlin').format('DD HH:mm:ss') }} \nHour (00-23): {{ $now.setZone('Europe/Berlin').format('HH') }}\n\n**SESSION COOKIES (keep order):** \n{{ $json.data }}\n\n**SELECTION LOGIC**\n\n1. Let \n \u2022 N = number of cookies in the list (2 \u2264 N \u2264 4). \n \u2022 H = current hour as an integer (0\u201323). \n \u2022 W = 24 \u00f7 N \u2003(the width of each time slice in hours, always an integer).\n\n2. Determine the slice index: \n sliceIndex = floor(H \u00f7 W)\u2003\u2003// 0-based\n\n3. Choose the cookie at position *(sliceIndex + 1)* in the list. \n \u2022 Example when N = 4 (W = 6): \n 00-05 \u2192 1st, 06-11 \u2192 2nd, 12-17 \u2192 3rd, 18-23 \u2192 4th \n \u2022 Example when N = 3 (W = 8): \n 00-07 \u2192 1st, 08-15 \u2192 2nd, 16-23 \u2192 3rd \n \u2022 Example when N = 2 (W = 12): \n 00-11 \u2192 1st, 12-23 \u2192 2nd\n\n**OUTPUT FORMAT** \nReturn only the selected session cookie value in a valid JSON-Field called \"session_cookie\", nothing else.\n\n##############################################",
"options": {},
"promptType": "define"
},
"typeVersion": 2
},
{
"id": "addb3be4-24ae-4dff-84ae-0a472ff200fb",
"name": "OpenAI Chat Model2",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
-1232,
-1520
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "chatgpt-4o-latest",
"cachedResultName": "chatgpt-4o-latest"
},
"options": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "0d837b39-b583-47f1-89a2-ecb9d08ff033",
"name": "Get Profile Extractor Agent",
"type": "n8n-nodes-base.phantombuster",
"position": [
-2016,
-1216
],
"parameters": {
"agentId": "8659+1234567890",
"operation": "get"
},
"credentials": {
"phantombusterApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "3d1caf00-2462-43ed-80b2-4cfd03dd2fb8",
"name": "Get List of Accounts",
"type": "n8n-nodes-base.microsoftSharePoint",
"position": [
-1840,
-1216
],
"parameters": {
"file": {
"__rl": true,
"mode": "list",
"value": "01M45PWAYTFGE7UCNBL5FL6WE45C6RHJML",
"cachedResultName": "twitter_profiles_to_scrape.csv"
},
"site": {
"__rl": true,
"mode": "list",
"value": "plemeo.sharepoint.com,f304c34c-1252-4b99-a852-059c2036c718,c3bf26ab-bf44-4334-8e5b-e8b680bb9e1d",
"cachedResultName": "plemeo"
},
"folder": {
"__rl": true,
"mode": "list",
"value": "01M45PWAY4RSXX7PGSC5CL27V2Y7XYSNQZ",
"cachedResultName": "Phantombuster"
},
"fileName": "twitter_profiles_to_scrape.csv",
"operation": "update",
"requestOptions": {}
},
"credentials": {
"microsoftSharePointOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "81fbec14-f944-45cb-8100-d85ec61bb0f9",
"name": "If Empty",
"type": "n8n-nodes-base.if",
"position": [
-848,
-1216
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "77805c7a-32a4-492e-9084-6a459e8d6b65",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
},
"leftValue": "={{ $json.isEmpty() }}",
"rightValue": "true"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "6023c9b1-c98f-4507-8b04-865c675da934",
"name": "HTTP Request",
"type": "n8n-nodes-base.httpRequest",
"position": [
-1344,
-1216
],
"parameters": {
"url": "https://api.phantombuster.com/api/v2/agents/fetch?id=8659+1234567890",
"options": {},
"authentication": "predefinedCredentialType",
"nodeCredentialType": "phantombusterApi"
},
"credentials": {
"phantombusterApi": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "ba1d5f3e-5304-49dc-9aad-ea0bb8237ffd",
"name": "HTTP Request1",
"type": "n8n-nodes-base.httpRequest",
"position": [
-1184,
-1216
],
"parameters": {
"url": "=https://phantombuster.s3.amazonaws.com/{{ $json.data?.orgS3Folder || $json.orgS3Folder }}/{{ $json.data?.s3Folder || $json.s3Folder }}/filtered_result.csv\n",
"options": {},
"authentication": "predefinedCredentialType",
"nodeCredentialType": "phantombusterApi"
},
"credentials": {
"phantombusterApi": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "0a3c2d98-049f-46b5-8177-85264eb75688",
"name": "Prepare Posts",
"type": "n8n-nodes-base.code",
"position": [
-1008,
-1216
],
"parameters": {
"jsCode": "// Split the \"data\" field into lines\nconst raw = $json[\"data\"] || \"\";\nconst lines = raw.split(\"\\n\").map(l => l.trim()).filter(Boolean);\n\n// First line is the header (\"tweetUrl\")\nconst header = lines.shift();\n\n// Build an array of { tweetUrl } objects\nreturn lines.map(url => {\n return {\n json: {\n tweetUrl: url\n }\n };\n});\n"
},
"typeVersion": 2
},
{
"id": "1777b14e-bb81-45df-9abd-231d3983f755",
"name": "Wait3",
"type": "n8n-nodes-base.wait",
"position": [
-1504,
-1216
],
"parameters": {
"amount": 30
},
"typeVersion": 1.1
},
{
"id": "c0d92811-5b1f-4209-8b3a-3a0b2ed14654",
"name": "Launch Agent1",
"type": "n8n-nodes-base.phantombuster",
"position": [
-1680,
-1216
],
"parameters": {
"agentId": "={{ $('Get Profile Extractor Agent').item.json.id }}",
"jsonParameters": true,
"additionalFields": {
"argumentsJson": "={\n \"numberOfTweetsPerProfile\": 20,\n \"feedType\": \"tweet\",\n \"filters\": \"tweetLink\",\n \"spreadsheetUrl\": \"{{$('Get List of Accounts').item.json['@content.downloadUrl']}}\",\n \"sessionCookie\": \"{{$('Set ENV Variables').item.json.ENV_SESSION_COOKIE}}\"\n}"
}
},
"credentials": {
"phantombusterApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "8bbe1e90-0cfc-4b9f-9486-870f9c5f059a",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2096,
-1792
],
"parameters": {
"color": 6,
"width": 1400,
"height": 400,
"content": "## Start Workflow and Retrieve Session Cookie\n"
},
"typeVersion": 1
},
{
"id": "809c4f0e-0166-424e-9568-0409af09bcab",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2480,
-1792
],
"parameters": {
"width": 352,
"height": 256,
"content": "### 1) Hashtag & Cookie Selection \n**What it does** \n\u2022 Downloads cookie list \u2192 **Select Cookie** (GPT-4o) picks one based on time slice. \n\n**Credentials** \nOpenAI + SharePoint OAuth2.\n\n**Tweaks** \n\u2022 Add/remove cookies in SharePoint file."
},
"typeVersion": 1
},
{
"id": "9f503394-0d7a-46ea-98dc-caa1036d559d",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2736,
-944
],
"parameters": {
"color": 3,
"width": 2040,
"height": 300,
"content": "## Get Random Post, Check if Already Liked and Upload to SharePoint\n"
},
"typeVersion": 1
},
{
"id": "7452d2d1-3d1a-42d6-bf73-de404305fffa",
"name": "Sticky Note6",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2560,
-1360
],
"parameters": {
"width": 432,
"height": 304,
"content": "### 2) Tweet Scraping & Deduplication \n**What it does** \n\u2022 Runs Phantombuster Profile Extractor Agent \u2192 gets ~20 tweets. \n\u2022 Chooses one at random, compares with `twitter_posts_already_liked.csv`.\n\n**Credentials** \nPhantombuster API + SharePoint OAuth2.\n\n**Tweaks** \n\u2022 Change duplicate logic inside **Check if in List**."
},
"typeVersion": 1
},
{
"id": "3d61e6bb-5311-4051-ac7e-94706f41e20d",
"name": "Sticky Note7",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2736,
-624
],
"parameters": {
"width": 464,
"height": 272,
"content": "### 3) CSV Upload & Auto-like Launch \n**What it does** \n\u2022 Creates a 1-row CSV with the chosen tweet URL. \n\u2022 Uploads it to SharePoint and passes the public link to the Autolike Agent.\n\n**Credentials** \nSharePoint OAuth2 + Phantombuster API.\n\n**Tweaks** \n\u2022 Change file/folder names in **Upload CSV**. \n\u2022 Replace SharePoint with another storage provider."
},
"typeVersion": 1
},
{
"id": "5f001e85-76c2-457a-b9bc-693bff694259",
"name": "Sticky Note8",
"type": "n8n-nodes-base.stickyNote",
"position": [
-672,
-624
],
"parameters": {
"width": 400,
"height": 288,
"content": "### 4) Rate Limiting & Scheduling \n**What it does** \n\u2022 Hourly **Schedule Trigger** plus **Wait** nodes throttle launches to \u22481 000 likes/day.\n\n**Credentials** \nNone\n\n**Tweaks** \n\u2022 Edit the cron rule or `Wait` durations to meet your own limits. \n\u2022 Remove **Wait** nodes if Phantombuster limits are higher on your plan."
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "c4cb49d1-f823-4898-bd71-8d22d57bf2a7",
"connections": {
"If": {
"main": [
[
{
"node": "Wait2",
"type": "main",
"index": 0
}
],
[
{
"node": "Prepare Updated Data",
"type": "main",
"index": 0
}
]
]
},
"Wait1": {
"main": [
[
{
"node": "Get Response",
"type": "main",
"index": 0
}
]
]
},
"Wait2": {
"main": [
[
{
"node": "Get Random Post",
"type": "main",
"index": 0
}
]
]
},
"Wait3": {
"main": [
[
{
"node": "HTTP Request",
"type": "main",
"index": 0
}
]
]
},
"If Empty": {
"main": [
[],
[
{
"node": "Wait2",
"type": "main",
"index": 0
}
]
]
},
"Upload CSV": {
"main": [
[
{
"node": "Get Autoliking Agent",
"type": "main",
"index": 0
}
]
]
},
"Update file": {
"main": [
[
{
"node": "Create CSV Binary",
"type": "main",
"index": 0
}
]
]
},
"HTTP Request": {
"main": [
[
{
"node": "HTTP Request1",
"type": "main",
"index": 0
}
]
]
},
"Download file": {
"main": [
[
{
"node": "Extract from File",
"type": "main",
"index": 0
}
]
]
},
"HTTP Request1": {
"main": [
[
{
"node": "Prepare Posts",
"type": "main",
"index": 0
}
]
]
},
"Launch Agent1": {
"main": [
[
{
"node": "Wait3",
"type": "main",
"index": 0
}
]
]
},
"Prepare Posts": {
"main": [
[
{
"node": "If Empty",
"type": "main",
"index": 0
}
]
]
},
"Select Cookie": {
"main": [
[
{
"node": "Set ENV Variables",
"type": "main",
"index": 0
}
]
]
},
"Convert to File": {
"main": [
[
{
"node": "Update file",
"type": "main",
"index": 0
}
]
]
},
"Extract Cookies": {
"main": [
[
{
"node": "Select Cookie",
"type": "main",
"index": 0
}
]
]
},
"Get Random Post": {
"main": [
[
{
"node": "Download file",
"type": "main",
"index": 0
}
]
]
},
"Launch AL Agent": {
"main": [
[
{
"node": "Wait1",
"type": "main",
"index": 0
}
]
]
},
"Check if in List": {
"main": [
[
{
"node": "If",
"type": "main",
"index": 0
}
]
]
},
"Schedule Trigger": {
"main": [
[
{
"node": "Get Available Session Cookies",
"type": "main",
"index": 0
}
]
]
},
"Create CSV Binary": {
"main": [
[
{
"node": "Upload CSV",
"type": "main",
"index": 0
}
]
]
},
"Extract from File": {
"main": [
[
{
"node": "Check if in List",
"type": "main",
"index": 0
}
]
]
},
"Set ENV Variables": {
"main": [
[
{
"node": "Get Profile Extractor Agent",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model2": {
"ai_languageModel": [
[
{
"node": "Select Cookie",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Get Autoliking Agent": {
"main": [
[
{
"node": "Launch AL Agent",
"type": "main",
"index": 0
}
]
]
},
"Get List of Accounts": {
"main": [
[
{
"node": "Launch Agent1",
"type": "main",
"index": 0
}
]
]
},
"Prepare Updated Data": {
"main": [
[
{
"node": "Convert to File",
"type": "main",
"index": 0
}
]
]
},
"Get Profile Extractor Agent": {
"main": [
[
{
"node": "Get List of Accounts",
"type": "main",
"index": 0
}
]
]
},
"Get Available Session Cookies": {
"main": [
[
{
"node": "Extract Cookies",
"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.
microsoftSharePointOAuth2ApiopenAiApiphantombusterApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Growth hackers, community builders, and marketers who want to keep their Twitter (X) accounts active by liking posts from selected profiles automatically. Schedule Trigger fires hourly. Profile Post Extractor fetches up to 20 tweets for each profile in your CSV. Select Cookie…
Source: https://n8n.io/workflows/8630/ — 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.
Influencers and social-media teams who want to comment automatically on posts from selected Instagram profiles—scaling engagement while staying within platform limits. Schedule Trigger runs every 2 h.
Social-media managers, growth hackers, and brands who want to keep their Instagram accounts active by auto-liking posts from specific profiles they track—without scrolling feeds manually. Schedule Tri
Social-media teams and influencers who want to grow engagement by automatically posting short, relevant comments on new Instagram posts under rotating hashtags—while staying under platform limits. Sch
B2B marketers, recruiters, and personal-brand builders who want to spark conversations on LinkedIn by automatically posting short, relevant comments on fresh industry content—while staying under daily
Social-media managers and brands that want to keep their Instagram accounts active by automatically liking fresh posts under selected hashtags—hands-free and rate-limited. Schedule Trigger runs every