N
n8n Store
Workflow Market
Sync Eventbrite Orders & Refunds to KlickTipp for Automated Event Marketing

Sync Eventbrite Orders & Refunds to KlickTipp for Automated Event Marketing

by KlickTipp0 views

Description

Categories

⚙️ Automation

Nodes Used

n8n-nodes-base.ifn8n-nodes-base.switchn8n-nodes-base.stickyNoten8n-nodes-base.stickyNoten8n-nodes-base.stickyNoten8n-nodes-base.stickyNoten8n-nodes-base.stickyNoten8n-nodes-base.stickyNoten8n-nodes-base.stickyNoten8n-nodes-base.httpRequest
PriceFree
Views0
Last Updated11/28/2025
workflow.json
{
  "meta": {
    "instanceId": "95b3ab5a70ab1c8c1906357a367f1b236ef12a1409406fd992f60255f0f95f85",
    "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": {
          "id": "K9JyBdCM4SZc1cXl",
          "name": "DEMO KlickTipp account"
        }
      },
      "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—keeping your segmentation accurate and automated.\n\n## Who’s 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   - 🟢 *Order placed* → Adds contact, fetches event data, and tags buyer.  \n   - 🔴 *Refunded* → 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—no 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 → verify tags → trigger a refund to test removal.  \n\n> 💡 *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
      ],
      "webhookId": "396b6aa3-2bd7-4ae7-8cce-a90801f93019",
      "parameters": {
        "event": "1764245398479",
        "actions": [
          "order.placed",
          "order.refunded"
        ],
        "organization": "2927333867811",
        "authentication": "oAuth2"
      },
      "credentials": {
        "eventbriteOAuth2Api": {
          "id": "YuhRI76SN30EeZOY",
          "name": "Integrations Eventbrite account"
        }
      },
      "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": {
          "id": "YuhRI76SN30EeZOY",
          "name": "Integrations Eventbrite account"
        }
      },
      "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": {
          "id": "K9JyBdCM4SZc1cXl",
          "name": "DEMO KlickTipp account"
        }
      },
      "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\", \"€10,50\", \"£99.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": {
          "id": "K9JyBdCM4SZc1cXl",
          "name": "DEMO KlickTipp account"
        }
      },
      "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💡 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
    }
  ],
  "pinData": {
    "Check for new orders and refunds": [
      {
        "id": "13443123123",
        "name": "Oleksandr Kovalenko",
        "costs": {
          "tax": {
            "value": 0,
            "display": "$0.00",
            "currency": "USD",
            "major_value": "0.00"
          },
          "gross": {
            "value": 0,
            "display": "$0.00",
            "currency": "USD",
            "major_value": "0.00"
          },
          "base_price": {
            "value": 0,
            "display": "$10.00",
            "currency": "USD",
            "major_value": "0.00"
          },
          "payment_fee": {
            "value": 0,
            "display": "$0.00",
            "currency": "USD",
            "major_value": "0.00"
          },
          "eventbrite_fee": {
            "value": 0,
            "display": "$0.00",
            "currency": "USD",
            "major_value": "0.00"
          }
        },
        "email": "[email protected]",
        "status": "placed",
        "changed": "2025-10-08T13:41:12Z",
        "created": "2025-10-08T09:45:51Z",
        "event_id": "1764245398479",
        "last_name": "Kovalenko",
        "first_name": "Oleksandr",
        "resource_uri": "https://www.eventbriteapi.com/v3/orders/13123123123/",
        "time_remaining": null
      }
    ]
  },
  "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
          }
        ]
      ]
    }
  }
}

相关工作流