This workflow corresponds to n8n.io template #10024 — 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": "a4cc12f5-2786-4402-9079-966c6f8a81f2",
"name": "Tag contact for refund",
"type": "n8n-nodes-klicktipp.klicktipp",
"notes": "This node tags contacts for refunds.",
"position": [
896,
16
],
"parameters": {
"email": "={{ $('Check for new orders and refunds').item.json.email }}",
"tagId": [
"13637325"
],
"resource": "contact-tagging"
},
"credentials": {
"klickTippApi": {
"name": "<your credential>"
}
},
"notesInFlow": true,
"typeVersion": 3
},
{
"id": "5321884e-bc36-4ad1-be46-3b28414cc8f4",
"name": "Order or refund?",
"type": "n8n-nodes-base.switch",
"notes": "This node checks if an order or a refund needs to be processed.",
"position": [
-16,
-80
],
"parameters": {
"rules": {
"values": [
{
"outputKey": "New order",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "9d5be80a-15b4-4dd8-88a4-bc31ccc7c2ad",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.status }}",
"rightValue": "placed"
}
]
},
"renameOutput": true
},
{
"outputKey": "Refund",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "3bb81b62-3cb9-4359-b759-44421aac9950",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.status }}",
"rightValue": "refunded"
}
]
},
"renameOutput": true
}
]
},
"options": {}
},
"notesInFlow": true,
"typeVersion": 3.3
},
{
"id": "d63a04d2-1db1-4789-8d19-d06b49e7025f",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-368,
-336
],
"parameters": {
"color": 7,
"width": 704,
"height": 528,
"content": "## 1. Data reception & routing"
},
"typeVersion": 1
},
{
"id": "2f0e4612-f179-46eb-9955-fc3b7c309b16",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
352,
-336
],
"parameters": {
"color": 7,
"height": 528,
"content": "## 2. Saving primary data"
},
"typeVersion": 1
},
{
"id": "953ef4fe-23a5-4ee5-88ff-12c4a2caf06e",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
608,
-336
],
"parameters": {
"color": 7,
"width": 496,
"height": 528,
"content": "## 2. Saving secondary data for segmentation"
},
"typeVersion": 1
},
{
"id": "f335cc38-9204-457a-b949-debd1a17b334",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
-48,
208
],
"parameters": {
"width": 816,
"height": 1296,
"content": "**Community Node Disclaimer** \nThis workflow uses KlickTipp community nodes and works only on **self-hosted** n8n instances.\n\n## Introduction\nAutomate **Eventbrite order and refund processing** by syncing data directly to **KlickTipp**. \nWhenever a participant registers or requests a refund, their profile is updated with event details and tags\u2014keeping your segmentation accurate and automated.\n\n## Who\u2019s it for\nPerfect for **event organizers**, **digital marketers**, and **automation specialists** using Eventbrite and KlickTipp who want to eliminate manual imports and keep contact data consistent.\n\n## How it works\n1. **Eventbrite Trigger** captures `order.placed` and `order.refunded` events. \n2. **Switch Node** routes logic:\n - \ud83d\udfe2 *Order placed* \u2192 Adds contact, fetches event data, and tags buyer. \n - \ud83d\udd34 *Refunded* \u2192 Adds refund tag and removes buyer tag. \n3. **Enrichment** stores event name, page URL, and end date in KlickTipp fields. \n4. **Fee check** applies extra segmentation for paid vs. free events. \n5. KlickTipp updates contacts automatically\u2014no manual steps needed.\n\n## Requirements\n- Self-hosted **n8n** (community node support) \n- **Eventbrite** account (OAuth2) \n- **KlickTipp** account (API access) \n- KlickTipp custom fields:\n - `Eventbrite | Event name` \n - `Eventbrite | Start timestamp` \n - `Eventbrite | Event page URL` \n- KlickTipp tags:\n - `Eventbrite | Buyer` \n - `Eventbrite | Refundee` \n - `Eventbrite | Registrant`\n\n## How to set up\n1. **Connect accounts:** Eventbrite (OAuth2) & KlickTipp (API). \n2. **Map fields:** Event name, date, and URL to KlickTipp custom fields. \n3. **Update tag IDs:** Replace with your own KlickTipp IDs. \n4. **Test the flow:** Place an order \u2192 verify tags \u2192 trigger a refund to test removal. \n\n> \ud83d\udca1 *Tip:* Enable auto tag removal in KlickTipp so `Buyer` tags are removed when `Refundee` tags are added.\n\n## How to customize\n- Adapt field mappings to match your KlickTipp setup. \n- Adjust tag rules for different event types or ticket tiers. \n- Extend for multiple events or recurring campaigns.\n\n## Campaign expansion ideas\n- Track **attendance vs. no-shows** using participation tags. \n- Add **VIP or ticket-type** segmentation. \n- Trigger **follow-up automations** for refundees or attendees. \n- Connect to other tools for reminders, surveys, or upsells."
},
"typeVersion": 1
},
{
"id": "0134961c-7958-4494-b887-1b0f08b449d9",
"name": "Check for new orders and refunds",
"type": "n8n-nodes-base.eventbriteTrigger",
"notes": "This node listens to new orders and refunds.",
"position": [
-240,
-80
],
"parameters": {
"event": "1764245398479",
"actions": [
"order.placed",
"order.refunded"
],
"organization": "2927333867811",
"authentication": "oAuth2"
},
"credentials": {
"eventbriteOAuth2Api": {
"name": "<your credential>"
}
},
"notesInFlow": true,
"typeVersion": 1
},
{
"id": "2a02a619-e48a-4cc0-852a-de8fa6f502be",
"name": "Get event data",
"type": "n8n-nodes-base.httpRequest",
"notes": "This node fetches the event details.",
"position": [
224,
-176
],
"parameters": {
"url": "=https://www.eventbriteapi.com/v3/events/{{ $json.event_id }}",
"options": {},
"authentication": "predefinedCredentialType",
"nodeCredentialType": "eventbriteOAuth2Api"
},
"credentials": {
"eventbriteOAuth2Api": {
"name": "<your credential>"
}
},
"notesInFlow": true,
"typeVersion": 4.2
},
{
"id": "f3c2eed2-d820-47c4-97d8-7e7663e98319",
"name": "Subscribe event attendee to KlickTipp",
"type": "n8n-nodes-klicktipp.klicktipp",
"notes": "This node subscribes the order to KlickTipp.",
"position": [
448,
-176
],
"parameters": {
"email": "={{ $('Check for new orders and refunds').item.json.email }}",
"tagId": "13634764",
"fields": {
"dataFields": [
{
"fieldId": "fieldFirstName",
"fieldValue": "={{ $('Check for new orders and refunds').item.json.first_name }}"
},
{
"fieldId": "fieldLastName",
"fieldValue": "={{ $('Check for new orders and refunds').item.json.last_name }}"
},
{
"fieldId": "field224369",
"fieldValue": "={{ $json.name.text }}"
},
{
"fieldId": "field224367",
"fieldValue": "={{ $json.url }}"
},
{
"fieldId": "field224368",
"fieldValue": "={{ \n // Take the ISO 8601 string from your JSON\n new Date($json.end.utc) \n \n // Convert it to milliseconds since 1970-01-01 (Unix Epoch)\n .getTime() \n \n // Divide by 1000 to get seconds instead of milliseconds\n / 1000 \n}}"
}
]
},
"listId": "358895",
"resource": "subscriber",
"operation": "subscribe"
},
"credentials": {
"klickTippApi": {
"name": "<your credential>"
}
},
"notesInFlow": true,
"typeVersion": 3
},
{
"id": "779d2e30-944b-488f-ae3a-347f4d7ddc74",
"name": "Purchase?",
"type": "n8n-nodes-base.if",
"notes": "This node checks if the event was free or subject to a fee.",
"position": [
672,
-176
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "2c02f37d-a3f0-4136-9cc3-d941f2d4cf2c",
"operator": {
"type": "number",
"operation": "gt"
},
"leftValue": "={{ \n parseFloat(\n // Take the display string (e.g. \"$12.34\", \"\u20ac10,50\", \"\u00a399.99\")\n $('Check for new orders and refunds').item.json.costs.base_price.display\n\n // Remove everything except digits, dot, or comma\n .replace(/[^0-9.,]/g, '')\n\n // Replace comma with dot (handles European formats like \"10,50\")\n .replace(',', '.')\n )\n}}",
"rightValue": 0
}
]
}
},
"notesInFlow": true,
"typeVersion": 2.2
},
{
"id": "81523d9d-1f50-4e71-b953-42972447ec95",
"name": "Tag attendee in case of purchase",
"type": "n8n-nodes-klicktipp.klicktipp",
"position": [
896,
-192
],
"parameters": {
"email": "={{ $('Subscribe event attendee to KlickTipp').item.json.email }}",
"tagId": [
"13637318"
],
"resource": "contact-tagging"
},
"credentials": {
"klickTippApi": {
"name": "<your credential>"
}
},
"typeVersion": 3
},
{
"id": "98277075-dcca-418a-a0ff-5d7a3107dbbf",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
320,
-512
],
"parameters": {
"width": 288,
"content": "## 2. Process Orders\nFetches event details for new orders and subscribes contacts to KlickTipp. \nAdds event info (name, URL, date) to their profile automatically.\n"
},
"typeVersion": 1
},
{
"id": "d78bd9a5-d694-4cc7-a40a-81e77c011ddc",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
-224,
-528
],
"parameters": {
"width": 320,
"height": 176,
"content": "## 1. Data Reception\nListens for new **Eventbrite orders or refunds** via webhook trigger. \nRoutes each record to the correct branch for processing. \n\ud83d\udca1 Runs automatically whenever an order event occurs.\n"
},
"typeVersion": 1
},
{
"id": "4f6a7b79-8a18-464f-aed2-652df7faade7",
"name": "Sticky Note6",
"type": "n8n-nodes-base.stickyNote",
"position": [
704,
-512
],
"parameters": {
"width": 272,
"content": "## 3. Refund & Segmentation\nApplies refund tags in KlickTipp when Eventbrite reports a refund. \nKeeps CRM segmentation clean and always up-to-date.\n"
},
"typeVersion": 1
}
],
"connections": {
"Purchase?": {
"main": [
[
{
"node": "Tag attendee in case of purchase",
"type": "main",
"index": 0
}
]
]
},
"Get event data": {
"main": [
[
{
"node": "Subscribe event attendee to KlickTipp",
"type": "main",
"index": 0
}
]
]
},
"Order or refund?": {
"main": [
[
{
"node": "Get event data",
"type": "main",
"index": 0
}
],
[
{
"node": "Tag contact for refund",
"type": "main",
"index": 0
}
]
]
},
"Check for new orders and refunds": {
"main": [
[
{
"node": "Order or refund?",
"type": "main",
"index": 0
}
]
]
},
"Subscribe event attendee to KlickTipp": {
"main": [
[
{
"node": "Purchase?",
"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.
eventbriteOAuth2ApiklickTippApi
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 and works only on self-hosted n8n instances.
Source: https://n8n.io/workflows/10024/ — 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.
This workflow uses KlickTipp community nodes, available for self-hosted n8n instances only.
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.
This workflow allows you to import any workflow from a file or another n8n instance and map the credentials easily. A multi-form setup guides you through the entire process At the beginning you have t