Build a support ticket system in Bubble with a Ticket data type tracking status, priority, and assigned agent. Users submit tickets through a form, agents manage them via a dashboard with filters and status updates. Email notifications fire on ticket creation and status changes. The system tracks the full lifecycle from open to resolved.
Build a Support Ticket System in Bubble
This tutorial shows you how to create a complete support ticket system with user submission forms, agent dashboards, status tracking, and email notifications. Whether you need customer support for your SaaS or an internal helpdesk, this guide covers the full ticket lifecycle from creation to resolution.
Prerequisites
- A Bubble account with an existing app
- User authentication with at least two roles (user and agent/admin)
- Basic understanding of Data Types, workflows, and Repeating Groups
- Email sending configured (Bubble's built-in or SendGrid)
Step-by-step guide
Create the Ticket Data Type and Option Sets
Create the Ticket Data Type and Option Sets
Go to Data tab → create a new type 'Ticket' with fields: subject (text), description (text), status (text — open/in-progress/resolved/closed), priority (text — low/medium/high/urgent), submitted_by (User), assigned_to (User), category (text), created_date (date), resolved_date (date), and attachments (list of files). Create an Option Set 'TicketStatus' with options: Open, In Progress, Resolved, Closed. Create another Option Set 'TicketPriority' with options: Low, Medium, High, Urgent. Using Option Sets instead of raw text ensures consistency.
Expected result: Ticket data type and TicketStatus/TicketPriority Option Sets exist in the database.
Build the Ticket Submission Form
Build the Ticket Submission Form
Create a page called 'submit-ticket'. Add input elements: Input for subject, Dropdown for category (populated from an Option Set), Dropdown for priority, Multiline Input for description, and File Uploader for attachments. Add a Submit button. The workflow: Create a new Ticket with all form values, submitted_by = Current User, status = 'Open', created_date = Current date/time. After creation, reset inputs, show a success message with the ticket number, and send a confirmation email to the user.
Expected result: Users can submit support tickets with subject, category, priority, description, and file attachments.
Build the Agent Dashboard
Build the Agent Dashboard
Create a page called 'ticket-dashboard' restricted to agent/admin roles. Add filter controls at the top: Dropdown for status filter, Dropdown for priority filter, and a Search Input for ticket subject/ID. Add a Repeating Group with Type = Ticket, data source filtered by the selected status and priority. Each row displays: ticket ID, subject, submitted_by's name, priority (color-coded), status badge, assigned_to's name, and created_date. Sort by priority (urgent first) then by created_date (oldest first).
Pro tip: Use conditional formatting on the priority column — red background for Urgent, orange for High, yellow for Medium, gray for Low — for visual scanning.
Expected result: Agents see a filterable, sortable list of all support tickets with color-coded priorities.
Add Ticket Detail View with Status Updates
Add Ticket Detail View with Status Updates
Create a page called 'ticket-detail' with Type of content = Ticket. Display all ticket information: subject, description, category, priority, status, submitted_by, assigned_to, dates, and attachments. Add a Dropdown for status changes and an 'Update Status' button. Add a Dropdown for agent assignment populated with users who have the agent role. Create workflows: Update Status changes the Ticket's status field and adds a TicketComment record logging the change. If status changes to 'Resolved', set resolved_date. Send email notifications to the submitter on every status change.
Expected result: Agents can view full ticket details, change status, assign tickets, and the submitter receives email notifications.
Add a Comment/Reply Thread
Add a Comment/Reply Thread
Create a Data Type 'TicketComment' with fields: ticket (Ticket), author (User), message (text), created_date (date), and is_internal (yes/no — for agent-only notes). On the ticket detail page, add a Repeating Group showing all TicketComments for the current ticket, sorted by created_date ascending. Add a Multiline Input and Reply button below. The reply workflow creates a new TicketComment and optionally sends an email to the other party (agent → user or user → agent).
Expected result: Both users and agents can add comments to tickets, creating a threaded conversation history.
Add Email Notifications
Add Email Notifications
Set up email triggers at key points: (1) New ticket created → email to support team, (2) Status changed → email to ticket submitter, (3) New comment from agent → email to submitter, (4) New comment from user → email to assigned agent. Use Bubble's Send Email action or an email plugin. Include the ticket subject, status, and a direct link to the ticket detail page in every email.
Expected result: All parties receive email notifications when tickets are created, updated, or commented on.
Complete working example
1DATA TYPES:2- Ticket3 - subject (text)4 - description (text)5 - status (TicketStatus option set)6 - priority (TicketPriority option set)7 - category (TicketCategory option set)8 - submitted_by (User)9 - assigned_to (User)10 - created_date (date)11 - resolved_date (date)12 - attachments (list of files)1314- TicketComment15 - ticket (Ticket)16 - author (User)17 - message (text)18 - created_date (date)19 - is_internal (yes/no)2021OPTION SETS:22- TicketStatus: Open, In Progress, Resolved, Closed23- TicketPriority: Low, Medium, High, Urgent24- TicketCategory: Bug, Feature Request, Account, Billing, General2526PAGES:271. submit-ticket (user-facing form)282. my-tickets (user's ticket list)293. ticket-dashboard (agent view — all tickets)304. ticket-detail (full ticket view with comments)3132KEY WORKFLOWS:331. Submit Ticket → Create Ticket → Send email to support → Show success342. Update Status → Make changes to Ticket → Log TicketComment → Send email to submitter353. Assign Agent → Make changes to Ticket → Send email to assigned agent364. Add Comment → Create TicketComment → Send email to other party375. Resolve Ticket → Set status=Resolved, resolved_date=now → Send email3839PRIVACY RULES:40- Ticket: submitted_by = Current User OR Current User's role is agent/admin41- TicketComment: is_internal = no OR Current User's role is agent/adminCommon mistakes when creating a support ticket system in Bubble.io: Step-by-Step Guide
Why it's a problem: Using raw text instead of Option Sets for status and priority
How to avoid: Use Option Sets for status and priority to enforce consistent values.
Why it's a problem: Not restricting the dashboard to agent roles
How to avoid: Add page-level access control: on Page load, if Current User's role is not agent, redirect to home.
Why it's a problem: Sending too many email notifications
How to avoid: Only send external emails for meaningful status changes. Never send emails for internal agent notes.
Best practices
- Use Option Sets for status, priority, and category to enforce consistency and make filtering reliable.
- Add a ticket number field (auto-generated sequential or random string) for easy reference.
- Color-code priority and status badges for quick visual scanning on the dashboard.
- Log all status changes as TicketComments for a complete audit trail.
- Set Privacy Rules so users only see their own tickets and agents see all.
- Add SLA tracking — calculate time between creation and resolution and flag overdue tickets.
- Create a 'my-tickets' page where users can view and track their submitted tickets.
Still stuck?
Copy one of these prompts to get a personalized, step-by-step explanation.
I need to build a support ticket system in Bubble.io with ticket submission, agent dashboard, status tracking (open/in-progress/resolved/closed), priority levels, comment threads, and email notifications. How should I structure the data types and workflows?
Create a support ticket system. Add Ticket and TicketComment data types with Option Sets for status and priority. Build a submission form, agent dashboard with filters, ticket detail page with status updates and comment thread, and email notifications on status changes.
Frequently asked questions
How do I auto-assign tickets to agents?
Create a round-robin assignment workflow: search for the agent with the fewest open tickets and assign the new ticket to them. Alternatively, assign by category if different agents handle different ticket types.
Can I track response time and SLA compliance?
Yes. Store first_response_date on the Ticket when the first agent comment is added. Calculate response time as first_response_date minus created_date. Compare against your SLA threshold and flag overdue tickets.
How do I let users rate the support experience?
When a ticket is resolved, show a rating popup (1-5 stars). Save the rating on the Ticket data type. Aggregate ratings per agent for performance tracking.
Can I integrate with Slack for ticket notifications?
Yes. Use the API Connector to call Slack's webhook URL when a new ticket is created or a priority changes to Urgent. This alerts your team in real-time without relying on email.
Should I build a knowledge base alongside the ticket system?
Absolutely. A knowledge base reduces ticket volume by letting users self-serve. Link relevant articles when agents resolve tickets. For comprehensive helpdesk builds, RapidDev can architect the complete system.
How do I handle internal vs external comments?
Use the is_internal field on TicketComment. When displaying comments, filter out internal notes for non-agent users using Privacy Rules or conditional visibility.
Talk to an Expert
Our team has built 600+ apps. Get personalized help with your project.
Book a free consultation