# How to build a helpdesk app in Bubble

- Tool: Bubble
- Difficulty: Beginner
- Time required: 30-40 min
- Compatibility: All Bubble plans (Growth plan+ recommended for backend workflows)
- Last updated: March 2026

## TL;DR

Building a helpdesk platform in Bubble involves creating a ticket submission flow, agent assignment with load balancing, SLA tracking, a knowledge base, and customer satisfaction scoring. This tutorial walks you through the database design, customer-facing ticket form, agent dashboard, automated assignment logic, and satisfaction survey workflows for a complete support system.

## Overview: Building a Helpdesk Platform in Bubble

This tutorial guides you through building a helpdesk platform in Bubble with ticket management, agent assignment, SLA tracking, and satisfaction surveys. You will create the database architecture, customer-facing submission form, agent dashboard with queue management, and automated workflows for assignment and escalation.

## Before you start

- A Bubble app with user authentication set up
- Understanding of Bubble Data Types and workflows
- Familiarity with Repeating Groups and conditional visibility
- A SendGrid or other email plugin for ticket notifications (optional)

## Step-by-step guide

### 1. Design the helpdesk database schema

In the Data tab, create these Data Types: (1) Ticket — fields: subject (text), description (text), customer (User), assigned_agent (User), status (Option Set: TicketStatus — Open/InProgress/Resolved/Closed), priority (Option Set: Priority — Low/Medium/High/Urgent), category (Option Set: TicketCategory), created_date (date), resolved_date (date), sla_deadline (date). (2) TicketMessage — fields: ticket (Ticket), sender (User), message (text), is_internal_note (yes/no). (3) KnowledgeBase — fields: title (text), content (text), category (Option Set: TicketCategory), view_count (number). (4) SatisfactionRating — fields: ticket (Ticket), rating (number 1-5), comment (text). Create Option Sets for TicketStatus, Priority, and TicketCategory with relevant options.

**Expected result:** Your database has all Data Types needed for ticket management, messaging, knowledge base, and satisfaction tracking.

### 2. Build the customer ticket submission form

Create a 'submit-ticket' page. Add a form group containing: a Text Input for subject, a Multiline Input for description, a Dropdown for category (data source: Option Set TicketCategory), and a File Uploader for attachments. Add a Submit button. The workflow on Submit: (1) Create a new Ticket with customer = Current User, status = Open, priority = Medium (default), created_date = Current date/time, and sla_deadline = Current date/time + 24 hours (for standard SLA). (2) Send a confirmation email to the customer. (3) Navigate to a 'ticket-detail' page showing the created ticket.

> Pro tip: Add a knowledge base search above the form — search KnowledgeBase articles matching the subject text and display suggestions before the user submits a ticket. This deflects common questions.

**Expected result:** Customers can submit support tickets with subject, description, category, and attachments, receiving a confirmation email.

### 3. Create the agent dashboard with ticket queue

