Recordatorio de facturas de QuickBooks

Intermedio

Este es unInvoice Processingflujo de automatización del dominio deautomatización que contiene 10 nodos.Utiliza principalmente nodos como Code, EmailSend, Quickbooks, ScheduleTrigger. Recordatorios de pagos automatizados enviando facturas agrupadas de QuickBooks por correo

Requisitos previos
  • No hay requisitos previos especiales, puede importar y usarlo directamente
Vista previa del flujo de trabajo
Visualización de las conexiones entre nodos, con soporte para zoom y panorámica
Exportar flujo de trabajo
Copie la siguiente configuración JSON en n8n para importar y usar este flujo de trabajo
{
  "id": "1FISjXuv3wcHwVKc",
  "meta": {
    "instanceId": "e727f992f69a44655d3d4d5a1d4a30ca3ec1573139240bc4d84b17b8f66642c8",
    "templateCredsSetupCompleted": true
  },
  "name": "Quickbook Invoice Reminder",
  "tags": [],
  "nodes": [
    {
      "id": "d2bb6837-055b-4eba-a34d-4e64a8fabf77",
      "name": "Obtener Facturas Pendientes",
      "type": "n8n-nodes-base.quickbooks",
      "position": [
        -192,
        416
      ],
      "parameters": {
        "filters": {
          "query": ""
        },
        "resource": "invoice",
        "operation": "getAll",
        "returnAll": true
      },
      "credentials": {
        "quickBooksOAuth2Api": {
          "id": "r3A6wRAzyp859vQL",
          "name": "QuickBooks Online account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "7748eaef-b6f5-44fb-99e0-8a1a3e71cd66",
      "name": "Enviar Correo de Recordatorio",
      "type": "n8n-nodes-base.emailSend",
      "position": [
        848,
        416
      ],
      "parameters": {
        "html": "={{ $json.emailBody }}",
        "text": "=",
        "options": {},
        "subject": "=Unpaid Invoice Reminder for : {{$json.customer}}",
        "toEmail": "={{ $json.invoices[0].json.BillEmail.Address }}",
        "fromEmail": "placeholderEmail"
      },
      "credentials": {
        "smtp": {
          "id": "ZSjtbi8UmObTzmbO",
          "name": "SMTP account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "ee0eefd1-3bb9-4d6e-8482-90360990b4c4",
      "name": "Plantilla de Factura",
      "type": "n8n-nodes-base.code",
      "position": [
        432,
        416
      ],
      "parameters": {
        "jsCode": "// This code runs for each item passed to the node.\n// We assume the input is the single item containing the customer and their invoices.\nconst item = $items(\"Get Customer Wise Invoice list\")[0];\n\n// Extract the customer name and the array of invoices\nconst customerName = item.json.customer;\nconst invoices = item.json.invoices;\n\n// --- 1. Process the Invoices ---\n\nlet totalAmountDue = 0;\nlet invoiceRows = ''; // This will hold the HTML for the table rows\n\n// Loop through each invoice to build the table rows and calculate the total amount\nfor (const invoice of invoices) {\n  totalAmountDue += invoice.json.TotalAmt; // Add the invoice amount to the total\n  \n  // Create an HTML table row for the current invoice\n  invoiceRows += `\n    <tr style=\"border-bottom: 1px solid #ddd;\">\n      <td style=\"padding: 12px; text-align: left;\">${invoice.json.DocNumber}</td>\n      <td style=\"padding: 12px; text-align: left;\">${invoice.json.TxnDate}</td>\n      <td style=\"padding: 12px; text-align: left;\">${invoice.json.DueDate}</td>\n      <td style=\"padding: 12px; text-align: right; font-weight: bold;\">$${invoice.json.TotalAmt.toFixed(2)}</td>\n    </tr>\n  `;\n}\n\n// Format the final total to 2 decimal places\nconst formattedTotal = totalAmountDue.toFixed(2);\n\n// --- 2. Build the HTML Email Template ---\n\nconst emailHtml = `\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  <style>\n    body {\n      font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;\n      margin: 0;\n      padding: 0;\n      background-color: #f4f4f4;\n    }\n    .email-container {\n      max-width: 600px;\n      margin: 20px auto;\n      background-color: #ffffff;\n      border: 1px solid #e0e0e0;\n      border-radius: 8px;\n      overflow: hidden;\n    }\n    .email-header {\n      background-color: #007bff;\n      color: #ffffff;\n      padding: 20px;\n      text-align: center;\n    }\n    .email-header h1 {\n      margin: 0;\n      font-size: 24px;\n    }\n    .email-body {\n      padding: 30px;\n      line-height: 1.6;\n      color: #333333;\n    }\n    .email-body p {\n      margin: 0 0 15px 0;\n    }\n    .invoice-table {\n      width: 100%;\n      border-collapse: collapse;\n      margin: 20px 0;\n    }\n    .invoice-table th {\n      background-color: #f2f2f2;\n      padding: 12px;\n      text-align: left;\n      border-bottom: 2px solid #ddd;\n      color: #555;\n    }\n    .total-row td {\n      padding: 15px 12px;\n      font-size: 18px;\n      font-weight: bold;\n      border-top: 2px solid #007bff;\n    }\n    .email-footer {\n      text-align: center;\n      padding: 20px;\n      font-size: 12px;\n      color: #888888;\n      background-color: #f4f4f4;\n    }\n    .cta-button {\n      display: inline-block;\n      background-color: #28a745;\n      color: #ffffff;\n      padding: 12px 25px;\n      margin-top: 20px;\n      border-radius: 5px;\n      text-decoration: none;\n      font-weight: bold;\n    }\n  </style>\n</head>\n<body>\n  <div class=\"email-container\">\n    <div class=\"email-header\">\n      <h1>Payment Reminder</h1>\n    </div>\n    <div class=\"email-body\">\n      <p>Dear ${customerName},</p>\n      <p>We're writing to kindly remind you about the outstanding balance on your account. We have listed the unpaid invoices below for your convenience.</p>\n      \n      <table class=\"invoice-table\">\n        <thead>\n          <tr>\n            <th style=\"width: 25%;\">Invoice #</th>\n            <th style=\"width: 25%;\">Date</th>\n            <th style=\"width: 25%;\">Due Date</th>\n            <th style=\"width: 25%; text-align: right;\">Amount</th>\n          </tr>\n        </thead>\n        <tbody>\n          ${invoiceRows}\n        </tbody>\n      </table>\n      \n      <table style=\"width: 100%; text-align: right;\">\n        <tbody>\n          <tr class=\"total-row\">\n            <td>Total Amount Due: $${formattedTotal}</td>\n          </tr>\n        </tbody>\n      </table>\n      \n      <p>If you have already made the payment, please disregard this email. If you have any questions about your invoices, feel free to contact us at any time.</p>\n      <p>Thank you for your business!</p>\n      <a href=\"https://your-payment-portal-link.com\" class=\"cta-button\">Pay Now</a>\n    </div>\n    <div class=\"email-footer\">\n      <p>Your Company Name | 123 Business Rd, Business City, 12345</p>\n    </div>\n  </div>\n</body>\n</html>\n`;\n\n// --- 3. Return the HTML for the next node ---\n// The generated HTML is placed in the 'emailBody' property\n// This can be easily used in the 'HTML' field of a 'Send Email' node with an expression like: {{$json.emailBody}}\nitem.json.emailBody = emailHtml;\n\nreturn item;"
      },
      "typeVersion": 2
    },
    {
      "id": "f7ffa78f-3f3a-413a-a2b9-89ab743dfd65",
      "name": "Obtener Lista de Facturas por Cliente",
      "type": "n8n-nodes-base.code",
      "position": [
        176,
        416
      ],
      "parameters": {
        "jsCode": "const getInvoices = $items(\"Get Unpaid Invoices\");\n\nconst invoices = []\nconst customerId = getInvoices[0].json.CustomerRef.value;\nconst customerName = getInvoices[0].json.CustomerRef.name;\n\nfor (const item of getInvoices) {\n  // Access the invoices array from the JSON property of the current item\n  \n    if(customerId == item.json.CustomerRef.value && item.json.Balance > 0) {\n      invoices.push(item)\n    }\n  \n}\n\n\nreturn {\n      \"customer\": customerName,\n      \"customerId\": customerId,\n      \"invoices\": invoices\n    };"
      },
      "typeVersion": 2
    },
    {
      "id": "3cc14603-de0a-42e1-a495-f4790ff14d4d",
      "name": "Programador",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -592,
        416
      ],
      "parameters": {
        "rule": {
          "interval": [
            {}
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "a6f70c2e-c4f4-416d-9b38-8c741a51dd94",
      "name": "Nota Adhesiva1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1920,
        -352
      ],
      "parameters": {
        "color": 6,
        "width": 1104,
        "height": 1648,
        "content": "# Automated QuickBooks Payment Reminders with Dynamic Invoice Tables\n\nThis workflow provides a powerful solution for businesses using QuickBooks Online to automate their payment reminder process. It solves the time-consuming and manual task of chasing late payments by creating a fully automated system that ensures every customer with an outstanding balance receives a timely, professional, and consolidated reminder email.\n\nThe workflow periodically fetches all unpaid invoices from your QuickBooks account. Its core strength lies in its ability to group multiple outstanding invoices for a single customer into one email, presenting them in a clean, easy-to-read table. This improves clarity for your customers, reduces email clutter, and significantly increases the likelihood of prompt payment.\n\nThis template was crafted with care by the team at **Prompt-Wizards** to help you streamline your finances and build stronger customer relationships through smart automation.\n\n## How the Workflow Operates\n\n1.  **Scheduler:** The workflow initiates on a customizable schedule (e.g., every day at 9 AM).\n2.  **Get Unpaid Invoices:** It fetches all invoices from your QuickBooks account that have an outstanding balance greater than zero and were created within a specified date range.\n3.  **Get Customer Wise Invoice list:** This Code node intelligently processes the list of invoices and groups them by customer name, preparing the data for email generation.\n4.  **Invoice Template:** This Code node dynamically generates a beautiful, responsive HTML email for each customer, complete with a personalized greeting, an invoice table, and the total amount due.\n5.  **Send Reminder Email:** The final node sends the uniquely crafted email to the customer's billing address on file.\n\n## Prerequisites\n\nBefore you begin, please ensure you have the following:\n*   An active n8n instance.\n*   A QuickBooks Online account with API access.\n*   An email service (e.g., SMTP, Gmail, Outlook) connected to n8n as credentials.\n\n## Step-by-Step Setup Guide\n\nFollow these instructions carefully to configure the workflow for your business in under 5 minutes.\n\n### 1. Connect Your QuickBooks Account\nYou must authenticate your QuickBooks account to allow n8n to fetch invoice data.\n\n*   Select the **`Get Unpaid Invoices`** node.\n*   In the **Credentials** section on the right, either select your existing QuickBooks account from the dropdown or click **Create New** to connect your account.\n*   *(Optional)*: In the **Options** section of this node, you can adjust the `TxnDate` filter. It is pre-set to look at invoices from the last 90 days. You can change this date range to suit your needs.\n\n### 2. Personalize the Email Template\nPersonalize the email to match your brand and include your payment information.\n\n1.  Open the **`Invoice Template`** node.\n2.  Inside the code editor, find and replace these two placeholder values:\n    *   **Your Payment Link:** On **line 115**, find `href=\"https://your-payment-portal-link.com\"` and replace the placeholder URL with a link to your actual payment portal or website.\n    *   **Your Company Details:** On **line 120**, find `<p>Your Company Name | ...` and replace the placeholder text with your real company name and address in the email footer.\n\n### 3. Configure Your Email Account\nYou must connect the email account you want to send reminders from.\n\n*   Select the **`Send Reminder Email`** node.\n*   In the **Credentials** section, select your email account (e.g., Gmail, Outlook) or create a new connection.\n*   The `To Address`, `Subject`, and `HTML` fields are already configured with expressions to work automatically. **No changes are needed here!**\n\n### 4. Activate the Workflow\n1.  Open the **`Scheduler`** node to set the schedule for how often you want the workflow to run.\n2.  **Save** the workflow using the button at the top.\n3.  Click the **Active** toggle at the top right of the screen.\n\nYour automated payment reminder system is now live!!!\n\nFor questions or to explore more custom solutions, visit us at [Elegant Biztech](https://www.elegantbiztech.com/) or contact us at [sales@elegantbiztech.com](mailto:sales@elegantbiztech.com)."
      },
      "typeVersion": 1
    },
    {
      "id": "b1d5e894-1873-49da-9249-a837264b133a",
      "name": "Nota Adhesiva",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -624,
        256
      ],
      "parameters": {
        "color": 4,
        "width": 288,
        "height": 304,
        "content": "### 1. Set Your Schedule\n\nConfigure how often you want to check for overdue invoices. We recommend setting this to run **once a day** or **once a week**."
      },
      "typeVersion": 1
    },
    {
      "id": "8345f2e0-1628-4e87-83c2-3aa555fa7887",
      "name": "Nota Adhesiva2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -240,
        176
      ],
      "parameters": {
        "color": 4,
        "width": 304,
        "height": 400,
        "content": "### 2. Connect Your QuickBooks Account\n\n1.  **Credentials**: Select or create your QuickBooks account.\n2.  **Filters (Optional)**: You can adjust the `TxnDate` filter in the **Options** to change the date range for the invoices you want to check."
      },
      "typeVersion": 1
    },
    {
      "id": "6a8ffc03-290d-4940-8f5c-cd792af6d5f7",
      "name": "Nota Adhesiva3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        384,
        192
      ],
      "parameters": {
        "color": 4,
        "width": 304,
        "height": 368,
        "content": "### 3. Personalize Your Email Template\n\nThis code creates the email. You only need to edit two things inside the code editor:\n- **Line 115**: Update the `href` with your company's payment link.\n- **Line 120**: Change `Your Company Name` and address in the email footer."
      },
      "typeVersion": 1
    },
    {
      "id": "b16553f5-200c-40ee-b106-4c474273b45c",
      "name": "Nota Adhesiva4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        800,
        192
      ],
      "parameters": {
        "color": 4,
        "width": 304,
        "height": 368,
        "content": "### 4. Configure & Activate\n\n1.  **Credentials**: Select the email account you want to send from.\n2.  **To Address & HTML**: These are set automatically. No changes are needed.\n3.  **Activate Workflow**: After configuring, don't forget to **Save** and then toggle the workflow to **Active**."
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "f9793645-ce80-4bfb-9f7b-3e2dbe6a59ec",
  "connections": {
    "3cc14603-de0a-42e1-a495-f4790ff14d4d": {
      "main": [
        [
          {
            "node": "d2bb6837-055b-4eba-a34d-4e64a8fabf77",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "ee0eefd1-3bb9-4d6e-8482-90360990b4c4": {
      "main": [
        [
          {
            "node": "7748eaef-b6f5-44fb-99e0-8a1a3e71cd66",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "d2bb6837-055b-4eba-a34d-4e64a8fabf77": {
      "main": [
        [
          {
            "node": "f7ffa78f-3f3a-413a-a2b9-89ab743dfd65",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "f7ffa78f-3f3a-413a-a2b9-89ab743dfd65": {
      "main": [
        [
          {
            "node": "ee0eefd1-3bb9-4d6e-8482-90360990b4c4",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Preguntas frecuentes

¿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 - Procesamiento de facturas

¿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

Información del flujo de trabajo
Nivel de dificultad
Intermedio
Número de nodos10
Categoría1
Tipos de nodos5
Descripción de la dificultad

Adecuado para usuarios con experiencia intermedia, flujos de trabajo de complejidad media con 6-15 nodos

Enlaces externos
Ver en n8n.io

Compartir este flujo de trabajo

Categorías

Categorías: 34