Erstellung von Rechnungen für Kunden mit Jotform und QuickBooks

Experte

Dies ist ein Automatisierungsworkflow mit 22 Nodes. Hauptsächlich werden If, Code, Webhook, Quickbooks und andere Nodes verwendet. Rechnungen für Kunden mit Jotform und QuickBooks erstellen

Voraussetzungen
  • HTTP Webhook-Endpunkt (wird von n8n automatisch generiert)

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": "9JbuwG2cZQVIvUHn",
  "meta": {
    "instanceId": "3549451ca835035557d5dc1c3d9e6ba924e7314534a74c901f66b91f9ef6023e",
    "templateCredsSetupCompleted": true
  },
  "name": "Generate Invoices for Customers with Jotform and QuickBooks",
  "tags": [],
  "nodes": [
    {
      "id": "4f6366d5-b755-4bec-83eb-482efdba74a3",
      "name": "Formularübermittlung empfangen",
      "type": "n8n-nodes-base.webhook",
      "position": [
        -464,
        0
      ],
      "webhookId": "d65e73cf-179b-4021-82d0-4ebeccb4cd10",
      "parameters": {
        "path": "requests",
        "options": {},
        "httpMethod": "POST"
      },
      "typeVersion": 2.1
    },
    {
      "id": "6d770cb0-0b36-484c-9c58-46afe7a4bb8a",
      "name": "If",
      "type": "n8n-nodes-base.if",
      "position": [
        320,
        0
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "bfa24559-7702-4ebf-909d-c5c2a60ad817",
              "operator": {
                "type": "object",
                "operation": "exists",
                "singleValue": true
              },
              "leftValue": "={{ $json }}",
              "rightValue": 0
            },
            {
              "id": "b4301cfe-a22a-490f-a72b-50d266bc1c5e",
              "operator": {
                "type": "string",
                "operation": "exists",
                "singleValue": true
              },
              "leftValue": "={{ $json.Id }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "4391d022-ce12-41ab-ab4b-c35143f6ac38",
      "name": "Produkt abrufen",
      "type": "n8n-nodes-base.quickbooks",
      "position": [
        1248,
        0
      ],
      "parameters": {
        "limit": 1,
        "filters": {
          "query": "=WHERE name = '{{ $json.item.name }}'"
        },
        "resource": "item",
        "operation": "getAll"
      },
      "credentials": {
        "quickBooksOAuth2Api": {
          "id": "E1S8XZZk9iMCPDSN",
          "name": "QuickBooks Online account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "b13d423b-9fe9-44d2-ac74-93b193a5de1b",
      "name": "Rechnung erstellen",
      "type": "n8n-nodes-base.quickbooks",
      "position": [
        1856,
        0
      ],
      "parameters": {
        "Line": [
          {
            "Amount": 1,
            "itemId": "={{ $json.item.id }}",
            "DetailType": "SalesItemLineDetail",
            "Description": "Jotform submission"
          }
        ],
        "resource": "invoice",
        "operation": "create",
        "CustomerRef": "={{ $json.customer.id }}",
        "additionalFields": {}
      },
      "credentials": {
        "quickBooksOAuth2Api": {
          "id": "E1S8XZZk9iMCPDSN",
          "name": "QuickBooks Online account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "08437c34-4454-4690-a752-d011945caf5a",
      "name": "Rechnung senden",
      "type": "n8n-nodes-base.quickbooks",
      "position": [
        2160,
        0
      ],
      "parameters": {
        "email": "={{ $('Add item id').item.json.customer.email }}",
        "resource": "invoice",
        "invoiceId": "={{ $json.Id }}",
        "operation": "send"
      },
      "credentials": {
        "quickBooksOAuth2Api": {
          "id": "E1S8XZZk9iMCPDSN",
          "name": "QuickBooks Online account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "b0b10282-e6a3-459b-ae3d-23a4aeec885b",
      "name": "Prüfen ob Kunde existiert",
      "type": "n8n-nodes-base.quickbooks",
      "position": [
        112,
        0
      ],
      "parameters": {
        "limit": 1,
        "filters": {
          "query": "=Where PrimaryEmailAddr = '{{ $json.customer.email }}'"
        },
        "operation": "getAll"
      },
      "credentials": {
        "quickBooksOAuth2Api": {
          "id": "E1S8XZZk9iMCPDSN",
          "name": "QuickBooks Online account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "db4fa3c0-89fd-48b6-b2f4-c5e1e188e622",
      "name": "Notiz",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -544,
        -112
      ],
      "parameters": {
        "color": 7,
        "width": 256,
        "height": 320,
        "content": "## Receive Submission\nReceives the product/service form submission from Jotform"
      },
      "typeVersion": 1
    },
    {
      "id": "6b756b11-0a93-4df7-b8fb-82c65057c6c6",
      "name": "Notiz1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        64,
        -112
      ],
      "parameters": {
        "color": 7,
        "width": 400,
        "height": 320,
        "content": "## Check If Customer exists \nChecks if the customer exists in QBO or not"
      },
      "typeVersion": 1
    },
    {
      "id": "c7e5987a-8bf2-4651-becb-70bf5b039b14",
      "name": "Notiz2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        512,
        -336
      ],
      "parameters": {
        "color": 7,
        "width": 304,
        "height": 336,
        "content": "## Customer Exists\nNow since the customer exists we will update the customer details like updating the billing details with the new one"
      },
      "typeVersion": 1
    },
    {
      "id": "8f1d632d-cf26-4bb2-80e9-c019cde28bdb",
      "name": "Kunde anlegen",
      "type": "n8n-nodes-base.quickbooks",
      "position": [
        608,
        176
      ],
      "parameters": {
        "operation": "create",
        "displayName": "=",
        "additionalFields": {
          "BillAddr": {
            "details": {
              "City": "={{ $('Format data').item.json.address.city }}",
              "Line1": "={{ $('Format data').item.json.address.line1 }}",
              "PostalCode": "={{ $('Format data').item.json.address.postalZipCode }}"
            }
          },
          "GivenName": "={{ $('Format data').item.json.customer.name }}",
          "PrimaryPhone": "={{ $('Format data').item.json.customer.phone }}",
          "PrimaryEmailAddr": "={{ $('Format data').item.json.customer.email }}"
        }
      },
      "credentials": {
        "quickBooksOAuth2Api": {
          "id": "E1S8XZZk9iMCPDSN",
          "name": "QuickBooks Online account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "d3f307c0-6e27-4212-bd2c-ab585a6ac095",
      "name": "Kunde aktualisieren",
      "type": "n8n-nodes-base.quickbooks",
      "position": [
        608,
        -192
      ],
      "parameters": {
        "operation": "update",
        "customerId": "={{ $json.Id }}",
        "updateFields": {
          "BillAddr": {
            "details": {
              "City": "={{ $('Format data').item.json.address.city }}",
              "Line1": "={{ $('Format data').item.json.address.line1 }}",
              "PostalCode": "={{ $('Format data').item.json.address.postalZipCode }}"
            }
          },
          "GivenName": "={{ $('Format data').item.json.customer.name }}",
          "PrimaryPhone": "={{ $('Format data').item.json.customer.phone }}"
        }
      },
      "credentials": {
        "quickBooksOAuth2Api": {
          "id": "E1S8XZZk9iMCPDSN",
          "name": "QuickBooks Online account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "74f2a7f2-35bf-43e0-979b-6032cca27c40",
      "name": "Notiz3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        512,
        48
      ],
      "parameters": {
        "color": 7,
        "width": 304,
        "height": 320,
        "content": "## Customer Doesn't Exist\nNow since the customer doesn't exist we will create new customer"
      },
      "typeVersion": 1
    },
    {
      "id": "b8ea9c7a-f469-4a6d-99c5-3b4b952368b6",
      "name": "Notiz4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1168,
        -112
      ],
      "parameters": {
        "color": 7,
        "width": 256,
        "height": 320,
        "content": "## Get The Item\nGets the selected product/service from QBO"
      },
      "typeVersion": 1
    },
    {
      "id": "b1744ed2-7b32-4858-ad4d-1156594d54cd",
      "name": "Notiz5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1776,
        -112
      ],
      "parameters": {
        "color": 7,
        "width": 256,
        "height": 320,
        "content": "## Create The Invoice\nCreates a new invoice for that customer"
      },
      "typeVersion": 1
    },
    {
      "id": "0cb2eea2-6239-47fb-9ec3-41ffd9bf3c41",
      "name": "Notiz6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2080,
        -112
      ],
      "parameters": {
        "color": 7,
        "width": 256,
        "height": 320,
        "content": "## Send The Invoice\nSends the newly created invoice for that customer(via email)"
      },
      "typeVersion": 1
    },
    {
      "id": "b20793cf-e29a-4fe4-a7b9-72c8d8311820",
      "name": "Notiz7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1328,
        -416
      ],
      "parameters": {
        "width": 736,
        "height": 880,
        "content": "## Generate Invoices for Customers with Jotform and QuickBooks \nThis workflow automates the entire process of receiving a product/service order, checking or creating a customer in **QuickBooks Online (QBO)**, generating an invoice, and emailing it — all triggered by a form submission (via **Jotform**).\n\n## How It Works\n### 1- Receive Submission\n* Triggered when a user submits a form.\n* Collects data like customer details, selected product/service, etc.\n\n### 2- Check If Customer Exists\n* Searches QBO to determine if the customer already exists.\n* ✅ **If Customer Exists:** **Update** customer details (e.g., billing address).\n* ❌ **If Customer Doesn’t Exist:** **Create** a new customer in QBO.\n\n### 3- Get The Item\n* Retrieves the selected product or service from QBO.\n\n### 4- Create The Invoice\n* Generates a new invoice for the customer using the item selected.\n\n### 5. Send The Invoice\n* Automatically sends the invoice via email to the customer.\n\n## Who Can Benefit from This Workflow?\n* **Freelancers**\n* **Service Providers**\n* **Consultants & Coaches**\n* **Small Businesses**\n* **E-commerce or Custom Product Sellers**\n\n## Requirements\n- Jotform webhook setup, more info [here](https://www.jotform.com/help/245-how-to-setup-a-webhook-with-jotform/)\n- QuickBooks Online credentials, more info [here](https://developer.intuit.com/app/developer/qbo/docs/get-started/get-client-id-and-client-secret)"
      },
      "typeVersion": 1
    },
    {
      "id": "c35659b4-98f2-4b24-882b-7820329962f3",
      "name": "Notiz8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -240,
        -112
      ],
      "parameters": {
        "color": 7,
        "width": 256,
        "height": 320,
        "content": "## Format Data\nFormats the data thus making it easier to be used in other nodes"
      },
      "typeVersion": 1
    },
    {
      "id": "777c7f53-c2c7-486f-8b39-3a545dc15838",
      "name": "Daten formatieren",
      "type": "n8n-nodes-base.code",
      "position": [
        -160,
        0
      ],
      "parameters": {
        "jsCode": "function extractAddressData(text) {\n  const regex = /Street Address:\\s*([^<]+)<br>Street Address Line 2:\\s*([^<]+)<br>City:\\s*([^<]+)<br>State \\/ Province:\\s*([^<]+)<br>Postal \\/ Zip Code:\\s*([^<]+)<br>Country:\\s*([^<]+)<br>/;\n  const matches = text.match(regex);\n  \n  if (matches) {\n    return {\n      line1: matches[1].trim(),\n      line2: matches[2].trim(),\n      city: matches[3].trim(),\n      stateProvince: matches[4].trim(),\n      postalZipCode: matches[5].trim(),\n      country: matches[6].trim()\n    };\n  }\n  \n  return {\n    line1: null,\n    line2: null,\n    city: null,\n    stateProvince: null,\n    postalZipCode: null,\n    country: null\n  }\n}\n\nreturn {\n  address: extractAddressData($input.first().json.body.billingAddress),\n  customer: {\n    name: $input.first().json.body.name,\n    email: $input.first().json.body.email,\n    phone: $input.first().json.body.phone\n  },\n  item: {\n    name: $input.first().json.body.itemName\n  }\n}"
      },
      "typeVersion": 2
    },
    {
      "id": "b7e7db5f-40e5-4d88-a7fe-508dbe49619f",
      "name": "Notiz9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        864,
        -112
      ],
      "parameters": {
        "color": 7,
        "width": 256,
        "height": 320,
        "content": "## Add Customer Id\nAdds customer id to the data"
      },
      "typeVersion": 1
    },
    {
      "id": "ab0a3406-5106-4c82-b4b9-3972a7ac630d",
      "name": "Kunden-ID hinzufügen",
      "type": "n8n-nodes-base.code",
      "position": [
        944,
        0
      ],
      "parameters": {
        "jsCode": "return {\n  ...$('Format data').first().json,\n  customer: {\n    ...$('Format data').first().json.customer,\n    id: $input.first().json.Id\n  }\n}"
      },
      "typeVersion": 2
    },
    {
      "id": "7167d106-716c-4d5c-bfdc-3d7905523644",
      "name": "Notiz10",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1472,
        -112
      ],
      "parameters": {
        "color": 7,
        "width": 256,
        "height": 320,
        "content": "## Add Item Id\nAdds item (service/product) id to the data"
      },
      "typeVersion": 1
    },
    {
      "id": "a7aff86c-425b-424c-ac2e-135176e43a40",
      "name": "Artikel-ID hinzufügen",
      "type": "n8n-nodes-base.code",
      "position": [
        1552,
        0
      ],
      "parameters": {
        "jsCode": "return {\n  ...$('Add customer id').first().json,\n  item: {\n    ...$('Add customer id').first().json.item,\n    id: $input.first().json.Id\n  }\n}"
      },
      "typeVersion": 2
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "471906c5-a3fb-4975-8a45-800eab74c62f",
  "connections": {
    "6d770cb0-0b36-484c-9c58-46afe7a4bb8a": {
      "main": [
        [
          {
            "node": "d3f307c0-6e27-4212-bd2c-ab585a6ac095",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "8f1d632d-cf26-4bb2-80e9-c019cde28bdb",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "a7aff86c-425b-424c-ac2e-135176e43a40": {
      "main": [
        [
          {
            "node": "b13d423b-9fe9-44d2-ac74-93b193a5de1b",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "777c7f53-c2c7-486f-8b39-3a545dc15838": {
      "main": [
        [
          {
            "node": "b0b10282-e6a3-459b-ae3d-23a4aeec885b",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "ab0a3406-5106-4c82-b4b9-3972a7ac630d": {
      "main": [
        [
          {
            "node": "4391d022-ce12-41ab-ab4b-c35143f6ac38",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "4391d022-ce12-41ab-ab4b-c35143f6ac38": {
      "main": [
        [
          {
            "node": "a7aff86c-425b-424c-ac2e-135176e43a40",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "b13d423b-9fe9-44d2-ac74-93b193a5de1b": {
      "main": [
        [
          {
            "node": "08437c34-4454-4690-a752-d011945caf5a",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "8f1d632d-cf26-4bb2-80e9-c019cde28bdb": {
      "main": [
        [
          {
            "node": "ab0a3406-5106-4c82-b4b9-3972a7ac630d",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "d3f307c0-6e27-4212-bd2c-ab585a6ac095": {
      "main": [
        [
          {
            "node": "ab0a3406-5106-4c82-b4b9-3972a7ac630d",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "4f6366d5-b755-4bec-83eb-482efdba74a3": {
      "main": [
        [
          {
            "node": "777c7f53-c2c7-486f-8b39-3a545dc15838",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "b0b10282-e6a3-459b-ae3d-23a4aeec885b": {
      "main": [
        [
          {
            "node": "6d770cb0-0b36-484c-9c58-46afe7a4bb8a",
            "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 Nodes22
Kategorie-
Node-Typen5
Schwierigkeitsbeschreibung

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

Externe Links
Auf n8n.io ansehen

Diesen Workflow teilen

Kategorien

Kategorien: 34