Rappels de factures QuickBooks

Intermédiaire

Ceci est unInvoice Processingworkflow d'automatisation du domainecontenant 10 nœuds.Utilise principalement des nœuds comme Code, EmailSend, Quickbooks, ScheduleTrigger. Rappels de paiement automatisés par e-mail pour les factures QuickBooks groupées

Prérequis
  • Aucun prérequis spécial, prêt à l'emploi après importation
Aperçu du workflow
Visualisation des connexions entre les nœuds, avec support du zoom et du déplacement
Exporter le workflow
Copiez la configuration JSON suivante dans n8n pour importer et utiliser ce workflow
{
  "id": "1FISjXuv3wcHwVKc",
  "meta": {
    "instanceId": "e727f992f69a44655d3d4d5a1d4a30ca3ec1573139240bc4d84b17b8f66642c8",
    "templateCredsSetupCompleted": true
  },
  "name": "Quickbook Invoice Reminder",
  "tags": [],
  "nodes": [
    {
      "id": "d2bb6837-055b-4eba-a34d-4e64a8fabf77",
      "name": "Obtenir les factures impayées",
      "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": "Envoyer un e-mail de rappel",
      "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": "Modèle de facture",
      "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": "Obtenir la liste des factures par client",
      "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": "Planificateur",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -592,
        416
      ],
      "parameters": {
        "rule": {
          "interval": [
            {}
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "a6f70c2e-c4f4-416d-9b38-8c741a51dd94",
      "name": "Note adhésive1",
      "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": "Note adhésive",
      "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": "Note adhésive2",
      "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": "Note adhésive3",
      "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": "Note adhésive4",
      "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
          }
        ]
      ]
    }
  }
}
Foire aux questions

Comment utiliser ce workflow ?

Copiez le code de configuration JSON ci-dessus, créez un nouveau workflow dans votre instance n8n et sélectionnez "Importer depuis le JSON", collez la configuration et modifiez les paramètres d'authentification selon vos besoins.

Dans quelles scénarios ce workflow est-il adapté ?

Intermédiaire - Traitement des factures

Est-ce payant ?

Ce workflow est entièrement gratuit et peut être utilisé directement. Veuillez noter que les services tiers utilisés dans le workflow (comme l'API OpenAI) peuvent nécessiter un paiement de votre part.

Informations sur le workflow
Niveau de difficulté
Intermédiaire
Nombre de nœuds10
Catégorie1
Types de nœuds5
Description de la difficulté

Adapté aux utilisateurs expérimentés, avec des workflows de complexité moyenne contenant 6-15 nœuds

Liens externes
Voir sur n8n.io

Partager ce workflow

Catégories

Catégories: 34