This workflow corresponds to n8n.io template #12732 — we link there as the canonical source.
This workflow follows the Agent → Gmail 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": "srEwHpsA61X01Dcq",
"name": "Multi-Source Transaction Fraud Detection and Financial Reconciliation Automation",
"tags": [],
"nodes": [
{
"id": "86013ec1-435b-4a3b-ae22-d6f7ff799931",
"name": "Schedule Trigger - Periodic Ingestion",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-720,
32
],
"parameters": {
"rule": {
"interval": [
{
"field": "minutes",
"minutesInterval": 15
}
]
}
},
"typeVersion": 1.3
},
{
"id": "43130480-eaa0-40f1-85b1-b1df2da1ac72",
"name": "Webhook - Real-time Transaction Events",
"type": "n8n-nodes-base.webhook",
"position": [
-272,
320
],
"parameters": {
"path": "transaction-webhook",
"options": {},
"httpMethod": "POST",
"responseMode": "lastNode"
},
"typeVersion": 2.1
},
{
"id": "a490db62-8348-4505-9476-45e26cacdaf3",
"name": "Workflow Configuration",
"type": "n8n-nodes-base.set",
"position": [
-496,
32
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "id-1",
"name": "bankApiUrl",
"type": "string",
"value": "<__PLACEHOLDER_VALUE__Bank API endpoint URL__>"
},
{
"id": "id-2",
"name": "paymentGatewayApiUrl",
"type": "string",
"value": "<__PLACEHOLDER_VALUE__Payment gateway API endpoint URL__>"
},
{
"id": "id-3",
"name": "erpApiUrl",
"type": "string",
"value": "<__PLACEHOLDER_VALUE__ERP system API endpoint URL__>"
},
{
"id": "id-4",
"name": "fraudThresholdHigh",
"type": "number",
"value": 0.8
},
{
"id": "id-5",
"name": "fraudThresholdMedium",
"type": "number",
"value": 0.5
},
{
"id": "id-6",
"name": "slackChannel",
"type": "string",
"value": "<__PLACEHOLDER_VALUE__Slack channel ID for notifications__>"
},
{
"id": "id-7",
"name": "financeTeamEmail",
"type": "string",
"value": "<__PLACEHOLDER_VALUE__Finance team email address__>"
}
]
},
"includeOtherFields": true
},
"typeVersion": 3.4
},
{
"id": "0b3a802b-f083-46d4-aaff-b17e08d94a19",
"name": "Fetch Bank API Transactions",
"type": "n8n-nodes-base.httpRequest",
"position": [
-272,
-64
],
"parameters": {
"url": "={{ $('Workflow Configuration').first().json.bankApiUrl }}",
"options": {
"timeout": 30000
},
"sendQuery": true,
"queryParameters": {
"parameters": [
{
"name": "from_date",
"value": "={{ $now.minus({ hours: 1 }).toISO() }}"
},
{
"name": "to_date",
"value": "={{ $now.toISO() }}"
}
]
}
},
"typeVersion": 4.3
},
{
"id": "f6d336a7-54e4-4008-b9cb-484a4597a6d8",
"name": "Fetch Payment Gateway Transactions",
"type": "n8n-nodes-base.httpRequest",
"position": [
-272,
128
],
"parameters": {
"url": "={{ $('Workflow Configuration').first().json.paymentGatewayApiUrl }}",
"options": {
"timeout": 30000
},
"sendQuery": true,
"queryParameters": {
"parameters": [
{
"name": "from_date",
"value": "={{ $now.minus({ hours: 1 }).toISO() }}"
},
{
"name": "to_date",
"value": "={{ $now.toISO() }}"
}
]
}
},
"typeVersion": 4.3
},
{
"id": "8793a5ae-9110-49bd-bb09-f2169f6601e1",
"name": "Merge All Transaction Sources",
"type": "n8n-nodes-base.merge",
"position": [
-48,
112
],
"parameters": {
"numberInputs": 3
},
"typeVersion": 3.2
},
{
"id": "0fb2ee62-1588-4d6e-a4f6-bccd8f92b970",
"name": "Normalize Transaction Data",
"type": "n8n-nodes-base.set",
"position": [
176,
128
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "id-1",
"name": "transactionId",
"type": "string",
"value": "={{ $json.id || $json.transaction_id || $json.txn_id }}"
},
{
"id": "id-2",
"name": "amount",
"type": "number",
"value": "={{ parseFloat($json.amount || $json.value || 0) }}"
},
{
"id": "id-3",
"name": "currency",
"type": "string",
"value": "={{ $json.currency || 'USD' }}"
},
{
"id": "id-4",
"name": "timestamp",
"type": "string",
"value": "={{ $json.timestamp || $json.created_at || $now.toISO() }}"
},
{
"id": "id-5",
"name": "customerId",
"type": "string",
"value": "={{ $json.customer_id || $json.user_id || 'unknown' }}"
},
{
"id": "id-6",
"name": "merchantId",
"type": "string",
"value": "={{ $json.merchant_id || $json.vendor_id || 'unknown' }}"
},
{
"id": "id-7",
"name": "paymentMethod",
"type": "string",
"value": "={{ $json.payment_method || $json.method || 'unknown' }}"
},
{
"id": "id-8",
"name": "source",
"type": "string",
"value": "={{ $json.source || 'api' }}"
}
]
},
"includeOtherFields": true
},
"typeVersion": 3.4
},
{
"id": "43c761f7-d94e-4731-99cf-97250a95b6c0",
"name": "Filter Valid Transactions",
"type": "n8n-nodes-base.filter",
"position": [
400,
128
],
"parameters": {
"options": {},
"conditions": {
"options": {
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "id-1",
"operator": {
"type": "string",
"operation": "notEmpty"
},
"leftValue": "={{ $json.transactionId }}",
"rightValue": ""
},
{
"id": "id-2",
"operator": {
"type": "number",
"operation": "gt"
},
"leftValue": "={{ $json.amount }}",
"rightValue": 0
},
{
"id": "id-3",
"operator": {
"type": "string",
"operation": "notEmpty"
},
"leftValue": "={{ $json.customerId }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.3
},
{
"id": "e32e4d7b-c2d7-4794-8d99-394f32d74187",
"name": "Check Idempotency",
"type": "n8n-nodes-base.code",
"position": [
624,
128
],
"parameters": {
"jsCode": "const processedIds = $getWorkflowStaticData('global').processedIds || new Set();\nconst newItems = [];\n\nfor (const item of $input.all()) {\n const txnId = item.json.transactionId;\n if (!processedIds.has(txnId)) {\n processedIds.add(txnId);\n newItems.push(item);\n }\n}\n\n$getWorkflowStaticData('global').processedIds = processedIds;\n\nreturn newItems;"
},
"typeVersion": 2
},
{
"id": "6b4d739e-b1b1-43f1-973d-c2ac15cdadd2",
"name": "AI Agent - Fraud Detection",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
848,
128
],
"parameters": {
"text": "={{ $json }}",
"options": {
"systemMessage": "You are a financial fraud detection and compliance analyst. Analyze the transaction data provided and assess fraud risk, detect anomalies, and check compliance.\n\nYour analysis should consider:\n1. Transaction amount relative to customer history\n2. Geographic location anomalies\n3. Time-of-day patterns\n4. Payment method risk factors\n5. Merchant reputation indicators\n6. Velocity checks (multiple transactions in short time)\n7. Regulatory compliance (PCI-DSS, SOX, AML)\n\nProvide a comprehensive risk assessment with:\n- riskScore: 0.0 to 1.0 (0=safe, 1=high risk)\n- riskLevel: high (>0.8), medium (0.5-0.8), or low (<0.5)\n- fraudIndicators: list of specific red flags found\n- anomalyDetected: true if unusual patterns detected\n- complianceFlags: any regulatory concerns\n- recommendation: action to take (approve/review/block)"
},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 3.1
},
{
"id": "580513bf-e6cd-41f2-961b-6738fda59365",
"name": "OpenAI Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
856,
352
],
"parameters": {
"model": {
"__rl": true,
"mode": "id",
"value": "gpt-4o"
},
"options": {},
"builtInTools": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.3
},
{
"id": "f0672e64-a327-45c1-87f1-4056104944f9",
"name": "Structured Output Parser - Fraud Analysis",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
1040,
352
],
"parameters": {
"schemaType": "manual",
"inputSchema": "{\n\t\"type\": \"object\",\n\t\"properties\": {\n\t\t\"riskScore\": {\n\t\t\t\"type\": \"number\",\n\t\t\t\"description\": \"Numerical risk score for the transaction\"\n\t\t},\n\t\t\"riskLevel\": {\n\t\t\t\"type\": \"string\",\n\t\t\t\"enum\": [\"high\", \"medium\", \"low\"],\n\t\t\t\"description\": \"Risk level classification\"\n\t\t},\n\t\t\"fraudIndicators\": {\n\t\t\t\"type\": \"array\",\n\t\t\t\"items\": {\n\t\t\t\t\"type\": \"string\"\n\t\t\t},\n\t\t\t\"description\": \"List of fraud indicators detected\"\n\t\t},\n\t\t\"anomalyDetected\": {\n\t\t\t\"type\": \"boolean\",\n\t\t\t\"description\": \"Whether an anomaly was detected\"\n\t\t},\n\t\t\"complianceFlags\": {\n\t\t\t\"type\": \"array\",\n\t\t\t\"items\": {\n\t\t\t\t\"type\": \"string\"\n\t\t\t},\n\t\t\t\"description\": \"Compliance-related flags\"\n\t\t},\n\t\t\"recommendation\": {\n\t\t\t\"type\": \"string\",\n\t\t\t\"description\": \"Recommended action for this transaction\"\n\t\t}\n\t},\n\t\"required\": [\"riskScore\", \"riskLevel\", \"fraudIndicators\", \"anomalyDetected\", \"complianceFlags\", \"recommendation\"]\n}"
},
"typeVersion": 1.3
},
{
"id": "151d9747-29c1-4c2f-b95a-8a07bea5f125",
"name": "Route by Risk Level",
"type": "n8n-nodes-base.switch",
"position": [
1200,
96
],
"parameters": {
"rules": {
"values": [
{
"outputKey": "High Risk",
"conditions": {
"options": {
"leftValue": "",
"caseSensitive": false,
"typeValidation": "loose"
},
"combinator": "and",
"conditions": [
{
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.riskLevel }}",
"rightValue": "high"
}
]
},
"renameOutput": true
},
{
"outputKey": "Medium Risk",
"conditions": {
"options": {
"leftValue": "",
"caseSensitive": false,
"typeValidation": "loose"
},
"combinator": "and",
"conditions": [
{
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.riskLevel }}",
"rightValue": "medium"
}
]
},
"renameOutput": true
},
{
"outputKey": "Low Risk",
"conditions": {
"options": {
"leftValue": "",
"caseSensitive": false,
"typeValidation": "loose"
},
"combinator": "and",
"conditions": [
{
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.riskLevel }}",
"rightValue": "low"
}
]
},
"renameOutput": true
}
]
},
"options": {
"fallbackOutput": "extra"
}
},
"typeVersion": 3.4
},
{
"id": "e8402459-bc09-4f20-93ed-6533bd9ae7eb",
"name": "Flag for Manual Review",
"type": "n8n-nodes-base.set",
"position": [
1456,
224
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "id-1",
"name": "requiresManualReview",
"type": "boolean",
"value": true
},
{
"id": "id-2",
"name": "reviewReason",
"type": "string",
"value": "={{ $json.recommendation }}"
},
{
"id": "id-3",
"name": "flaggedAt",
"type": "string",
"value": "={{ $now.toISO() }}"
}
]
},
"includeOtherFields": true
},
"typeVersion": 3.4
},
{
"id": "fa4b2595-5473-4f95-b9b9-14292beff37d",
"name": "Reconcile with ERP System",
"type": "n8n-nodes-base.httpRequest",
"position": [
1472,
-64
],
"parameters": {
"url": "={{ $('Workflow Configuration').first().json.erpApiUrl }}",
"method": "POST",
"options": {
"timeout": 30000
},
"jsonBody": "={\n \"transactionId\": {{ $json.transactionId }},\n \"amount\": {{ $json.amount }},\n \"currency\": {{ $json.currency }},\n \"customerId\": {{ $json.customerId }},\n \"timestamp\": {{ $json.timestamp }},\n \"riskScore\": {{ $json.riskScore }},\n \"status\": \"reconciled\"\n}",
"sendBody": true,
"specifyBody": "json"
},
"typeVersion": 4.3
},
{
"id": "63195367-d756-4567-bdb9-1dfbaa823b38",
"name": "Store Transaction Record",
"type": "n8n-nodes-base.postgres",
"position": [
1648,
-64
],
"parameters": {
"table": {
"__rl": true,
"mode": "name",
"value": "transactions"
},
"schema": {
"__rl": true,
"mode": "list",
"value": "public"
},
"columns": {
"value": {
"amount": "={{ $json.amount }}",
"status": "processed",
"currency": "={{ $json.currency }}",
"timestamp": "={{ $json.timestamp }}",
"created_at": "={{ $now.toISO() }}",
"risk_level": "={{ $json.riskLevel }}",
"risk_score": "={{ $json.riskScore }}",
"customer_id": "={{ $json.customerId }}",
"merchant_id": "={{ $json.merchantId }}",
"payment_method": "={{ $json.paymentMethod }}",
"transaction_id": "={{ $json.transactionId }}",
"compliance_flags": "={{ JSON.stringify($json.complianceFlags) }}",
"fraud_indicators": "={{ JSON.stringify($json.fraudIndicators) }}"
},
"schema": [],
"mappingMode": "defineBelow",
"matchingColumns": []
},
"options": {}
},
"typeVersion": 2.6
},
{
"id": "88fc3ef6-2f52-40e1-a853-05504661da74",
"name": "Store Audit Trail",
"type": "n8n-nodes-base.postgres",
"position": [
1872,
-64
],
"parameters": {
"table": {
"__rl": true,
"mode": "name",
"value": "audit_trail"
},
"schema": {
"__rl": true,
"mode": "list",
"value": "public"
},
"columns": {
"value": {
"user": "system",
"action": "transaction_processed",
"details": "={{ JSON.stringify({ riskScore: $json.riskScore, riskLevel: $json.riskLevel, source: $json.source }) }}",
"timestamp": "={{ $now.toISO() }}",
"transaction_id": "={{ $json.transactionId }}"
},
"schema": [
{
"id": "transaction_id",
"required": false,
"displayName": "transaction_id",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "action",
"required": false,
"displayName": "action",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "user",
"required": false,
"displayName": "user",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "details",
"required": false,
"displayName": "details",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "timestamp",
"required": false,
"displayName": "timestamp",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": []
},
"options": {}
},
"typeVersion": 2.6
},
{
"id": "f4e58560-de61-4116-bf63-ffde4502341a",
"name": "Notify Finance Team - High Risk",
"type": "n8n-nodes-base.slack",
"position": [
1648,
128
],
"parameters": {
"text": "=HIGH RISK TRANSACTION ALERT\n\nTransaction ID: {{ $json.transactionId }}\nAmount: {{ $json.amount }} {{ $json.currency }}\nCustomer: {{ $json.customerId }}\nRisk Score: {{ $json.riskScore }}\nFraud Indicators: {{ $json.fraudIndicators.join(', ') }}\nRecommendation: {{ $json.recommendation }}\n\nRequires immediate manual review.",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "id",
"value": "={{ $('Workflow Configuration').first().json.slackChannel }}"
},
"otherOptions": {},
"authentication": "oAuth2"
},
"credentials": {
"slackOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 2.4
},
{
"id": "89336bb0-c2fb-4089-9b04-d6a9d69ee928",
"name": "Send Customer Alert Email",
"type": "n8n-nodes-base.gmail",
"position": [
1648,
320
],
"parameters": {
"sendTo": "={{ $('Workflow Configuration').first().json.financeTeamEmail }}",
"message": "=Dear Customer,\n\nWe detected unusual activity on your account:\n\nTransaction ID: {{ $json.transactionId }}\nAmount: {{ $json.amount }} {{ $json.currency }}\nDate: {{ $json.timestamp }}\n\nIf you did not authorize this transaction, please contact us immediately.\n\nBest regards,\nFinance Security Team",
"options": {},
"subject": "Suspicious Transaction Alert - Action Required"
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"typeVersion": 2.2
},
{
"id": "e68b4b12-601e-4ad7-a3c7-a46067f70134",
"name": "Aggregate for Financial Report",
"type": "n8n-nodes-base.aggregate",
"position": [
2096,
-64
],
"parameters": {
"options": {},
"aggregate": "aggregateAllItemData"
},
"typeVersion": 1
},
{
"id": "bfa1aac3-efbe-40c3-9514-3a66fdcf2100",
"name": "Generate Financial Report",
"type": "n8n-nodes-base.code",
"position": [
2320,
-64
],
"parameters": {
"jsCode": "const transactions = $input.first().json.data;\nconst totalCount = transactions.length;\nconst totalAmount = transactions.reduce((sum, t) => sum + t.amount, 0);\nconst avgRiskScore = transactions.reduce((sum, t) => sum + t.riskScore, 0) / totalCount;\nconst highRisk = transactions.filter(t => t.riskLevel === 'high').length;\nconst mediumRisk = transactions.filter(t => t.riskLevel === 'medium').length;\nconst lowRisk = transactions.filter(t => t.riskLevel === 'low').length;\nconst report = `<h2>Financial Transaction Report</h2><p>Generated: ${new Date().toISOString()}</p><h3>Summary</h3><ul><li>Total Transactions: ${totalCount}</li><li>Total Amount: $${totalAmount.toFixed(2)}</li><li>Average Risk Score: ${avgRiskScore.toFixed(2)}</li><li>High Risk: ${highRisk}</li><li>Medium Risk: ${mediumRisk}</li><li>Low Risk: ${lowRisk}</li></ul>`;\nreturn [{ json: { report, totalCount, totalAmount, avgRiskScore, highRisk, mediumRisk, lowRisk } }];"
},
"typeVersion": 2
},
{
"id": "d916d324-cef3-4139-9f56-2ab813df646c",
"name": "Send Financial Report to Slack",
"type": "n8n-nodes-base.slack",
"position": [
2544,
-64
],
"parameters": {
"text": "=Daily Financial Report\n\nTotal Transactions: {{ $json.totalCount }}\nTotal Amount: ${{ $json.totalAmount.toFixed(2) }}\nAverage Risk Score: {{ $json.avgRiskScore.toFixed(2) }}\n\nRisk Breakdown:\n- High Risk: {{ $json.highRisk }}\n- Medium Risk: {{ $json.mediumRisk }}\n- Low Risk: {{ $json.lowRisk }}",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "id",
"value": "={{ $('Workflow Configuration').first().json.slackChannel }}"
},
"otherOptions": {},
"authentication": "oAuth2"
},
"credentials": {
"slackOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 2.4
},
{
"id": "29a508e7-b62a-4b86-9e79-80472fad071b",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-752,
-528
],
"parameters": {
"width": 816,
"height": 272,
"content": "## How It Works\nThis workflow automates financial transaction surveillance by monitoring multiple payment systems, analyzing transaction patterns with AI, and triggering instant fraud alerts. Designed for finance teams, compliance officers, and fintech operations, it solves the challenge of real-time fraud detection across high-volume transaction streams without manual oversight. The system continuously fetches transactions from banking APIs and payment gateways via scheduled triggers or webhooks. Each transaction flows through validation layers checking for irregular amounts, velocity patterns, and geolocation anomalies. AI models analyze transaction metadata against historical patterns to calculate fraud risk scores. High-risk transactions trigger immediate alerts to designated teams via Gmail and Slack, while audit trails are logged to Google Sheets for compliance documentation. Approved transactions proceed to reconciliation, aggregating financial reports automatically. This eliminates delayed fraud discovery, reduces false positives through intelligent scoring, and ensures regulatory compliance through comprehensive audit logging."
},
"typeVersion": 1
},
{
"id": "ddb8f405-f989-4192-a0ab-dc7ff21b2dd8",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
144,
-608
],
"parameters": {
"width": 416,
"height": 352,
"content": "## Setup Steps\n1. Configure banking API credentials for transaction access\n2. Set up webhook endpoints for real-time transaction notifications\n3. Add OpenAI API key for fraud pattern analysis and risk scoring\n4. Configure NVIDIA NIM API for advanced anomaly detection models\n5. Set Gmail OAuth credentials for automated fraud alert delivery\n6. Connect Slack workspace and specify alert channels for urgent notifications\n7. Link Google Sheets for transaction logging and compliance audit trails"
},
"typeVersion": 1
},
{
"id": "2ffe548b-8984-40c1-81e8-3ce8010ac52e",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
640,
-656
],
"parameters": {
"color": 4,
"width": 400,
"height": 384,
"content": "## Prerequisites\nActive accounts for payment processors (Stripe, PayPal) or banking APIs (Plaid)\n## Use Cases\nReal-time credit card transaction monitoring with instant fraud blocks\n## Customization\nAdjust fraud risk scoring thresholds based on business risk tolerance\n## Benefits\nReduces fraud detection time from hours to seconds through real-time monitoring. "
},
"typeVersion": 1
},
{
"id": "1cb5cb06-1cc4-4b15-b363-87e88a662750",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
1408,
-176
],
"parameters": {
"color": 7,
"width": 1344,
"height": 736,
"content": "## Alert Routing \nSends high-risk transaction alerts to finance teams via Gmail and Slack with detailed context.\n**Why** - Enables immediate human review and action on potential fraud before financial impact escalates."
},
"typeVersion": 1
},
{
"id": "f2da0fea-a75f-4c98-9881-609db6b2d9ae",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
768,
-160
],
"parameters": {
"color": 7,
"width": 608,
"height": 720,
"content": "## AI Risk Scoring\nRoutes transaction metadata to AI models that calculate fraud probability based on behavioral patterns.\n**Why** - Identifies suspicious activities that rule-based systems miss, adapting to evolving fraud tactics dynamically."
},
"typeVersion": 1
},
{
"id": "4ba18a57-0e4b-43bf-bcb7-219f8b1bcd33",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
144,
-160
],
"parameters": {
"color": 7,
"width": 608,
"height": 736,
"content": "## Validation & Normalization\nStandardizes transaction formats, validates required fields, and filters invalid entries.\n**Why** - Ensures data quality and prevents downstream processing errors from malformed transaction records.\n"
},
"typeVersion": 1
},
{
"id": "f2512335-59ac-4f71-aa5c-7b11d70e922e",
"name": "Sticky Note6",
"type": "n8n-nodes-base.stickyNote",
"position": [
-784,
-160
],
"parameters": {
"color": 7,
"width": 912,
"height": 736,
"content": "## Transaction Ingestion \nFetches real-time payment data from banking APIs, Stripe, PayPal using webhooks and scheduled polling.\n**Why** - Captures transactions immediately upon processing, enabling real-time fraud detection before settlement occurs."
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"availableInMCP": false,
"executionOrder": "v1"
},
"versionId": "d8de13d6-cbf2-45c3-b108-ea2746adb8d6",
"connections": {
"Check Idempotency": {
"main": [
[
{
"node": "AI Agent - Fraud Detection",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "AI Agent - Fraud Detection",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Store Audit Trail": {
"main": [
[
{
"node": "Aggregate for Financial Report",
"type": "main",
"index": 0
}
]
]
},
"Route by Risk Level": {
"main": [
[
{
"node": "Flag for Manual Review",
"type": "main",
"index": 0
}
],
[
{
"node": "Reconcile with ERP System",
"type": "main",
"index": 0
}
],
[
{
"node": "Reconcile with ERP System",
"type": "main",
"index": 0
}
]
]
},
"Flag for Manual Review": {
"main": [
[
{
"node": "Notify Finance Team - High Risk",
"type": "main",
"index": 0
},
{
"node": "Send Customer Alert Email",
"type": "main",
"index": 0
}
]
]
},
"Workflow Configuration": {
"main": [
[
{
"node": "Fetch Bank API Transactions",
"type": "main",
"index": 0
},
{
"node": "Fetch Payment Gateway Transactions",
"type": "main",
"index": 0
}
]
]
},
"Store Transaction Record": {
"main": [
[
{
"node": "Store Audit Trail",
"type": "main",
"index": 0
}
]
]
},
"Filter Valid Transactions": {
"main": [
[
{
"node": "Check Idempotency",
"type": "main",
"index": 0
}
]
]
},
"Generate Financial Report": {
"main": [
[
{
"node": "Send Financial Report to Slack",
"type": "main",
"index": 0
}
]
]
},
"Reconcile with ERP System": {
"main": [
[
{
"node": "Store Transaction Record",
"type": "main",
"index": 0
}
]
]
},
"AI Agent - Fraud Detection": {
"main": [
[
{
"node": "Route by Risk Level",
"type": "main",
"index": 0
}
]
]
},
"Normalize Transaction Data": {
"main": [
[
{
"node": "Filter Valid Transactions",
"type": "main",
"index": 0
}
]
]
},
"Fetch Bank API Transactions": {
"main": [
[
{
"node": "Merge All Transaction Sources",
"type": "main",
"index": 1
}
]
]
},
"Merge All Transaction Sources": {
"main": [
[
{
"node": "Normalize Transaction Data",
"type": "main",
"index": 0
}
]
]
},
"Aggregate for Financial Report": {
"main": [
[
{
"node": "Generate Financial Report",
"type": "main",
"index": 0
}
]
]
},
"Fetch Payment Gateway Transactions": {
"main": [
[
{
"node": "Merge All Transaction Sources",
"type": "main",
"index": 2
}
]
]
},
"Schedule Trigger - Periodic Ingestion": {
"main": [
[
{
"node": "Workflow Configuration",
"type": "main",
"index": 0
}
]
]
},
"Webhook - Real-time Transaction Events": {
"main": [
[
{
"node": "Merge All Transaction Sources",
"type": "main",
"index": 0
}
]
]
},
"Structured Output Parser - Fraud Analysis": {
"ai_outputParser": [
[
{
"node": "AI Agent - Fraud Detection",
"type": "ai_outputParser",
"index": 0
}
]
]
}
}
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
gmailOAuth2openAiApislackOAuth2Api
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow automates financial transaction surveillance by monitoring multiple payment systems, analyzing transaction patterns with AI, and triggering instant fraud alerts. Designed for finance teams, compliance officers, and fintech operations, it solves the challenge of…
Source: https://n8n.io/workflows/12732/ — 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.
Created by: Peyton Leveillee Last updated: October 2025
This workflow automates end-to-end sustainability lifecycle management for corporate sustainability teams, ESG governance officers, and circular economy programme leads. It addresses the challenge of
This workflow automates end-to-end ESG (Environmental, Social, and Governance) sustainability reporting for enterprise sustainability teams, compliance officers, and green governance leads. It solves
Automates sales data analysis and strategic insight generation for sales managers and strategists needing actionable intelligence. Fetches multi-source data from sales, marketing, and financial system
This workflow automates end-to-end patient care coordination by monitoring appointment schedules, clinical events, and care milestones while orchestrating personalized communications across multiple c