Create an 'agent-dashboard' page (visible only when Current User's role is Agent or Admin). Add a Repeating Group showing open tickets: Do a Search for Tickets with constraints: status is not Closed, sorted by priority (Urgent first) then created_date (oldest first). In each cell, display the ticket subject, customer name, priority (with color coding using Conditionals — red for Urgent, orange for High, yellow for Medium, green for Low), time since creation, and SLA status. Add filter dropdowns above the Repeating Group for status, priority, category, and assigned agent. Add a tab for 'My Tickets' filtered to assigned_agent = Current User.

**Expected result:** Agents see a prioritized ticket queue with color-coded priorities, filters, and a personal assignments tab.

### 4. Implement automated ticket assignment

When a new ticket is created, use a backend workflow to assign it automatically. The logic: Do a Search for Users where role = Agent, sorted by active_ticket_count ascending (a computed field), and pick the first item. This implements round-robin load balancing — the agent with the fewest open tickets gets the next one. Update the Ticket's assigned_agent field and increment the agent's active_ticket_count. Send a notification to the assigned agent. For manual reassignment, add a dropdown on the ticket detail page listing all agents, with a workflow that changes assigned_agent and sends a notification.

**Expected result:** New tickets are automatically assigned to the least-busy agent, and managers can manually reassign tickets.

### 5. Add SLA tracking and escalation

Each ticket has an sla_deadline field set at creation based on priority (Urgent: 4 hours, High: 8 hours, Medium: 24 hours, Low: 48 hours). Create a scheduled backend workflow that runs every 15 minutes, searching for Tickets where status is not Resolved, status is not Closed, and sla_deadline is less than Current date/time. For each overdue ticket, change the priority to the next level up (Medium → High, High → Urgent), send an alert email to the team lead, and add an internal note to the TicketMessage thread. On the agent dashboard, add a Conditional on each ticket cell: when sla_deadline is less than Current date/time + 1 hour, show a red warning icon.

**Expected result:** Tickets approaching or past their SLA deadline are automatically escalated in priority with notifications sent to supervisors.

### 6. Build the satisfaction survey workflow

When an agent changes a Ticket status to Resolved, trigger a workflow that sends an email to the customer with a link to a satisfaction survey page. The survey page (type = Ticket) displays: a rating selector (1-5 stars using clickable icons with a custom state for the selected rating), a comment textarea, and a Submit button. The Submit workflow creates a SatisfactionRating record linked to the ticket. On the agent dashboard, add a metrics section showing average satisfaction score (from a stored computed field updated after each rating) and recent feedback. This data helps identify top performers and areas for improvement.

**Expected result:** Customers receive a satisfaction survey after ticket resolution, and agents see aggregated satisfaction scores on their dashboard.

## Complete code example

File: `Workflow summary`

```text
HELPDESK PLATFORM ARCHITECTURE
================================

DATA TYPES:
  Ticket:
    - subject: text
    - description: text
    - customer: User
    - assigned_agent: User
    - status: Option Set (Open/InProgress/Resolved/Closed)
    - priority: Option Set (Low/Medium/High/Urgent)
    - category: Option Set (TicketCategory)
    - created_date: date
    - resolved_date: date
    - sla_deadline: date

  TicketMessage:
    - ticket: Ticket
    - sender: User
    - message: text
    - is_internal_note: yes/no

  KnowledgeBase:
    - title: text
    - content: text
    - category: Option Set (TicketCategory)
    - view_count: number

  SatisfactionRating:
    - ticket: Ticket
    - rating: number (1-5)
    - comment: text

SLA DEADLINES BY PRIORITY:
  Urgent: created_date + 4 hours
  High: created_date + 8 hours
  Medium: created_date + 24 hours
  Low: created_date + 48 hours

KEY WORKFLOWS:
  Ticket Submission:
    → Create Ticket (status: Open)
    → Set SLA deadline based on priority
    → Auto-assign to least busy agent
    → Send confirmation email to customer
    → Send notification to assigned agent

  SLA Escalation (scheduled, every 15 min):
    → Search Tickets where SLA deadline passed
    → Upgrade priority one level
    → Notify team lead
    → Add internal note

  Ticket Resolution:
    → Change status to Resolved
    → Set resolved_date
    → Send satisfaction survey email
    → Decrement agent active_ticket_count

  Satisfaction Survey:
    → Create SatisfactionRating
    → Update agent average score
```

## Common mistakes

- **Displaying all tickets in a single Repeating Group without pagination** — As ticket volume grows, loading hundreds or thousands of tickets at once causes extreme slowdowns and high workload unit consumption Fix: Paginate the ticket queue to 20-30 items per page and use filters to narrow results by status, priority, and assignment
- **Not using internal notes versus customer-visible messages** — Without separating internal notes from customer messages, agents might accidentally share internal discussions with customers Fix: Add an is_internal_note yes/no field to TicketMessage and filter customer-facing views to show only messages where is_internal_note is no
- **Calculating SLA status dynamically on every page load** — Comparing every ticket's SLA deadline to the current time on page load is expensive with many tickets open Fix: Use a scheduled backend workflow to flag overdue tickets with a field like is_sla_breached and display based on that field

## Best practices

- Use Option Sets for ticket statuses, priorities, and categories — they load instantly with zero database cost
- Store computed metrics like average satisfaction score as fields rather than calculating on every page load
- Separate internal notes from customer-visible messages using a boolean field
- Paginate ticket queues and use filters to keep the agent dashboard responsive
- Set SLA deadlines at ticket creation based on priority level for consistent tracking
- Use backend workflows for automated assignment and escalation to ensure they run even if the page closes
- Add a knowledge base search before the ticket form to deflect common questions

## Frequently asked questions

### Can I build a helpdesk on Bubble's free plan?

You can build the core ticketing functionality on the free plan, but you will need a paid plan for backend workflows (automated assignment, SLA escalation), custom domains, and higher workload unit limits as ticket volume grows.

### How does automatic agent assignment work?

A backend workflow searches for all agents and sorts by their active open ticket count ascending. The first result (least busy agent) is assigned to the new ticket. This creates a simple load-balanced round-robin system.

### Can I integrate email so customers submit tickets by email?

Yes. Use a service like Mailgun or SendGrid with a webhook that fires when an email is received at your support address. The webhook triggers a Bubble backend workflow that creates a Ticket from the email subject and body.

### How do I track SLA compliance over time?

Add a resolved_within_sla yes/no field to Tickets. When a ticket is resolved, check if resolved_date is before sla_deadline. Build a dashboard showing the percentage of tickets resolved within SLA grouped by week or month.

### Can RapidDev help build a helpdesk platform in Bubble?

Yes. RapidDev can build a complete helpdesk solution including automated assignment, SLA escalation, email integration, knowledge base, and analytics dashboards tailored to your support team's specific workflow.

### What happens when all agents are at full capacity?

Set a maximum ticket limit per agent. If all agents are at capacity, leave the ticket unassigned and notify the team lead. Add a condition in the assignment workflow that skips agents whose active_ticket_count exceeds the threshold.

---

Source: https://www.rapidevelopers.com/bubble-tutorial/use-bubble-to-build-a-helpdesk-platform
© RapidDev — https://www.rapidevelopers.com/bubble-tutorial/use-bubble-to-build-a-helpdesk-platform
