This workflow corresponds to n8n.io template #8416 — we link there as the canonical source.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"meta": {
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "2511ddaa-ce17-437c-be1f-dc0007c67a5f",
"name": "KlickTipp Trigger",
"type": "n8n-nodes-klicktipp.klicktippTrigger",
"notes": "This webhook waits for data from submissions on the webinar registration landing page.",
"position": [
-432,
0
],
"parameters": {},
"credentials": {},
"notesInFlow": true,
"typeVersion": 1
},
{
"id": "2400e758-ec4a-4140-81c2-47a1c308d90e",
"name": "Switch",
"type": "n8n-nodes-base.switch",
"notes": "This node filters the submission based on the webinar choice of the registration process.",
"position": [
-176,
0
],
"parameters": {
"rules": {
"values": [
{
"outputKey": "E-Mail Zustellung f\u00fcr Anf\u00e4nger",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "7acd3846-c024-4064-a48d-f57b0bb3d2fe",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.CustomField219989 }}",
"rightValue": "E-Mail Zustellung f\u00fcr Anf\u00e4nger"
}
]
},
"renameOutput": true
},
{
"outputKey": "E-Mail Zustellung f\u00fcr Experten",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "09123957-6994-48a4-8e7f-2ecd4e4ecc3b",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.CustomField219989 }}",
"rightValue": "E-Mail Zustellung f\u00fcr Experten"
}
]
},
"renameOutput": true
}
]
},
"options": {}
},
"notesInFlow": true,
"typeVersion": 3.2
},
{
"id": "e7c6f14d-7672-47fb-bac9-b317f3b4ed44",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-608,
-208
],
"parameters": {
"width": 360,
"height": 520,
"content": "## Data reception via Webhook - Landingpage submissions"
},
"typeVersion": 1
},
{
"id": "f78314d4-23ef-4932-acec-6bec270f9e23",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-240,
-208
],
"parameters": {
"color": 3,
"width": 320,
"height": 520,
"content": "## Dynamic routing based on submission"
},
"typeVersion": 1
},
{
"id": "bd0e38ac-6a8a-4c07-a798-48427ab0b8fe",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
80,
-208
],
"parameters": {
"color": 4,
"width": 320,
"height": 520,
"content": "## Regsiter for webinar"
},
"typeVersion": 1
},
{
"id": "d72a1423-a67a-453f-a8d2-18d4da6a4f33",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
400,
-208
],
"parameters": {
"color": 6,
"width": 320,
"height": 520,
"content": "## Writing webinar data into contact record"
},
"typeVersion": 1
},
{
"id": "366b388e-8388-4b44-9bcb-ec5fc5519094",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-544,
352
],
"parameters": {
"color": 7,
"width": 1080,
"height": 1496,
"content": "Community Node Disclaimer: This workflow uses KlickTipp community nodes.\n\n### Introduction\nThis workflow automates Zoom webinar registration and transfers the data into KlickTipp via n8n. Users register through a KlickTipp landing page and the system captures relevant data, enriches contact profiles in KlickTipp, and segments them with appropriate tags. Ideal for running scalable, topic-specific webinar funnels.\n\n### Benefits\n- **End-to-end automation**: No manual data transfers between Zoom and KlickTipp\u2014participants are instantly registered and segmented.\n- **Dynamic segmentation**: Automatically applies tags based on webinar topic or user selections, enabling personalized follow-up.\n- **Scalable setup**: Easily supports different webinar sessions and dynamic branching based on registrant input.\n\n### Key Features\n- **KlickTipp Trigger**: Starts the workflow when a contact registers through a KlickTipp landing page and receives a trigger tag (via Outbound webhook).\n- **Zoom API Integration**:\n - Registers for webinar and retrieves details like start time and join link using OAuth-authenticated API nodes.\n - Supports multiple Zoom sessions dynamically based on registrant input.\n- **KlickTipp Contact Sync**:\n - Adds or updates contacts in KlickTipp.\n - Populates custom fields with relevant Zoom data (join url, webinar start, webinar name)\n - Applies segmentation tags such as `webinar Participant`, or topic-specific interest tags.\n- **Router Logic**:\n - Directs workflow paths based on webinar selection.\n - Easily extendable to accommodate new topics or sessions.\n\n### Setup Instructions\n**KlickTipp Preparation**\n - Create the following custom fields in your KlickTipp account:\n - `Zoom_Join_URL` (URL)\n - `Zoom_webinar_Start` (Date & Time)\n - `Zoom_webinar_Auswahl` (Text)\n - Build a KlickTipp landing page with a dropdown for webinar selection.\n - Configure an Outbound webhook in KlickTipp.\n\n**Credential Configuration**\n - In n8n, authenticate KlickTipp and Zoom accounts:\n - Use OAuth for Zoom with appropriate scopes (`webinar:write:registrant`).\n - Add n8n OAuth Redirect URL in your Zoom Developer App.\n\n**Field Mapping and Workflow Alignment**\n - Open the Zoom nodes for the webinar registration and insert your according webinar IDs\n - Map incoming Zoom registration data to the custom KlickTipp fields.\n - Ensure tag IDs and opt-in logic match your campaign structure.\n\n### Testing and Deployment\n1. Submit a registration via the KlickTipp form.\n2. Confirm that:\n - The webhook triggers successfully.\n - Zoom data is fetched and passed into KlickTipp.\n - The contact is updated with all required data and tags.\n\n> \u26a0\ufe0f *Note*: Zoom rate limits and token expiration may affect repeated tests\u2014refresh OAuth tokens or stagger test intervals as needed.\n\n### Campaign Expansion Ideas\n- Add multiple webinars to the form dropdown and extend routing accordingly.\n- Segment contacts by webinar type (e.g., `Beginner`, `Advanced`, `Topic_X`).\n- Trigger customized follow-up emails in KlickTipp based on tags or attendance status.\n- Use A/B tests on reminder timing or messaging.\n\n### Customization\n- Modify contact tags dynamically based on form answers or Zoom webinar ID.\n- Modify the Zoom Nodes for webinar registrations\n- Extend Router logic to accommodate additional session logic or integrations.\n- Incorporate fallback logic for contacts missing Zoom data (e.g., backup emails or SMS)."
},
"typeVersion": 1
},
{
"id": "b2fe157e-61a5-4379-ad66-6edbc648ac10",
"name": "Add \"Anf\u00e4nger\" webinar data to contact",
"type": "CUSTOM.klicktipp",
"notes": "This node subscribes the contact in order to add webinar data.",
"position": [
512,
-96
],
"parameters": {
"email": "={{ $('KlickTipp Trigger').item.json.email }}",
"tagId": "12687810",
"fields": {
"dataFields": [
{
"fieldId": "field219991",
"fieldValue": "={{ $json.join_url }}"
},
{
"fieldId": "field219990",
"fieldValue": "={{\n // Convert the start_time field into a JavaScript Date\n // Get the time in milliseconds since Unix epoch\n // Divide by 1000 to convert to seconds\n new Date($json.start_time).getTime() / 1000\n}}"
}
]
},
"listId": "358895",
"resource": "subscriber",
"operation": "subscribe"
},
"credentials": {
"klickTippApi": {
"name": "<your credential>"
}
},
"notesInFlow": true,
"typeVersion": 2
},
{
"id": "1c2bfeca-0124-4355-8111-2cd8f87da37c",
"name": "Add \"Experten\" webinar data to contact",
"type": "CUSTOM.klicktipp",
"notes": "This node subscribes the contact in order to add webinar data.",
"position": [
512,
112
],
"parameters": {
"email": "={{ $('KlickTipp Trigger').item.json.email }}",
"tagId": "12932286",
"fields": {
"dataFields": [
{
"fieldId": "field219991",
"fieldValue": "={{ $json.join_url }}"
},
{
"fieldId": "field219990",
"fieldValue": "={{ \n// Reduce the occurrences array to find the next occurrence\nnew Date(\n $json.occurrences.reduce((closest, current) => {\n const currentDate = new Date(current.start_time);\n // Check if current occurrence is closer and in the future\n return (!closest || currentDate < new Date(closest.start_time) && currentDate > new Date()) ? current : closest;\n }, null).start_time // Get the start_time of the closest occurrence\n ).getTime() / 1000 // Convert to Unix timestamp in seconds\n}}"
}
]
},
"listId": "358895",
"resource": "subscriber",
"operation": "subscribe"
},
"credentials": {
"klickTippApi": {
"name": "<your credential>"
}
},
"notesInFlow": true,
"typeVersion": 2
},
{
"id": "29d44377-7055-4a24-ba2f-dbdbc4c2a748",
"name": "Register for webinar A",
"type": "n8n-nodes-base.httpRequest",
"notes": "This node registers for the \"E-Mail Zustellung f\u00fcr Anf\u00e4nger\" webinar. Replace the ID in the URL with your according webinar ID.",
"position": [
192,
-96
],
"parameters": {
"url": "https://api.zoom.us/v2/webinars/89062978982/registrants",
"method": "POST",
"options": {},
"jsonBody": "={\n \"first_name\": \"{{ $('KlickTipp Trigger').item.json.CustomFieldFirstName }}\",\n \"last_name\": \"{{ $('KlickTipp Trigger').item.json.CustomFieldLastName }}\",\n \"email\": \"{{ $('KlickTipp Trigger').item.json.email }}\"\n }",
"sendBody": true,
"specifyBody": "json",
"authentication": "predefinedCredentialType",
"nodeCredentialType": "zoomOAuth2Api"
},
"credentials": {
"zoomOAuth2Api": {
"name": "<your credential>"
}
},
"notesInFlow": true,
"typeVersion": 4.2
},
{
"id": "aa899187-e84e-4276-9827-3d2edab4a8f2",
"name": "Register for webinar B",
"type": "n8n-nodes-base.httpRequest",
"notes": "This node registers for the \"E-Mail Zustellung f\u00fcr Experten\" webinar. Replace the ID in the URL with your according webinar ID.",
"position": [
192,
112
],
"parameters": {
"url": "https://api.zoom.us/v2/webinars/84861299706/registrants",
"method": "POST",
"options": {},
"jsonBody": "={\n \"first_name\": \"{{ $('KlickTipp Trigger').item.json.CustomFieldFirstName }}\",\n \"last_name\": \"{{ $('KlickTipp Trigger').item.json.CustomFieldLastName }}\",\n \"email\": \"{{ $('KlickTipp Trigger').item.json.email }}\"\n }",
"sendBody": true,
"specifyBody": "json",
"authentication": "predefinedCredentialType",
"nodeCredentialType": "zoomOAuth2Api"
},
"credentials": {
"zoomOAuth2Api": {
"name": "<your credential>"
}
},
"notesInFlow": true,
"typeVersion": 4.2
}
],
"connections": {
"Switch": {
"main": [
[
{
"node": "Register for webinar A",
"type": "main",
"index": 0
}
],
[
{
"node": "Register for webinar B",
"type": "main",
"index": 0
}
]
]
},
"KlickTipp Trigger": {
"main": [
[
{
"node": "Switch",
"type": "main",
"index": 0
}
]
]
},
"Register for webinar A": {
"main": [
[
{
"node": "Add \"Anf\u00e4nger\" webinar data to contact",
"type": "main",
"index": 0
}
]
]
},
"Register for webinar B": {
"main": [
[
{
"node": "Add \"Experten\" webinar data to contact",
"type": "main",
"index": 0
}
]
]
}
}
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
klickTippApizoomOAuth2Api
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Community Node Disclaimer: This workflow uses KlickTipp community nodes.
Source: https://n8n.io/workflows/8416/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
Community Node Disclaimer: This workflow uses KlickTipp community nodes.
Community Node Disclaimer: This workflow uses KlickTipp community nodes.
Community Node Disclaimer: This workflow uses KlickTipp community nodes.
Community Node Disclaimer This workflow uses KlickTipp community nodes and works only on self-hosted n8n instances.
ifcpipeline — patch chain & audit trail. Uses CUSTOM, httpRequest. Event-driven trigger; 8 nodes.