Skip to main content
RapidDev - Software Development Agency
bubble-tutorial

How to develop a ticketing system in Bubble.io: Step-by-Step Guide

A support ticketing system in Bubble uses a Ticket Data Type with categories, priorities, and assignment rules to route requests to the right team. This tutorial covers building ticket submission forms, assignment workflows, escalation logic, SLA tracking, and an agent dashboard for managing open tickets efficiently.

What you'll learn

  • How to create a ticketing database schema with categories and priorities
  • How to build ticket submission and assignment workflows
  • How to implement escalation rules and SLA tracking
  • How to create an agent dashboard for managing support tickets
Book a free consultation
4.9Clutch rating
600+Happy partners
17+Countries served
190+Team members
Beginner6 min read30-35 minAll Bubble plans (backend workflows require paid plans for automation)March 2026RapidDev Engineering Team
TL;DR

A support ticketing system in Bubble uses a Ticket Data Type with categories, priorities, and assignment rules to route requests to the right team. This tutorial covers building ticket submission forms, assignment workflows, escalation logic, SLA tracking, and an agent dashboard for managing open tickets efficiently.

Overview: Building a Support Ticketing System in Bubble

This tutorial walks through building an internal support ticketing system for IT, HR, or facilities requests. You will create a ticket submission flow with categorization, automatic assignment based on category, escalation workflows for overdue tickets, SLA tracking, and an agent dashboard for managing and resolving tickets.

Prerequisites

  • A Bubble account with an app
  • User accounts for agents/support staff
  • Understanding of Bubble Data Types and workflows
  • Familiarity with backend workflows for automation

Step-by-step guide

1

Create the Ticket and Agent Data Types

In the Data tab, create a Ticket Data Type: title (text), description (text), category (Option Set: IT, HR, Facilities, Finance), priority (Option Set: Low, Medium, High, Urgent), status (text: open/in-progress/waiting/resolved/closed), submitter (User), assigned_to (User), created_at (date), resolved_at (date), sla_deadline (date). Create an Agent_Profile Data Type: user (User), categories_handled (list of Option Set), is_available (yes/no), current_tickets (number). Create a Ticket_Comment Data Type: ticket (Ticket), author (User), text (text), is_internal (yes/no), created_at (date).

Expected result: Complete database schema for the ticketing system with tickets, agents, and comments.

2

Build the ticket submission form

Create a 'submit-ticket' page with: Input for title, Multiline Input for description, Dropdown for category (sourced from Option Set), Dropdown for priority (default: Medium), and a File Uploader for attachments. Add a Submit button. The workflow: create a new Ticket with all field values, set status to 'open', set created_at to now, and calculate sla_deadline based on priority (Urgent: 4 hours, High: 8 hours, Medium: 24 hours, Low: 48 hours). Then trigger the auto-assignment workflow. Show a confirmation with the ticket number.

Pro tip: Auto-generate ticket numbers with a format like 'TK-' followed by a timestamp for easy reference.

Expected result: Users can submit tickets with category, priority, and description through a clean form.

3

Implement automatic ticket assignment

Create a backend workflow called 'assign-ticket' with a Ticket parameter. Search for Agent_Profiles where categories_handled contains the Ticket's category AND is_available is yes, sorted by current_tickets ascending (assigns to the least-loaded agent). Make changes to the Ticket: assigned_to = first result's user. Make changes to the Agent_Profile: current_tickets = current_tickets + 1. Send an email notification to the assigned agent. If no available agent is found, keep the ticket unassigned and send an alert to the admin.

Expected result: New tickets are automatically assigned to the least-loaded available agent handling that category.

4

Build the agent dashboard

Create an 'agent-dashboard' page. Add filter tabs: My Tickets, Unassigned, All Open. Add a Repeating Group showing Tickets filtered by the active tab (My Tickets: assigned_to = Current User AND status is not closed). Each row shows ticket number, title, category badge, priority badge (color-coded: red for Urgent, orange for High, yellow for Medium, green for Low), submitter name, created time, and SLA countdown. Clicking a ticket opens the detail view. Add summary counts at the top: Open, In Progress, Overdue (sla_deadline < now AND status is not resolved).

Expected result: Agents see a dashboard of their assigned tickets with priority indicators and SLA countdowns.

5

Create the ticket detail view with comments

Create a 'ticket' page (type: Ticket) showing all ticket details, a status change dropdown (agents can update status), and a Comments section. The Comments section has a Repeating Group of Ticket_Comments sorted by created_at, with each showing author, timestamp, text, and an 'Internal' badge for internal notes. Add a Multiline Input, a Checkbox for 'Internal note' (visible to agents only), and a Post Comment button. The workflow creates the comment. When status changes to 'resolved', set resolved_at to now and decrement the agent's current_tickets count.

Expected result: Agents can view ticket details, update status, and communicate via comments with internal note support.

6

Implement SLA tracking and escalation

