Send weekly client performance reports via Gmail and Slack using Google Sheets, Meta Ads, Google Ads, GA4, and OpenAI
n8n-workflow-20661.n8n.io
· n8n.io
Quick overview This workflow runs every Monday, reads a Google Sheets config to fetch weekly metrics from Meta Ads, Google Ads, and GA4, uses OpenAI to write a narrative around deterministic week-over-week deltas, and delivers branded reports via Gmail and/or Slack while logging sends back to Google Sheets. How it works 1. Runs on a schedule every Monday at 09:00 (workflow timezone) and loads client settings from the Google Sheets config tab plus previously sent dedupekey values from the reports tab. 2. Validates each config row, skips disabled clients, and turns missing sources or delivery targets into alerts that continue through the run. 3. For each enabled data source per client, fetches weekly metrics from the Meta Marketing API, Google Ads API, and/or Google Analytics Data API (GA4) and normalizes the results into a shared metric format. 4. Computes week-over-week percentage deltas and flags anomalies when a metric’s absolute change meets the per-client alertthresholdpct. 5. Grou
n8n-workflow-20661.n8n.io via a single DNS TXT record to add the
verified by owner badge, embed an Agenstry badge on your README, and earn back the missing conformance points listed below.
Dispute or improve this rating
C
Conformance score: 60/100
Catalogue listing, not an A2A agent: a workflow template listed by n8n.io. Scored on the 2 criteria that apply (9 of 15 points, scaled to 100); the A2A card criteria do not apply.
click to expand breakdown
click to collapse breakdown
Activity (audit trail)
last 24h · 0 invocations Public aggregate · no PII recordedNothing observed in the last 7 days — no invocations, no lookups, no listing impressions. Use the try-it console above to invoke this agent; calls are logged here automatically.
Listing history
1 snapshot Every change to the catalogue entry| Captured | Hash | Snapshot |
|---|---|---|
| 2026-10-18 09:40:54 current | 529dee42e5b5… |
view → |
Endpoints
| Agent card | https://n8n.io/workflows/20661 |
| Provider | https://n8n.io |
| Docs | https://n8n.io/workflows/20661 |
Health · last 0 probes
Similar agents embedding-nearest
Embed your Agenstry badge
Paste any of these into your README, agent card, or marketing page. Each badge auto-updates and links back to this page.
Markdown / HTML snippets
[](https://agenstry.com/agents/n8n-workflow-20661.n8n.io) [](https://agenstry.com/agents/n8n-workflow-20661.n8n.io) [](https://agenstry.com/agents/n8n-workflow-20661.n8n.io) [](https://agenstry.com/agents/n8n-workflow-20661.n8n.io)
Audit-grade evidence bundle
JSON snapshot for vendor-review files. Add ?sign=true for a JWS-signed envelope verifiable against
our JWKS. See the methodology.
Raw agent card JSON
{
"_source": "n8n.io",
"workflow": {
"id": 20661,
"name": "Send weekly client performance reports via Gmail and Slack using Google Sheets, Meta Ads, Google Ads, GA4, and OpenAI",
"totalViews": 13,
"price": null,
"purchaseUrl": null,
"recentViews": 13,
"createdAt": "2026-10-08T09:36:19.862Z",
"user": {
"username": "lethevinh",
"verified": true
},
"readyToDemo": null,
"nodes": [
{
"id": 12,
"icon": "fa:bug",
"name": "n8n-nodes-base.errorTrigger",
"codex": {
"data": {
"details": "In n8n, when a workflow execution fails, it can start another workflow. This second workflow can be any arbitrary workflow on your n8n instance. Use the Error Trigger node as your Trigger in the Error workflow.",
"resources": {
"generic": [
{
"url": "https://n8n.io/blog/creating-error-workflows-in-n8n/",
"icon": "\ud83c\udf2a",
"label": "Creating Error Workflows in n8n"
}
],
"primaryDocumentation": [
{
"url": "https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.errortrigger/"
}
]
},
"categories": [
"Development",
"Core Nodes"
],
"nodeVersion": "1.0",
"codexVersion": "1.0",
"subcategories": {
"Core Nodes": [
"Other Trigger Nodes"
]
}
}
},
"group": "[\"trigger\"]",
"defaults": {
"name": "Error Trigger",
"color": "#0000FF"
},
"iconData": {
"icon": "bug",
"type": "icon"
},
"displayName": "Error Trigger",
"typeVersion": 1,
"nodeCategories": [
{
"id": 5,
"name": "Development"
},
{
"id": 9,
"name": "Core 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": "\u2764\ufe0f",
"label": "Love at first sight: Ricardo\u2019s n8n journey"
},
{
"url": "https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/",
"icon": "\ud83e\uddec",
"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": "\ud83e\uddfe",
"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": "\ud83c\udfab",
"label": "Supercharging your conference registration process with n8n"
},
{
"url": "https://n8n.io/blog/creating-triggers-for-n8n-workflows-using-polling/",
"icon": "\u23f2",
"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": "\ud83d\udcc8",
"label": "Migrating Community Metrics to Orbit using n8n"
},
{
"url": "https://n8n.io/blog/automate-google-apps-for-productivity/",
"icon": "\ud83d\udca1",
"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": " \ud83d\udda5\ufe0f",
"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": "\ud83c\udf54",
"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": "\ud83d\udcbb",
"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": "\ud83e\udde0",
"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": "\ud83d\ude4c",
"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": "\ud83d\udcc8",
"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": "\u2600\ufe0f",
"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": "\ud83e\uddec",
"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": "\ud83d\udcc8",
"label": "Automatically pulling and visualizing data with n8n"
},
{
"url": "https://n8n.io/blog/learn-how-to-automatically-cross-post-your-content-with-n8n/",
"icon": "\u270d\ufe0f",
"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": "\ud83e\uddfe",
"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": "\ud83d\udef3",
"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": " \ud83e\udea2",
"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": "\u26a1\ufe0f",
"label": "5 tasks you can automate with the new Notion API "
},
{
"url": "https://n8n.io/blog/world-poetry-day-workflow/",
"icon": "\ud83d\udcdc",
"label": "Celebrating World Poetry Day with a daily poem in Telegram"
},
{
"url": "https://n8n.io/blog/automate-google-apps-for-productivity/",
"icon": "\ud83d\udca1",
"label": "15 Google apps you can combine and automate to increase productivity"
},
{
"url": "https://n8n.io/blog/automate-designs-with-bannerbear-and-n8n/",
"icon": "\ud83c\udfa8",
"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": " \ud83d\udd78\ufe0f",
"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": "\ud83d\udcf1",
"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": "\ud83e\udd16",
"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": "\ud83e\uddf0",
"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": "\ud83e\udd84",
"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": "\ud83d\udcc8",
"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": "\ud83d\udcc8",
"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": "\ud83c\udfa1",
"label": "How to set up a no-code CI/CD pipeline with GitHub and TravisCI"
},
{
"url": "https://n8n.io/blog/automations-for-activists/",
"icon": "\u2728",
"label": "How Common Knowledge use workflow automation for activism"
},
{
"url": "https://n8n.io/blog/creating-scheduled-text-affirmations-with-n8n/",
"icon": "\ud83e\udd1f",
"label": "Creating scheduled text affirmations with n8n"
},
{
"url": "https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/",
"icon": "\ud83d\udef5",
"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": "\ud83c\udfed",
"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": "\u2600\ufe0f",
"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": "\ud83e\uddec",
"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": "\ud83e\udd2c",
"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": "\ud83d\udd17",
"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": "\u2699\ufe0f",
"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": "\ud83d\udc65",
"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": "\u26a1\ufe0f",
"label": "5 tasks you can automate with the new Notion API "
},
{
"url": "https://n8n.io/blog/automate-google-apps-for-productivity/",
"icon": "\ud83d\udca1",
"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": "\ud83c\udff7\ufe0f",
"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": " \ud83d\udd78\ufe0f",
"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": "\ud83e\udd16",
"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": "\ud83e\udde0",
"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": "\ud83d\ude4c",
"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": "\ud83c\udfa1",
"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": "\ud83c\udf96",
"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": "\ud83c\udfec",
"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": "\ud83c\udfab",
"label": "Supercharging your conference registration process with n8n"
},
{
"url": "https://n8n.io/blog/migrating-community-metrics-to-orbit-using-n8n/",
"icon": "\ud83d\udcc8",
"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": "\ud83d\udc66",
"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": "\ud83d\ude4c",
"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": 112,
"icon": "fa:map-signs",
"name": "n8n-nodes-base.switch",
"codex": {
"data": {
"alias": [
"Router",
"If",
"Path",
"Filter",
"Condition",
"Logic",
"Branch",
"Case"
],
"resources": {
"generic": [
{
"url": "https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/",
"icon": "\u2600\ufe0f",
"label": "2021: The Year to Automate the New You with n8n"
},
{
"url": "https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/",
"icon": "\ud83d\udc65",
"label": "How to get started with CRM automation (with 3 no-code workflow ideas"
},
{
"url": "https://n8n.io/blog/build-your-own-virtual-assistant-with-n8n-a-step-by-step-guide/",
"icon": "\ud83d\udc66",
"label": "Build your own virtual assistant with n8n: A step by step guide"
},
{
"url": "https://n8n.io/blog/automation-for-maintainers-of-open-source-projects/",
"icon": "\ud83c\udff7\ufe0f",
"label": "How to automatically manage contributions to open-source projects"
}
],
"primaryDocumentation": [
{
"url": "https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.switch/"
}
]
},
"categories": [
"Core Nodes"
],
"nodeVersion": "1.0",
"codexVersion": "1.0",
"subcategories": {
"Core Nodes": [
"Flow"
]
}
}
},
"group": "[\"transform\"]",
"defaults": {
"name": "Switch",
"color": "#506000"
},
"iconData": {
"icon": "map-signs",
"type": "icon"
},
"displayName": "Switch",
"typeVersion": 3,
"nodeCategories": [
{
"id": 9,
"name": "Core Nodes"
}
]
},
{
"id": 356,
"icon": "file:gmail.svg",
"name": "n8n-nodes-base.gmail",
"codex": {
"data": {
"alias": [
"email",
"human",
"form",
"wait",
"hitl",
"approval"
],
"resources": {
"generic": [
{
"url": "https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/",
"icon": "\ud83e\uddec",
"label": "Why business process automation with n8n can change your daily life"
},
{
"url": "https://n8n.io/blog/supercharging-your-conference-registration-process-with-n8n/",
"icon": "\ud83c\udfab",
"label": "Supercharging your conference registration process with 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/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/",
"icon": "\ud83d\udc65",
"label": "How to get started with CRM automation (with 3 no-code workflow ideas"
},
{
"url": "https://n8n.io/blog/automate-google-apps-for-productivity/",
"icon": "\ud83d\udca1",
"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": " \ud83d\udda5\ufe0f",
"label": "Hey founders! Your business doesn't need you to operate"
},
{
"url": "https://n8n.io/blog/using-automation-to-boost-productivity-in-the-workplace/",
"icon": "\ud83d\udcaa",
"label": "Using Automation to Boost Productivity in the Workplace"
}
],
"primaryDocumentation": [
{
"url": "https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.gmail/"
}
],
"credentialDocumentation": [
{
"url": "https://docs.n8n.io/integrations/builtin/credentials/google/oauth-single-service/"
}
]
},
"categories": [
"Communication",
"HITL"
],
"nodeVersion": "1.0",
"codexVersion": "1.0",
"subcategories": {
"HITL": [
"Human in the Loop"
]
}
}
},
"group": "[\"transform\"]",
"defaults": {
"name": "Gmail"
},
"iconData": {
"type": "file",
"fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNTYiIGhlaWdodD0iMTkzIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCI+PHBhdGggZmlsbD0iIzQyODVGNCIgZD0iTTU4LjE4MiAxOTIuMDVWOTMuMTRMMjcuNTA3IDY1LjA3NyAwIDQ5LjUwNHYxMjUuMDkxYzAgOS42NTggNy44MjUgMTcuNDU1IDE3LjQ1NSAxNy40NTV6Ii8+PHBhdGggZmlsbD0iIzM0QTg1MyIgZD0iTTE5Ny44MTggMTkyLjA1aDQwLjcyN2M5LjY1OSAwIDE3LjQ1NS03LjgyNiAxNy40NTUtMTcuNDU1VjQ5LjUwNWwtMzEuMTU2IDE3LjgzNy0yNy4wMjYgMjUuNzk4eiIvPjxwYXRoIGZpbGw9IiNFQTQzMzUiIGQ9Im01OC4xODIgOTMuMTQtNC4xNzQtMzguNjQ3IDQuMTc0LTM2Ljk4OUwxMjggNjkuODY4bDY5LjgxOC01Mi4zNjQgNC42NyAzNC45OTItNC42NyA0MC42NDRMMTI4IDE0NS41MDR6Ii8+PHBhdGggZmlsbD0iI0ZCQkMwNCIgZD0iTTE5Ny44MTggMTcuNTA0VjkzLjE0TDI1NiA0OS41MDRWMjYuMjMxYzAtMjEuNTg1LTI0LjY0LTMzLjg5LTQxLjg5LTIwLjk0NXoiLz48cGF0aCBmaWxsPSIjQzUyMjFGIiBkPSJtMCA0OS41MDQgMjYuNzU5IDIwLjA3TDU4LjE4MiA5My4xNFYxNy41MDRMNDEuODkgNS4yODZDMjQuNjEtNy42NiAwIDQuNjQ2IDAgMjYuMjN6Ii8+PC9zdmc+"
},
"displayName": "Gmail",
"typeVersion": 2,
"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": 838,
"icon": "fa:mouse-pointer",
"name": "n8n-nodes-base.manualTrigger",
"codex": {
"data": {
"resources": {
"generic": [],
"primaryDocumentation": [
{
"url": "https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.manualworkflowtrigger/"
}
]
},
"categories": [
"Core Nodes"
],
"nodeVersion": "1.0",
"codexVersion": "1.0"
}
},
"group": "[\"trigger\"]",
"defaults": {
"name": "When clicking \u2018Execute workflow\u2019",
"color": "#909298"
},
"iconData": {
"icon": "mouse-pointer",
"type": "icon"
},
"displayName": "Manual Trigger",
"typeVersion": 1,
"nodeCategories": [
{
"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"
}
]
},
{
"id": 840,
"icon": "file:openAi.svg",
"name": "n8n-nodes-base.openAi",
"codex": {
"data": {
"alias": [
"ChatGPT",
"DallE"
],
"resources": {
"primaryDocumentation": [
{
"url": "https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-langchain.openai/"
}
],
"credentialDocumentation": [
{
"url": "https://docs.n8n.io/integrations/builtin/credentials/openai/"
}
]
},
"categories": [
"Utility"
],
"nodeVersion": "1.0",
"codexVersion": "1.0"
}
},
"group": "[\"transform\"]",
"defaults": {
"name": "OpenAI"
},
"iconData": {
"type": "file",
"fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNTYiIGhlaWdodD0iMjYwIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCI+PHBhdGggZD0iTTIzOS4xODQgMTA2LjIwM2E2NC43MiA2NC43MiAwIDAgMC01LjU3Ni01My4xMDNDMjE5LjQ1MiAyOC40NTkgMTkxIDE1Ljc4NCAxNjMuMjEzIDIxLjc0QTY1LjU4NiA2NS41ODYgMCAwIDAgNTIuMDk2IDQ1LjIyYTY0LjcyIDY0LjcyIDAgMCAwLTQzLjIzIDMxLjM2Yy0xNC4zMSAyNC42MDItMTEuMDYxIDU1LjYzNCA4LjAzMyA3Ni43NGE2NC42NyA2NC42NyAwIDAgMCA1LjUyNSA1My4xMDJjMTQuMTc0IDI0LjY1IDQyLjY0NCAzNy4zMjQgNzAuNDQ2IDMxLjM2YTY0LjcyIDY0LjcyIDAgMCAwIDQ4Ljc1NCAyMS43NDRjMjguNDgxLjAyNSA1My43MTQtMTguMzYxIDYyLjQxNC00NS40ODFhNjQuNzcgNjQuNzcgMCAwIDAgNDMuMjI5LTMxLjM2YzE0LjEzNy0yNC41NTggMTAuODc1LTU1LjQyMy04LjA4My03Ni40ODNtLTk3LjU2IDEzNi4zMzhhNDguNCA0OC40IDAgMCAxLTMxLjEwNS0xMS4yNTVsMS41MzUtLjg3IDUxLjY3LTI5LjgyNWE4LjYgOC42IDAgMCAwIDQuMjQ3LTcuMzY3di03Mi44NWwyMS44NDUgMTIuNjM2Yy4yMTguMTExLjM3LjMyLjQwOS41NjN2NjAuMzY3Yy0uMDU2IDI2LjgxOC0yMS43ODMgNDguNTQ1LTQ4LjYwMSA0OC42MDFNMzcuMTU4IDE5Ny45M2E0OC4zNSA0OC4zNSAwIDAgMS01Ljc4MS0zMi41ODlsMS41MzQuOTIxIDUxLjcyMiAyOS44MjZhOC4zNCA4LjM0IDAgMCAwIDguNDQxIDBsNjMuMTgxLTM2LjQyNXYyNS4yMjFhLjg3Ljg3IDAgMCAxLS4zNTguNjY1bC01Mi4zMzUgMzAuMTg0Yy0yMy4yNTcgMTMuMzk4LTUyLjk3IDUuNDMxLTY2LjQwNC0xNy44MDNNMjMuNTQ5IDg1LjM4YTQ4LjUgNDguNSAwIDAgMSAyNS41OC0yMS4zMzN2NjEuMzlhOC4yOSA4LjI5IDAgMCAwIDQuMTk1IDcuMzE2bDYyLjg3NCAzNi4yNzItMjEuODQ1IDEyLjYzNmEuODIuODIgMCAwIDEtLjc2NyAwTDQxLjM1MyAxNTEuNTNjLTIzLjIxMS0xMy40NTQtMzEuMTcxLTQzLjE0NC0xNy44MDQtNjYuNDA1em0xNzkuNDY2IDQxLjY5NS02My4wOC0zNi42M0wxNjEuNzMgNzcuODZhLjgyLjgyIDAgMCAxIC43NjggMGw1Mi4yMzMgMzAuMTg0YTQ4LjYgNDguNiAwIDAgMS03LjMxNiA4Ny42MzV2LTYxLjM5MWE4LjU0IDguNTQgMCAwIDAtNC40LTcuMjEzbTIxLjc0Mi0zMi42OS0xLjUzNS0uOTIyLTUxLjYxOS0zMC4wODFhOC4zOSA4LjM5IDAgMCAwLTguNDkyIDBMOTkuOTggOTkuODA4Vjc0LjU4N2EuNzIuNzIgMCAwIDEgLjMwNy0uNjY1bDUyLjIzMy0zMC4xMzNhNDguNjUyIDQ4LjY1MiAwIDAgMSA3Mi4yMzYgNTAuMzkxek04OC4wNjEgMTM5LjA5N2wtMjEuODQ1LTEyLjU4NWEuODcuODcgMCAwIDEtLjQxLS42MTRWNjUuNjg1YTQ4LjY1MiA0OC42NTIgMCAwIDEgNzkuNzU3LTM3LjM0NmwtMS41MzUuODctNTEuNjcgMjkuODI1YTguNiA4LjYgMCAwIDAtNC4yNDYgNy4zNjd6bTExLjg2OC0yNS41OEwxMjguMDY3IDk3LjNsMjguMTg4IDE2LjIxOHYzMi40MzRsLTI4LjA4NiAxNi4yMTgtMjguMTg4LTE2LjIxOHoiLz48L3N2Zz4="
},
"displayName": "OpenAI",
"typeVersion": 1,
"nodeCategories": [
{
"id": 7,
"name": "Utility"
}
]
}
]
},
"detail": {
"description": "Quick overview This workflow runs every Monday, reads a Google Sheets config to fetch weekly metrics from Meta Ads, Google Ads, and GA4, uses OpenAI to write a narrative around deterministic week-over-week deltas, and delivers branded reports via Gmail and/or Slack while logging sends back to Google Sheets. How it works 1. Runs on a schedule every Monday at 09:00 (workflow timezone) and loads client settings from the Google Sheets config tab plus previously sent dedupekey values from the reports tab. 2. Validates each config row, skips disabled clients, and turns missing sources or delivery targets into alerts that continue through the run. 3. For each enabled data source per client, fetches weekly metrics from the Meta Marketing API, Google Ads API, and/or Google Analytics Data API (GA4) and normalizes the results into a shared metric format. 4. Computes week-over-week percentage deltas and flags anomalies when a metric\u2019s absolute change meets the per-client alertthresholdpct. 5. Groups metrics into one per-client table, skips duplicates for the same ISO week using clientid + ISO week, and uses OpenAI to generate a short narrative that only references the precomputed table. 6. Renders a branded HTML report and delivers it via Gmail (send or draft based on deliverymode) and/or posts it to a configured Slack channel. 7. Upserts a delivery record to the Google Sheets reports tab for idempotency and emails a single run digest to the operator, while a separate error trigger path emails the operator on unhandled failures. Setup 1. Run the setup lane once (the Google Sheets create/seed path) or provide your own Google Sheets workbook with config and reports tabs matching the expected columns. 2. Paste the created spreadsheet ID into the Workflow Config node and set the operator email address in the Operator email node. 3. Add Google Sheets and Gmail credentials, plus an OpenAI API credential for the narrative generation step. 4. Configure API auth for the HTTP requests: Meta Marketing API bearer token, Google Ads API bearer token + developer token, GA4 bearer token, and a Slack bot token with chat:write for posting. 5. Fill in the config tab for each client (source toggles, account/property IDs, recipients and/or Slack channel, deliverymode, and optional branding/threshold fields) before activating the workflow."
}
}