Update Eventbrite to Salesforce campaigns data model (#42355)

closes https://github.com/fleetdm/confidential/issues/14806
This commit is contained in:
Sam Pfluger
2026-03-25 00:02:28 -05:00
committed by GitHub
parent a1ded814f3
commit 8309060b0a
+28 -17
View File
@@ -797,11 +797,17 @@ This creates a clean 1:1 relationship:
#### **Campaign fields**
Add the following field to **Campaign**:
Add the following fields to **Campaign**:
* **Event Key** (Text) \= composite key of the platform and event id:
* `eventbrite:{event_id}`
* `luma:{event_id}`
* **Event platform** (Picklist) identifies the source platform
* Options: `Eventbrite`, `Luma`, etc.
* **External event ID** (Text) stores the platform-specific event identifier
* Example: Eventbrite event ID `123456789`
* **Event key** (Formula) composite key for matching integrations
* Formula: `"Event platform"&"-"&"External event ID"`
* Example output: `Eventbrite-123456789`
The composite key pattern lets us use one matching field across platforms and avoid collisions if we ever want to use [Lu.ma](http://Lu.ma) or others.
@@ -820,22 +826,24 @@ The Event ID can be sourced from:
##### **2\) Create the Salesforce Campaign**
* Create a Campaign for the event.
* Set:
* **Event Key** `eventbrite:{event_id}`
* Create a Campaign for the event.
* Set:
* **Event platform**: `Eventbrite` (or the appropriate platform)
* **External event ID**: `{event_id}` (e.g., `123456789`)
* **Event key**: Auto-populated by formula (no manual entry needed)
##### **3\) Integration logic (Clay)**
When Clay receives a new Eventbrite registration/attendee record:
1. **Extract** `event_id` from the Eventbrite payload
* Clay knows its coming from Eventbrite, so it looks up the event\_id and then is able to create the composite key “eventbrite:{event\_id}”
2. **Find Campaign** in Salesforce where:
* *`Event Key = eventbrite:{event_id}`*
3. **Create/update Person Record**
* Match/Create the Contact
4. **Create/Update Campaign Member**
* Add the person as a Campaign Member on the matched Campaign
1. **Extract** `event_id` from the Eventbrite payload
* Clay matches the `Event key` from Zapier to the corresponding campaign.
2. **Find Campaign** in Salesforce where:
* *`Event key = Eventbrite-{event_id}`*
3. **Create/update Person Record**
* Match/Create the Contact
4. **Create/Update Campaign Member**
* Add the person as a Campaign Member on the matched Campaign
* Optionally set Campaign Member Status (e.g., `Registered`, `Attended`, `No Show`) if we later sync those states
@@ -852,10 +860,13 @@ To keep the system clean and prevent broken mappings:
* **Monitoring:** Have a Clay/Salesforce report for “registrations received with no matching Campaign” to catch missing IDs early.
### **(FUTURE) Extending this to Lu.ma (future)**
If we adopt Lu.ma later, we can follow the same model:
* Store Lu.mas stable event identifier (ID or slug) on the Salesforce Campaign.
* Use `Event Key` to map inbound registrations to the correct Campaign.
* Set **Event platform** to `Luma`
* Set **External event ID** to Lu.mas stable event identifier (ID or slug)
* **Event key** formula automatically generates the composite key: `Luma-{external_event_id}`
* Clay uses this Event key to map inbound registrations to the correct Campaign
* No attendee-visible fields required.
### **Summary**