Extracción de itinerarios de PDF a Google Sheets (GPT-4.1-Mini + notificación de Gmail)
Este es unautomatización que contiene 9 nodos.Utiliza principalmente nodos como Gmail, SplitOut, FormTrigger, GoogleSheets, SplitInBatches. Extraer itinerarios de PDF a Google Sheets usando GPT-4.1-Mini y enviar notificaciones por Gmail
- •Cuenta de Google y credenciales de API de Gmail
- •Credenciales de API de Google Sheets
- •Clave de API de OpenAI
Nodos utilizados (9)
Categoría
{
"id": "FaoXqBQDK5JryXkW",
"meta": {
"instanceId": "b91e510ebae4127f953fd2f5f8d40d58ca1e71c746d4500c12ae86aad04c1502",
"templateCredsSetupCompleted": true
},
"name": "Extract PDF Itineraries to Google Sheets with GPT-4.1-Mini & Gmail Notifications",
"tags": [],
"nodes": [
{
"id": "51147ae9-3e42-474b-aecf-321b364b8b11",
"name": "Crear correo",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
1072,
960
],
"parameters": {
"modelId": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini",
"cachedResultName": "GPT-4O-MINI"
},
"options": {},
"messages": {
"values": [
{
"content": "=Agency Name: {{ $json['Agency Name'] }} \nEmail:{{ $json.Email }}\nAddress: {{ $json.Address }}\nPhone:{{ $json.Phone }}\nDate:{{ $json.Date }}\nTour:{{ $json.tour }}\nDeparture Date: {{ $json['departure date'] }}"
},
{
"role": "system",
"content": "=# Overview\nYou are an email specialist for a Tour Agency. You will receive tour itinerary information. Your task is to confirm receipt of the itinerary and notify the relevant parties.\n\n## Email\nInform the team that the itinerary has been received and processed. Notify them that it has been updated in the Tour Database and provide them with the access link to view it.\n https://docs.google.com/spreadsheets/d/1lg-GRBTQCvM9WC_Mbhe4YXwgyrRcHm8K2JYDHg4XOww/edit?gid=0#gid=0\n\n## Output\nOutput the following parameters separately:\nSubject\nEmail"
}
]
},
"jsonOutput": true
},
"credentials": {
"openAiApi": {
"id": "OGYj7DgYv5GFLFZk",
"name": "OpenAi account 2"
}
},
"typeVersion": 1.8
},
{
"id": "ab57e57e-c161-48b3-ab73-caea2ef9c12c",
"name": "OpenAI Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
544,
1136
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-mini",
"cachedResultName": "gpt-4.1-mini"
},
"options": {}
},
"credentials": {
"openAiApi": {
"id": "OGYj7DgYv5GFLFZk",
"name": "OpenAi account 2"
}
},
"typeVersion": 1.2
},
{
"id": "6dd88c5f-6724-4872-97fc-0cc152d7446d",
"name": "Nota adhesiva1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1024,
768
],
"parameters": {
"width": 784,
"height": 992,
"content": "# Extract PDF Itineraries to Google Sheets with GPT-4.1-Mini & Gmail Notifications\n\n## Overview\nAutomates PDF data extraction using OpenAI GPT, saves to Google Sheets, sends email confirmations. Reduces manual entry by 90%.\n\n## How It Works\n1. Receives PDF uploads via form\n2. Splits & loops through files\n3. AI extracts structured data\n4. Appends to Sheets with timestamps\n5. Sends confirmation email\n\n## Prerequisites\n- OpenAI API key ([platform.openai.com](https://platform.openai.com))\n- Google Workspace (Sheets & Gmail)\n- n8n v1.0.0+\n\n## Setup\n1. Add OpenAI API key to n8n credentials\n2. Create Google Sheet with extraction columns, authorize OAuth2\n3. Configure Gmail OAuth2\n4. Import workflow JSON\n5. Edit AI prompt for your fields\n6. Activate & share form URL\n\n## Customization\n- Modify extraction prompts\n- Adjust Sheets mapping\n- Customize email templates\n- Add error handling/validation\n- Extend to Word/Excel files\n\n## Use Cases\nInvoices, expense reports, resumes, contracts, forms, legal docs\n"
},
"typeVersion": 1
},
{
"id": "e58f6aab-f60d-4eba-9d3c-4aba55d299e4",
"name": "Información extraída a Google Sheets",
"type": "n8n-nodes-base.googleSheets",
"position": [
848,
960
],
"parameters": {
"columns": {
"value": {
"Date": "={{ $json.output[' Date'] }}",
"tour": "={{ $json.output.tour }}",
"Email": "={{ $json.output.Email }}",
"Phone": "={{ $json.output.Phone }}",
"Address": "={{ $json.output.Address }}",
"Agency Name": "={{ $json.output['Agency Name'] }}",
"departure date": "={{ $json.output['departure date'] }}"
},
"schema": [
{
"id": "Agency Name",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Agency Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Email",
"type": "string",
"display": true,
"required": false,
"displayName": "Email",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Address",
"type": "string",
"display": true,
"required": false,
"displayName": "Address",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Phone",
"type": "string",
"display": true,
"required": false,
"displayName": "Phone",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Date",
"type": "string",
"display": true,
"required": false,
"displayName": "Date",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "tour",
"type": "string",
"display": true,
"required": false,
"displayName": "tour",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "departure date",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "departure date",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"Agency Name"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "appendOrUpdate",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1lg-GRBTQCvM9WC_Mbhe4YXwgyrRcHm8K2JYDHg4XOww/edit#gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1lg-GRBTQCvM9WC_Mbhe4YXwgyrRcHm8K2JYDHg4XOww",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1lg-GRBTQCvM9WC_Mbhe4YXwgyrRcHm8K2JYDHg4XOww/edit?usp=drivesdk",
"cachedResultName": "tour"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "KBo80D4RMDyyBspg",
"name": "Google Sheets account 2"
}
},
"typeVersion": 4.5
},
{
"id": "8f5ff28e-0301-4cd9-bdd2-2d9278c2d0ec",
"name": "Loop Over Items asegura cada documento",
"type": "n8n-nodes-base.splitInBatches",
"position": [
288,
960
],
"parameters": {
"options": {
"reset": false
}
},
"typeVersion": 3
},
{
"id": "e5a12fea-0bde-49db-8b48-b58aa31bbfb2",
"name": "Form recibe múltiples archivos PDF",
"type": "n8n-nodes-base.formTrigger",
"position": [
-176,
960
],
"webhookId": "881300df-4407-4830-9c29-1df843946ddc",
"parameters": {
"options": {},
"formTitle": "LOAD MULTIPLE FILES",
"formFields": {
"values": [
{
"fieldType": "file",
"fieldLabel": "files",
"requiredField": true,
"acceptFileTypes": "*.pdf"
}
]
},
"formDescription": "Select multiple pdf files to run this example."
},
"typeVersion": 2.2
},
{
"id": "453337ca-283e-4e6d-be87-87a435537032",
"name": "Split Files procesa cada PDF individualmente",
"type": "n8n-nodes-base.splitOut",
"position": [
48,
960
],
"parameters": {
"options": {
"includeBinary": true,
"destinationFieldName": "=files"
},
"fieldToSplitOut": "=files"
},
"executeOnce": false,
"typeVersion": 1
},
{
"id": "940b3087-4fc8-439d-98e3-7e14f034becc",
"name": "Confirmación por correo enviada con resultados",
"type": "n8n-nodes-base.gmail",
"position": [
1424,
1088
],
"webhookId": "2c4c1f75-af3a-4c51-975c-0d493d317637",
"parameters": {
"sendTo": " xxxxxxxx@gmail.com",
"message": "= {{ $('Create Email').item.json.message.content.Email }}",
"options": {
"appendAttribution": false
},
"subject": "={{ $json.message.content.Subject }}",
"emailType": "text"
},
"credentials": {
"gmailOAuth2": {
"id": "zkm2omCjmdLquZGT",
"name": "Gmail account 2"
}
},
"typeVersion": 2.1
},
{
"id": "5f12a35a-6019-4b89-83c1-9ceadaa60cad",
"name": "Analiza y extrae PDF",
"type": "@n8n/n8n-nodes-langchain.informationExtractor",
"position": [
544,
960
],
"parameters": {
"text": "={{ $json.files.filename }}",
"options": {
"systemPromptTemplate": "You are an expert extraction algorithm.\nOnly extract relevant information from the text.\nIf you do not know the value of an attribute asked to extract, you may omit the attribute's value."
},
"attributes": {
"attributes": [
{
"name": "Agency Name",
"required": true,
"description": "the name of the client"
},
{
"name": "Email",
"required": true,
"description": "the email of the client"
},
{
"name": "Address",
"required": true,
"description": "the address of the client"
},
{
"name": "Phone",
"required": true,
"description": "the phone number of the client"
},
{
"name": " Date",
"type": "date",
"required": true,
"description": "the date "
},
{
"name": "tour",
"required": true,
"description": "holiday package tour"
},
{
"name": "departure date",
"required": true,
"description": "departure date"
}
]
}
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "17da634d-89f9-4c60-8c9b-f8b018c99481",
"connections": {
"51147ae9-3e42-474b-aecf-321b364b8b11": {
"main": [
[
{
"node": "940b3087-4fc8-439d-98e3-7e14f034becc",
"type": "main",
"index": 0
}
]
]
},
"ab57e57e-c161-48b3-ab73-caea2ef9c12c": {
"ai_languageModel": [
[
{
"node": "5f12a35a-6019-4b89-83c1-9ceadaa60cad",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"5f12a35a-6019-4b89-83c1-9ceadaa60cad": {
"main": [
[
{
"node": "e58f6aab-f60d-4eba-9d3c-4aba55d299e4",
"type": "main",
"index": 0
}
]
]
},
"e5a12fea-0bde-49db-8b48-b58aa31bbfb2": {
"main": [
[
{
"node": "453337ca-283e-4e6d-be87-87a435537032",
"type": "main",
"index": 0
}
]
]
},
"940b3087-4fc8-439d-98e3-7e14f034becc": {
"main": [
[
{
"node": "8f5ff28e-0301-4cd9-bdd2-2d9278c2d0ec",
"type": "main",
"index": 0
}
]
]
},
"8f5ff28e-0301-4cd9-bdd2-2d9278c2d0ec": {
"main": [
[],
[
{
"node": "5f12a35a-6019-4b89-83c1-9ceadaa60cad",
"type": "main",
"index": 0
}
]
]
},
"e58f6aab-f60d-4eba-9d3c-4aba55d299e4": {
"main": [
[
{
"node": "51147ae9-3e42-474b-aecf-321b364b8b11",
"type": "main",
"index": 0
}
]
]
},
"453337ca-283e-4e6d-be87-87a435537032": {
"main": [
[
{
"node": "8f5ff28e-0301-4cd9-bdd2-2d9278c2d0ec",
"type": "main",
"index": 0
}
]
]
}
}
}¿Cómo usar este flujo de trabajo?
Copie el código de configuración JSON de arriba, cree un nuevo flujo de trabajo en su instancia de n8n y seleccione "Importar desde JSON", pegue la configuración y luego modifique la configuración de credenciales según sea necesario.
¿En qué escenarios es adecuado este flujo de trabajo?
Intermedio
¿Es de pago?
Este flujo de trabajo es completamente gratuito, puede importarlo y usarlo directamente. Sin embargo, tenga en cuenta que los servicios de terceros utilizados en el flujo de trabajo (como la API de OpenAI) pueden requerir un pago por su cuenta.
Flujos de trabajo relacionados recomendados
Cheng Siong Chin
@cschinProf. Cheng Siong CHIN serves as Chair Professor in Intelligent Systems Modelling and Simulation in Newcastle University, Singapore. His academic credentials include an M.Sc. in Advanced Control and Systems Engineering from The University of Manchester and a Ph.D. in Robotics from Nanyang Technological University.
Compartir este flujo de trabajo