This workflow corresponds to n8n.io template #16404 — we link there as the canonical source.
This workflow follows the Gmail → Google Sheets recipe pattern — see all workflows that pair these two integrations.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"id": "Hr3uHLRVKDrmXoRv",
"name": "Purchase Order Approval & Budget Alert",
"tags": [
{
"id": "2V3HXFbv2wqNGm6s",
"name": "Dev",
"createdAt": "2025-06-17T05:42:41.949Z",
"updatedAt": "2025-06-17T05:42:41.949Z"
}
],
"nodes": [
{
"id": "33d33ef2-7fd2-4af4-bad9-5350fd0e274a",
"name": "Overview Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-80,
32
],
"parameters": {
"width": 496,
"height": 1024,
"content": "## Purchase Order Approval & Budget Alert\n\nThis workflow automates the purchase order approval process by validating requests, routing them to the right approvers, tracking approvals, and monitoring department budgets. It helps finance teams reduce manual follow-ups, speed up approvals, and maintain better budget control.\n\n### How it Works\n\n- Receives purchase order requests via webhook from a form or internal system.\n- Parses and validates the submission, extracting vendor, amount, department, and requester details.\n- Rejects incomplete or invalid requests automatically.\n- Generates a unique PO ID and adds submission timestamps for tracking.\n- Routes requests to the appropriate approval tier based on the PO amount.\n- Sends approval request emails to the assigned approver through Gmail.\n- Checks department spending against predefined monthly budget limits in Google Sheets.\n- Sends Slack alerts to the finance team when spending approaches budget thresholds.\n- Logs all purchase orders, approval decisions, and statuses to a Google Sheets tracker.\n- Sends confirmation emails to requesters with their PO ID and expected approval timeline.\n\n### Setup Steps\n\n1. Configure your purchase request form or internal tool to send submissions to the n8n webhook URL.\n2. Add Gmail credentials for approval and confirmation emails.\n3. Create a Google Sheet to track PO requests, approvals, and statuses.\n4. Create a budget tracking sheet containing department spending limits and current spend.\n5. Add Google Sheets credentials and connect both sheets.\n6. Add Slack credentials and configure the finance alerts channel.\n7. Set approval routing rules and approver email addresses for each spending tier.\n8. Activate the workflow and submit a test purchase order to verify the approval flow."
},
"typeVersion": 1
},
{
"id": "0672ab88-30a3-4357-b34d-037a7823afd3",
"name": "Section Note 1",
"type": "n8n-nodes-base.stickyNote",
"position": [
432,
32
],
"parameters": {
"color": 7,
"width": 688,
"height": 1024,
"content": "## Step 1: Receive, Parse & Validate PO Request\n\nThis section handles the incoming PO submission webhook, parses all required fields from the payload, and validates that the record is complete before any action is taken. Invalid submissions are immediately rejected with a Slack alert to the finance team, preventing bad data from entering the approval pipeline. Only clean, complete records pass through to enrichment."
},
"typeVersion": 1
},
{
"id": "acd07554-4512-4941-a412-688e45742510",
"name": "Section Note 2",
"type": "n8n-nodes-base.stickyNote",
"position": [
1136,
32
],
"parameters": {
"color": 7,
"width": 896,
"height": 1024,
"content": "## Step 2: Enrich, Route & Request Approval\n\nOnce validated, the PO is enriched with a unique ID, priority classification, and the correct approver based on the spend amount. A Switch node routes low, mid, and high-value POs to different approval tiers. Each tier triggers a tailored Gmail approval request to the designated approver. The workflow then reads the departments current monthly spend from Google Sheets to check against the budget cap."
},
"typeVersion": 1
},
{
"id": "577c0d1e-cb6c-41ab-b6f5-e216cfe5a554",
"name": "Section Note 3",
"type": "n8n-nodes-base.stickyNote",
"position": [
2048,
32
],
"parameters": {
"color": 7,
"width": 928,
"height": 1008,
"content": "## Step 3: Budget Check, Log & Confirm\n\nAfter routing, the workflow compares the PO amount against the departments remaining monthly budget. If spend is at or above 80% of the cap, a budget breach alert fires to the finance Slack channel. Regardless of breach status, the full PO record is appended to the Google Sheet compliance tracker and a confirmation email is sent to the requester with their PO ID and expected approval timeline."
},
"typeVersion": 1
},
{
"id": "7fee5dc2-5c2f-4f42-8b60-0de5bbd2aeab",
"name": "PO Submission Webhook",
"type": "n8n-nodes-base.webhook",
"position": [
528,
688
],
"parameters": {
"path": "finance/purchase-order",
"options": {},
"httpMethod": "POST"
},
"typeVersion": 2
},
{
"id": "01c557a6-97a0-40ff-92c4-a076920da12c",
"name": "Parse PO Payload",
"type": "n8n-nodes-base.code",
"position": [
752,
688
],
"parameters": {
"jsCode": "const body = $input.first().json;\n\nconst vendor = (body.vendor || body.vendor_name || '').trim();\nconst amount = parseFloat(body.amount || body.po_amount || 0);\nconst department = (body.department || body.dept || '').trim();\nconst requesterName = (body.requester_name || body.requester || body.name || '').trim();\nconst requesterEmail = (body.requester_email || body.email || '').toLowerCase().trim();\nconst description = (body.description || body.purpose || '').trim();\nconst category = (body.category || body.expense_category || 'General').trim();\nconst urgency = (body.urgency || body.priority || 'normal').toLowerCase().trim();\n\nif (!vendor || !amount || amount <= 0 || !department || !requesterEmail) {\n return [{ json: {\n _invalid: true,\n reason: 'Missing required fields: vendor, amount, department, or requester_email',\n raw: body\n }}];\n}\n\nreturn [{ json: {\n _invalid: false,\n vendor,\n amount,\n department,\n requesterName,\n requesterEmail,\n description,\n category,\n urgency,\n parsedAt: new Date().toISOString()\n}}];"
},
"typeVersion": 2
},
{
"id": "19047a75-3128-4507-a8ff-7e6c4329c297",
"name": "Valid PO Request",
"type": "n8n-nodes-base.if",
"position": [
976,
688
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 1,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "check-invalid-flag",
"operator": {
"type": "boolean",
"operation": "notEquals"
},
"leftValue": "={{ $json._invalid }}",
"rightValue": true
},
{
"id": "check-amount",
"operator": {
"type": "number",
"operation": "gt"
},
"leftValue": "={{ $json.amount }}",
"rightValue": 0
}
]
}
},
"typeVersion": 2
},
{
"id": "4bc4d3d1-e33a-4db2-a63e-e05d11ed3926",
"name": "Alert Invalid Submission",
"type": "n8n-nodes-base.slack",
"position": [
1200,
784
],
"parameters": {
"text": "=:x: *Invalid PO Submission Rejected*\n\nA purchase order submission was received but failed validation and has been rejected.\n\n*Reason:* {{ $json.reason }}\n*Received at:* {{ $now.toISO() }}\n\nPlease ask the requester to resubmit with all required fields: vendor, amount, department, and requester email.",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "id",
"value": "YOUR_FINANCE_SLACK_CHANNEL_ID"
},
"otherOptions": {
"includeLinkToWorkflow": false
}
},
"typeVersion": 2.2
},
{
"id": "8ac58a68-46f2-41c2-86bd-32748a65567f",
"name": "Enrich & Classify PO",
"type": "n8n-nodes-base.set",
"position": [
1200,
592
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "enrich-po-id",
"name": "poId",
"type": "string",
"value": "=PO-{{ $now.toFormat('yyyyMMdd') }}-{{ $json.department.substring(0,3).toUpperCase() }}-{{ Math.floor(Math.random() * 9000 + 1000) }}"
},
{
"id": "enrich-tier",
"name": "approvalTier",
"type": "string",
"value": "={{ $json.amount < 1000 ? 'LOW' : $json.amount <= 10000 ? 'MID' : 'HIGH' }}"
},
{
"id": "enrich-approver-email",
"name": "approverEmail",
"type": "string",
"value": "={{ $json.amount < 1000 ? 'team-lead@company.com' : $json.amount <= 10000 ? 'finance-manager@company.com' : 'cfo@company.com' }}"
},
{
"id": "enrich-approver-name",
"name": "approverName",
"type": "string",
"value": "={{ $json.amount < 1000 ? 'Team Lead' : $json.amount <= 10000 ? 'Finance Manager' : 'CFO' }}"
},
{
"id": "enrich-sla",
"name": "approvalSLA",
"type": "string",
"value": "={{ $json.amount < 1000 ? '1 business day' : $json.amount <= 10000 ? '2 business days' : '3-5 business days' }}"
},
{
"id": "enrich-priority",
"name": "priority",
"type": "string",
"value": "={{ $json.urgency === 'urgent' || $json.urgency === 'high' ? 'HIGH' : 'NORMAL' }}"
},
{
"id": "enrich-log-date",
"name": "logDate",
"type": "string",
"value": "={{ $now.toFormat('yyyy-MM-dd HH:mm:ss') }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "6a1370f3-bef6-45fa-8fc7-3d5465b9a030",
"name": "Route by Approval Tier",
"type": "n8n-nodes-base.switch",
"position": [
1424,
576
],
"parameters": {
"rules": {
"values": [
{
"conditions": {
"options": {
"version": 1,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "low-tier",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.approvalTier }}",
"rightValue": "LOW"
}
]
}
},
{
"conditions": {
"options": {
"version": 1,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "mid-tier",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.approvalTier }}",
"rightValue": "MID"
}
]
}
},
{
"conditions": {
"options": {
"version": 1,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "high-tier",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.approvalTier }}",
"rightValue": "HIGH"
}
]
}
}
]
},
"options": {}
},
"typeVersion": 3.2
},
{
"id": "6faa977f-adc9-479f-9912-cf5440317777",
"name": "Email Low-Tier Approver",
"type": "n8n-nodes-base.gmail",
"position": [
1648,
400
],
"parameters": {
"sendTo": "={{ $json.approverEmail }}",
"message": "=<h2>Purchase Order Approval Required</h2><p>A new low-value purchase order requires your approval.</p><table border='1' cellpadding='8' cellspacing='0'><tr><td><strong>PO ID</strong></td><td>{{ $json.poId }}</td></tr><tr><td><strong>Vendor</strong></td><td>{{ $json.vendor }}</td></tr><tr><td><strong>Amount</strong></td><td>${{ $json.amount }}</td></tr><tr><td><strong>Department</strong></td><td>{{ $json.department }}</td></tr><tr><td><strong>Requester</strong></td><td>{{ $json.requesterName }} ({{ $json.requesterEmail }})</td></tr><tr><td><strong>Category</strong></td><td>{{ $json.category }}</td></tr><tr><td><strong>Description</strong></td><td>{{ $json.description }}</td></tr><tr><td><strong>Priority</strong></td><td>{{ $json.priority }}</td></tr><tr><td><strong>SLA</strong></td><td>{{ $json.approvalSLA }}</td></tr></table><p>Please review and reply APPROVED or REJECTED to this email, or update the PO Tracker sheet directly.</p><p><em>Auto-generated by n8n Finance Automation</em></p>",
"options": {},
"subject": "=[ACTION REQUIRED] Low-Value PO Approval: {{ $json.poId }} - {{ $json.vendor }} (${{ $json.amount }})"
},
"typeVersion": 2.1
},
{
"id": "39e334d3-18f1-4280-b54b-4d058f640887",
"name": "Email Mid-Tier Approver",
"type": "n8n-nodes-base.gmail",
"position": [
1648,
592
],
"parameters": {
"sendTo": "={{ $json.approverEmail }}",
"message": "=<h2>Purchase Order Approval Required - Finance Manager Review</h2><p>A mid-value purchase order has been submitted and requires your review and approval.</p><table border='1' cellpadding='8' cellspacing='0'><tr><td><strong>PO ID</strong></td><td>{{ $json.poId }}</td></tr><tr><td><strong>Vendor</strong></td><td>{{ $json.vendor }}</td></tr><tr><td><strong>Amount</strong></td><td>${{ $json.amount }}</td></tr><tr><td><strong>Department</strong></td><td>{{ $json.department }}</td></tr><tr><td><strong>Requester</strong></td><td>{{ $json.requesterName }} ({{ $json.requesterEmail }})</td></tr><tr><td><strong>Category</strong></td><td>{{ $json.category }}</td></tr><tr><td><strong>Description</strong></td><td>{{ $json.description }}</td></tr><tr><td><strong>Priority</strong></td><td>{{ $json.priority }}</td></tr><tr><td><strong>SLA</strong></td><td>{{ $json.approvalSLA }}</td></tr></table><p>Please review and reply APPROVED or REJECTED to this email within {{ $json.approvalSLA }}.</p><p><em>Auto-generated by n8n Finance Automation</em></p>",
"options": {},
"subject": "=[ACTION REQUIRED] Mid-Value PO Approval: {{ $json.poId }} - {{ $json.vendor }} (${{ $json.amount }})"
},
"typeVersion": 2.1
},
{
"id": "8558652e-b171-41c6-8442-9386161ee5a8",
"name": "Email High-Tier Approver",
"type": "n8n-nodes-base.gmail",
"position": [
1648,
784
],
"parameters": {
"sendTo": "={{ $json.approverEmail }}",
"message": "=<h2>High-Value Purchase Order - Executive Approval Required</h2><p>A high-value purchase order has been submitted and requires CFO-level approval before processing.</p><table border='1' cellpadding='8' cellspacing='0'><tr><td><strong>PO ID</strong></td><td>{{ $json.poId }}</td></tr><tr><td><strong>Vendor</strong></td><td>{{ $json.vendor }}</td></tr><tr><td><strong>Amount</strong></td><td>${{ $json.amount }}</td></tr><tr><td><strong>Department</strong></td><td>{{ $json.department }}</td></tr><tr><td><strong>Requester</strong></td><td>{{ $json.requesterName }} ({{ $json.requesterEmail }})</td></tr><tr><td><strong>Category</strong></td><td>{{ $json.category }}</td></tr><tr><td><strong>Description</strong></td><td>{{ $json.description }}</td></tr><tr><td><strong>Priority</strong></td><td>{{ $json.priority }}</td></tr><tr><td><strong>SLA</strong></td><td>{{ $json.approvalSLA }}</td></tr></table><p><strong>This PO exceeds the $10,000 threshold and requires your personal sign-off.</strong> Please reply APPROVED or REJECTED within {{ $json.approvalSLA }}.</p><p><em>Auto-generated by n8n Finance Automation</em></p>",
"options": {},
"subject": "=[EXECUTIVE APPROVAL REQUIRED] High-Value PO: {{ $json.poId }} - {{ $json.vendor }} (${{ $json.amount }})"
},
"typeVersion": 2.1
},
{
"id": "ca86c9f9-9c3e-49e0-9692-02d210b53ab5",
"name": "Read Department Budget",
"type": "n8n-nodes-base.googleSheets",
"position": [
1872,
496
],
"parameters": {
"operation": "lookup",
"documentId": {
"__rl": true,
"mode": "id",
"value": "YOUR_GOOGLE_SHEET_ID"
}
},
"typeVersion": 4.5
},
{
"id": "2cc7d79a-e168-4565-8c7b-ff7b8b33d4f2",
"name": "Budget Breach Check",
"type": "n8n-nodes-base.if",
"position": [
2096,
496
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 1,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "check-budget-breach",
"operator": {
"type": "number",
"operation": "gte"
},
"leftValue": "={{ ($json['Current Spend'] + $('Enrich & Classify PO').item.json.amount) / $json['Monthly Cap'] }}",
"rightValue": 0.8
}
]
}
},
"typeVersion": 2
},
{
"id": "43037d9f-b47d-4471-8181-e1d221dbca21",
"name": "Send Budget Breach Alert",
"type": "n8n-nodes-base.slack",
"position": [
2320,
496
],
"parameters": {
"text": "=:rotating_light: *Budget Breach Warning*\n\nA new PO submission will push *{{ $('Enrich & Classify PO').item.json.department }}* over 80% of its monthly budget cap.\n\n*PO Details:*\n- PO ID: {{ $('Enrich & Classify PO').item.json.poId }}\n- Vendor: {{ $('Enrich & Classify PO').item.json.vendor }}\n- Amount: ${{ $('Enrich & Classify PO').item.json.amount }}\n- Requester: {{ $('Enrich & Classify PO').item.json.requesterName }}\n\n*Budget Status:*\n- Monthly Cap: ${{ $json['Monthly Cap'] }}\n- Current Spend: ${{ $json['Current Spend'] }}\n- After This PO: ${{ $json['Current Spend'] + $('Enrich & Classify PO').item.json.amount }}\n- Usage: {{ Math.round(($json['Current Spend'] + $('Enrich & Classify PO').item.json.amount) / $json['Monthly Cap'] * 100) }}%\n\nPlease review before approving this PO.",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "id",
"value": "YOUR_FINANCE_SLACK_CHANNEL_ID"
},
"otherOptions": {
"includeLinkToWorkflow": false
}
},
"typeVersion": 2.2
},
{
"id": "3058e5c3-7eda-4d7b-81bc-a9a24f67641f",
"name": "Log PO to Tracker Sheet",
"type": "n8n-nodes-base.googleSheets",
"position": [
2544,
496
],
"parameters": {
"columns": {
"value": {
"SLA": "={{ $('Enrich & Classify PO').item.json.approvalSLA }}",
"Date": "={{ $('Enrich & Classify PO').item.json.logDate }}",
"PO ID": "={{ $('Enrich & Classify PO').item.json.poId }}",
"Amount": "={{ $('Enrich & Classify PO').item.json.amount }}",
"Status": "PENDING APPROVAL",
"Vendor": "={{ $('Enrich & Classify PO').item.json.vendor }}",
"Approver": "={{ $('Enrich & Classify PO').item.json.approverName }}",
"Category": "={{ $('Enrich & Classify PO').item.json.category }}",
"Priority": "={{ $('Enrich & Classify PO').item.json.priority }}",
"Requester": "={{ $('Enrich & Classify PO').item.json.requesterName }}",
"Department": "={{ $('Enrich & Classify PO').item.json.department }}",
"Description": "={{ $('Enrich & Classify PO').item.json.description }}",
"Approver Tier": "={{ $('Enrich & Classify PO').item.json.approvalTier }}",
"Requester Email": "={{ $('Enrich & Classify PO').item.json.requesterEmail }}"
},
"mappingMode": "defineBelow"
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "name",
"value": "PO Tracker"
},
"documentId": {
"__rl": true,
"mode": "id",
"value": "YOUR_GOOGLE_SHEET_ID"
}
},
"typeVersion": 4.5
},
{
"id": "9fc9d0af-8845-424a-b42e-c3abf6c33397",
"name": "Send Requester Confirmation",
"type": "n8n-nodes-base.gmail",
"position": [
2768,
496
],
"parameters": {
"sendTo": "={{ $('Enrich & Classify PO').item.json.requesterEmail }}",
"message": "=<h2>Your Purchase Order Has Been Submitted</h2><p>Hi {{ $('Enrich & Classify PO').item.json.requesterName }},</p><p>Your purchase order has been received and routed for approval. Here is a summary:</p><table border='1' cellpadding='8' cellspacing='0'><tr><td><strong>PO ID</strong></td><td>{{ $('Enrich & Classify PO').item.json.poId }}</td></tr><tr><td><strong>Vendor</strong></td><td>{{ $('Enrich & Classify PO').item.json.vendor }}</td></tr><tr><td><strong>Amount</strong></td><td>${{ $('Enrich & Classify PO').item.json.amount }}</td></tr><tr><td><strong>Department</strong></td><td>{{ $('Enrich & Classify PO').item.json.department }}</td></tr><tr><td><strong>Approval Tier</strong></td><td>{{ $('Enrich & Classify PO').item.json.approvalTier }}</td></tr><tr><td><strong>Approver</strong></td><td>{{ $('Enrich & Classify PO').item.json.approverName }}</td></tr><tr><td><strong>Expected Timeline</strong></td><td>{{ $('Enrich & Classify PO').item.json.approvalSLA }}</td></tr><tr><td><strong>Status</strong></td><td>PENDING APPROVAL</td></tr></table><p>You will be notified once a decision has been made. Please reference your PO ID <strong>{{ $('Enrich & Classify PO').item.json.poId }}</strong> in any follow-up communications.</p><p><em>Auto-generated by n8n Finance Automation. Do not reply to this email.</em></p>",
"options": {},
"subject": "=PO Submitted Successfully: {{ $('Enrich & Classify PO').item.json.poId }} - {{ $('Enrich & Classify PO').item.json.vendor }}"
},
"typeVersion": 2.1
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "522df4d0-d8b7-4150-8ad7-18a8898b2dd8",
"connections": {
"Parse PO Payload": {
"main": [
[
{
"node": "Valid PO Request",
"type": "main",
"index": 0
}
]
]
},
"Valid PO Request": {
"main": [
[
{
"node": "Enrich & Classify PO",
"type": "main",
"index": 0
}
],
[
{
"node": "Alert Invalid Submission",
"type": "main",
"index": 0
}
]
]
},
"Budget Breach Check": {
"main": [
[
{
"node": "Send Budget Breach Alert",
"type": "main",
"index": 0
}
],
[
{
"node": "Log PO to Tracker Sheet",
"type": "main",
"index": 0
}
]
]
},
"Enrich & Classify PO": {
"main": [
[
{
"node": "Route by Approval Tier",
"type": "main",
"index": 0
}
]
]
},
"PO Submission Webhook": {
"main": [
[
{
"node": "Parse PO Payload",
"type": "main",
"index": 0
}
]
]
},
"Read Department Budget": {
"main": [
[
{
"node": "Budget Breach Check",
"type": "main",
"index": 0
}
]
]
},
"Route by Approval Tier": {
"main": [
[
{
"node": "Email Low-Tier Approver",
"type": "main",
"index": 0
}
],
[
{
"node": "Email Mid-Tier Approver",
"type": "main",
"index": 0
}
],
[
{
"node": "Email High-Tier Approver",
"type": "main",
"index": 0
}
]
]
},
"Email Low-Tier Approver": {
"main": [
[
{
"node": "Read Department Budget",
"type": "main",
"index": 0
}
]
]
},
"Email Mid-Tier Approver": {
"main": [
[
{
"node": "Read Department Budget",
"type": "main",
"index": 0
}
]
]
},
"Log PO to Tracker Sheet": {
"main": [
[
{
"node": "Send Requester Confirmation",
"type": "main",
"index": 0
}
]
]
},
"Email High-Tier Approver": {
"main": [
[
{
"node": "Read Department Budget",
"type": "main",
"index": 0
}
]
]
},
"Send Budget Breach Alert": {
"main": [
[
{
"node": "Log PO to Tracker Sheet",
"type": "main",
"index": 0
}
]
]
}
}
}
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow receives purchase order requests via webhook, validates and enriches them, emails the correct approver through Gmail based on spend tier, checks department budgets in Google Sheets, sends budget warnings to Slack, logs each PO to a tracker sheet, and confirms…
Source: https://n8n.io/workflows/16404/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
This template is designed for freelancers, small businesses, and finance teams who need automated invoice management with intelligent payment follow-ups. Perfect for service providers, agencies, or an
Automate short-term trading research by generating high-quality trade ideas using MCP (Market Context Protocol) signals and AI-powered analysis. 📈🤖 This workflow evaluates market context, catalysts, m
This workflow receives new client onboarding form submissions via a webhook, then uses Gmail, Google Calendar, Google Sheets, and Slack to welcome the client, schedule a kickoff call, notify the team,
This n8n workflow is designed to centralize the management and tracking of customer inquiries received through multiple channels (email and web forms).
Receive booking requests via webhook with automatic validation, duplicate detection, availability checking, confirmation emails, Google Calendar sync, and Slack notifications.