Connect Eventbrite with Slack

Implementation Guide

Overview: Connecting Eventbrite and Slack

Event operations and field marketing teams depend on real-time registration data to coordinate logistics, staffing, and follow-up activities across the event lifecycle. Eventbrite's platform captures every ticket sale, attendee check-in, capacity shift, and order modification as discrete, timestamped events, but that data remains siloed within Eventbrite's dashboard unless actively integrated with downstream operational tools. Slack has become the real-time coordination hub for most enterprise teams, making it the natural destination for registration alerts, VIP attendee notifications, capacity warnings, and post-event summaries. Connecting Eventbrite to Slack via a programmatic integration transforms passive dashboard monitoring into active, channel-based operational awareness, enabling event managers, field marketing teams, and sales development representatives to react immediately to registration milestones without ever opening a second application.

The value proposition scales significantly for organizations running concurrent events. For enterprises executing product launches, regional roadshows, executive dinners, and webinars simultaneously, manually monitoring Eventbrite's individual event dashboards is operationally infeasible. An automated pipeline that routes new registration notifications to event-specific Slack channels, alerts the catering team when an RSVP count crosses a staffing threshold, and notifies the SDR team the moment a target-account prospect registers eliminates dozens of manual touchpoints per event. Sales teams can initiate same-hour outreach—a demonstrated differentiator in account-based event marketing programs—rather than waiting for a post-event attendee CSV export that arrives days later.

The integration also serves a post-event analytics function. By routing Eventbrite check-in scan events to a dedicated Slack channel in real time, operations staff gain a live arrival velocity feed during the event itself. Knowing that 200 attendees have arrived in the first 20 minutes versus the expected 50 allows an operations director to open additional registration desks, alert catering to accelerate food service, or send AV staff to manage queue flow—decisions that are impossible to make correctly without real-time data.

Core Prerequisites

Eventbrite integration requires an active Eventbrite organizer account with organization-level admin access to the events you intend to monitor. From the Eventbrite Developer portal at www.eventbrite.com/platform, create an application to obtain your OAuth 2.0 Client ID and Client Secret. For webhook delivery, navigate to your app's settings and configure a Webhook consumer URL. The required OAuth 2.0 scopes for reading attendee and order data are event_read, attendees_read, and orders_read. For programmatic webhook management (creating and deleting webhook subscriptions via the API rather than the UI), you also need the webhooks scope. Note that Eventbrite's public OAuth 2.0 implementation does not support the client credentials grant flow—you must use the authorization code flow with a registered redirect URI. Personal OAuth tokens (available for single-account integrations) bypass the full OAuth flow and can be generated directly from your developer account settings under "API Keys."

On the Slack side, create a new Slack App at api.slack.com/apps. Under "OAuth & Permissions," add the following Bot Token Scopes: chat:write for posting messages to channels the bot has been invited to, chat:write.public for posting to public channels without a prior invitation, channels:manage for programmatically creating event-specific channels, and im:write for sending direct messages to individual users. Install the app to your workspace and store the resulting Bot User OAuth Token (prefixed with xoxb-) in your secrets manager. If your integration will post to private channels, the bot must be explicitly invited to those channels by a workspace admin—it cannot join private channels autonomously even with channels:manage scope in place.

For iPaaS implementations: Make provides native Eventbrite modules that support "New Attendee" and "New Order" triggers via API polling. For lower-latency webhook-based delivery or less common trigger types such as check-in events, use Make's HTTP module to register webhooks directly and process inbound payloads via a Custom Webhook module. Zapier's native Eventbrite integration supports "New Attendee Registration" and "New Order" triggers but does not natively handle check-in scan events; those require a custom webhook receiver supplemented by a Zapier Code step.

Top Enterprise Use Cases

The primary use case is real-time registration alerting to a dedicated Slack channel. Every new attendee registration fires a notification to #event-registrations (or an event-specific channel such as #summit-2024-ops) containing the attendee's name, email domain, ticket type, order total, and registration timestamp. This gives event coordinators a live feed of registration activity without requiring dashboard access, enabling them to monitor momentum in real time during promotional pushes.

A second high-value enterprise use case is VIP attendee detection with automated SDR notification. By cross-referencing the registrant's email domain against a list of target account domains maintained in a CRM or a static lookup table in your middleware, the integration sends a high-priority Slack DM to the assigned sales development representative the moment a prospect from a named account registers. This enables same-hour outreach and allows the SDR to personalize their pre-event communication based on confirmed attendance rather than speculative outreach.

A third use case is capacity threshold alerting for logistics teams. When registered attendee count crosses a defined percentage of venue capacity (commonly 80%), the integration posts an alert to #event-logistics notifying catering, AV, and facilities contacts that planning adjustments are warranted. This eliminates the manual capacity-checking process that typically falls through the cracks during high-volume promotional periods.

A fourth use case is check-in velocity monitoring during live events. As Eventbrite's check-in API receives barcode scan events, the integration batches arrivals by 15-minute window and posts a summarized Slack update each quarter-hour, giving on-site operations staff a real-time arrival pace metric for proactive queue management.

Step-by-Step Implementation Guide

The recommended architecture uses Eventbrite's Webhook API to push events to middleware in near real-time rather than polling the REST API on a schedule. Polling Eventbrite's attendees endpoint introduces latency—each polling interval adds a delay proportional to the interval length—and wastes API quota. Eventbrite enforces rate limits of 1,000 API requests per minute per OAuth token for most endpoints, and polling-based architectures can exhaust this budget quickly during high-registration periods. Webhooks push events within seconds of the triggering action, which is the latency profile required for operational Slack notifications to be useful.

