TL;DR: A marketplace app connects independent buyers and sellers, usually earning a commission per sale. Start with one niche, choose a platform supporting split payments and buyer-seller permissions, build search, payouts, reviews, messaging, and privacy rules, then recruit sellers first.
A marketplace app is one of the most popular app ideas, and one of the hardest to get off the ground. The idea is straightforward enough: Connect buyers and sellers and take a cut of each sale.
A two-sided marketplace, where buyers and sellers both participate independently, is more complex than a standard app because you’re building for two different people at once. Your platform has to work for both sides, or it works for neither.
In this guide, you’ll learn how to compare platforms and costs, set up your database and search page, add seller tools and scheduled emails, connect Stripe payouts, build reviews and messaging, and set privacy rules before you launch.
What is a marketplace app?
A marketplace app like Etsy, Airbnb, or Upwork connects independent buyers and sellers so they can find each other and transact, and the platform usually earns a commission or fee on each sale. To build one, you pick a niche and the one transaction your marketplace exists for, choose a platform, and set up a database for listings and sellers. Then you add search, seller tools, split payments, reviews, messaging, and privacy rules before you invite your first buyers and sellers.
In an e-commerce store, one business sells its own products. A marketplace owner usually doesn’t sell anything directly and instead builds the search, payments, and other tools that make each sale possible, much like running a mall instead of a store. Some marketplaces, such as Amazon, do both by selling their own inventory alongside third-party sellers.
When a marketplace gets traction, it benefits from network effects because more sellers attract more buyers, which attracts more sellers.
One-sided vs. two-sided marketplaces
Marketplaces fall into two broad categories:
- One-sided marketplaces: The platform manages the supply and listings centrally. The RealReal and Toptal work this way.
- Two-sided marketplaces: Sellers create profiles, manage their own inventory, set prices, and talk to buyers, while the platform provides the tools. Airbnb and Upwork work this way.
How marketplace apps make money
Most marketplaces combine one or more of these revenue models:
| How it works | Works best when | |
|---|---|---|
| Commission per transaction | The platform keeps a percentage or fee from each sale, so you earn more when your sellers do. | You're just launching, since sellers pay only after they make a sale |
| Listing fees | Sellers pay to post each item. | Listings are high-value, like vehicles or rentals |
| Seller subscriptions | Sellers pay monthly for access or premium tools. | You want more predictable revenue and already have steady buyers |
| Featured listings | Sellers pay to appear at the top of search results. | Buyers search often enough that top placement drives sales |
Unlike commission, the other three models ask sellers to pay before they’ve made a sale, so they work best once your marketplace has steady buyers.
Examples of marketplace apps
The best-known marketplaces each solve a trust problem between strangers:
- Product marketplaces: Amazon Marketplace lists third-party sellers alongside Amazon’s own inventory, eBay supports auctions and fixed-price listings, and Etsy is known for handmade and vintage goods.
- Service marketplaces: Uber matches drivers with riders, and TaskRabbit connects people with local help.
- Digital and freelance marketplaces: Fiverr connects businesses with freelancers and holds payment until the work is delivered.
Each of these started with one niche and a short list of features.
What features does a marketplace app need?
Most marketplaces eventually need these seven core features. You can launch with fewer, but each one has to work for both sides:
- User authentication and profiles: Buyers and sellers get separate account types, each with its own permissions.
- Search and filtering: Buyers find what they want with keyword search, filters, and sorting.
- Listing management: Sellers add products, photos, and prices, and keep their inventory current.
- Secure payments: Each payment splits into the seller’s payout and your fee. Most marketplaces use a provider like Stripe, which also handles refunds, disputes, and tax forms.
- Reviews and ratings: Reviews help buyers trust sellers they don’t know, and limiting them to completed orders keeps them honest.
- Messaging and notifications: Buyers and sellers can talk directly, and automated emails keep everyone updated on orders and promotions.
- Admin tools: You’ll need a way to review listings, settle disputes, and remove bad actors on either side.
Start with a focused MVP
The fastest way to stall is to build every feature before anyone uses your marketplace. Start with one niche and the one transaction it exists for, and talk to a handful of sellers and buyers before you build. Your MVP only needs enough to complete that transaction safely, and everything else can wait until users ask for it.
This tutorial walks you through building each of these, from search and seller tools to payments, reviews, and messaging. First, though, you’ll need to decide where to build.
How to choose a platform for your marketplace app
Before you build, decide where your marketplace will live. The marketplace app builder or approach you pick shapes how far you can customize it and whether you can change it yourself as you grow.
| Good fit when | What to check | |
|---|---|---|
| Marketplace-specific builders like Sharetribe | Your marketplace follows a common model, like renting out spaces or selling products | Whether unusual booking rules or custom logic need extra configuration or a developer |
| Traditional no-code tools like Softr and FlutterFlow | You want to build on an existing data source like Airtable, or want a mobile app with exportable code | How split payments, buyer and seller roles, and server-side logic are handled |
| Visual development tools like Bubble | You want to see and change every part of your marketplace yourself, including payouts and permissions | The time it takes to learn the visual editor |
| Frontend-backend combinations like WeWeb with Xano | You think in APIs and want flexibility on both sides of the app | The work of managing two platforms, two subscriptions, and the API connections between them |
| AI coding tools | You want a first version up fast from prompts | How you'll change logic and data, which stay in code, once buyers and sellers depend on the app |
| Custom development | You need a fully custom build at large scale | The budget and timeline before launch, and who makes every change after |
Marketplace-specific builders like Sharetribe
Sharetribe starts you with the pieces most marketplaces share: listings, profiles, search, and transaction flows with payments. If your marketplace follows a common model, it’s often the quickest way to launch.
You can customize its data, transactions, and bookings, but if your marketplace works differently from the usual models, expect extra setup or a need for a developer.
Traditional no-code tools like Softr and FlutterFlow
Softr builds portals and client-facing apps on its own database or on data synced from tools like Airtable, Notion, or Google Sheets, and its AI Co-Builder can generate a first version from a prompt. It can also take Stripe payments. FlutterFlow focuses on mobile and web apps and usually connects to a backend like Firebase or Supabase for server-side logic.
Both let you shape your screens visually, but neither pays out sellers out of the box. Softr’s Stripe integration handles direct payments and subscriptions, and FlutterFlow builders typically add Stripe Connect with custom cloud functions.
Frontend-backend combinations like WeWeb with Xano
Some builders pair a visual frontend like WeWeb with a backend like Xano, which handles the database, APIs, and server-side logic. It’s a flexible setup for builders who think in APIs, and many still use it even though WeWeb now has its own backend builder.
The trade-off is running two separate services and keeping them connected, so when something breaks, you troubleshoot across both.
AI coding tools
AI coding tools generate a working app from your prompts. They’ve inspired millions of people to start building, they get a first version up fast, and most let you adjust screens visually.
The logic and data are still code, though. To change how payouts work or who sees an order, you re-prompt or edit the code yourself, which gets harder as your marketplace grows.
If you’ve already started a marketplace in an AI coding tool, you don’t have to start over. With universal import, you can bring it into Bubble, which generates a fully visual app from it.
Custom development
Hiring developers or an agency gets you a fully custom build, which some marketplaces need once they’re large. It’s usually slower and costs more upfront, and every change after launch goes through your engineers. That’s a big bet if you’re still testing the idea.
Questions to ask before you choose
Look past how quickly you can launch. These questions show how a platform will hold up once buyers and sellers depend on it:
- How does it handle split payments? Paying sellers minus your commission is the feature most marketplaces can’t launch without. Check whether you can set up a provider like Stripe Connect yourself or whether it takes a developer and custom code.
- Can you decide who sees what? Buyers shouldn’t see each other’s orders, and sellers shouldn’t see each other’s customers. Look for access rules you can read back later to confirm that they’re right.
- Can you change a core feature yourself six months after launch? Picture a seller asking for a new pricing option. If you can’t see how your app handles pricing well enough to change it, you’ll wait on someone else every time your business shifts.
- What happens when you grow? Find out whether hosting, scaling, and mobile are included or whether each one means another vendor and additional expense.
How much does it cost to build a marketplace app?
The cost of a marketplace app comes down to what it costs to build and what it costs to run every month, plus payment processing fees on every transaction. Hiring developers usually costs the most, while building it yourself on a platform subscription trades dollars for your own time.
What drives the cost of a marketplace
Most of your costs come from a few predictable places:
- Platform subscription: Your plan often decides whether you can go live, how much traffic your app can handle, and whether it can run scheduled tasks, so price out the plan you’ll launch on.
- Developer time: Engineers or an agency usually cost the most, and you keep paying them for every fix and feature after launch.
- Third-party services: Email, SMS, maps, and premium plugins each add to your monthly bill.
- Your own time: Building it yourself costs hours instead of dollars, and a platform you understand well keeps those hours down.
Payment processing and platform fees
Marketplace payment providers split each sale between the seller and you. They also take a cut, usually a percentage plus a small fixed fee. Depending on the pricing model, Stripe Connect may add fees per connected seller account or payout, so check Stripe’s Connect pricing page for current rates.
If you charge sellers 10%, run the numbers on a typical order to see how much of that you keep after fees.
What it costs to build a marketplace on Bubble
On Bubble, getting started is free. Generating an app with the Bubble AI Agent doesn’t use AI credits (up to a monthly limit), and neither does editing in the visual editor.
Building or editing with the Agent draws on a monthly AI credit allowance that comes with every plan. If you run out, the Agent keeps the work it’s already finished, the visual editor keeps working, and paid plans can buy more credits.
You’ll need a paid plan to go live. Starter Web is $32/month billed annually or $39/month billed monthly.
Every plan includes a built-in database and runs backend workflows, which are tasks your app handles behind the scenes or on a schedule, like the follower emails in Part 2. On the Free plan, emails and other outgoing requests have limits meant for testing.
Paid plans add going live, custom domains, and hosting. Payment provider fees are separate, and the pricing page has the full breakdown.
Why build your marketplace app on Bubble?
Bubble is the fully visual app builder where anyone can build software, understand every part of it, and control every detail without code. Every layer of your marketplace, including the logic, data, and privacy rules, is visual and editable. You can build with AI without giving up control, and you’ll know your marketplace well enough to change it as your business changes.
Start with a planning session with the Bubble AI Agent
Describe your marketplace idea to the Agent, and it starts with a planning session, asking clarifying questions and drafting a blueprint you can refine before it generates the design, database, and workflows. As it builds, it shows what it’s about to do and explains what it built in plain language, so you understand how your marketplace works as you go.
From there, you can keep chatting with the Agent or work directly in the visual editor. Use AI when you want speed or edit by hand when you want precision. If you already work in Claude or ChatGPT, the Bubble MCP (beta) lets you build your Bubble app from there too.
See and change every part of your marketplace
Workflows read as steps you could say out loud: “When a buyer clicks ‘Follow,’ create a Follow record, then add the shop to their list.” When a seller asks for a new feature, you can open the workflow, see exactly what it does, and change exactly what you meant to change the same day.
Your database is visible too, with every shop, product, and order in view. With privacy rules, you decide who sees what in your app, down to each field.
When the Agent creates a data type, it creates privacy rules for it, and you can review and adjust them yourself. That matters in a marketplace, where buyers and sellers each trust you with their own data.
You can also refine every detail of the design, so your first sellers see a marketplace that looks like your brand and doesn’t look like AI made it.
Grow on web and native mobile from one platform
Many marketplace buyers arrive on their phones. With Bubble for native mobile apps, you build iOS and Android apps in the same editor and database as your web app, then publish to both app stores from the editor. With native mobile app generation (beta), the Agent can build the iOS and Android versions from a prompt.
In-app purchases (beta) cover subscriptions only. Marketplaces selling physical goods or services typically use Stripe instead, but check each app store’s rules for your model.
Hosting and auto-scaling come with paid plans, so the marketplace you launch is the one you keep growing.
Marketplaces built on Bubble
Bubble apps transact more than $1 billion a year, and these marketplace stories show what that looks like up close:
- OhanaOhana: The sublease marketplace generated $16.2 million in host earnings in its first 14 months. “Bubble gives us an advantage because anybody can go in and easily understand what’s going on,” says co-founder Ezra Gershanok.: The sublease marketplace generated $16.2 million in host earnings in its first 14 months. “Bubble gives us an advantage because anybody can go in and easily understand what’s going on,” says co-founder Ezra Gershanok.
- BuyTicketBuyTicket: The Brazilian ticket resale marketplace reached 20,000 users in its first week. “On Bubble, you can change features fast and learn in less time than a traditional platform,” says co-founder Gustavo Celso.: The Brazilian ticket resale marketplace reached 20,000 users in its first week. “On Bubble, you can change features fast and learn in less time than a traditional platform,” says co-founder Gustavo Celso.
- EqualReachEqualReach: The marketplace for refugee and displaced professionals launched its MVP in three months and created more than 100 jobs in its first year. “If there’s a quick UI fix needed on the platform, I can jump into Bubble and update it right away,” says Product Lead Olena Voloshyna.: The marketplace for refugee and displaced professionals launched its MVP in three months and created more than 100 jobs in its first year. “If there’s a quick UI fix needed on the platform, I can jump into Bubble and update it right away,” says Product Lead Olena Voloshyna.
Part 1: Building your marketplace search page
Over the next three parts, you’ll build a bookseller marketplace on Bubble by hand. Working through each step shows you how the database, pages, and workflows fit together, so when you build with the Agent, you’ll recognize what it creates and can spot anything you want to change. Describe your marketplace to the Agent, and it will generate an app with similar logic that you can review and refine yourself.
1. Set up your database structure
Go to the data tab. Under the data types subtab, create two custom data types: “Shop” and “Product.” Then add the following custom fields:
Shop:
- Name (text): The shop’s display name, shown on every product it sells.
Product:
- Name (text): The book title. Keyword search will match against it.
- Description (text): A short summary that helps buyers decide whether to click.
- Price (number): Storing it as a number lets you filter by price range and format it as currency.
- SellerShop (Shop): Links each product to the shop that sells it, which is what makes your marketplace two-sided.
Next, define your product data type further using static options. From the option sets subtab, create three new option sets:
| Option set | Options |
|---|---|
| Book Genre | Fantasy, Romance, Thriller |
| Book Format | Print, Digital, Audiobook |
| Book Type | Novel, Comic Book, Short Stories |
Three distinct options per set make each filter quicker to test. Add more if you like, but each one adds to the filters and metadata you display later.
Now go back to your product data type and add your option sets to its structure. Click Create a new field and select each option set you created from the Field type dropdown. So your expressions read clearly later, match the Field name to the Field type.
Your database structure is ready.
2. Add sample data
Sample data is useful for testing and demoing, and it becomes critical when you add more complex features. If you generated your app with the Agent, it already includes realistic sample data you can edit or add to.
To add it, go to the app data subtab in the data tab and click New entry to add your own. Vary your products so search and filters are easier to test.
3. Build the marketplace search page
Create a new page called “search” from the page dropdown. Double-click on the page to open the property editor and set the Container layout to Column.
Set up your page skeleton. Open the component library from the toolbar at the top of your editor and drag in a header and footer.
Then add a blank group to the left-hand side for your main content. Change its layout to Row, and uncheck Make this element fixed-width.
As you work, rename your elements to keep them organized.
Now build the main search page content. Rename the row group “G Dashboard” (Group Dashboard).
Then add a new group and name it “G Filters.” You can add a Background style from the dropdown so it stands out on the page.
Next to your G Filters group, add a repeating group and rename it “RG Products” (Repeating Group Products). Give it the following settings:
- Layout: Uncheck Make this element fixed-width so that it expands to its parent container, and set the cell’s Container layout to Column to give it a top-to-bottom layout.
- Appearance: Set Type of content to “Product” and Data source to “Do a search for Products.” This tells the repeating group to show one cell for every product in your database.
Now add a text element. Under Layout, uncheck the box for fixed-width and make the Min height 5px. From Appearance, click Insert dynamic data to create the dynamic expression “Current cell’s Product’s Name.”
You’ll add several more text elements to this repeating group. You can copy and paste the first text element to keep the settings the same. Add one dynamic expression to each:
- “Current cell’s Product’s Description”: The book’s summary.
- “Current cell’s Product’s Price: formatted as Currency”: The price with a currency symbol.
- “Current cell’s Product’s SellerShop’s Name”: Who’s selling each book, pulled from the linked Shop.
- “Current cell’s Product’s Genre’s display”: The genre label. The display part turns the option set value into readable text.
- “Current cell’s Product’s Format’s display”: The format label.
- “Current cell’s Product’s Type’s display”: The type label.
Lastly, select all the content in your repeating group cell, right-click, and group the elements into a row container. Then drop a new group to the right.
Drag an icon into this group and select a heart. Then add a button and label it “Add to cart.” Adjust the spacing and alignment to match your preference.
To fix the repeating group only showing a set number of products, uncheck the Set fixed number of rows option on the repeating group.
4. Set up filters
Add a way for users to filter their search by adding the following elements to the G Filters group:
- One input: For searching by title or keyword.
- One slider: For setting a maximum price.
- Four radio buttons: One each for genre, format, type, and shop, so buyers pick one option per filter.
- One button: For clearing every filter at once.
You can also add text elements to label your filters. Add the first text element and adjust its min and max width and height settings, then duplicate it for each label.
Now tackle each input one by one.
Search bar input: There’s nothing to program here. Users only need to type into it.
Slider input: Adjust the label to include dynamic data. After “Price filter,” insert the dynamic expression “SliderInput A’s value:formatted as $.”
Then set the Min and Max values to 0 and 100 and the Step to 5 to make the slider less granular. Lastly, set the Default value to your max price so your app shows all products and all prices by default.
Radio buttons: For the Genre radio button, select Dynamic Choices under Choices style, and select Book Genre for Type of choices. Make the Choices source “All Book Genre” and the Option caption “Current option’s Display.”
Do the same for the Book Format and Book Type radio buttons.
The Shop radio button is slightly different, since it displays dynamic data (sellers) instead of option sets. Select Shop for Type of choices. Make the Choices source “Do a search for Shops” and the Option caption “Current option’s Name.”
Button: For now, label it “Clear Filters” and center it or adjust its width and height as needed. You’ll revisit it later.
Your filters are ready. Now connect everything together.
5. Connect filters to the repeating group
Modify the Data source for your RG Products repeating group. Earlier, you made it a straightforward database search. If you click the dynamic expression, you can add constraints to this search that reference each filter.
Start with Genre. Add a new constraint to the database search and set Genre = “RadioButtons A’s value.”
If you preview your app to test it, you may not see anything in the repeating group anymore. This is expected, and the fix is quick.
Go back to the Data source expression and check the Ignore empty constraints box. Now, if any of your inputs are empty, the database search won’t apply that filter.
Apply the same logic to the other radio buttons. Add a constraint that sets each field to be equal to that radio button element’s value.
Add “Price ≤ SliderInput A’s value” as a constraint. This way, only products with a price equal to or below the slider input’s value appear.
Lastly, add another constraint for your search input: “Name contains keyword(s) Input A’s value.” Use “contains keyword(s)” instead of “contains” to create a more flexible, word-based search. The two operators match text differently, and the linked manual entry explains how.
Your search and filtering functionality is now set up.
6. Implement the “Clear Filters” button functionality
Select the button you added to the bottom of the G Filters group and click Add workflow.
In the workflow tab, add one action to the new workflow. Under Element actions, select Reset a group/popup, then choose the G Filters group.
If you preview your app, you should have a fully functioning search page. Customers can browse products, search for specific titles, and filter results.
7. Optional design enhancements
You’ve completed the functionality for Part 1. Here are a few additional customizations to consider:
- Add white space between the design and page edges so the page is easier to scan.
- Add an image next to each product listing. Add an image field to the Product data type for book covers.
- Customize the font and styles in the repeating group so your marketplace looks like your brand.
- Add elements to the header, like a cart icon, a login button, or a “Sell on our marketplace” link, to give each side of your marketplace a clear entry point.
Part 2: Adding backend workflows
You don’t have to build this by hand. Ask the Agent to set up the follow feature and the scheduled-email backend workflows, and it builds them step by step. You can then review each step in the visual editor and fine-tune anything you want.
See what the Agent can build →
1. Update the database structure
Start by expanding your data structure in the data tab.
First, create a data type called “Follow” to record when a user follows a shop. It needs two custom fields: “Shop” with the Field type Shop, and “User” with the Field type User.
In the User data type, add a field called “Shops I’m Following” with the type Shop, and check This field is a list (multiple entries).
Since sellers will manage a shop, you also need a way to associate a user with the shop they own. Add another field to the User data type called “Managed Shop” of type Shop. You’ll reference this later when building seller tools.
To let shops email their followers later, create a data type called “Email” with these fields:
- “Body” (text): The message the shop sends to followers.
- “Subject Line” (text): What followers see in their inbox.
- “Shop” (Shop): The shop sending the email, used to find its followers.
- “User” (User): The seller who created the email.
- “Send Date” (date): When the email should go out, which your backend workflow reads to schedule it.
2. Build the “follow” functionality
Head back to the design tab and open your search page. Program the heart icon you added earlier so that users can follow shops.
First, add a popup named “Popup Follow Shop” to confirm that the user wants to follow this shop. It should have some basic text explaining this to the user, along with a button to confirm the follow. Design the popup however you like.
Next, add a workflow to the heart icon. Select Show an element and choose your popup from the dropdown. If any text in your popup references the particular shop, add a second step to your workflow: Display data in Popup Follow Shop.
Now that customers can open the popup, add a workflow to the popup’s follow button. The first step should be Create a new Follow. Define your two fields: User should equal the Current User, and Shop should equal the shop selling the product in that cell.
You’ll also want to update the list of shops that the user is following. To do this, add a second step to the workflow: Make changes to Current User.
Change the field Shops I’m Following to add the current product’s SellerShop (or Result of Step 1’s Shop). Now your users can follow shops.
Users will also want to unfollow shops, and you can repurpose everything you built to handle that.
On the workflow you created, add a conditional at the bottom of the property editor next to Only when. You want this event to fire only when Current User’s Shops I’m Following doesn’t contain the current product’s SellerShop. In other words, a user can only follow the shop if it isn’t already in their follow list.
To create the inverse of this workflow event, copy and paste it. Then change the conditional expression from doesn’t contain to contains, so it only fires if the user is already following the shop.
Delete the copied actions and reconstruct the workflow as needed.
First, find the Delete a thing action and set it to delete a Follow. You’ll need to perform a search for Follows and constrain it so that the follow’s user is Current User and the follow’s shop is the current shop.
These two constraints should pinpoint the right follow in your database. Confirm that you only pull one item from the search by adding :first item to the search.
You’ll also want a second step to Make changes to Current User and remove that shop from Shops I’m Following.
Now make sure the UI changes based on whether a user is following the shop. Right now, the button on your popup says Follow no matter what.
Copy the conditional you added to the workflow event so you can use it again. Then, in the design tab, find the button on that popup. Paste the conditional into the When field, and change the text to say “Unfollow.”
You can use the same conditional logic for the word “Follow” or the heart icon in your popup.
This completes the basic functionality needed on the customer’s side. Now tackle the seller’s experience.
3. Set up the shop admin page
Create a new page called “shop-admin,” adding a header or footer if you want. You’ll need these elements:
- A “Send Email” button: Opens the popup where sellers write and schedule an email.
- A repeating group of created emails: Shows each email’s subject line, body, send date, and a “delete” button for canceling anything that’s no longer relevant.
To pull the appropriate data into the email repeating group, set the Type of content to Email and the Data source to “Search for Emails” where Shop = Current User’s Managed Shop.
4. Create and delete email functionality
Next, build two popups: a schedule email popup with inputs for the subject line, body, and send date, and a simpler delete popup that confirms when someone clicks delete. Once both are designed the way you want, hook up the logic.
To create an email, make sure the button you added to your page opens the schedule email popup. Then add a workflow to the popup’s button: Create a new Email.
Define the subject line, the body, and the send date using the inputs from the popup. Define the Shop attached to the Email as Current User’s Managed Shop (the shop the current user manages), and define the User as Current User (the sender).
It’s good practice to also add a step that resets all relevant inputs, so the fields are blank the next time the user presses the button.
Now program your delete functionality. On your new delete popup, set the Type of content to Email and leave the Data source empty.
Add a workflow to your delete button with a step to Display data in a group/popup, and select your delete popup. This sends data to the popup (in this case, the email) right before it appears. Then, like before, add a step to show the popup.
Next, add a workflow to the cancel email button on the popup. Add a step that deletes the Parent Group’s Email, then hide the popup.
Now you have a way to create and delete emails, but none of them are scheduled to send yet. For that, turn to backend workflows.
5. Backend workflows: Scheduling and sending an email
Backend workflows run on every Bubble plan, including Free. On the Free plan, emails and other outgoing requests have limits meant for testing, so you’ll need a paid plan to rely on the emails in this section once your marketplace is live. Keep API workflows unexposed unless they need to be called from outside your app. If you expose an endpoint, require authentication and review the access settings before using it with live user data.
To enable backend workflows in your app, go to the settings tab and navigate to the API subtab. Check Enable Workflow API and backend workflows.
You can then open the backend workflows page from the editor’s left-hand navigation. The workflows in this tutorial are triggered from inside your app, so they don’t need to be exposed as public endpoints.
The backend workflows page works differently from the workflow tab, because backend workflows run independently of any page.
You’ll program two workflows: one that sends emails to a list of users, and another that schedules the first to run at a later time.
To start, create a new API workflow and call it “schedule-email.” Then add a parameter.
The parameter tells the workflow that it will need to interact with a data record, which you can assign dynamically later. For now, create a parameter called “email” and change its Type to Email.
Next, create another API workflow and call it “send-email.” Add a parameter called “email” with the type Email.
Now that you’ve set up your two backend workflows, program them.
For “schedule-email,” add an action and select Schedule API workflow. Set API Workflow to “send-email,” and for Scheduled date, use the email parameter’s Send Date.
When you schedule an API workflow, Bubble returns its unique ID. You’ll need that ID to cancel the workflow later, since deleting the email doesn’t cancel it.
Head to the data tab and add a new custom field to the Email data type called “Workflow ID.” Bubble generates this ID as a string of characters, so keep the type as text.
Now, back in backend workflows under “schedule-email,” add a second action: Make changes to an Email. The email to change is the email parameter.
Set the Workflow ID field to equal Result of Step 1. This attaches the record of the scheduling to the email itself.
Now tackle the “send-email” workflow. Find the Send email action, and decide whether the primary recipient should be the shop owner, a verified sender or test address, or the follower list.
For example, set the email so it goes to Current User’s email, with followers BCC’d via Do a search for Follows constrained to the right shop, then :each item’s User’s email. For Subject and Body, pull the email parameter’s subject line and body. Test this behavior in development before relying on it in production.
Your “schedule-email” workflow will fire the “send-email” workflow at the right time. Now you need to fire “schedule-email.”
Go back to the shop-admin page and find the workflow that triggers when a new email is created. Its first action should already be Create a new Email. After that step, add Schedule API workflow and choose “schedule-email.”
For Scheduled date, enter Current date/time, since the send date is handled inside that workflow. For the email, select Result of Step 1.
6. Backend workflows: Canceling an email
You have one more backend workflow to create: canceling a scheduled email. Back on the backend workflows page, create a new API workflow called “cancel-email.”
Like before, it takes in an email parameter.
Your first action will be Cancel a scheduled API workflow. This step needs the ID of the workflow to cancel, and you saved that ID on the email itself. So for Scheduled API ID, use the email’s Workflow ID.
Finally, trigger this “cancel-email” workflow from the frontend of your app. Go back to the shop-admin page and find the delete popup.
Add a step to the cancel email button: Schedule API workflow, set to cancel-email. Set Scheduled date to Current date/time so it runs right away, and pass the popup’s email through as the email parameter.
This workflow already deletes the email entry. Keep that step after the Schedule API workflow action, or move it into the backend workflow instead.
7. Final testing and the logs tab
To test everything, you need some sample users in the database. Create at least two: one as the admin (who’ll send the email) and one as a follower (who’ll receive it).
Once you create and schedule an email:
- In the data tab > app data: Verify that the email record has been created and stored in the database. Check that its Workflow ID field is filled in, which confirms that the scheduling step ran.
- In the logs tab > scheduler: Choose the correct Development or Live environment, set a date and time, and click Show to view upcoming scheduled API workflows.
Finally, if you test canceling the email, you should see that it disappears from both your database and the scheduler in the logs tab.
If something doesn’t behave the way you expect, ask the Agent why a workflow isn’t firing. Once you turn it on in your app’s settings, the Agent can also use your sample data to spot data problems.
You now have a working frontend and backend for a two-sided marketplace MVP.
Part 3: Adding payments, reviews, and messaging
Your marketplace can now show listings and let sellers reach their followers. Next, you’ll add what makes it a business buyers trust.
1. Set up payments and seller payouts with Stripe Connect
Many marketplaces take a payment from the buyer, keep a commission, and send the rest to the seller, which is what Stripe Connect is built for. Each seller connects a Stripe account, and Stripe handles payouts.
Add an “Order” data type with fields for the Product, buyer (User), Shop, amount (number), and status. Then add an Owner (User) field to Shop so each payment reaches the right seller, plus the seller’s connected Stripe account ID if you use custom API calls.
The official Stripe plugin covers many Connect flows, including seller onboarding (Connect Standard accounts only), charging on a seller’s behalf, and an app fee set as a fixed amount. For anything beyond that, use the API Connector.
You can ask the Agent to install the Stripe plugin or set up the API Connector calls for you, and the API Connector parses each response into data you can use in your workflows. Test everything with Stripe’s test mode before you accept a single real payment.
2. Build a review and rating system
New buyers rely on reviews to decide whether to trust a seller they’ve never heard of. In the data tab, create a “Review” data type with these fields:
- Rating (number): A score from 1–5, stored as a number for calculating averages.
- Comment (text): The buyer’s written review.
- Author (User): The buyer who left it, used to show a name and limit reviews to one per order.
- Product (Product) and Shop (Shop): What’s being reviewed, so reviews appear on product pages and roll up into a shop’s rating.
Add a repeating group to your product listings with the Type of content set to Review and a Data source that searches for Reviews where Product is the current product. To show a seller’s average, use a text element with “Do a search for Reviews” constrained to the shop, followed by :each item’s Rating:average.
To keep reviews honest, only show the review form to buyers who have a completed Order for that product. Add that condition in the form’s When conditional or the workflow’s Only when field.
3. Add messaging between buyers and sellers
Buyers often have a question before they buy, and sellers need a way to answer. Create two data types.
A “Conversation” has fields for the buyer (User) and the Shop. A “Message” has fields for the Conversation, the sender (User), and the body (text). Bubble records each message’s creation date automatically, which you’ll use to sort the thread.
Add a “Message seller” button to each listing. Its workflow should look for an existing conversation between the current user and that shop, and create a new one only if none exists.
On a messages page, use one repeating group to list the user’s conversations and another to show the messages in the selected conversation, sorted by Created Date. Add an input and a send button whose workflow creates a new Message linked to that conversation, then resets the input.
4. Check your privacy rules before you launch
Before you invite your first buyers and sellers, decide exactly who can see each piece of data. Open the privacy subtab in the data tab and add rules for each sensitive data type:
- Conversations and messages: Only the buyer and the shop’s manager should see them. Write a rule such as “This Conversation’s buyer is Current User” and another for the shop’s manager, and apply the same logic to Message through its Conversation.
- Orders: Buyers should see only their own purchases, and sellers should see only orders for their shop. Without these rules, a search on any page could expose other buyers’ order history.
- Users: Limit which fields other users can see. A seller might need a buyer’s name on an order, but not their email address or the shops they follow.
Every rule is visual, so you can read it back later and confirm that it does what you meant. On paid plans, you can run the security dashboard to scan for missing privacy rules and exposed API tokens before you deploy.
When the Agent creates a data type, it adds privacy rules for it, but review them to confirm that they match how your marketplace works. When you add a data type or field by hand, write or update its rules yourself, since new data isn’t automatically covered by the rules you’ve already written.
Before your first sellers see a change, try it in development with version control, and roll back to an earlier version if something doesn’t work the way you expected.
Launch your marketplace and solve the chicken-and-egg problem
Every marketplace starts with the same problem: Buyers won’t come without sellers, and sellers won’t list without buyers. Most founders recruit sellers first, often one by one, and keep the launch narrow, like one city or one category, so the first buyers find enough to choose from.
Once orders start coming in, watch three numbers to know when it’s time to widen your niche:
- Listings that sell: If most listings sit unsold, you have more supply than demand, so focus on bringing in buyers before you recruit more sellers.
- Buyers who come back: Repeat purchases show that buyers trust your sellers and find enough to choose from.
- Transactions that complete without a problem: Disputes, refunds, and canceled orders point to trust or quality gaps to fix before you grow.
Your marketplace is ready for its first sellers. Make the design your own, run a few test orders through Stripe, and invite a handful of buyers and sellers to try it.
Frequently asked questions about marketplace apps
Do I need to know how to code to build a marketplace app?
You don’t need to code on Bubble, where you design screens, structure your database, set privacy rules, and build workflows visually. The Agent explains what it builds in plain language, and you can understand and change every part of your app yourself.
How long does it take to build a marketplace app?
It depends on scope, since a focused MVP takes far less time than a marketplace with bookings, messaging, and mobile apps. EqualReach launched its MVP in three months, and BuyTicket was built in two.
How much does it cost to build a marketplace app?
Your main costs are a platform subscription or developer time, plus payment processing fees on every sale. On Bubble, getting started is free, and going live starts with Starter Web at $32/month billed annually or $39/month billed monthly.
What’s the best platform to build a marketplace app?
It depends on how much you need to customize: Marketplace-specific builders like Sharetribe suit common models like rentals or product sales, AI coding tools get a first version up fast, and visual development platforms like Bubble suit builders who want to see and change every part of their marketplace themselves, including payouts and permissions.
Can I move a marketplace I started in an AI coding tool to Bubble?
Yes. With universal import, you can upload your app as a .zip or .html file, or import it through the Bubble MCP (beta), and Bubble generates a new, fully visual app from it, though your existing database records and end-users don’t come over with the import.
Can the Bubble AI Agent set up payments and seller payouts for my marketplace?
The Bubble AI Agent can install the Stripe plugin, set up API Connector calls for Stripe Connect, build backend workflows, and create privacy rules for each data type it builds. You can review and change any of it in the visual editor, and you can test payouts in Stripe’s test mode before you accept live payments.
Is a marketplace app the same as Facebook Marketplace?
No. Facebook Marketplace is a feature within Facebook for local buying and selling, while a standalone marketplace app is an independent platform built for a specific niche, like Airbnb for short-term rentals or Upwork for freelance services.
Build your app on Bubble's Free plan. No need to upgrade until you're ready to launch your app.
Join building