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

How to build a multi-vendor marketplace in Bubble.io: Step-by-Step Guide

Building a multi-vendor marketplace in Bubble requires a carefully designed data structure with separate User roles, a Product listing system, an order management workflow, and a commission-based payment split. This tutorial covers the full architecture from vendor onboarding to buyer checkout to payout tracking.

What you'll learn

  • How to design a marketplace data structure with vendor and buyer roles
  • How to build vendor onboarding and product listing workflows
  • How to create order management with status tracking
  • How to set up commission-based payment splits
Book a free consultation
4.9Clutch rating
600+Happy partners
17+Countries served
190+Team members
Advanced7 min read45-60 minGrowth plan+ (backend workflows and higher WU limits needed)March 2026RapidDev Engineering Team
TL;DR

Building a multi-vendor marketplace in Bubble requires a carefully designed data structure with separate User roles, a Product listing system, an order management workflow, and a commission-based payment split. This tutorial covers the full architecture from vendor onboarding to buyer checkout to payout tracking.

Overview: Building a Multi-Vendor Marketplace in Bubble

A multi-vendor marketplace like Etsy or Fiverr is one of the most complex apps you can build in Bubble, but it is also one of Bubble's strongest use cases. Companies like Comet and Codemap have built successful marketplaces generating millions on the platform. This tutorial covers the complete architecture — data design, vendor management, product listings, search, orders, and commission payments.

Prerequisites

  • A Bubble app on a Growth plan or above (for backend workflows and WU capacity)
  • Basic experience with Bubble Data Types, workflows, and Repeating Groups
  • A Stripe account for payment processing
  • The Stripe plugin installed in your Bubble app

Step-by-step guide

1

Design the core Data Types

Go to the Data tab and create these Data Types. User (built-in): add fields for role (Option Set: Buyer, Vendor, Admin), store_name (text), store_description (text), stripe_account_id (text), and approved (yes/no). Product: title (text), description (text), price (number), images (image, list), category (Category Option Set), vendor (User), active (yes/no), inventory (number). Order: buyer (User), vendor (User), products (list of OrderItem), total (number), status (Option Set: Pending, Paid, Shipped, Delivered, Cancelled), commission_amount (number). OrderItem: product (Product), quantity (number), price_at_purchase (number).

Pro tip: Store the price at the time of purchase in OrderItem, not just a reference to the Product. Prices may change later.

Expected result: A complete data structure supporting vendors, products, orders, and order items.

2

Build the vendor onboarding flow

Create a page called vendor-signup. Add inputs for store name, store description, and any verification documents. The Submit workflow should: (1) Make Changes to Current User setting role to Vendor, store_name, and store_description. (2) Set approved to no (admin must approve). (3) Send an email notification to the admin. Create an admin dashboard page with a Repeating Group showing Users where role = Vendor AND approved = no. Add an Approve button that sets approved to yes.

Expected result: Vendors can apply to sell, and admins can review and approve vendor accounts.

3

Create the product listing and management system

Create a page called vendor-dashboard. Add a section for adding new products with inputs for title, description, price, category dropdown (from Option Set), image uploader (multi-file), and inventory count. The Save Product workflow creates a new Product with vendor set to Current User. Below the form, add a Repeating Group showing Products where vendor = Current User. Each cell should have Edit and Delete buttons with corresponding workflows.

Expected result: Vendors can add, edit, and manage their product listings from a dedicated dashboard.

4

Build the marketplace browse and search pages

Create the main marketplace page. Add a category filter dropdown, a search input, and a Repeating Group of Products where active = yes AND vendor's approved = yes. Connect the search input and category dropdown as constraints with Ignore empty constraints checked. Inside each cell, display the product image, title, price, vendor name, and an Add to Cart button. Add a product detail page (type: Product) showing full product info.

Expected result: Buyers can browse, search, and filter products from all approved vendors.

5

Implement the shopping cart and checkout

Create a Cart Data Type with buyer (User) and items (list of CartItem). CartItem has product (Product), quantity (number). When Add to Cart is clicked, check if the buyer has an existing Cart — if not, create one. Add a CartItem for the selected product. Build a cart page showing all CartItem records in a Repeating Group with quantity controls and a total calculation. For checkout, use the Stripe plugin's Checkout action to create a Stripe Checkout session with the total amount.

Pro tip: Calculate the total server-side in a backend workflow to prevent price manipulation on the client side.

Expected result: Buyers can add products to a cart, adjust quantities, and proceed to Stripe Checkout.

6

Set up commission-based payment and order creation

After successful payment (using a Stripe webhook that triggers a backend workflow), create an Order record with the buyer, total, and status set to Paid. Create OrderItem records for each cart item. Calculate the commission (e.g., 10% of total) and store it in commission_amount. For payouts, you have two approaches: (1) Use Stripe Connect to split payments at checkout time, or (2) Track balances in a VendorBalance Data Type and process payouts manually via Stripe Transfer. Clear the buyer's cart after order creation.

Expected result: Orders are created after payment, commissions are calculated, and vendor payouts are tracked.

Complete working example