To register a webhook with Eventbrite, send a POST request to https://www.eventbriteapi.com/v3/webhooks/ with the header Authorization: Bearer {your_private_token} and a JSON body specifying the event actions you want to subscribe to, the target event ID, and the endpoint URL that will receive the callbacks. A correctly structured webhook registration payload looks like this:

{
  "webhook": {
    "endpoint_url": "https://your-middleware.example.com/hooks/eventbrite-inbound",
    "actions": "attendee.updated,order.placed,barcode.checked_in",
    "event_id": "YOUR_EVENTBRITE_EVENT_ID"
  }
}

Eventbrite sends HTTP POST requests to your endpoint_url when the specified actions occur. A critical architectural detail that surprises most integrators is that Eventbrite's webhook payloads are intentionally thin—they do not contain the full attendee or order record. Instead, the payload contains an api_url field pointing to the full resource URL that your middleware must call to retrieve actual record data. A sample order webhook payload demonstrates this pattern:

{
  "config": {
    "action": "order.placed",
    "endpoint_url": "https://your-middleware.example.com/hooks/eventbrite-inbound",
    "user_id": "112233"
  },
  "api_url": "https://www.eventbriteapi.com/v3/orders/987654321/"
}

Upon receiving this payload, your middleware must make a follow-up enrichment call: GET https://www.eventbriteapi.com/v3/orders/987654321/?expand=attendees with the same Bearer token. This returns the full order object including attendee profile fields (first name, last name, email, answers to custom registration questions) and ticket tier information. Separating webhook delivery from data retrieval is a deliberate Eventbrite design choice that reduces webhook payload size and allows your middleware to decide whether enrichment is necessary before paying the API cost.

With the enriched attendee record in hand, construct a Slack chat.postMessage API call using Block Kit for structured, scannable notifications. Call https://slack.com/api/chat.postMessage with the header Authorization: Bearer xoxb-{your-bot-token} and a JSON body specifying the target channel ID and the blocks array. Using channel IDs rather than channel names in the channel field is strongly recommended because channel names can change while IDs are permanent. Retrieve the channel ID via GET https://slack.com/api/conversations.list. A functional Block Kit payload for a registration alert looks like this:

{
  "channel": "C0123456789",
  "blocks": [
    {
      "type": "header",
      "text": {
        "type": "plain_text",
        "text": "New Attendee Registration"
      }
    },
    {
      "type": "section",
      "fields": [
        { "type": "mrkdwn", "text": "*Name:*\nJane Smith" },
        { "type": "mrkdwn", "text": "*Ticket Type:*\nVIP Early Access" },
        { "type": "mrkdwn", "text": "*Email:*\[email protected]" },
        { "type": "mrkdwn", "text": "*Order Total:*\n$299.00" }
      ]
    }
  ]
}

In Make, the complete scenario consists of: Module 1 as a Webhooks "Custom Webhook" that receives Eventbrite's thin push notification and returns 200 OK immediately. Module 2 is an HTTP "Make a Request" GET call to the api_url value extracted from Module 1's payload, with the Eventbrite Bearer token in the Authorization header and expand=attendees appended to the query string. Module 3 is a Router with two branches: a default Slack "Create a Message" module posting the registration summary to the ops channel, and a conditional branch that checks whether the email domain from Module 2's response matches entries in a Make Data Store containing target account domains. The conditional branch routes matched records to a Slack "Send a Direct Message" module targeting the assigned SDR.

Common Pitfalls & Troubleshooting

A 401 Unauthorized from the Eventbrite API during enrichment calls indicates your OAuth token has been revoked or the token lacks required scopes. Eventbrite personal OAuth tokens do not expire automatically but can be revoked from the developer portal. Verify your token's validity independently by calling GET https://www.eventbriteapi.com/v3/users/me/ before debugging the integration flow. If you receive a 403 Forbidden specifically on the webhooks registration endpoint, your API key's scope doesn't include webhooks; you must regenerate the key with the correct scope enabled from the developer console—scope changes require a new token.

A 429 Too Many Requests from Eventbrite is almost exclusively a symptom of polling-based architectures rather than webhook-driven ones. If you are polling the attendees endpoint for near-real-time data (not recommended), implement a cursor-based pagination strategy using Eventbrite's continuation token to avoid re-fetching already-seen records, and honor the Retry-After response header to pause your polling loop for the specified number of seconds when you receive a 429.

On the Slack side, a channel_not_found error in the chat.postMessage JSON response body (note: Slack always returns HTTP 200 even for application-level errors; you must inspect the ok field in the response JSON) means the channel ID is incorrect or the bot hasn't been invited. A not_in_channel error means the bot is present in the workspace but hasn't joined the target channel—resolve this by calling POST https://slack.com/api/conversations.join with the channel ID (this works only for public channels). For private channels, a workspace admin must invite the bot manually or via an API call using an admin-level token with the channels:join scope.

If Eventbrite webhook events stop arriving, check that the webhook is still registered by calling GET https://www.eventbriteapi.com/v3/webhooks/ and verifying your endpoint URL appears in the results. Eventbrite retries failed webhook deliveries a limited number of times before suspending delivery. Ensure your middleware's callback endpoint returns a 200 OK within five seconds. If your transformation and enrichment logic is computationally expensive, respond 200 immediately upon receipt and push the event payload to an internal queue (Redis, SQS, or a Supabase table) for asynchronous downstream processing to avoid blocking the webhook acknowledgment.