This workflow follows the Emailsend → 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 →
{
"name": "Relatorio de custos AWS FinOps",
"nodes": [
{
"parameters": {
"rule": {
"interval": [
{
"field": "cronExpression",
"expression": "0 8 1,16 * *"
}
]
}
},
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.2,
"position": [
-680,
240
],
"id": "8059a71a-0bab-49e4-99f8-396c343340a1",
"name": "Schedule Trigger"
},
{
"parameters": {
"bucketName": "nome-do-bucket",
"fileKey": "aws-costs-monthly.csv"
},
"type": "n8n-nodes-base.awsS3",
"typeVersion": 2,
"position": [
-540,
240
],
"id": "6f16b18f-582d-4dbd-9bf8-102d0c858a2a",
"name": "AWS S3",
"credentials": {
"aws": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"options": {}
},
"type": "n8n-nodes-base.extractFromFile",
"typeVersion": 1,
"position": [
-400,
240
],
"id": "32dbe25c-009b-4017-b35a-e1145c8fa319",
"name": "Extract from File"
},
{
"parameters": {
"operation": "append",
"documentId": {
"__rl": true,
"value": "https://docs.google.com/spreadsheets/d/<REDACTED>",
"mode": "url"
},
"sheetName": {
"__rl": true,
"value": "gid=0",
"mode": "list",
"cachedResultName": "P\u00e1gina1",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/<REDACTED>"
},
"columns": {
"mappingMode": "autoMapInputData",
"value": {},
"matchingColumns": [],
"schema": [
{
"id": "M\u00eas",
"displayName": "M\u00eas",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "Amazon Relational Database Service",
"displayName": "Amazon Relational Database Service",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "Amazon Simple Storage Service",
"displayName": "Amazon Simple Storage Service",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "Tax",
"displayName": "Tax",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "Savings Plans for AWS Compute usage",
"displayName": "Savings Plans for AWS Compute usage",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "Amazon Elastic Load Balancing",
"displayName": "Amazon Elastic Load Balancing",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "EC2 - Other",
"displayName": "EC2 - Other",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "Amazon Elastic Compute Cloud - Compute",
"displayName": "Amazon Elastic Compute Cloud - Compute",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "AmazonCloudWatch",
"displayName": "AmazonCloudWatch",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "Amazon ElastiCache",
"displayName": "Amazon ElastiCache",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "Amazon Virtual Private Cloud",
"displayName": "Amazon Virtual Private Cloud",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "AWS Glue",
"displayName": "AWS Glue",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "AWS Lambda",
"displayName": "AWS Lambda",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "Amazon Elastic Container Service for Kubernetes",
"displayName": "Amazon Elastic Container Service for Kubernetes",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "AWS Config",
"displayName": "AWS Config",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "AWS Support (Business)",
"displayName": "AWS Support (Business)",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "Amazon Elastic Container Service",
"displayName": "Amazon Elastic Container Service",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "AWS Secrets Manager",
"displayName": "AWS Secrets Manager",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "Amazon Athena",
"displayName": "Amazon Athena",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "Oracle Linux 9 | Support by SupportedImages",
"displayName": "Oracle Linux 9 | Support by SupportedImages",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "Amazon QuickSight",
"displayName": "Amazon QuickSight",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "Amazon EC2 Container Registry (ECR)",
"displayName": "Amazon EC2 Container Registry (ECR)",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "AWS CloudTrail",
"displayName": "AWS CloudTrail",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "Amazon Lightsail",
"displayName": "Amazon Lightsail",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "AWS Key Management Service",
"displayName": "AWS Key Management Service",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "Amazon Redshift",
"displayName": "Amazon Redshift",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "AWS Cost Explorer",
"displayName": "AWS Cost Explorer",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "Amazon Route 53",
"displayName": "Amazon Route 53",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "Amazon Simple Email Service",
"displayName": "Amazon Simple Email Service",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "Amazon API Gateway",
"displayName": "Amazon API Gateway",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "Amazon Registrar",
"displayName": "Amazon Registrar",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "AWS Database Migration Service",
"displayName": "AWS Database Migration Service",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "AWS End User Messaging",
"displayName": "AWS End User Messaging",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "Amazon Simple Notification Service",
"displayName": "Amazon Simple Notification Service",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "Amazon Simple Queue Service",
"displayName": "Amazon Simple Queue Service",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "Amazon CloudFront",
"displayName": "Amazon CloudFront",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "AWS CloudShell",
"displayName": "AWS CloudShell",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "AWS Step Functions",
"displayName": "AWS Step Functions",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "Amazon Glacier",
"displayName": "Amazon Glacier",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "Amazon DynamoDB",
"displayName": "Amazon DynamoDB",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "CloudWatch Events",
"displayName": "CloudWatch Events",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "AWS X-Ray",
"displayName": "AWS X-Ray",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "Amazon DevOps Guru",
"displayName": "Amazon DevOps Guru",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "AWS CloudFormation",
"displayName": "AWS CloudFormation",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "AWS Service Catalog",
"displayName": "AWS Service Catalog",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "Refund",
"displayName": "Refund",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
}
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {}
},
"type": "n8n-nodes-base.googleSheets",
"typeVersion": 4.5,
"position": [
0,
20
],
"id": "41156d43-f8f1-4336-963a-63b7f2a91251",
"name": "Google Sheets"
},
{
"parameters": {
"operation": "clear",
"documentId": {
"__rl": true,
"value": "tokenid",
"mode": "list",
"cachedResultName": "relatorio-custo-12-meses",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/<REDACTED>"
},
"sheetName": {
"__rl": true,
"value": "gid=0",
"mode": "list",
"cachedResultName": "P\u00e1gina1",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/<REDACTED>"
},
"keepFirstRow": true
},
"type": "n8n-nodes-base.googleSheets",
"typeVersion": 4.5,
"position": [
-180,
20
],
"id": "15a7e9aa-0711-4ba7-989d-87183937af3a",
"name": "Google Sheets1"
},
{
"parameters": {
"fromEmail": "<redacted@example.com>",
"toEmail": "<redacted@example.com>",
"subject": "Relat\u00f3rio de custos AWS",
"emailFormat": "text",
"text": "https://docs.google.com/spreadsheets/d/<REDACTED>",
"options": {}
},
"type": "n8n-nodes-base.emailSend",
"typeVersion": 2.1,
"position": [
720,
140
],
"id": "e64e7a93-f867-4175-a9b4-862a2cbd3663",
"name": "contato1",
"executeOnce": true
},
{
"parameters": {
"fromEmail": "<redacted@example.com>",
"toEmail": "<redacted@example.com>",
"subject": "Relat\u00f3rio de custos AWS",
"emailFormat": "text",
"text": "https://docs.google.com/spreadsheets/d/<REDACTED>",
"options": {}
},
"type": "n8n-nodes-base.emailSend",
"typeVersion": 2.1,
"position": [
720,
320
],
"id": "941183db-ffa2-45ed-8700-a98d4cdc2844",
"name": "contato2",
"executeOnce": true
},
{
"parameters": {
"fromEmail": "<redacted@example.com>",
"toEmail": "<redacted@example.com>",
"subject": "Relat\u00f3rio de custos AWS",
"emailFormat": "text",
"text": "https://docs.google.com/spreadsheets/d/<REDACTED>",
"options": {}
},
"type": "n8n-nodes-base.emailSend",
"typeVersion": 2.1,
"position": [
720,
500
],
"id": "f172b3c9-2f7c-430c-828e-06821504d1ea",
"name": "contato3",
"executeOnce": true
},
{
"parameters": {
"modelId": {
"__rl": true,
"value": "gpt-4o-mini",
"mode": "list",
"cachedResultName": "GPT-4O-MINI"
},
"messages": {
"values": [
{
"content": "Voc\u00ea \u00e9 um assistente experiente na an\u00e1lise de custos da AWS, voc\u00ea receber\u00e1 um json com os gastos em d\u00f3lares em cada um dos recursos da AWS nos \u00faltimos 12 meses\n\nA partir dessa informa\u00e7\u00e3o voc\u00ea deve fazer um resumo que vai enviar para o CEO da empresa.\n\nN\u00e3o \u00e9 necess\u00e1rio apresenta\u00e7\u00e3o nem encerramento no texto, mande apenas o relat\u00f3rio e as sugest\u00f5es.\n\nComo resultado, retorne apenas a mensagem que vai ser enviada, sem nenhuma outra intera\u00e7\u00e3o.\n\nNo final sugira tr\u00eas oportunidades de melhoria.\n\nUtilize emojis para deixar o texto mais din\u00e2mico.\n\nRetorne no formato a ser utilizado no whatsapp, sem utilizar markdown\n\nCaso precise fazer c\u00e1lculos utilize a tool calculator",
"role": "system"
},
{
"content": "={{ $json.text }}"
}
]
},
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.openAi",
"typeVersion": 1.8,
"position": [
80,
300
],
"id": "80bc473d-c048-4f38-b393-620dfc19087a",
"name": "OpenAI",
"executeOnce": true,
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"jsCode": "return { \"text\": JSON.stringify($input.all().map( item => item.json ))}"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
-240,
240
],
"id": "be65e001-9cf8-47f3-aa37-54af6b32ac29",
"name": "Code"
},
{
"parameters": {},
"type": "@n8n/n8n-nodes-langchain.toolCalculator",
"typeVersion": 1,
"position": [
160,
780
],
"id": "38da41d2-7963-4411-9b8a-1f4c260df647",
"name": "Calculator"
},
{
"parameters": {
"bucketName": "nome-do-bucket",
"fileKey": "aws-costs-actual-month.csv"
},
"type": "n8n-nodes-base.awsS3",
"typeVersion": 2,
"position": [
-540,
460
],
"id": "8c2a05bf-5972-46a7-8cd7-72307bca19ee",
"name": "AWS S31",
"credentials": {
"aws": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"options": {}
},
"type": "n8n-nodes-base.extractFromFile",
"typeVersion": 1,
"position": [
-400,
460
],
"id": "d4847e72-e051-455f-bbb9-8b2fe2a70f43",
"name": "Extract from File1"
},
{
"parameters": {
"modelId": {
"__rl": true,
"value": "gpt-4o-mini",
"mode": "list",
"cachedResultName": "GPT-4O-MINI"
},
"messages": {
"values": [
{
"content": "Voc\u00ea \u00e9 um assistente experiente na an\u00e1lise de custos da AWS, voc\u00ea receber\u00e1 um json com os gastos em d\u00f3lares em cada um dos recursos da AWS no \u00faltimo mese\n\nA partir dessa informa\u00e7\u00e3o voc\u00ea deve fazer um resumo que vai enviar para o CEO da empresa.\n\nN\u00e3o \u00e9 necess\u00e1rio apresenta\u00e7\u00e3o nem encerramento no texto, mande apenas o relat\u00f3rio e as sugest\u00f5es.\n\nComo resultado, retorne apenas a mensagem que vai ser enviada, sem nenhuma outra intera\u00e7\u00e3o.\n\nNo final sugira tr\u00eas oportunidades de melhoria.\n\nUtilize emojis para deixar o texto mais din\u00e2mico.\n\nRetorne no formato a ser utilizado no whatsapp, sem utilizar markdown\n\nCaso precise fazer c\u00e1lculos utilize a tool calculator",
"role": "system"
},
{
"content": "={{ $json.text }}"
}
]
},
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.openAi",
"typeVersion": 1.8,
"position": [
80,
460
],
"id": "6bc6b310-3a0c-437f-8b16-399bb8e1f903",
"name": "OpenAI1",
"executeOnce": true,
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"jsCode": "return { \"text\": JSON.stringify($input.all().map( item => item.json ))}"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
-240,
460
],
"id": "7f8d55b4-eefc-4d11-8b97-8ca3738e0b80",
"name": "Code4"
},
{
"parameters": {
"method": "POST",
"url": "=https://<REDACTED-ENDPOINT>/message/sendText/wpp",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "apikey",
"value": "<API_KEY_REDACTED>"
}
]
},
"sendBody": true,
"specifyBody": "json",
"jsonBody": "={{$json}}",
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
720,
700
],
"id": "67d4941b-d639-489e-b3ed-d803367d7eaa",
"name": "HTTP Request3"
},
{
"parameters": {
"jsCode": "return {\n number: \"++55XXXXXXXXXXX\",\n textMessage: {\n text: $input.first().json.message.content\n }\n}"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
540,
660
],
"id": "e7f78571-68c2-46d1-982c-98784572e765",
"name": "Code5"
},
{
"parameters": {
"method": "POST",
"url": "https://<REDACTED-ENDPOINT>//evo-api.url.br/message/sendText/wpp",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "apikey",
"value": "<API_KEY_REDACTED>"
}
]
},
"sendBody": true,
"specifyBody": "json",
"jsonBody": "={{$json}}",
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
720,
900
],
"id": "be05134d-89c8-4a79-907a-a8a1250cec4e",
"name": "HTTP Request4"
},
{
"parameters": {
"rule": {
"interval": [
{
"field": "cronExpression",
"expression": "10 8 1 * *"
}
]
}
},
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.2,
"position": [
-680,
460
],
"id": "fe605bb7-577b-40bd-b847-32bf456e425a",
"name": "Schedule Trigger1"
},
{
"parameters": {
"path": "538f9679-9390-4401-88e5-ed9edc28f4b4",
"options": {}
},
"type": "n8n-nodes-base.webhook",
"typeVersion": 2,
"position": [
-1040,
1240
],
"id": "b3e571d1-b44d-4fb1-abdb-7ea10f393a15",
"name": "Webhook"
},
{
"parameters": {
"method": "POST",
"url": "https://chat.googleapis.com/v1/spaces/<REDACTED>",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Content-Type",
"value": "application/json"
}
]
},
"sendBody": true,
"specifyBody": "json",
"jsonBody": "={{$json}}",
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
720,
1100
],
"id": "0b1a7da0-6f3d-446c-98bc-14a1317e7196",
"name": "HTTP Request5"
},
{
"parameters": {
"jsCode": "return {\n text: $input.first().json.message.content\n}"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
540,
1020
],
"id": "c2d2169f-7102-4f50-b93f-cd79bb128cb8",
"name": "Code6"
},
{
"parameters": {
"method": "POST",
"url": "https://chat.googleapis.com/v1/spaces/<REDACTED>",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Content-Type",
"value": "application/json"
}
]
},
"sendBody": true,
"specifyBody": "json",
"jsonBody": "https://docs.google.com/spreadsheets/d/<REDACTED>",
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
-100,
540
],
"id": "a6f56797-05ab-4167-8dae-d6351c1e38e3",
"name": "HTTP Request6",
"executeOnce": true
},
{
"parameters": {
"bucketName": "nome-do-bucket",
"fileKey": "anomalias_custo.csv"
},
"type": "n8n-nodes-base.awsS3",
"typeVersion": 2,
"position": [
-540,
660
],
"id": "4dab2470-eeb9-40fa-a367-6e785a7bd8fc",
"name": "AWS S32",
"credentials": {
"aws": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"options": {}
},
"type": "n8n-nodes-base.extractFromFile",
"typeVersion": 1,
"position": [
-400,
660
],
"id": "25308db3-c94d-4afb-91fc-39b1e80a59b9",
"name": "Extract from File2"
},
{
"parameters": {
"rule": {
"interval": [
{
"field": "cronExpression",
"expression": "20 8 * * 1"
}
]
}
},
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.2,
"position": [
-680,
660
],
"id": "a2397b3a-6f97-453c-ae61-932d7d5f0881",
"name": "Schedule Trigger2"
},
{
"parameters": {
"jsCode": "return { \"text\": JSON.stringify($input.all().map( item => item.json ))}"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
-240,
660
],
"id": "e3737535-6387-44bf-90b9-c412c2e40689",
"name": "Code7"
},
{
"parameters": {
"modelId": {
"__rl": true,
"value": "gpt-4o-mini",
"mode": "list",
"cachedResultName": "GPT-4O-MINI"
},
"messages": {
"values": [
{
"content": "Voc\u00ea \u00e9 um assistente experiente na an\u00e1lise de custos da AWS, voc\u00ea receber\u00e1 um json com anomalias de custo geradas por um script python comparando a semana atual com o mesmo periodo do mes anterior.\n\nA partir dessa informa\u00e7\u00e3o voc\u00ea deve fazer um resumo que vai enviar para o CEO da empresa.\n\nN\u00e3o \u00e9 necess\u00e1rio apresenta\u00e7\u00e3o nem encerramento no texto, mande apenas o relat\u00f3rio e as sugest\u00f5es.\n\nComo resultado, retorne apenas a mensagem que vai ser enviada, sem nenhuma outra intera\u00e7\u00e3o.\n\nNo final sugira tr\u00eas oportunidades de melhoria e o que pode ter causado a anomalia, por exemplo cobran\u00e7a ou contrata\u00e7\u00e3o de reservation instances e saving plan.\n\nUtilize emojis para deixar o texto mais din\u00e2mico.\n\nRetorne no formato a ser utilizado no whatsapp, sem utilizar markdown\n\nCaso precise fazer c\u00e1lculos utilize a tool calculator",
"role": "system"
},
{
"content": "={{ $json.text }}"
}
]
},
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.openAi",
"typeVersion": 1.8,
"position": [
80,
620
],
"id": "bbc24779-6167-45c9-b3d6-f0961c5bf969",
"name": "OpenAI2",
"executeOnce": true,
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"jsCode": "return {\n number: \"++55XXXXXXXXXXX\",\n textMessage: {\n text: $input.first().json.message.content\n }\n}"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
540,
840
],
"id": "df1b3f9e-de53-4c2e-8b9d-1bf2b0d8c2d8",
"name": "Code8"
}
],
"connections": {
"Schedule Trigger": {
"main": [
[
{
"node": "AWS S3",
"type": "main",
"index": 0
}
]
]
},
"AWS S3": {
"main": [
[
{
"node": "Extract from File",
"type": "main",
"index": 0
}
]
]
},
"Extract from File": {
"main": [
[
{
"node": "Google Sheets1",
"type": "main",
"index": 0
},
{
"node": "Code",
"type": "main",
"index": 0
}
]
]
},
"Google Sheets1": {
"main": [
[
{
"node": "Google Sheets",
"type": "main",
"index": 0
}
]
]
},
"Google Sheets": {
"main": [
[
{
"node": "destino1",
"type": "main",
"index": 0
},
{
"node": "destino2",
"type": "main",
"index": 0
},
{
"node": "destino3",
"type": "main",
"index": 0
}
]
]
},
"Code": {
"main": [
[
{
"node": "OpenAI",
"type": "main",
"index": 0
}
]
]
},
"OpenAI": {
"main": [
[
{
"node": "Code5",
"type": "main",
"index": 0
},
{
"node": "Code8",
"type": "main",
"index": 0
}
]
]
},
"Calculator": {
"ai_tool": [
[
{
"node": "OpenAI",
"type": "ai_tool",
"index": 0
},
{
"node": "OpenAI1",
"type": "ai_tool",
"index": 0
},
{
"node": "OpenAI2",
"type": "ai_tool",
"index": 0
}
]
]
},
"AWS S31": {
"main": [
[
{
"node": "Extract from File1",
"type": "main",
"index": 0
}
]
]
},
"OpenAI1": {
"main": [
[
{
"node": "Code5",
"type": "main",
"index": 0
},
{
"node": "Code6",
"type": "main",
"index": 0
}
]
]
},
"Code4": {
"main": [
[
{
"node": "OpenAI1",
"type": "main",
"index": 0
}
]
]
},
"Code5": {
"main": [
[
{
"node": "HTTP Request3",
"type": "main",
"index": 0
}
]
]
},
"Extract from File1": {
"main": [
[
{
"node": "Code4",
"type": "main",
"index": 0
},
{
"node": "HTTP Request6",
"type": "main",
"index": 0
}
]
]
},
"Schedule Trigger1": {
"main": [
[
{
"node": "AWS S31",
"type": "main",
"index": 0
}
]
]
},
"Code6": {
"main": [
[
{
"node": "HTTP Request5",
"type": "main",
"index": 0
}
]
]
},
"AWS S32": {
"main": [
[
{
"node": "Extract from File2",
"type": "main",
"index": 0
}
]
]
},
"Schedule Trigger2": {
"main": [
[
{
"node": "AWS S32",
"type": "main",
"index": 0
}
]
]
},
"Extract from File2": {
"main": [
[
{
"node": "Code7",
"type": "main",
"index": 0
}
]
]
},
"Code7": {
"main": [
[
{
"node": "OpenAI2",
"type": "main",
"index": 0
}
]
]
},
"OpenAI2": {
"main": [
[
{
"node": "Code6",
"type": "main",
"index": 0
},
{
"node": "Code5",
"type": "main",
"index": 0
},
{
"node": "Code8",
"type": "main",
"index": 0
}
]
]
},
"Code8": {
"main": [
[
{
"node": "HTTP Request4",
"type": "main",
"index": 0
}
]
]
}
},
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "ed6c0a98-5ed7-49f4-b578-00062d88a46c",
"id": "id",
"tags": []
}
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.
awsopenAiApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Relatorio de custos AWS FinOps. Uses awsS3, googleSheets, emailSend, openAi. Scheduled trigger; 29 nodes.
Source: https://github.com/brunoh1n1/cost-observability-aws/blob/949e59a1c89645bf4a62a06a8c6e613ddb095313/Relatorio_de_custos_AWS_FinOps_sanitizado.json — 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.
The workflow runs automatically every day and collects analytics data for both today and yesterday. It cleans and standardizes both datasets in the same way so they are easy to compare. After that, it
This workflow runs every two minutes to sync a Google Sheets file queue with an OpenAI Vector Store by deleting outdated entries, downloading new files from Google Drive, AWS S3, or a URL, uploading t
AI Institutional Stock Valuation Engine with Risk Scoring & Scenario Targets
Overview This is a production-grade, fully automated stock analysis system built entirely in n8n. It combines institutional-level financial analysis, dual AI model consensus, and a self-improving back
This automation is a complete end-to-end system designed to find, qualify, and contact B2B leads — fully automated and powered by AI. Searches for target companies on LinkedIn via Ghost Genius API, us