Google Tabellen -> Rechnungserstellung -> E-Mail

Experte

Dies ist ein Automatisierungsworkflow mit 18 Nodes. Hauptsächlich werden Set, Airtable, Aggregate, EmailSend, ManualTrigger und andere Nodes verwendet. Automatische Erstellung und E-Mail-Versand von Rechnungen mit Airtable und CustomJS PDF-Generator

Voraussetzungen
  • Airtable API Key

Kategorie

-
Workflow-Vorschau
Visualisierung der Node-Verbindungen, mit Zoom und Pan
Workflow exportieren
Kopieren Sie die folgende JSON-Konfiguration und importieren Sie sie in n8n
{
  "id": "fB4si9amQw4D2TK2",
  "meta": {
    "instanceId": "b503899dfd9ae32bbf8e1f446a1f2c9b3c59f80c79b274c49b1606b7ae9579e1",
    "templateCredsSetupCompleted": true
  },
  "name": "Google Spreadsheet -> Invoice Generation -> Email",
  "tags": [],
  "nodes": [
    {
      "id": "c2e9a234-394c-4c5e-ab59-a5311fa61ed8",
      "name": "Bei Klick auf 'Workflow ausführen'",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -144,
        16
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "1f9f59c4-9927-4a0f-8aaf-64488bdc5a13",
      "name": "Notiz",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -240,
        -576
      ],
      "parameters": {
        "width": 864,
        "height": 448,
        "content": "# Invoice Management With Airtable \nHere you will find an example of how you can create \nand manage your invoices for free, easily, and beautifully:\n[Public Airtable Example](https://airtable.com/apphyDa3uYAq0VOMW/shrSe39NZYrqm4gtE)\n\n![Airtable Screenshot](https://www.beta.customjs.space/images/integration/n8n/InvoiceGeneratorWorkflow.png)"
      },
      "typeVersion": 1
    },
    {
      "id": "895fe916-1db2-4055-a87e-804a6be14383",
      "name": "Fertigstellungsrechnungen abrufen",
      "type": "n8n-nodes-base.airtable",
      "position": [
        144,
        16
      ],
      "parameters": {
        "base": {
          "__rl": true,
          "mode": "list",
          "value": "apphyDa3uYAq0VOMW",
          "cachedResultUrl": "https://airtable.com/apphyDa3uYAq0VOMW",
          "cachedResultName": "Custom JS - Invoicing Template"
        },
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "tblW46vfkwOFQJLMs",
          "cachedResultUrl": "https://airtable.com/apphyDa3uYAq0VOMW/tblW46vfkwOFQJLMs",
          "cachedResultName": "Invoices"
        },
        "options": {},
        "operation": "search",
        "filterByFormula": "{Status} = 'Ready'"
      },
      "credentials": {
        "airtableTokenApi": {
          "id": "y4iDRTq2XVlO3xSa",
          "name": "CustomJS Invoice Example"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "5c20d60e-72b3-45db-8df0-223676a7880e",
      "name": "Kunden abrufen",
      "type": "n8n-nodes-base.airtable",
      "position": [
        1024,
        0
      ],
      "parameters": {
        "id": "={{ $('Get Ready Invoices').item.json['Client ID'][0] }}",
        "base": {
          "__rl": true,
          "mode": "list",
          "value": "apphyDa3uYAq0VOMW",
          "cachedResultUrl": "https://airtable.com/apphyDa3uYAq0VOMW",
          "cachedResultName": "Custom JS - Invoicing Template"
        },
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "tblQdiFVsZ9w3sahJ",
          "cachedResultUrl": "https://airtable.com/apphyDa3uYAq0VOMW/tblQdiFVsZ9w3sahJ",
          "cachedResultName": "Clients"
        },
        "options": {}
      },
      "credentials": {
        "airtableTokenApi": {
          "id": "y4iDRTq2XVlO3xSa",
          "name": "CustomJS Invoice Example"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "1da85e53-eaf2-4928-b1bb-0d2d7eb56056",
      "name": "Notiz1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1184,
        -96
      ],
      "parameters": {
        "color": 2,
        "width": 416,
        "height": 560,
        "content": "## Define Your Company Details\nHere you can customize your own company details."
      },
      "typeVersion": 1
    },
    {
      "id": "047f3d97-760b-4307-a17f-a92d4c8f268d",
      "name": "Rechnungspositionen abrufen",
      "type": "n8n-nodes-base.airtable",
      "position": [
        528,
        128
      ],
      "parameters": {
        "base": {
          "__rl": true,
          "mode": "list",
          "value": "apphyDa3uYAq0VOMW",
          "cachedResultUrl": "https://airtable.com/apphyDa3uYAq0VOMW",
          "cachedResultName": "Custom JS - Invoicing Template"
        },
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "tblASYLVpsnrUoKt5",
          "cachedResultUrl": "https://airtable.com/apphyDa3uYAq0VOMW/tblASYLVpsnrUoKt5",
          "cachedResultName": "Invoice-Items"
        },
        "options": {},
        "operation": "search",
        "filterByFormula": "=FIND(\"{{ $json.ID }}\", ARRAYJOIN({Invoice}))"
      },
      "credentials": {
        "airtableTokenApi": {
          "id": "y4iDRTq2XVlO3xSa",
          "name": "CustomJS Invoice Example"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "3e86f778-d65a-47c6-8fd4-83b8063174e1",
      "name": "Aggregieren",
      "type": "n8n-nodes-base.aggregate",
      "position": [
        848,
        128
      ],
      "parameters": {
        "options": {},
        "aggregate": "aggregateAllItemData",
        "destinationFieldName": "items"
      },
      "typeVersion": 1
    },
    {
      "id": "32205005-9879-4abe-be18-d77126675ccb",
      "name": "Über Positionen iterieren",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        352,
        16
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "9e68a44d-f0d2-407b-88fb-bf97032504b0",
      "name": "Notiz2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2144,
        -96
      ],
      "parameters": {
        "color": 5,
        "width": 416,
        "height": 560,
        "content": "## Mark Invoices as \"Sent\"\nFinally, the invoices are set to “Sent” so that they will never be reloaded again next time."
      },
      "typeVersion": 1
    },
    {
      "id": "6d4c0372-e2b4-45fb-8840-82378e557f4c",
      "name": "Datensatz aktualisieren",
      "type": "n8n-nodes-base.airtable",
      "position": [
        2288,
        0
      ],
      "parameters": {
        "base": {
          "__rl": true,
          "mode": "list",
          "value": "apphyDa3uYAq0VOMW",
          "cachedResultUrl": "https://airtable.com/apphyDa3uYAq0VOMW",
          "cachedResultName": "Custom JS - Invoicing Template"
        },
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "tblW46vfkwOFQJLMs",
          "cachedResultUrl": "https://airtable.com/apphyDa3uYAq0VOMW/tblW46vfkwOFQJLMs",
          "cachedResultName": "Invoices"
        },
        "columns": {
          "value": {
            "id": "={{ $('Get Ready Invoices').item.json.id }}",
            "Status": "Sent"
          },
          "schema": [
            {
              "id": "id",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "id",
              "defaultMatch": true
            },
            {
              "id": "ID",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "ID",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Client ID",
              "type": "array",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Client ID",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Client Name",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "Client Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Description (from Invoice-Items)",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "Description (from Invoice-Items)",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Total",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "Total",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Invoicedate",
              "type": "dateTime",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Invoicedate",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Status",
              "type": "options",
              "display": true,
              "options": [
                {
                  "name": "Delayed",
                  "value": "Delayed"
                },
                {
                  "name": "Sent",
                  "value": "Sent"
                },
                {
                  "name": "Paid",
                  "value": "Paid"
                },
                {
                  "name": "Ready",
                  "value": "Ready"
                }
              ],
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Create Invoice (Airtable API)",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "Create Invoice (Airtable API)",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Create Invoice (Get Parameters)",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "Create Invoice (Get Parameters)",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Invoice-Items",
              "type": "array",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Invoice-Items",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Prices (from Invoice-Items)",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "Prices (from Invoice-Items)",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Default Hourly Rate (from Client ID)",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "Default Hourly Rate (from Client ID)",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Total (from Invoice-Items)",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "Total (from Invoice-Items)",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "ClientAddressField1",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "ClientAddressField1",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "ClientAddressField2",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "ClientAddressField2",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "ClientTax",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "ClientTax",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "id"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update"
      },
      "credentials": {
        "airtableTokenApi": {
          "id": "y4iDRTq2XVlO3xSa",
          "name": "CustomJS Invoice Example"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "6792cf9c-9aa6-444e-9c1c-66cf5784341d",
      "name": "Rechnung generieren",
      "type": "@custom-js/n8n-nodes-pdf-toolkit.invoiceGenerator",
      "position": [
        1728,
        0
      ],
      "parameters": {
        "issuer": {
          "issuerValues": {
            "email": "={{ $json.Email }}",
            "phone": "={{ $json.Phone }}",
            "taxId": "={{ $json.TaxId }}",
            "address": "={{ $json.Address }}",
            "logoUrl": "={{ $json.Logo }}",
            "companyName": "={{ $json.CompanyName }}"
          }
        },
        "billing": {
          "billingValues": {
            "notes": "Please transfer the amount within 14 days.",
            "taxRate": 19,
            "currency": "EUR",
            "invoiceDate": "={{ $('Get Ready Invoices').item.json['Client ID'][0] }}",
            "invoiceNumber": "={{ $('Get Ready Invoices').item.json.ID }}"
          }
        },
        "payment": {
          "paymentValues": {
            "BIC": "={{ $json['Bic/Swift'] }}",
            "bankName": "={{ $json['Bank Name'] }}",
            "accountNumber": "={{ $json['Account Number'] }}"
          }
        },
        "itemsJson": "={{ $('Loop Over Items').item.json.items }}",
        "itemsMode": "json",
        "recipient": {
          "recipientValues": {
            "name": "={{ $('Get Clients').item.json['Comany Name'] }}",
            "taxId": "={{ $('Get Clients').item.json.Tax }}",
            "address": "={{ $('Get Clients').item.json.Street }} {{ $('Get Clients').item.json['Street No.'] }}\n{{ $('Get Clients').item.json['Postal Code'] }} {{ $('Get Clients').item.json.City }}"
          }
        }
      },
      "credentials": {
        "customJsApi": {
          "id": "BFGbk0a71fKWY967",
          "name": "Coding Service"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "b3263d7d-e8ca-4776-8d27-08773ab65549",
      "name": "Notiz3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        96,
        -96
      ],
      "parameters": {
        "color": 5,
        "width": 1040,
        "height": 560,
        "content": "## Collect Invoice Data From Airtable \nHere, all invoices with the status “Ready” are retrieved and enriched with the respective invoice items and client information."
      },
      "typeVersion": 1
    },
    {
      "id": "7904b830-14ce-4ff5-8ca4-e4ab2cd4a644",
      "name": "Firmendetails setzen",
      "type": "n8n-nodes-base.set",
      "position": [
        1344,
        0
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "860bad3a-81d5-4591-9d8d-3f399e88227d",
              "name": "CompanyName",
              "type": "string",
              "value": "MyCompany"
            },
            {
              "id": "4f473e5c-1f8a-4fce-971b-7bcf3a585953",
              "name": "Address",
              "type": "string",
              "value": "My Street 45\n12322 New York"
            },
            {
              "id": "a4de3c7f-2470-48a2-81ee-22d43dbbded5",
              "name": "TaxId",
              "type": "string",
              "value": "US12124234"
            },
            {
              "id": "f6b26bc0-dbe7-433b-96ff-843a137afa99",
              "name": "Email",
              "type": "string",
              "value": "info@mycorp.org"
            },
            {
              "id": "9ee8496d-93c8-4828-aa43-a4168ffd7c39",
              "name": "Phone",
              "type": "string",
              "value": "+331 123412433123"
            },
            {
              "id": "a66fb0d6-a2c2-4d9d-86aa-fe3f7dc97e6e",
              "name": "Logo",
              "type": "string",
              "value": "https://equalengineers.com/wp-content/uploads/2024/04/dummy-logo-5b.png"
            },
            {
              "id": "717ca346-29d6-4d0a-9942-af8db75c23ce",
              "name": "Account Number",
              "type": "string",
              "value": "12345677"
            },
            {
              "id": "db4d6b35-9ddb-4f38-a6a1-2f66a36d58d6",
              "name": "Bic/Swift",
              "type": "string",
              "value": "1234"
            },
            {
              "id": "d08fdf69-c730-4bda-b621-dd8a429ed3ac",
              "name": "Bank Name",
              "type": "string",
              "value": "Bank of XYZ"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "a0d0705b-5d60-4845-bace-2e0cc9a9a8bd",
      "name": "Notiz4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1648,
        -96
      ],
      "parameters": {
        "color": 4,
        "width": 448,
        "height": 560,
        "content": "## Generate Invoice & send email with invoice\n"
      },
      "typeVersion": 1
    },
    {
      "id": "bbdd0964-c9ea-4c4b-b402-7a2e34e79c70",
      "name": "Felder zuordnen",
      "type": "n8n-nodes-base.set",
      "position": [
        688,
        128
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "a95b61df-c10d-43f1-b005-d6d84c6fec47",
              "name": "description",
              "type": "string",
              "value": "={{ $json.Description }}"
            },
            {
              "id": "f290e440-dd5b-46f9-a23b-be419443685b",
              "name": "quantity",
              "type": "string",
              "value": "={{ $json.Hours }}"
            },
            {
              "id": "09688f5f-0461-4c04-988a-2b92da3e595e",
              "name": "unitPrice",
              "type": "string",
              "value": "={{ $json['Custom Hourly Rate'] || $json['Default Hourly Rate'][0]}}"
            },
            {
              "id": "bcdadef7-0f5b-48a3-851b-f7fe5f401fa7",
              "name": "invoiceId",
              "type": "string",
              "value": "={{ $json.ID }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "0a5e9db0-410f-4b5c-99cf-a616107942a5",
      "name": "E-Mail mit Anhang senden",
      "type": "n8n-nodes-base.emailSend",
      "position": [
        1904,
        0
      ],
      "webhookId": "aa09d395-1678-4800-9fe8-875468e53d08",
      "parameters": {
        "text": "Hello,\n\nPlease find attached your invoice for the last month. Thank you very much for your cooperation.\n\nBest regards,\nHenrik",
        "options": {
          "attachments": "data"
        },
        "subject": "Your Invoice for Last Month",
        "toEmail": "info@yourcomp.org",
        "fromEmail": "={{ $json.InvoiceEmail }}",
        "emailFormat": "text"
      },
      "credentials": {
        "smtp": {
          "id": "vvY03KbEvsdTVMXI",
          "name": "SMTP account"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "cc9d1907-9d69-4f72-b3a0-76ce416e75e8",
      "name": "Notiz5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -240,
        -96
      ],
      "parameters": {
        "color": 3,
        "width": 288,
        "height": 560,
        "content": "## Run this workflow manually\n"
      },
      "typeVersion": 1
    },
    {
      "id": "ec0d2733-966b-49ff-ab2f-5a944882e916",
      "name": "Notiz6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        288,
        0
      ],
      "parameters": {
        "width": 720,
        "height": 448,
        "content": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n## Loop Over Items\nSince the number of invoice items does not match the number of invoices, we have to retrieve them in a loop and aggregate them so that they match the number of invoices."
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "4c90ec99-f624-4f7f-a4be-ccd8653cdb04",
  "connections": {
    "3e86f778-d65a-47c6-8fd4-83b8063174e1": {
      "main": [
        [
          {
            "node": "32205005-9879-4abe-be18-d77126675ccb",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "bbdd0964-c9ea-4c4b-b402-7a2e34e79c70": {
      "main": [
        [
          {
            "node": "3e86f778-d65a-47c6-8fd4-83b8063174e1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "5c20d60e-72b3-45db-8df0-223676a7880e": {
      "main": [
        [
          {
            "node": "7904b830-14ce-4ff5-8ca4-e4ab2cd4a644",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "32205005-9879-4abe-be18-d77126675ccb": {
      "main": [
        [
          {
            "node": "5c20d60e-72b3-45db-8df0-223676a7880e",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "047f3d97-760b-4307-a17f-a92d4c8f268d",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "6792cf9c-9aa6-444e-9c1c-66cf5784341d": {
      "main": [
        [
          {
            "node": "0a5e9db0-410f-4b5c-99cf-a616107942a5",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "047f3d97-760b-4307-a17f-a92d4c8f268d": {
      "main": [
        [
          {
            "node": "bbdd0964-c9ea-4c4b-b402-7a2e34e79c70",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "895fe916-1db2-4055-a87e-804a6be14383": {
      "main": [
        [
          {
            "node": "32205005-9879-4abe-be18-d77126675ccb",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "7904b830-14ce-4ff5-8ca4-e4ab2cd4a644": {
      "main": [
        [
          {
            "node": "6792cf9c-9aa6-444e-9c1c-66cf5784341d",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "0a5e9db0-410f-4b5c-99cf-a616107942a5": {
      "main": [
        [
          {
            "node": "6d4c0372-e2b4-45fb-8840-82378e557f4c",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "c2e9a234-394c-4c5e-ab59-a5311fa61ed8": {
      "main": [
        [
          {
            "node": "895fe916-1db2-4055-a87e-804a6be14383",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Häufig gestellte Fragen

Wie verwende ich diesen Workflow?

Kopieren Sie den obigen JSON-Code, erstellen Sie einen neuen Workflow in Ihrer n8n-Instanz und wählen Sie "Aus JSON importieren". Fügen Sie die Konfiguration ein und passen Sie die Anmeldedaten nach Bedarf an.

Für welche Szenarien ist dieser Workflow geeignet?

Experte

Ist es kostenpflichtig?

Dieser Workflow ist völlig kostenlos. Beachten Sie jedoch, dass Drittanbieterdienste (wie OpenAI API), die im Workflow verwendet werden, möglicherweise kostenpflichtig sind.

Workflow-Informationen
Schwierigkeitsgrad
Experte
Anzahl der Nodes18
Kategorie-
Node-Typen8
Schwierigkeitsbeschreibung

Für fortgeschrittene Benutzer, komplexe Workflows mit 16+ Nodes

Externe Links
Auf n8n.io ansehen

Diesen Workflow teilen

Kategorien

Kategorien: 34