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
Design the core Data Types
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.
Build the vendor onboarding flow
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.
Create the product listing and management system
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.
Build the marketplace browse and search pages
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.
Implement the shopping cart and checkout
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.
Set up commission-based payment and order creation
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
1MARKETPLACE ARCHITECTURE SUMMARY2==================================34DATA 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)1112 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)2122 Cart:23 - buyer (User)24 - items (CartItem, list)2526 CartItem:27 - product (Product)28 - quantity (number)2930 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)3839 OrderItem:40 - product (Product)41 - quantity (number)42 - price_at_purchase (number)4344KEY WORKFLOWS:45 Vendor Apply:46 → Make Changes to User: role=Vendor, approved=no47 → Send email to admin4849 Admin Approve:50 → Make Changes to Vendor: approved=yes51 → Send email to vendor5253 Add to Cart:54 → Find or create Cart for Current User55 → Create CartItem (product, quantity=1)56 → Add CartItem to Cart's items5758 Checkout:59 → Calculate total (server-side)60 → Stripe Checkout Session61 → On success webhook: Create Order + OrderItems62 → commission_amount = total * 0.1063 → Clear cart6465 Order Status Update:66 → Vendor marks as Shipped67 → System tracks delivery68 → On Delivered: trigger payout workflow6970PAGES:71 - marketplace (browse/search products)72 - product-detail (type: Product)73 - vendor-signup74 - vendor-dashboard (manage listings)75 - cart76 - checkout77 - 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.
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?
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.
Talk to an Expert
Our team has built 600+ apps. Get personalized help with your project.
Book a free consultation