{"workflow":{"id":13745,"name":"Generate Meta Ads campaign reports in Google Sheets and send Telegram alerts","views":55,"recentViews":0,"totalViews":55,"createdAt":"2026-02-27T07:39:52.631Z","description":"## Hi, I’m Amina\n\nI built this workflow to remove the daily pain of Meta Ads reporting. If you manage multiple ad accounts, you know how time-consuming it is to open Ads Manager, export campaign data, clean spreadsheets, and send updates to clients.\n\nThis automation pulls campaign performance directly from the Meta Ads API, writes structured data into Google Sheets (per client), generates a performance summary, and sends a Telegram alert when the report is updated.\n\nIt transforms manual reporting into a fully automated monitoring system.\n\n---\n\n## What it does\n\n- Reads a list of clients/ad accounts from a Google Sheets “client register”\n- Fetches campaign-level performance data from the Meta Ads API\n- Splits the campaign results into clean, row-ready records\n- Appends each campaign as a new row in the client’s Google Sheets report\n- Calculates aggregated performance metrics\n- Applies campaign diagnostics logic\n- Sends a Telegram notification with summary + alerts\n- Runs automatically on a schedule (daily/weekly)\n\n---\n\n## How it works\n\n1. **Schedule Trigger** starts the workflow on a defined schedule.\n\n2. **Google Sheets (Get rows)** loads your client register (one row per client).  \n   Use this template structure for the client register:  \n   👉 [Client Register Template](https://docs.google.com/spreadsheets/d/11repzs1T85xH0waYFkngj8nNzqisWZ27K4gjNKVNlZU/edit?gid=0#gid=0)\n\n   The register should include:\n   - `ad_account_id`\n   - `access_token`\n   - `report_sheet_url`\n\n3. **Loop Over Items** processes each client individually.\n\n4. **Code (ctx)** prepares the current client context (account ID, token, report sheet URL).\n\n5. **HTTP Request** calls the Meta Ads Insights endpoint and retrieves campaign-level metrics.\n\n6. **IF** checks the response (skip if no data).\n\n7. **Merge** combines client context + API response.\n\n8. **Code (Split campaigns)** converts the campaigns array into individual items (one per campaign) and formats metrics for reporting.\n\n9. **Code (Extract spreadsheetId)** extracts the spreadsheet ID from the report URL.\n\n10. **Google Sheets (Append row)** writes each campaign row into the client’s report sheet.  \n    Example report structure:  \n    👉 [Campaign Report Template](https://docs.google.com/spreadsheets/d/1FJfNoZK6M1z0zsZVK41MnPmZ2Sy0HQEARCf7gojVXVY/edit?gid=660983368#gid=660983368)\n\n11. **Code (Summary & Status Logic)** aggregates totals and applies campaign diagnostics.\n\n12. **Telegram** sends a structured performance summary including:\n    - Total metrics\n    - Campaign-level highlights\n    - Status alerts\n    - Direct link to the report\n---\n\n## Data captured (campaign level)\n\n- Ad account ID  \n- Report date (date_start)  \n- Campaign name  \n- Spend  \n- Impressions  \n- Clicks  \n- CTR  \n- CPM  \n- CPC  \n- Date start / Date stop  \n\n---\n\n## Summary Generation Logic\n\nAfter writing campaign rows to Google Sheets, the workflow generates a performance overview using a JavaScript node.\n\n### Aggregated calculations:\n\n- **Total Spend** = sum of all campaign spend values  \n- **Total Impressions** = sum of impressions  \n- **Total Clicks** = sum of clicks  \n- **CTR** = (Total Clicks / Total Impressions) × 100  \n- **CPC** = Total Spend / Total Clicks  \n\nThe workflow then:\n\n- Formats the totals into a readable performance summary  \n- Lists campaign highlights  \n- Applies status diagnostics  \n- Appends the Google Sheets report link  \n- Sends everything via Telegram  \n\nThis provides both structured spreadsheet reporting and a quick executive snapshot.\n\n---\n\n## Status Logic (Campaign Diagnostics)\n\nEach campaign is automatically evaluated based on CTR and CPC thresholds.\n\n### Status Rules\n\n**Weak Creative (❌)**  \nIf `CTR &lt; 1.5%`  \n→ Indicates low engagement. The ad creative may need improvement.\n\n**Expensive Click (⚠)**  \nIf `CPC &gt; 0.5`  \n→ Indicates high cost per click. Audience targeting or bidding strategy may need optimization.\n\n**Good Candidate to Scale (🔥)**  \nIf `CTR ≥ 2%` AND `CPC ≤ 0.5`  \n→ Strong performance. The campaign may be suitable for scaling.\n\n**OK (✅)**  \nIf none of the above conditions are met  \n→ Campaign performance is within an acceptable range.\n\nThe status appears directly in the Telegram notification, allowing marketers to quickly identify which campaigns need attention without logging into Ads Manager.\n\n---\n\n## How to set up\n\nEstimated setup time: 10–20 minutes.\n\n1. Create a **Google Sheets client register** with:\n   - `ad_account_id`\n   - `access_token`\n   - `report_sheet_url`\n2. Connect **Google Sheets** credentials in n8n.\n3. Add your **Meta Ads API access token** (do not hardcode API keys in nodes).\n4. Connect your **Telegram bot** and set the destination chat ID.\n5. Adjust the schedule (daily/weekly) and run a test execution.\n\n---\n\n## Requirements\n\n- Meta Ads API access token (Facebook Graph API)\n- Google Sheets credentials\n- Telegram bot token + chat ID\n\n---\n\n## How to customize\n\n- Add additional metrics (e.g., conversions, purchases, ROAS) by extending Meta API fields.\n- Modify CTR/CPC thresholds in the Status Logic section.\n- Change the report structure in the “Split campaigns” step.\n- Switch notifications from Telegram to Slack or Email.\n- Add filters (e.g., only active campaigns, only spend &gt; X).\n\n---\n\n## Benefits\n\n- Fully automated reporting\n- Multi-client support\n- Dynamic spreadsheet handling\n- Built-in KPI calculations\n- Automated campaign diagnostics\n- Instant performance alerts\n- Scalable agency-ready structure","workflow":{"id":"il6jbx3WZTbZ4uWL","meta":{"instanceId":"5241d43ea23e0adaa7ebc04f33c54a40850b08f19d6136b95bfa12793bf1bd14","templateCredsSetupCompleted":true},"name":"meta ads reporting by client template","tags":[],"nodes":[{"id":"a0d67daf-1c5d-4d17-986b-d46fec916cdd","name":"Get row(s) in sheet","type":"n8n-nodes-base.googleSheets","position":[208,0],"parameters":{"options":{},"sheetName":{"__rl":true,"mode":"list","value":"gid=0","cachedResultUrl":"https://docs.google.com/spreadsheets/d/11repzs1T85xH0waYFkngj8nNzqisWZ27K4gjNKVNlZU/edit#gid=0","cachedResultName":"clients data"},"documentId":{"__rl":true,"mode":"list","value":"11repzs1T85xH0waYFkngj8nNzqisWZ27K4gjNKVNlZU","cachedResultUrl":"https://docs.google.com/spreadsheets/d/11repzs1T85xH0waYFkngj8nNzqisWZ27K4gjNKVNlZU/edit?usp=drivesdk","cachedResultName":"client_registry_copy"}},"credentials":{"googleSheetsOAuth2Api":{"id":"credential-id","name":"Google Sheets account"}},"typeVersion":4.7},{"id":"910c7dd6-b90a-48e9-8c75-b29fbc06f65a","name":"Loop Over Items","type":"n8n-nodes-base.splitInBatches","position":[416,0],"parameters":{"options":{}},"typeVersion":3},{"id":"aab68f51-d8a7-4742-af9b-bf155dc776a8","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[160,-192],"parameters":{"color":4,"width":176,"content":"Loads the [client list](https://docs.google.com/spreadsheets/d/11repzs1T85xH0waYFkngj8nNzqisWZ27K4gjNKVNlZU/edit?usp=sharing) (one row per client). Each row contains the Meta ad account ID, API access token, and the destination Google Sheets report URL."},"typeVersion":1},{"id":"d807ee28-2c2c-4d88-ac09-509d252c766a","name":"HTTP Request в ads manager клиента","type":"n8n-nodes-base.httpRequest","position":[944,0],"parameters":{"url":"={{ 'https://graph.facebook.com/v25.0/act_' + $json.ad_account_id + '/insights' }}","options":{},"sendQuery":true,"sendHeaders":true,"queryParameters":{"parameters":[{"name":"level","value":"={{$json.metrics_level || 'campaign'}}"},{"name":"date_preset","value":"yesterday"},{"name":"fields","value":"campaign_name,spend,impressions,clicks,ctr,cpm,cpc,date_start,date_stop"}]},"headerParameters":{"parameters":[{"name":"Authorization","value":"={{ 'Bearer ' + $json.meta_access_token }}"}]}},"typeVersion":4.4},{"id":"a920ef57-a601-4f8c-a4fb-3e5a0c6f2eab","name":"Split campaigns","type":"n8n-nodes-base.code","position":[1440,-32],"parameters":{"jsCode":"const campaigns = $json.data || [];\nif (!Array.isArray(campaigns) || campaigns.length === 0) return [];\n\nreturn campaigns.map(c => ({\n  ad_account_id: $json.ctx.ad_account_id,\n  report_sheet_url: $json.ctx.report_sheet_url,\n    \nsheet_list: $json.sheet_list,\n  // дата отчёта из Meta\n  report_date: c.date_start,\n\n  // метрики\n  campaign_name: c.campaign_name,\n  spend: Number(c.spend),\n  impressions: Number(c.impressions),\n  clicks: Number(c.clicks),\n  ctr: Number(c.ctr),\n  cpm: Number(c.cpm),\n  cpc: Number(c.cpc),\n\n  date_start: c.date_start,\n  date_stop: c.date_stop,\n}));"},"typeVersion":2},{"id":"500061bf-198c-4e45-b503-3813cba84daf","name":"Extract spreadsheetId","type":"n8n-nodes-base.code","position":[1584,64],"parameters":{"jsCode":"const url = $json.report_sheet_url;\nif (!url) throw new Error('report_sheet_url пустой');\n\nconst match = url.match(/\\/d\\/([a-zA-Z0-9-_]+)/);\nif (!match) throw new Error('Не нашла spreadsheetId в ссылке');\n\nreturn [{\n  ...$json,\n  report_spreadsheet_id: match[1],\n}];"},"typeVersion":2},{"id":"da8344be-b467-4ec8-a330-4b1b9d2235b9","name":"ctx","type":"n8n-nodes-base.code","position":[624,0],"parameters":{"jsCode":"return [{\n  ...$json,\n  ctx: {\n    client_id: $json.client_id,\n    client_name: $json.client_name,\n    timezone: $json.timezone,\n    ad_account_id: $json.ad_account_id,\n    report_sheet_url: $json.report_sheet_url,\n    meta_access_token: $json.meta_access_token,\n    metrics_level: $json.metrics_level,\n  }\n}];"},"typeVersion":2},{"id":"527145ad-9971-48f7-a084-9fec00b96655","name":"Merge","type":"n8n-nodes-base.merge","position":[1280,-160],"parameters":{"mode":"combine","options":{},"combineBy":"combineByPosition"},"typeVersion":3.2},{"id":"b403d77c-c2fb-44be-9097-9ed39ecdb9f4","name":"Append row in sheet","type":"n8n-nodes-base.googleSheets","position":[1760,176],"parameters":{"columns":{"value":{},"schema":[{"id":"ad_account_id","type":"string","display":true,"removed":false,"required":false,"displayName":"ad_account_id","defaultMatch":false,"canBeUsedToMatch":true},{"id":"report_date","type":"string","display":true,"removed":false,"required":false,"displayName":"report_date","defaultMatch":false,"canBeUsedToMatch":true},{"id":"campaign_name","type":"string","display":true,"removed":false,"required":false,"displayName":"campaign_name","defaultMatch":false,"canBeUsedToMatch":true},{"id":"spend","type":"string","display":true,"removed":false,"required":false,"displayName":"spend","defaultMatch":false,"canBeUsedToMatch":true},{"id":"impressions","type":"string","display":true,"removed":false,"required":false,"displayName":"impressions","defaultMatch":false,"canBeUsedToMatch":true},{"id":"clicks","type":"string","display":true,"removed":false,"required":false,"displayName":"clicks","defaultMatch":false,"canBeUsedToMatch":true},{"id":"ctr","type":"string","display":true,"removed":false,"required":false,"displayName":"ctr","defaultMatch":false,"canBeUsedToMatch":true},{"id":"cpm","type":"string","display":true,"removed":false,"required":false,"displayName":"cpm","defaultMatch":false,"canBeUsedToMatch":true},{"id":"cpc","type":"string","display":true,"removed":false,"required":false,"displayName":"cpc","defaultMatch":false,"canBeUsedToMatch":true},{"id":"date_start","type":"string","display":true,"removed":false,"required":false,"displayName":"date_start","defaultMatch":false,"canBeUsedToMatch":true},{"id":"date_stop","type":"string","display":true,"removed":false,"required":false,"displayName":"date_stop","defaultMatch":false,"canBeUsedToMatch":true},{"id":"report_sheet_url","type":"string","display":true,"removed":false,"required":false,"displayName":"report_sheet_url","defaultMatch":false,"canBeUsedToMatch":true},{"id":"report_spreadsheet_id","type":"string","display":true,"removed":false,"required":false,"displayName":"report_spreadsheet_id","defaultMatch":false,"canBeUsedToMatch":true},{"id":"sheet_list","type":"string","display":true,"removed":false,"required":false,"displayName":"sheet_list","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"autoMapInputData","matchingColumns":[],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"append","sheetName":{"__rl":true,"mode":"name","value":"={{$json.sheet_list}}"},"documentId":{"__rl":true,"mode":"id","value":"={{$json.report_spreadsheet_id}}"}},"credentials":{"googleSheetsOAuth2Api":{"id":"credential-id","name":"Google Sheets account"}},"typeVersion":4.7},{"id":"a1943933-f0f1-43de-9117-d87a41921d29","name":"Code in JavaScript","type":"n8n-nodes-base.code","position":[1920,272],"parameters":{"jsCode":"const rows = $input.all();\nconst first = rows[0]?.json || {};\n\n// Detect client\nconst clientName =\n  first.client_name ||\n  first.ctx?.client_name ||\n  \"Client\";\n\nconst clientId =\n  first.client_id ||\n  first.ctx?.client_id ||\n  first.ad_account_id ||\n  first.ctx?.ad_account_id ||\n  \"N/A\";\n\n// Detect report date\nconst reportDate =\n  first.report_date ||\n  first.date_start ||\n  \"Yesterday\";\n\nlet message = `📊 Meta Ads Daily Summary\\n`;\nmessage += `👤 Client: ${clientName} (ID: ${clientId})\\n`;\nmessage += `📅 Date: ${reportDate}\\n\\n`;\n\nlet totalSpend = 0;\nlet totalImpressions = 0;\nlet totalClicks = 0;\n\nfor (const r of rows) {\n  totalSpend += Number(r.json.spend || 0);\n  totalImpressions += Number(r.json.impressions || 0);\n  totalClicks += Number(r.json.clicks || 0);\n}\n\nconst totalCTR = totalImpressions ? (totalClicks / totalImpressions) * 100 : 0;\nconst totalCPC = totalClicks ? (totalSpend / totalClicks) : 0;\n\nmessage += `💰 Total Spend: ${totalSpend.toFixed(1)}\\n`;\nmessage += `👀 Impressions: ${totalImpressions}\\n`;\nmessage += `🖱 Clicks: ${totalClicks}\\n`;\nmessage += `📈 CTR: ${totalCTR.toFixed(1)}%\\n`;\nmessage += `💲 CPC: ${totalCPC.toFixed(2)}\\n\\n`;\nmessage += `-------------------------\\n\\n`;\n\nfor (const r of rows) {\n  const name = r.json.campaign_name ?? \"(no campaign_name)\";\n  const spend = Number(r.json.spend || 0);\n  const ctr = Number(r.json.ctr || 0);\n  const cpc = Number(r.json.cpc || 0);\n\n  let status = \"✅ OK\";\n  if (ctr < 1.5) status = \"❌ Weak creative (low CTR)\";\n  else if (cpc > 0.5) status = \"⚠ Expensive click (high CPC)\";\n  else if (ctr >= 2 && cpc <= 0.5) status = \"🔥 Good candidate to scale\";\n\n  message += `🎯 ${name}\\n`;\n  message += `💰 Spend: ${spend.toFixed(1)}\\n`;\n  message += `📈 CTR: ${ctr.toFixed(1)}%\\n`;\n  message += `💲 CPC: ${cpc.toFixed(2)}\\n`;\n  message += `➡ ${status}\\n\\n`;\n}\n\nconst reportUrl = first.report_sheet_url || first.ctx?.report_sheet_url;\n\nif (reportUrl) {\n  message += `🔗 Report: ${reportUrl}`;\n}\n\nreturn [{ json: { message } }];"},"typeVersion":2},{"id":"092a81b7-82a1-4dd1-bebb-cd00305cceec","name":"Send a text message","type":"n8n-nodes-base.telegram","position":[2112,400],"webhookId":"a3471aea-33ac-441e-9e0c-aaec9d1f8208","parameters":{"text":"={{$json.message}}","chatId":"123456789","additionalFields":{}},"credentials":{"telegramApi":{"id":"credential-id","name":"Telegram account"}},"typeVersion":1.2},{"id":"27b89fb7-7a1b-427b-b834-eca94276b32c","name":"Schedule Trigger","type":"n8n-nodes-base.scheduleTrigger","position":[0,0],"parameters":{"rule":{"interval":[{"triggerAtHour":10}]}},"typeVersion":1.3},{"id":"e39ddb13-da5c-4a64-b3a2-26de76b9a9aa","name":"If","type":"n8n-nodes-base.if","position":[1088,0],"parameters":{"options":{},"conditions":{"options":{"version":3,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"f5b502b7-bd6c-44e8-8b0b-2c7d04eddc86","operator":{"type":"number","operation":"gt"},"leftValue":"={{$json.data.length}}","rightValue":0}]}},"typeVersion":2.3},{"id":"2b94cfaa-7930-47a7-80b2-1a8b3c8e1c77","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-400,-272],"parameters":{"width":288,"height":400,"content":"## How it works\n**Purpose:** Automate daily Meta Ads reporting for multiple clients. \n\n**Flow:** Read client config from Google Sheets → loop through clients → request campaign insights from Meta Ads API → split campaigns into rows → append to each client’s report sheet → send Telegram status message. \n\n**Inputs:** client_register sheet (ad_account_id, access_token, report_sheet_url). \n\n**Outputs:** campaign-level rows in Google Sheets + Telegram notification."},"typeVersion":1},{"id":"1d7ce9ea-bd9f-496c-9574-47fd69d78762","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[-32,160],"parameters":{"color":6,"width":166,"height":112,"content":"Runs on a schedule to automate daily/weekly reporting without manual execution."},"typeVersion":1},{"id":"c50d4baa-500b-4b83-8716-38b3b0ce25af","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[400,-192],"parameters":{"color":6,"width":150,"content":"Loops through each client from the register sheet so we can generate a report for multiple ad accounts in a single run."},"typeVersion":1},{"id":"6ad09d47-9a14-40de-b40b-c62401ff10d3","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[608,-192],"parameters":{"color":6,"width":176,"content":"Builds a context object (ad_account_id, access_token, report_sheet_url, settings) to simplify mapping in the next nodes and keep the workflow readable."},"typeVersion":1},{"id":"ea51a1fb-c5a9-4a51-a198-4599843eb29f","name":"Sticky Note5","type":"n8n-nodes-base.stickyNote","position":[896,-320],"parameters":{"color":4,"width":192,"height":224,"content":"Sends a request to the Meta Ads Insights endpoint for the current ad account and returns campaign-level metrics (spend, impressions, clicks, CTR, CPM, CPC, dates). Uses token from the client context."},"typeVersion":1},{"id":"052f866c-544f-4755-81cb-32d03d7674cc","name":"Sticky Note6","type":"n8n-nodes-base.stickyNote","position":[1264,-336],"parameters":{"color":6,"width":208,"height":144,"content":"Merges the client context (where to write) with the campaign data (what to write), so downstream nodes have everything in a single payload."},"typeVersion":1},{"id":"4c49abd6-d72c-4686-b535-2e7ccf78f173","name":"Sticky Note7","type":"n8n-nodes-base.stickyNote","position":[1920,176],"parameters":{"color":5,"width":368,"height":80,"content":"Aggregates results (e.g., number of rows written / clients processed) and generates a clean Telegram message indicating success or issues."},"typeVersion":1},{"id":"f3f9a168-3aff-4d7f-83cf-52717f91f890","name":"Sticky Note8","type":"n8n-nodes-base.stickyNote","position":[1744,64],"parameters":{"color":6,"width":384,"height":96,"content":"Appends a row for each campaign into the destination Google Sheet. Column mapping matches the report schema (account id, date, campaign name, spend, impressions, clicks, etc.)."},"typeVersion":1},{"id":"de38643c-a982-4349-a7e2-024dff2ce6dd","name":"Sticky Note9","type":"n8n-nodes-base.stickyNote","position":[1440,-176],"parameters":{"color":6,"width":304,"height":112,"content":"Splits the API response array into individual items so each campaign becomes one row in Google Sheets. Also normalizes numeric fields (Number()) and maps columns."},"typeVersion":1},{"id":"395ffbd6-5d6c-405f-8b26-47725dea2dbc","name":"Sticky Note10","type":"n8n-nodes-base.stickyNote","position":[1584,-48],"parameters":{"color":6,"width":384,"height":96,"content":"Parses the report_sheet_url and extracts the spreadsheetId (and optionally sheet name/tab) so the Google Sheets node can write to the correct document dynamically."},"typeVersion":1},{"id":"9d6f2f82-d691-49f7-9aa0-85114f84fb06","name":"Sticky Note11","type":"n8n-nodes-base.stickyNote","position":[2096,304],"parameters":{"color":4,"width":384,"height":80,"content":"Sends a Telegram alert with the workflow summary (success, processed clients, total rows appended). Useful for monitoring scheduled runs."},"typeVersion":1},{"id":"3d537eed-7cf9-497e-90f0-15adf67ff6a7","name":"Sticky Note12","type":"n8n-nodes-base.stickyNote","position":[784,-944],"parameters":{"width":448,"height":592,"content":"## How to Generate a Meta Ads Access Token (Per Ad Account Setup)\nGo to Meta for Developers:\n👉 https://developers.facebook.com/\n\nOpen your apps dashboard:\n👉 https://developers.facebook.com/apps/\n\nSelect your app (or click Create App).\n\nOpen Graph API Explorer:\n👉 https://developers.facebook.com/tools/explorer/\n\nIn Graph API Explorer:\n\nSelect your app\n\nClick Add Permissions\n\nAdd ads_read (and ads_management if needed)\n\nClick Generate Access Token\n\nVerify your token here:\n👉 https://developers.facebook.com/tools/debug/accesstoken/\n\n(Optional) Create a long-lived token using the OAuth endpoint:\n👉 https://graph.facebook.com/v18.0/oauth/access_token"},"typeVersion":1},{"id":"8b08350d-e6bc-4380-a426-e6094d067558","name":"Sticky Note13","type":"n8n-nodes-base.stickyNote","position":[2352,528],"parameters":{"color":7,"width":384,"height":640,"content":"📊 Meta Ads Daily Summary\n👤 Client: Bloom Florals (ID: 781399151515449)\n📅 Date: 2026-02-24\n\n💰 Total Spend: 320.5\n👀 Impressions: 18,450\n🖱 Clicks: 512\n📈 CTR: 2.8%\n💲 CPC: 0.63\n\n🎯 Valentine Special – Insta DM\n💰 Spend: 180.0\n📈 CTR: 3.1%\n💲 CPC: 0.58\n➡️ 🔥 Good candidate to scale\n\n🎯 Wedding Bouquet Promo\n💰 Spend: 95.5\n📈 CTR: 1.2%\n💲 CPC: 0.92\n➡️ ❌ Weak creative (low CTR)\n\n🎯 Same-Day Delivery Offer\n💰 Spend: 45.0\n📈 CTR: 2.0%\n💲 CPC: 0.45\n➡️ ✅ OK\n\n🔗 Report: https://docs.google.com/spreadsheets/d/1FJfNoZK6M1z0zsZVK41MnPmZ2Sy0HQEARCf7gojVXVY/edit?usp=sharing"},"typeVersion":1},{"id":"392ca80f-8832-4947-8062-0de03b6ea839","name":"Sticky Note14","type":"n8n-nodes-base.stickyNote","position":[2288,448],"parameters":{"width":150,"height":80,"content":"The structure of the message that goes to telegram"},"typeVersion":1},{"id":"6c64e739-f8d2-4cef-a982-0db4ba5bdd51","name":"Sticky Note15","type":"n8n-nodes-base.stickyNote","position":[2304,-256],"parameters":{"color":5,"width":496,"height":512,"content":"Status Logic (Campaign Diagnostics)\n\nEach campaign is evaluated based on CTR and CPC thresholds.\n\nThe status is determined using the following logic:\n\nWeak Creative (❌)\n\nIf CTR < 1.5%\n→ Indicates low engagement. The ad creative may need improvement.\n\nExpensive Click (⚠)\n\nIf CPC > 0.5\n→ Indicates high cost per click. Audience or bidding may need optimization.\n\nGood Candidate to Scale (🔥)\n\nIf CTR ≥ 2% AND CPC ≤ 0.5\n→ Strong performance. The campaign may be suitable for scaling.\n\nOK (✅)\n\nIf none of the above conditions are met\n→ Campaign performance is within acceptable range."},"typeVersion":1}],"active":false,"pinData":{},"settings":{"binaryMode":"separate","availableInMCP":false,"executionOrder":"v1"},"versionId":"9c660c98-3da9-4a40-a0ba-211545ded2a7","connections":{"If":{"main":[[{"node":"Merge","type":"main","index":1}],[{"node":"Loop Over Items","type":"main","index":0}]]},"ctx":{"main":[[{"node":"Merge","type":"main","index":0},{"node":"HTTP Request в ads manager клиента","type":"main","index":0}]]},"Merge":{"main":[[{"node":"Split campaigns","type":"main","index":0}]]},"Loop Over Items":{"main":[[],[{"node":"ctx","type":"main","index":0}]]},"Split campaigns":{"main":[[{"node":"Extract spreadsheetId","type":"main","index":0}]]},"Code in JavaScript":{"main":[[{"node":"Send a text message","type":"main","index":0}]]},"Append row in sheet":{"main":[[{"node":"Code in JavaScript","type":"main","index":0}]]},"Get row(s) in sheet":{"main":[[{"node":"Loop Over Items","type":"main","index":0}]]},"Send a text message":{"main":[[{"node":"Loop Over Items","type":"main","index":0}]]},"Extract spreadsheetId":{"main":[[{"node":"Append row in sheet","type":"main","index":0}]]},"HTTP Request в ads manager клиента":{"main":[[{"node":"If","type":"main","index":0}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":28,"nodeTypes":{"n8n-nodes-base.if":{"count":1},"n8n-nodes-base.code":{"count":4},"n8n-nodes-base.merge":{"count":1},"n8n-nodes-base.telegram":{"count":1},"n8n-nodes-base.stickyNote":{"count":16},"n8n-nodes-base.httpRequest":{"count":1},"n8n-nodes-base.googleSheets":{"count":2},"n8n-nodes-base.splitInBatches":{"count":1},"n8n-nodes-base.scheduleTrigger":{"count":1}}},"status":"published","readyToDemo":null,"user":{"name":"Amina Doszhan","username":"amiiads","bio":"","verified":false,"links":[""],"avatar":"https://gravatar.com/avatar/c4673c21b76fbc22c24e54b992a5e617f4b42f0827ab95e5c5e7d7d3f92172e6?r=pg&d=retro&size=200"},"nodes":[{"id":18,"icon":"file:googleSheets.svg","name":"n8n-nodes-base.googleSheets","codex":{"data":{"alias":["CSV","Sheet","Spreadsheet","GS"],"resources":{"generic":[{"url":"https://n8n.io/blog/love-at-first-sight-ricardos-n8n-journey/","icon":"❤️","label":"Love at first sight: Ricardo’s n8n journey"},{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/","icon":"🧾","label":"Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"},{"url":"https://n8n.io/blog/supercharging-your-conference-registration-process-with-n8n/","icon":"🎫","label":"Supercharging your conference registration process with n8n"},{"url":"https://n8n.io/blog/creating-triggers-for-n8n-workflows-using-polling/","icon":"⏲","label":"Creating triggers for n8n workflows using polling"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/migrating-community-metrics-to-orbit-using-n8n/","icon":"📈","label":"Migrating Community Metrics to Orbit using n8n"},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/your-business-doesnt-need-you-to-operate/","icon":" 🖥️","label":"Hey founders! Your business doesn't need you to operate"},{"url":"https://n8n.io/blog/how-honest-burgers-use-automation-to-save-100k-per-year/","icon":"🍔","label":"How Honest Burgers Use Automation to Save $100k per year"},{"url":"https://n8n.io/blog/how-a-digital-strategist-uses-n8n-for-online-marketing/","icon":"💻","label":"How a digital strategist uses n8n for online marketing"},{"url":"https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/","icon":"🧠","label":"Why this Product Manager loves workflow automation with n8n"},{"url":"https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/","icon":"🙌","label":"Sending Automated Congratulations with Google Sheets, Twilio, and n8n "},{"url":"https://n8n.io/blog/how-a-membership-development-manager-automates-his-work-and-investments/","icon":"📈","label":"How a Membership Development Manager automates his work and investments"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googlesheets/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/google/oauth-single-service/"}]},"categories":["Data & Storage","Productivity"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"input\",\"output\"]","defaults":{"name":"Google Sheets"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2MCIgaGVpZ2h0PSI2MCI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGZpbGw9IiMyOEI0NDYiIGQ9Ik0zNS42OSAxIDUyIDE3LjIyNXYzOS4wODdhMy42NyAzLjY3IDAgMCAxLTEuMDg0IDIuNjFBMy43IDMuNyAwIDAgMSA0OC4yOTMgNjBIMTIuNzA3YTMuNyAzLjcgMCAwIDEtMi42MjMtMS4wNzhBMy42NyAzLjY3IDAgMCAxIDkgNTYuMzEyVjQuNjg4YTMuNjcgMy42NyAwIDAgMSAxLjA4NC0yLjYxQTMuNyAzLjcgMCAwIDEgMTIuNzA3IDF6Ii8+PHBhdGggZmlsbD0iIzZBQ0U3QyIgZD0iTTM1LjY5IDEgNTIgMTcuMjI1SDM5LjM5N2MtMi4wNTQgMC0zLjcwNy0xLjgyOS0zLjcwNy0zLjg3MnoiLz48cGF0aCBmaWxsPSIjMjE5QjM4IiBkPSJNMzkuMjExIDE3LjIyNSA1MiAyMi40OHYtNS4yNTV6Ii8+PHBhdGggZmlsbD0iI0ZGRiIgZD0iTTIwLjEyIDMxLjk3NWMwLS44MTcuNjYyLTEuNDc1IDEuNDgzLTEuNDc1aDE3Ljc5NGMuODIxIDAgMS40ODIuNjU4IDEuNDgyIDEuNDc1djE1LjQ4N2MwIC44MTgtLjY2MSAxLjQ3NS0xLjQ4MiAxLjQ3NUgyMS42MDNhMS40NzYgMS40NzYgMCAwIDEtMS40ODItMS40NzRWMzEuOTc0em0yLjIyNSAxLjQ3NWg2LjY3MnYyLjIxMmgtNi42NzJ6bTAgNS4xNjJoNi42NzJ2Mi4yMTNoLTYuNjcyem0wIDUuMTYzaDYuNjcydjIuMjEyaC02LjY3MnptOS42MzgtMTAuMzI1aDYuNjcydjIuMjEyaC02LjY3MnptMCA1LjE2Mmg2LjY3MnYyLjIxM2gtNi42NzJ6bTAgNS4xNjNoNi42NzJ2Mi4yMTJoLTYuNjcyeiIvPjxwYXRoIGZpbGw9IiMyOEI0NDYiIGQ9Ik0zNC42OSAwIDUxIDE2LjIyNXYzOS4wODdhMy42NyAzLjY3IDAgMCAxLTEuMDg0IDIuNjFBMy43IDMuNyAwIDAgMSA0Ny4yOTMgNTlIMTEuNzA3YTMuNyAzLjcgMCAwIDEtMi42MjMtMS4wNzhBMy42NyAzLjY3IDAgMCAxIDggNTUuMzEyVjMuNjg4YTMuNjcgMy42NyAwIDAgMSAxLjA4NC0yLjYxQTMuNyAzLjcgMCAwIDEgMTEuNzA3IDB6Ii8+PHBhdGggZmlsbD0iIzZBQ0U3QyIgZD0iTTM0LjY5IDAgNTEgMTYuMjI1SDM4LjM5N2MtMi4wNTQgMC0zLjcwNy0xLjgyOS0zLjcwNy0zLjg3MnoiLz48cGF0aCBmaWxsPSIjMjE5QjM4IiBkPSJNMzguMjExIDE2LjIyNSA1MSAyMS40OHYtNS4yNTV6Ii8+PHBhdGggZmlsbD0iI0ZGRiIgZD0iTTE5LjEyIDMwLjk3NWMwLS44MTcuNjYyLTEuNDc1IDEuNDgzLTEuNDc1aDE3Ljc5NGMuODIxIDAgMS40ODIuNjU4IDEuNDgyIDEuNDc1djE1LjQ4N2MwIC44MTgtLjY2MSAxLjQ3NS0xLjQ4MiAxLjQ3NUgyMC42MDNhMS40NzYgMS40NzYgMCAwIDEtMS40ODItMS40NzRWMzAuOTc0em0yLjIyNSAxLjQ3NWg2LjY3MnYyLjIxMmgtNi42NzJ6bTAgNS4xNjJoNi42NzJ2Mi4yMTNoLTYuNjcyem0wIDUuMTYzaDYuNjcydjIuMjEyaC02LjY3MnptOS42MzgtMTAuMzI1aDYuNjcydjIuMjEyaC02LjY3MnptMCA1LjE2Mmg2LjY3MnYyLjIxM2gtNi42NzJ6bTAgNS4xNjNoNi42NzJ2Mi4yMTJoLTYuNjcyeiIvPjwvZz48L3N2Zz4="},"displayName":"Google Sheets","typeVersion":5,"nodeCategories":[{"id":3,"name":"Data & Storage"},{"id":4,"name":"Productivity"}]},{"id":19,"icon":"file:httprequest.svg","name":"n8n-nodes-base.httpRequest","codex":{"data":{"alias":["API","Request","URL","Build","cURL"],"resources":{"generic":[{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/automatically-pulling-and-visualizing-data-with-n8n/","icon":"📈","label":"Automatically pulling and visualizing data with n8n"},{"url":"https://n8n.io/blog/learn-how-to-automatically-cross-post-your-content-with-n8n/","icon":"✍️","label":"Learn how to automatically cross-post your content with n8n"},{"url":"https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/","icon":"🧾","label":"Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"},{"url":"https://n8n.io/blog/running-n8n-on-ships-an-interview-with-maranics/","icon":"🛳","label":"Running n8n on ships: An interview with Maranics"},{"url":"https://n8n.io/blog/what-are-apis-how-to-use-them-with-no-code/","icon":" 🪢","label":"What are APIs and how to use them with no code"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/world-poetry-day-workflow/","icon":"📜","label":"Celebrating World Poetry Day with a daily poem in Telegram"},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/automate-designs-with-bannerbear-and-n8n/","icon":"🎨","label":"Automate Designs with Bannerbear and n8n"},{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/building-an-expense-tracking-app-in-10-minutes/","icon":"📱","label":"Building an expense tracking app in 10 minutes"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/how-to-use-the-http-request-node-the-swiss-army-knife-for-workflow-automation/","icon":"🧰","label":"How to use the HTTP Request Node - The Swiss Army Knife for Workflow Automation"},{"url":"https://n8n.io/blog/learn-how-to-use-webhooks-with-mattermost-slash-commands/","icon":"🦄","label":"Learn how to use webhooks with Mattermost slash commands"},{"url":"https://n8n.io/blog/how-a-membership-development-manager-automates-his-work-and-investments/","icon":"📈","label":"How a Membership Development Manager automates his work and investments"},{"url":"https://n8n.io/blog/a-low-code-bitcoin-ticker-built-with-questdb-and-n8n-io/","icon":"📈","label":"A low-code bitcoin ticker built with QuestDB and n8n.io"},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/automations-for-activists/","icon":"✨","label":"How Common Knowledge use workflow automation for activism"},{"url":"https://n8n.io/blog/creating-scheduled-text-affirmations-with-n8n/","icon":"🤟","label":"Creating scheduled text affirmations with n8n"},{"url":"https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/","icon":"🛵","label":"How Goomer automated their operations with over 200 n8n workflows"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"output\"]","defaults":{"name":"HTTP Request","color":"#0004F5"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00MCAyMEM0MCA4Ljk1MzE0IDMxLjA0NjkgMCAyMCAwQzguOTUzMTQgMCAwIDguOTUzMTQgMCAyMEMwIDMxLjA0NjkgOC45NTMxNCA0MCAyMCA0MEMzMS4wNDY5IDQwIDQwIDMxLjA0NjkgNDAgMjBaTTIwIDM2Ljk0NThDMTguODg1MiAzNi45NDU4IDE3LjEzNzggMzUuOTY3IDE1LjQ5OTggMzIuNjk4NUMxNC43OTY0IDMxLjI5MTggMTQuMTk2MSAyOS41NDMxIDEzLjc1MjYgMjcuNjg0N0gyNi4xODk4QzI1LjgwNDUgMjkuNTQwMyAyNS4yMDQ0IDMxLjI5MDEgMjQuNTAwMiAzMi42OTg1QzIyLjg2MjIgMzUuOTY3IDIxLjExNDggMzYuOTQ1OCAyMCAzNi45NDU4Wk0xMi45MDY0IDIwQzEyLjkwNjQgMjEuNjA5NyAxMy4wMDg3IDIzLjE2NCAxMy4yMDAzIDI0LjYzMDVIMjYuNzk5N0MyNi45OTEzIDIzLjE2NCAyNy4wOTM2IDIxLjYwOTcgMjcuMDkzNiAyMEMyNy4wOTM2IDE4LjM5MDMgMjYuOTkxMyAxNi44MzYgMjYuNzk5NyAxNS4zNjk1SDEzLjIwMDNDMTMuMDA4NyAxNi44MzYgMTIuOTA2NCAxOC4zOTAzIDEyLjkwNjQgMjBaTTIwIDMuMDU0MTlDMjEuMTE0OSAzLjA1NDE5IDIyLjg2MjIgNC4wMzA3OCAyNC41MDAxIDcuMzAwMzlDMjUuMjA2NiA4LjcxNDA4IDI1LjgwNzIgMTAuNDA2NyAyNi4xOTIgMTIuMzE1M0gxMy43NTAxQzE0LjE5MzMgMTAuNDA0NyAxNC43OTQyIDguNzEyNTQgMTUuNDk5OCA3LjMwMDY0QzE3LjEzNzcgNC4wMzA4MyAxOC44ODUxIDMuMDU0MTkgMjAgMy4wNTQxOVpNMzAuMTQ3OCAyMEMzMC4xNDc4IDE4LjQwOTkgMzAuMDU0MyAxNi44NjE3IDI5LjgyMjcgMTUuMzY5NUgzNi4zMDQyQzM2LjcyNTIgMTYuODQyIDM2Ljk0NTggMTguMzk2NCAzNi45NDU4IDIwQzM2Ljk0NTggMjEuNjAzNiAzNi43MjUyIDIzLjE1OCAzNi4zMDQyIDI0LjYzMDVIMjkuODIyN0MzMC4wNTQzIDIzLjEzODMgMzAuMTQ3OCAyMS41OTAxIDMwLjE0NzggMjBaTTI2LjI3NjcgNC4yNTUxMkMyNy42MzY1IDYuMzYwMTkgMjguNzExIDkuMTMyIDI5LjM3NzQgMTIuMzE1M0gzNS4xMDQ2QzMzLjI1MTEgOC42NjggMzAuMTA3IDUuNzgzNDYgMjYuMjc2NyA0LjI1NTEyWk0xMC42MjI2IDEyLjMxNTNINC44OTI5M0M2Ljc1MTQ3IDguNjY3ODQgOS44OTM1MSA1Ljc4MzQxIDEzLjcyMzIgNC4yNTUxM0MxMi4zNjM1IDYuMzYwMjEgMTEuMjg5IDkuMTMyMDEgMTAuNjIyNiAxMi4zMTUzWk0zLjA1NDE5IDIwQzMuMDU0MTkgMjEuNjAzIDMuMjc3NDMgMjMuMTU3NSAzLjY5NDg0IDI0LjYzMDVIMTAuMTIxN0M5Ljk0NjE5IDIzLjE0MiA5Ljg1MjIyIDIxLjU5NDMgOS44NTIyMiAyMEM5Ljg1MjIyIDE4LjQwNTcgOS45NDYxOSAxNi44NTggMTAuMTIxNyAxNS4zNjk1SDMuNjk0ODRDMy4yNzc0MyAxNi44NDI1IDMuMDU0MTkgMTguMzk3IDMuMDU0MTkgMjBaTTI2LjI3NjYgMzUuNzQyN0MyNy42MzY1IDMzLjYzOTMgMjguNzExIDMwLjg2OCAyOS4zNzc0IDI3LjY4NDdIMzUuMTA0NkMzMy4yNTEgMzEuMzMyMiAzMC4xMDY4IDM0LjIxNzkgMjYuMjc2NiAzNS43NDI3Wk0xMy43MjM0IDM1Ljc0MjdDOS44OTM2OSAzNC4yMTc5IDYuNzUxNTUgMzEuMzMyNCA0Ljg5MjkzIDI3LjY4NDdIMTAuNjIyNkMxMS4yODkgMzAuODY4IDEyLjM2MzUgMzMuNjM5MyAxMy43MjM0IDM1Ljc0MjdaIiBmaWxsPSIjM0E0MkU5Ii8+Cjwvc3ZnPgo="},"displayName":"HTTP Request","typeVersion":4,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":20,"icon":"fa:map-signs","name":"n8n-nodes-base.if","codex":{"data":{"alias":["Router","Filter","Condition","Logic","Boolean","Branch"],"details":"The IF node can be used to implement binary conditional logic in your workflow. You can set up one-to-many conditions to evaluate each item of data being inputted into the node. That data will either evaluate to TRUE or FALSE and route out of the node accordingly.\n\nThis node has multiple types of conditions: Bool, String, Number, and Date & Time.","resources":{"generic":[{"url":"https://n8n.io/blog/learn-to-automate-your-factorys-incident-reporting-a-step-by-step-guide/","icon":"🏭","label":"Learn to Automate Your Factory's Incident Reporting: A Step by Step Guide"},{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/create-a-toxic-language-detector-for-telegram/","icon":"🤬","label":"Create a toxic language detector for Telegram in 4 step"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/","icon":"⚙️","label":"Automate your data processing pipeline in 9 steps"},{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/automation-for-maintainers-of-open-source-projects/","icon":"🏷️","label":"How to automatically manage contributions to open-source projects"},{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/","icon":"🧠","label":"Why this Product Manager loves workflow automation with n8n"},{"url":"https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/","icon":"🙌","label":"Sending Automated Congratulations with Google Sheets, Twilio, and n8n "},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/","icon":"🎖","label":"Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.if/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow"]}}},"group":"[\"transform\"]","defaults":{"name":"If","color":"#408000"},"iconData":{"icon":"map-signs","type":"icon"},"displayName":"If","typeVersion":2,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":24,"icon":"file:merge.svg","name":"n8n-nodes-base.merge","codex":{"data":{"alias":["Join","Concatenate","Wait"],"resources":{"generic":[{"url":"https://n8n.io/blog/how-to-sync-data-between-two-systems/","icon":"🏬","label":"How to synchronize data between two systems (one-way vs. two-way sync"},{"url":"https://n8n.io/blog/supercharging-your-conference-registration-process-with-n8n/","icon":"🎫","label":"Supercharging your conference registration process with n8n"},{"url":"https://n8n.io/blog/migrating-community-metrics-to-orbit-using-n8n/","icon":"📈","label":"Migrating Community Metrics to Orbit using n8n"},{"url":"https://n8n.io/blog/build-your-own-virtual-assistant-with-n8n-a-step-by-step-guide/","icon":"👦","label":"Build your own virtual assistant with n8n: A step by step guide"},{"url":"https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/","icon":"🙌","label":"Sending Automated Congratulations with Google Sheets, Twilio, and n8n "},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.merge/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow","Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Merge"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTc3XzUxOCkiPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTAgNDhDMCAyMS40OTAzIDIxLjQ5MDMgMCA0OCAwSDExMkMxMzguNTEgMCAxNjAgMjEuNDkwMyAxNjAgNDhWNTZIMTk2LjI1MkMyNDAuNDM1IDU2IDI3Ni4yNTIgOTEuODE3MiAyNzYuMjUyIDEzNlYxOTJDMjc2LjI1MiAyMTQuMDkxIDI5NC4xNjEgMjMyIDMxNi4yNTIgMjMySDM1MlYyMjRDMzUyIDE5Ny40OSAzNzMuNDkgMTc2IDQwMCAxNzZINDY0QzQ5MC41MSAxNzYgNTEyIDE5Ny40OSA1MTIgMjI0VjI4OEM1MTIgMzE0LjUxIDQ5MC41MSAzMzYgNDY0IDMzNkg0MDBDMzczLjQ5IDMzNiAzNTIgMzE0LjUxIDM1MiAyODhWMjgwSDMxNi4yNTJDMjk0LjE2MSAyODAgMjc2LjI1MiAyOTcuOTA5IDI3Ni4yNTIgMzIwVjM3NkMyNzYuMjUyIDQyMC4xODMgMjQwLjQzNSA0NTYgMTk2LjI1MiA0NTZIMTYwVjQ2NEMxNjAgNDkwLjUxIDEzOC41MSA1MTIgMTEyIDUxMkg0OEMyMS40OTAzIDUxMiAwIDQ5MC41MSAwIDQ2NFY0MDBDMCAzNzMuNDkgMjEuNDkwMyAzNTIgNDggMzUySDExMkMxMzguNTEgMzUyIDE2MCAzNzMuNDkgMTYwIDQwMFY0MDhIMTk2LjI1MkMyMTMuOTI1IDQwOCAyMjguMjUyIDM5My42NzMgMjI4LjI1MiAzNzZWMzIwQzIyOC4yNTIgMjk0Ljc4NCAyMzguODU5IDI3Mi4wNDQgMjU1Ljg1MyAyNTZDMjM4Ljg1OSAyMzkuOTU2IDIyOC4yNTIgMjE3LjIxNiAyMjguMjUyIDE5MlYxMzZDMjI4LjI1MiAxMTguMzI3IDIxMy45MjUgMTA0IDE5Ni4yNTIgMTA0SDE2MFYxMTJDMTYwIDEzOC41MSAxMzguNTEgMTYwIDExMiAxNjBINDhDMjEuNDkwMyAxNjAgMCAxMzguNTEgMCAxMTJWNDhaTTEwNCA0OEMxMDguNDE4IDQ4IDExMiA1MS41ODE3IDExMiA1NlYxMDRDMTEyIDEwOC40MTggMTA4LjQxOCAxMTIgMTA0IDExMkg1NkM1MS41ODE3IDExMiA0OCAxMDguNDE4IDQ4IDEwNFY1NkM0OCA1MS41ODE3IDUxLjU4MTcgNDggNTYgNDhIMTA0Wk00NTYgMjI0QzQ2MC40MTggMjI0IDQ2NCAyMjcuNTgyIDQ2NCAyMzJWMjgwQzQ2NCAyODQuNDE4IDQ2MC40MTggMjg4IDQ1NiAyODhINDA4QzQwMy41ODIgMjg4IDQwMCAyODQuNDE4IDQwMCAyODBWMjMyQzQwMCAyMjcuNTgyIDQwMy41ODIgMjI0IDQwOCAyMjRINDU2Wk0xMTIgNDA4QzExMiA0MDMuNTgyIDEwOC40MTggNDAwIDEwNCA0MDBINTZDNTEuNTgxNyA0MDAgNDggNDAzLjU4MiA0OCA0MDhWNDU2QzQ4IDQ2MC40MTggNTEuNTgxNyA0NjQgNTYgNDY0SDEwNEMxMDguNDE4IDQ2NCAxMTIgNDYwLjQxOCAxMTIgNDU2VjQwOFoiIGZpbGw9IiM1NEI4QzkiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTc3XzUxOCI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="},"displayName":"Merge","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":39,"icon":"fa:sync","name":"n8n-nodes-base.splitInBatches","codex":{"data":{"alias":["Loop","Concatenate","Batch","Split","Split In Batches"],"resources":{"generic":[{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/","icon":"🎖","label":"Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.splitinbatches/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow"]}}},"group":"[\"organization\"]","defaults":{"name":"Loop Over Items","color":"#007755"},"iconData":{"icon":"sync","type":"icon"},"displayName":"Loop Over Items (Split in Batches)","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":49,"icon":"file:telegram.svg","name":"n8n-nodes-base.telegram","codex":{"data":{"alias":["human","form","wait","hitl","approval"],"resources":{"generic":[{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/create-a-toxic-language-detector-for-telegram/","icon":"🤬","label":"Create a toxic language detector for Telegram in 4 step"},{"url":"https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/","icon":"🧾","label":"Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/world-poetry-day-workflow/","icon":"📜","label":"Celebrating World Poetry Day with a daily poem in Telegram"},{"url":"https://n8n.io/blog/using-automation-to-boost-productivity-in-the-workplace/","icon":"💪","label":"Using Automation to Boost Productivity in the Workplace"},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/creating-scheduled-text-affirmations-with-n8n/","icon":"🤟","label":"Creating scheduled text affirmations with n8n"},{"url":"https://n8n.io/blog/creating-telegram-bots-with-n8n-a-no-code-platform/","icon":"💬","label":"Creating Telegram Bots with n8n, a No-Code Platform"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.telegram/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/telegram/"}]},"categories":["Communication","HITL"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"HITL":["Human in the Loop"]}}},"group":"[\"output\"]","defaults":{"name":"Telegram"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiB2aWV3Qm94PSIwIDAgNjYgNjYiPjx1c2UgeGxpbms6aHJlZj0iI2EiIHg9Ii41IiB5PSIuNSIvPjxzeW1ib2wgaWQ9ImEiIG92ZXJmbG93PSJ2aXNpYmxlIj48ZyBmaWxsLXJ1bGU9Im5vbnplcm8iIHN0cm9rZT0ibm9uZSI+PHBhdGggZmlsbD0iIzM3YWVlMiIgZD0iTTAgMzJjMCAxNy42NzMgMTQuMzI3IDMyIDMyIDMyczMyLTE0LjMyNyAzMi0zMlM0OS42NzMgMCAzMiAwIDAgMTQuMzI3IDAgMzIiLz48cGF0aCBmaWxsPSIjYzhkYWVhIiBkPSJtMjEuNjYxIDM0LjMzOCAzLjc5NyAxMC41MDhzLjQ3NS45ODMuOTgzLjk4MyA4LjA2OC03Ljg2NCA4LjA2OC03Ljg2NGw4LjQwNy0xNi4yMzctMjEuMTE5IDkuODk4eiIvPjxwYXRoIGZpbGw9IiNhOWM2ZDgiIGQ9Im0yNi42OTUgMzcuMDM0LS43MjkgNy43NDZzLS4zMDUgMi4zNzMgMi4wNjggMGw0LjY0NC00LjIwMyIvPjxwYXRoIGQ9Im0yMS43MyAzNC43MTItNy44MDktMi41NDVzLS45MzItLjM3OC0uNjMzLTEuMjM3Yy4wNjItLjE3Ny4xODYtLjMyOC41NTktLjU4OCAxLjczMS0xLjIwNiAzMi4wMjgtMTIuMDk2IDMyLjAyOC0xMi4wOTZzLjg1Ni0uMjg4IDEuMzYxLS4wOTdjLjIzMS4wODguMzc4LjE4Ny41MDMuNTQ4LjA0NS4xMzIuMDcxLjQxMS4wNjguNjg5LS4wMDMuMjAxLS4wMjcuMzg2LS4wNDUuNjc4LS4xODQgMi45NzgtNS43MDYgMjUuMTk4LTUuNzA2IDI1LjE5OHMtLjMzIDEuMy0xLjUxNCAxLjM0NWMtLjQzMi4wMTYtLjk1Ni0uMDcxLTEuNTgyLS42MS0yLjMyMy0xLjk5OC0xMC4zNTItNy4zOTQtMTIuMTI2LTguNThhLjM0LjM0IDAgMCAxLS4xNDYtLjIzOWMtLjAyNS0uMTI1LjEwOC0uMjguMTA4LS4yOHMxMy45OC0xMi40MjcgMTQuMzUyLTEzLjczMWMuMDI5LS4xMDEtLjA3OS0uMTUxLS4yMjYtLjEwNy0uOTI5LjM0Mi0xNy4wMjUgMTAuNTA2LTE4LjgwMSAxMS42MjktLjEwNC4wNjYtLjM5NS4wMjMtLjM5NS4wMjMiLz48L2c+PC9zeW1ib2w+PC9zdmc+"},"displayName":"Telegram","typeVersion":1,"nodeCategories":[{"id":6,"name":"Communication"},{"id":28,"name":"HITL"}]},{"id":565,"icon":"fa:sticky-note","name":"n8n-nodes-base.stickyNote","codex":{"data":{"alias":["Comments","Notes","Sticky"],"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"input\"]","defaults":{"name":"Sticky Note","color":"#FFD233"},"iconData":{"icon":"sticky-note","type":"icon"},"displayName":"Sticky Note","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":834,"icon":"file:code.svg","name":"n8n-nodes-base.code","codex":{"data":{"alias":["cpde","Javascript","JS","Python","Script","Custom Code","Function"],"details":"The Code node allows you to execute JavaScript in your workflow.","resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.code/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers","Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Code"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTcxXzQ0MSkiPgo8cGF0aCBkPSJNMTcwLjI4MyA0OEgxOTYuNUMyMDMuMTI3IDQ4IDIwOC41IDQyLjYyNzQgMjA4LjUgMzZWMTJDMjA4LjUgNS4zNzI1OCAyMDMuMTI3IDAgMTk2LjUgMEgxNzAuMjgzQzEyNi4xIDAgOTAuMjgzIDM1LjgxNzIgOTAuMjgzIDgwVjE3NkM5MC4yODMgMjA2LjkyOCA2NS4yMTA5IDIzMiAzNC4yODMgMjMySDIzQzE2LjM3MjYgMjMyIDExIDIzNy4zNzIgMTEgMjQ0VjI2OEMxMSAyNzQuNjI3IDE2LjM3MjQgMjgwIDIyLjk5OTYgMjgwTDM0LjI4MyAyODBDNjUuMjEwOSAyODAgOTAuMjgzIDMwNS4wNzIgOTAuMjgzIDMzNlY0NDBDOTAuMjgzIDQ3OS43NjQgMTIyLjUxOCA1MTIgMTYyLjI4MyA1MTJIMTk2LjVDMjAzLjEyNyA1MTIgMjA4LjUgNTA2LjYyNyAyMDguNSA1MDBWNDc2QzIwOC41IDQ2OS4zNzMgMjAzLjEyNyA0NjQgMTk2LjUgNDY0SDE2Mi4yODNDMTQ5LjAyOCA0NjQgMTM4LjI4MyA0NTMuMjU1IDEzOC4yODMgNDQwVjMzNkMxMzguMjgzIDMwOS4wMjIgMTI4LjAxMSAyODQuNDQzIDExMS4xNjQgMjY1Ljk2MUMxMDYuMTA5IDI2MC40MTYgMTA2LjEwOSAyNTEuNTg0IDExMS4xNjQgMjQ2LjAzOUMxMjguMDExIDIyNy41NTcgMTM4LjI4MyAyMDIuOTc4IDEzOC4yODMgMTc2VjgwQzEzOC4yODMgNjIuMzI2OSAxNTIuNjEgNDggMTcwLjI4MyA0OFoiIGZpbGw9IiNGRjk5MjIiLz4KPHBhdGggZD0iTTMwNSAzNkMzMDUgNDIuNjI3NCAzMTAuMzczIDQ4IDMxNyA0OEgzNDIuOTc5QzM2MC42NTIgNDggMzc0Ljk3OCA2Mi4zMjY5IDM3NC45NzggODBWMTc2QzM3NC45NzggMjAyLjk3OCAzODUuMjUxIDIyNy41NTcgNDAyLjA5OCAyNDYuMDM5QzQwNy4xNTMgMjUxLjU4NCA0MDcuMTUzIDI2MC40MTYgNDAyLjA5OCAyNjUuOTYxQzM4NS4yNTEgMjg0LjQ0MyAzNzQuOTc4IDMwOS4wMjIgMzc0Ljk3OCAzMzZWNDMyQzM3NC45NzggNDQ5LjY3MyAzNjAuNjUyIDQ2NCAzNDIuOTc5IDQ2NEgzMTdDMzEwLjM3MyA0NjQgMzA1IDQ2OS4zNzMgMzA1IDQ3NlY1MDBDMzA1IDUwNi42MjcgMzEwLjM3MyA1MTIgMzE3IDUxMkgzNDIuOTc5QzM4Ny4xNjEgNTEyIDQyMi45NzggNDc2LjE4MyA0MjIuOTc4IDQzMlYzMzZDNDIyLjk3OCAzMDUuMDcyIDQ0OC4wNTEgMjgwIDQ3OC45NzkgMjgwSDQ5MEM0OTYuNjI3IDI4MCA1MDIgMjc0LjYyOCA1MDIgMjY4VjI0NEM1MDIgMjM3LjM3MyA0OTYuNjI4IDIzMiA0OTAgMjMyTDQ3OC45NzkgMjMyQzQ0OC4wNTEgMjMyIDQyMi45NzggMjA2LjkyOCA0MjIuOTc4IDE3NlY4MEM0MjIuOTc4IDM1LjgxNzIgMzg3LjE2MSAwIDM0Mi45NzkgMEgzMTdDMzEwLjM3MyAwIDMwNSA1LjM3MjU4IDMwNSAxMlYzNloiIGZpbGw9IiNGRjk5MjIiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTcxXzQ0MSI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="},"displayName":"Code","typeVersion":2,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":839,"icon":"fa:clock","name":"n8n-nodes-base.scheduleTrigger","codex":{"data":{"alias":["Time","Scheduler","Polling","Cron","Interval"],"resources":{"generic":[],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.scheduletrigger/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"trigger\",\"schedule\"]","defaults":{"name":"Schedule Trigger","color":"#31C49F"},"iconData":{"icon":"clock","type":"icon"},"displayName":"Schedule Trigger","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]}],"categories":[{"id":32,"name":"Market Research"},{"id":49,"name":"AI Summarization"}],"image":[]}}