# How to Build a Tracking System in Bubble

- Tool: Bubble
- Difficulty: Beginner
- Time required: 25-30 min
- Compatibility: All Bubble plans
- Last updated: March 2026

## TL;DR

A tracking system in Bubble uses a TrackableItem Data Type with status fields and a StatusUpdate Data Type recording each change with timestamps. This tutorial covers building the data model for tracking orders, packages, or tasks, creating a timeline view of status changes, implementing automated notifications when status updates occur, and building real-time tracking dashboards for both administrators and end users.

## Overview: Tracking System in Bubble

This tutorial shows you how to build a generic tracking system that can be applied to orders, shipments, tasks, or any item that moves through status stages.

## Before you start

- A Bubble app on any plan
- Basic understanding of Data Types and Workflows
- Familiarity with Repeating Groups and conditional formatting
- An item type you want to track (orders, packages, tasks)

## Step-by-step guide

### 1. Design the tracking data model

Create two Data Types. 'TrackableItem' with: tracking_id (text — unique identifier), title (text), current_status (Option Set), owner (User), assigned_to (User), created_date (date), estimated_completion (date). 'StatusUpdate' with: item (TrackableItem), old_status (text), new_status (text), updated_by (User), notes (text), Created Date (auto). Create a 'TrackingStatus' Option Set with your stages: Pending, Processing, In Transit, Delivered (or whatever fits your use case). Add a display_order attribute to the Option Set.

**Expected result:** A data model supporting item tracking with full status change history.

### 2. Build the status update workflow

Create a workflow for updating item status. When the status change button is clicked: first create a StatusUpdate record capturing the old and new status, then Make changes to the TrackableItem setting current_status to the new value. This two-step approach maintains a complete history while keeping the current status easily accessible. Add a notes Input so the updater can add context to the change. Trigger notifications after the status update.

**Expected result:** Status changes are recorded in a history log while the current status is updated on the item.

### 3. Create a visual timeline of status changes

On the item detail page, add a vertical timeline UI. Use a Repeating Group of StatusUpdate where item = current item, sorted by Created Date ascending. Each cell shows: a colored dot (green for positive statuses, gray for neutral, red for issues), the status name, timestamp formatted as 'March 28, 2026 at 2:30 PM', the updater's name, and any notes. Connect the dots with a vertical line using a thin Group with a colored border. Style the most recent update as larger and highlighted.

**Expected result:** A visual timeline shows the complete history of status changes for each tracked item.

### 4. Automate notifications on status changes

After creating a StatusUpdate in the workflow, add notification actions. Send an in-app notification to the item owner when status changes. Send an email with the new status and any notes. For important transitions (like 'Delivered'), send a push notification if configured. Create different email templates for each status transition to provide relevant information. You can also send notifications to the assigned_to user if the status requires their action.

> Pro tip: Use database triggers on StatusUpdate creation to decouple notification logic from the update workflow. This keeps workflows clean and notifications reliable.

**Expected result:** Stakeholders receive automated notifications via in-app alerts and email when statuses change.

### 5. Build tracking dashboards

Create two dashboard views. For administrators: a summary page showing counts per status (how many items in each stage), a table of all items with filtering by status, assigned user, and date range, and alerts for items stuck in a status too long. For end users: a simple tracking page where they enter a tracking ID and see their item's current status, timeline, and estimated completion. Add a progress bar showing the item's position in the overall workflow using the status display_order relative to total stages.

**Expected result:** Admins see operational dashboards and users can track their items with progress visualization.

## Complete code example

File: `Workflow summary`

```text
TRACKING SYSTEM SUMMARY
=====================================

DATA MODEL:
  TrackableItem: tracking_id, title,
    current_status (Option Set), owner,
    assigned_to, created_date, est_completion
  StatusUpdate: item, old_status, new_status,
    updated_by, notes, Created Date
  TrackingStatus: Option Set with display_order

STATUS UPDATE WORKFLOW:
  1. Create StatusUpdate (history record)
  2. Make changes to TrackableItem
     → current_status = new status
  3. Send notifications (in-app + email)

TIMELINE VIEW:
  RG: StatusUpdates for item (asc by date)
  Cell: colored dot, status, time, user, notes
  Vertical line connecting dots
  Latest update highlighted

PROGRESS BAR:
  Width = (current status order / total stages) %
  Color: green for on-track, yellow for delayed

ADMIN DASHBOARD:
  Status counts per stage
  Item table with filters
  Stuck items alert (status unchanged > X days)

USER TRACKING:
  Input: tracking ID
  Display: current status, timeline, ETA
  Progress bar visualization
```

## Common mistakes

- **Updating the item status without creating a history record** — Without StatusUpdate records, you lose the timeline of when each change happened and who made it Fix: Always create a StatusUpdate record before changing the current_status field on the item
- **Not validating status transitions** — Allowing any status to transition to any other status creates inconsistent data (e.g., jumping from Pending to Delivered) Fix: Define allowed transitions and add Only When conditions to prevent invalid status changes
- **Searching StatusUpdates inside each timeline cell for additional data** — Nested searches in the timeline Repeating Group multiply queries and slow down the page Fix: Store all necessary display data directly on the StatusUpdate record at creation time

## Best practices

- Record every status change as a separate StatusUpdate for complete history
- Use Option Sets with display_order for consistent status progression
- Validate status transitions to prevent invalid changes
- Send automated notifications on every status change
- Show a progress bar relative to total stages for visual tracking
- Alert admins about items stuck in a status beyond expected timeframes
- Archive completed items periodically to maintain dashboard performance

## Frequently asked questions

### Can I track different types of items with the same system?

Yes. Add a 'type' field to TrackableItem and create different TrackingStatus Option Sets for each type. Filter dashboards by item type.

### How do I handle items that go backwards in status?

The StatusUpdate history records all changes regardless of direction. Define allowed transitions in your workflow logic to control which backward moves are permitted.

### Can end users update the status?

Typically, only administrators or assigned users update status. End users can view the timeline and current status. Control this with role-based access on the status update workflow.

### How do I calculate estimated delivery time?

Track average time spent in each status stage across all items. Sum the remaining stage averages from the current status to calculate the estimated completion.

### Can I send SMS notifications for status changes?

Yes. Integrate Twilio via the API Connector and add an SMS sending step to the status update workflow alongside the email notification.

### Can RapidDev help build a tracking system?

Yes. RapidDev can build complete tracking systems in Bubble including real-time updates, SMS/email notifications, customer portals, and analytics dashboards.

---

Source: https://www.rapidevelopers.com/bubble-tutorial/develop-a-tracking-system-in-bubble
© RapidDev — https://www.rapidevelopers.com/bubble-tutorial/develop-a-tracking-system-in-bubble
