{
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "09783caf-858a-4646-b9b8-07f80cbff88c",
      "name": "Trigger every 15min",
      "type": "n8n-nodes-base.scheduleTrigger",
      "notes": "This node triggers the flow in the defined frequency.",
      "position": [
        0,
        48
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "minutes",
              "minutesInterval": 15
            }
          ]
        }
      },
      "notesInFlow": true,
      "typeVersion": 1.2
    },
    {
      "id": "2bb16bdb-81b3-4684-8d04-2712981e574d",
      "name": "Tag contact for non attendance",
      "type": "n8n-nodes-klicktipp.klicktipp",
      "notes": "This node tags the contact for their non attendance at the event.",
      "position": [
        896,
        144
      ],
      "parameters": {
        "email": "={{ $json.profile.email }}",
        "tagId": [
          "13634786"
        ],
        "resource": "contact-tagging"
      },
      "credentials": {
        "klickTippApi": {
          "name": "<your credential>"
        }
      },
      "notesInFlow": true,
      "typeVersion": 3
    },
    {
      "id": "9797cf9d-ed61-4149-b631-86028ba69a7c",
      "name": "Attendance check",
      "type": "n8n-nodes-base.switch",
      "notes": "This node checks whether the attendees were checked in at the event.",
      "position": [
        672,
        48
      ],
      "parameters": {
        "rules": {
          "values": [
            {
              "outputKey": "Attended",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "6e93ced0-873c-419b-8713-c2867558504c",
                    "operator": {
                      "type": "boolean",
                      "operation": "true",
                      "singleValue": true
                    },
                    "leftValue": "={{ $json.checked_in }}",
                    "rightValue": ""
                  }
                ]
              },
              "renameOutput": true
            },
            {
              "outputKey": "Not attended",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "37e2e24d-1164-4491-92a3-c2cc141bad8a",
                    "operator": {
                      "type": "boolean",
                      "operation": "false",
                      "singleValue": true
                    },
                    "leftValue": "={{ $json.checked_in }}",
                    "rightValue": ""
                  }
                ]
              },
              "renameOutput": true
            }
          ]
        },
        "options": {}
      },
      "notesInFlow": true,
      "typeVersion": 3.3
    },
    {
      "id": "b2803e6a-9d84-4dd7-9501-1e3782356e0f",
      "name": "Split attendee list",
      "type": "n8n-nodes-base.splitOut",
      "notes": "This node splits the list of attendees.",
      "position": [
        448,
        48
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "attendees"
      },
      "notesInFlow": true,
      "typeVersion": 1
    },
    {
      "id": "f72d8f16-ede2-47fa-8deb-8296a9c13ba9",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -96,
        -128
      ],
      "parameters": {
        "color": 7,
        "width": 672,
        "height": 480,
        "content": "## 1. Data reception & structuring"
      },
      "typeVersion": 1
    },
    {
      "id": "7796cad2-37a8-45e4-bbf7-b456b769bc42",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        592,
        -128
      ],
      "parameters": {
        "color": 7,
        "width": 496,
        "height": 480,
        "content": "## 2. Analyzing & saving data"
      },
      "typeVersion": 1
    },
    {
      "id": "2de024d4-43c1-4d84-a7ba-6fd5bd25cf8b",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        96,
        368
      ],
      "parameters": {
        "width": 752,
        "height": 1120,
        "content": "## Who\u2019s it for\nDesigned for **event organizers**, **digital marketers**, and **KlickTipp users** who already sync their Eventbrite registrants to KlickTipp and now want to automatically track and segment event attendance.\n\n> \ud83d\udca1 **Prerequisite:** Contacts must already exist in KlickTipp.  \n> Use the related workflow **\u201cSubscribe Eventbrite orders to KlickTipp\u201d** to import registrants before running this attendance workflow.\n\n## Requirements\n- Eventbrite account with OAuth2 credentials  \n- KlickTipp account with API access (username/password)  \n- Tags configured in KlickTipp:\n  - `Eventbrite | Participated`  \n  - `Eventbrite | Not participated`\n\n## How to set up\n1. **Authenticate connections**\n   - Connect **Eventbrite** via OAuth2 (scopes for attendee read access).  \n   - Connect **KlickTipp** via username/password API credentials.  \n2. **Configure the Event ID**\n   - Update the Eventbrite HTTP Request node URL by pasting your according event id `/events/{event_id}/attendees/`.  \n3. **Adjust KlickTipp Tag IDs**\n   - Map tag IDs in both tagging nodes to your KlickTipp setup.  \n4. **Run a test**\n   - Execute manually or wait for the schedule trigger.  \n   - Confirm attendees are correctly tagged in KlickTipp based on `checked_in` status.  \n\n> \u26a0\ufe0f *Important:* Eventbrite must record attendee check-ins via the **Eventbrite Organizer App** or barcode scanning for this workflow to assign accurate tags.\n\n## How to customize\n- Change the **schedule frequency** (e.g., every 5 minutes during the event, hourly after).  \n- Duplicate and adjust the workflow to handle **multiple events** with different Event IDs.  \n- Extend the logic to tag attendees by **ticket class**, **VIP level**, or **refunded status**.  \n- Combine with the **Eventbrite order/refund sync workflow** for a full participant funnel:  \n  `Registration \u2192 Participation \u2192 Refund`.\n\n## Campaign expansion ideas\n- **Refund tagging:** Add a branch that detects the `refunded` property in Eventbrite and applies a refund tag in KlickTipp.  \n- **Post-event automation:**  \n  - `Participated` \u2192 Trigger thank-you or upsell campaigns.  \n  - `Not participated` \u2192 Send replay links or follow-up invitations.  \n- **Performance insights:** Use tagged data in KlickTipp for segmentation analytics, follow-up scoring, and event ROI tracking.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "443c1882-f4c5-4d3c-a90f-01d90ec91fe1",
      "name": "List Evenbrite attendees from event",
      "type": "n8n-nodes-base.httpRequest",
      "notes": "This node gets all attendees of the defined event.",
      "position": [
        224,
        48
      ],
      "parameters": {
        "url": "https://www.eventbriteapi.com/v3/events/1763953796289/attendees/",
        "options": {},
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "eventbriteOAuth2Api"
      },
      "credentials": {
        "eventbriteOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "notesInFlow": true,
      "typeVersion": 4.2
    },
    {
      "id": "67daa503-00b5-45fe-bf6e-1f8a81b103e9",
      "name": "Tag contact for attendance",
      "type": "n8n-nodes-klicktipp.klicktipp",
      "notes": "This node tags the contact for their attendance at the event.",
      "position": [
        896,
        -48
      ],
      "parameters": {
        "email": "={{ $json.profile.email }}",
        "tagId": [
          "13634770"
        ],
        "resource": "contact-tagging"
      },
      "credentials": {
        "klickTippApi": {
          "name": "<your credential>"
        }
      },
      "notesInFlow": true,
      "typeVersion": 3
    },
    {
      "id": "2594bb60-48e1-4bea-a631-0e5572ab612e",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -96,
        -320
      ],
      "parameters": {
        "width": 400,
        "height": 176,
        "content": "## 1. Data Reception\nTriggered every **15 min** to fetch the latest Eventbrite attendees.  \nKeeps your participant data synced automatically.  \n\ud83d\udca1 Adjust timing for real-time or daily sync.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "b9e938b9-400b-4be3-923a-9f0d98766825",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        688,
        -320
      ],
      "parameters": {
        "width": 400,
        "height": 176,
        "content": "## 2. Analyze & Tag\nChecks who **attended vs. missed** the event using `checked_in`.  \nTags participants in KlickTipp for instant segmentation.\n"
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "Attendance check": {
      "main": [
        [
          {
            "node": "Tag contact for attendance",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Tag contact for non attendance",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split attendee list": {
      "main": [
        [
          {
            "node": "Attendance check",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Trigger every 15min": {
      "main": [
        [
          {
            "node": "List Evenbrite attendees from event",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "List Evenbrite attendees from event": {
      "main": [
        [
          {
            "node": "Split attendee list",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}