Workflow summary
1MARKETPLACE ARCHITECTURE SUMMARY
2==================================
3
4DATA TYPES:
5 User (built-in):
6 - role (Option Set: Buyer, Vendor, Admin)
7 - store_name (text)
8 - store_description (text)
9 - stripe_account_id (text)
10 - approved (yes/no)
11
12 Product:
13 - title (text)
14 - description (text)
15 - price (number)
16 - images (image, list)
17 - category (Category Option Set)
18 - vendor (User)
19 - active (yes/no)
20 - inventory (number)
21
22 Cart:
23 - buyer (User)
24 - items (CartItem, list)
25
26 CartItem:
27 - product (Product)
28 - quantity (number)
29
30 Order:
31 - buyer (User)
32 - vendor (User)
33 - items (OrderItem, list)
34 - total (number)
35 - status (Option Set: Pending, Paid, Shipped, Delivered, Cancelled)
36 - commission_amount (number)
37 - commission_rate (number, default: 0.10)
38
39 OrderItem:
40 - product (Product)
41 - quantity (number)
42 - price_at_purchase (number)
43
44KEY WORKFLOWS:
45 Vendor Apply:
46 Make Changes to User: role=Vendor, approved=no
47 Send email to admin
48
49 Admin Approve:
50 Make Changes to Vendor: approved=yes
51 Send email to vendor
52
53 Add to Cart:
54 Find or create Cart for Current User
55 Create CartItem (product, quantity=1)
56 Add CartItem to Cart's items
57
58 Checkout:
59 Calculate total (server-side)
60 Stripe Checkout Session
61 On success webhook: Create Order + OrderItems
62 commission_amount = total * 0.10
63 Clear cart
64
65 Order Status Update:
66 Vendor marks as Shipped
67 System tracks delivery
68 On Delivered: trigger payout workflow
69
70PAGES:
71 - marketplace (browse/search products)
72 - product-detail (type: Product)
73 - vendor-signup
74 - vendor-dashboard (manage listings)
75 - cart
76 - checkout
77 - order-history (buyer)
78 - vendor-orders (vendor)
79 - admin-dashboard (approve vendors, view all orders)

Common mistakes when building a multi-vendor marketplace in Bubble.io: Step-by-Step Guide

Why it's a problem: Storing prices only as references to the Product record

How to avoid: Store price_at_purchase in OrderItem as a snapshot of the price when the order was placed

Why it's a problem: Calculating order totals client-side only

How to avoid: Always calculate the total in a backend workflow and pass that value to Stripe, not the client-side total

Why it's a problem: Not separating orders by vendor

How to avoid: Create separate Order records for each vendor in a multi-vendor cart, each with their own status tracking

Why it's a problem: Letting unapproved vendors list products

How to avoid: Add an approved field to the User and filter the marketplace to only show Products where vendor's approved = yes

Best practices

  • Snapshot prices in OrderItem at the time of purchase to prevent retroactive price changes
  • Calculate order totals server-side in backend workflows for security
  • Create separate orders per vendor when a cart has products from multiple vendors
  • Require admin approval before vendors can list products
  • Use Stripe Connect for automated payment splitting between marketplace and vendors
  • Implement inventory tracking that decrements on purchase and prevents overselling
  • Build separate dashboards for buyers, vendors, and admins with role-based access

Still stuck?

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

ChatGPT Prompt

I want to build a multi-vendor marketplace in Bubble.io similar to Etsy. I need vendor onboarding, product listings, a shopping cart, Stripe checkout with commission splitting, and separate dashboards for buyers and vendors. Can you outline the complete data structure and key workflows?

Bubble Prompt

Build a multi-vendor marketplace for my app. I need vendor registration with admin approval, product listing management, a shopping cart, Stripe checkout with 10% commission, and order tracking. Set up the Data Types and core workflows.

Frequently asked questions

Can Bubble handle a marketplace with thousands of products?

Yes, with optimization. Use database constraints (not :filtered), paginate Repeating Groups, optimize images, and consider a Growth or Team plan for adequate WU capacity. Marketplaces with 10,000+ active listings may need performance tuning.

How do I handle payments to multiple vendors?

Use Stripe Connect with the Express account type. Each vendor connects their Stripe account during onboarding. At checkout, create a payment with automatic splits using the Stripe plugin's transfer_data parameter.

Should I use one Order per cart or one per vendor?

One per vendor is strongly recommended. Each vendor handles their own shipping and status updates. A single order with multiple vendors creates complex status tracking issues.

How do I prevent inventory overselling?

In the checkout backend workflow, check inventory before creating the order. Use Make Changes to decrement inventory immediately. For high-traffic items, consider a reservation system with a timeout.

What Bubble plan do I need for a marketplace?

At minimum Growth ($119/mo) for adequate WUs, backend workflows, and storage. A marketplace with significant traffic will likely need Team ($349/mo). Monitor your WU usage closely as you scale.

Is it better to build a marketplace from scratch or use a template?

Templates give you a head start but often need significant customization. Building from scratch using this tutorial gives you full control. For production marketplaces, RapidDev can help architect and build a scalable marketplace with proper payment infrastructure.

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.