Create a scheduled backend workflow called 'check-sla' that runs every 15 minutes. It searches for Tickets where sla_deadline < Current Date/Time AND status is not resolved/closed. For each overdue ticket, send an escalation email to the assigned agent and their manager. If a ticket has been overdue for more than double its SLA period, auto-escalate by reassigning to a senior agent. Log escalation events in a Ticket_Comment as an internal system note. Add an SLA status indicator on the dashboard: green (within SLA), yellow (within 1 hour of deadline), red (overdue).

Expected result: Overdue tickets are automatically flagged, escalated, and reassigned with email notifications.

Complete working example

Workflow summary
1TICKETING SYSTEM SUMMARY
2=========================
3
4DATA TYPES:
5 Ticket: title, description, category, priority, status,
6 submitter (User), assigned_to (User), created_at,
7 resolved_at, sla_deadline
8 Agent_Profile: user, categories_handled (list), is_available,
9 current_tickets (number)
10 Ticket_Comment: ticket, author (User), text, is_internal, created_at
11
12SLA DEADLINES BY PRIORITY:
13 Urgent: created_at + 4 hours
14 High: created_at + 8 hours
15 Medium: created_at + 24 hours
16 Low: created_at + 48 hours
17
18AUTO-ASSIGNMENT:
19 Backend workflow: assign-ticket
20 Search Agent_Profiles:
21 categories_handled contains ticket's category
22 is_available = yes
23 Sorted by current_tickets ascending
24 Assign to first result (least loaded)
25
26ESCALATION (every 15 min):
27 Backend workflow: check-sla
28 Search Tickets: sla_deadline < now AND not resolved
29 For each:
30 Email agent + manager
31 If 2x overdue: reassign to senior agent
32 Log escalation as internal comment
33
34STATUS FLOW:
35 open in-progress waiting resolved closed
36
37DASHBOARD VIEWS:
38 My Tickets: assigned_to = Current User, not closed
39 Unassigned: assigned_to is empty, status = open
40 All Open: status is not closed
41 Overdue: sla_deadline < now AND not resolved

Common mistakes when developing a ticketing system in Bubble.io: Step-by-Step Guide

Why it's a problem: Not calculating SLA deadlines based on priority level

How to avoid: Calculate sla_deadline dynamically: Urgent = 4h, High = 8h, Medium = 24h, Low = 48h from creation time

Why it's a problem: Forgetting to decrement the agent's ticket count when a ticket is resolved

How to avoid: When a ticket status changes to 'resolved', decrement the assigned agent's current_tickets count by 1

Why it's a problem: Not separating internal and external comments

How to avoid: Add an is_internal field to Ticket_Comment and use Privacy Rules to hide internal comments from non-agent users

Best practices

  • Calculate SLA deadlines dynamically based on ticket priority
  • Use auto-assignment to distribute tickets evenly across available agents
  • Separate internal agent notes from external comments using an is_internal flag
  • Run SLA checks every 15 minutes via scheduled backend workflow
  • Decrement agent ticket counts when tickets are resolved for accurate load balancing
  • Color-code priority levels for instant visual recognition on the dashboard

Still stuck?

Copy one of these prompts to get a personalized, step-by-step explanation.

ChatGPT Prompt

I need to build an internal IT support ticketing system in Bubble with automatic ticket assignment, SLA tracking, and escalation. Can you help me design the database schema and automation workflows?

Bubble Prompt

Help me build a support ticketing system with categories (IT, HR, Facilities), priority levels, automatic assignment to the least-loaded agent, SLA countdown timers, and escalation for overdue tickets.

Frequently asked questions

Can I integrate this with email for ticket creation?

Yes. Use an email parsing service like Mailgun or SendGrid that forwards incoming emails to a Bubble backend workflow via webhook, automatically creating tickets from email content.

How do I handle ticket categories that need different agents?

The Agent_Profile Data Type has a categories_handled list field. Each agent selects which categories they handle. The auto-assignment workflow matches ticket category to agent capabilities.

Can I add SLA business hours (excluding weekends)?

Yes, but it requires more complex date calculations. Use a backend workflow that calculates the deadline by adding only business hours, skipping weekends and holidays stored in an Option Set.

How do I prevent ticket flooding from one user?

Add rate limiting: before creating a ticket, search for Tickets where submitter = Current User AND created_at > 1 hour ago. If count exceeds a threshold (like 5), block submission and show a message.

Can I track ticket resolution time for reporting?

Yes. The resolved_at field minus created_at gives you the resolution time. Build a reporting page that calculates average resolution time by category, priority, and agent.

Can RapidDev help build a ticketing system?

Yes. RapidDev can build complete support ticketing systems with auto-assignment, SLA management, escalation workflows, reporting dashboards, and email integration.

RapidDev

Talk to an Expert

Our team has built 600+ apps. Get personalized help with your project.

Book a free consultation

Need help with your project?

Our experts have built 600+ apps and can accelerate your development. Book a free consultation — no strings attached.

Book a free consultation

We put the rapid in RapidDev

Need a dedicated strategic tech and growth partner? Discover what RapidDev can do for your business! Book a call with our team to schedule a free, no-obligation consultation. We'll discuss your project and provide a custom quote at no cost.