Marketplace
Last updated
Last updated
Disclaimer: Note that while Stripe is mentioned in this document as an example of a payment platform, this should not be interpreted as an endorsement or recommendation of Stripe's services. The information provided here does not constitute legal advice. As an app builder, it is your responsibility to select a payment platform that meets your specific needs. You are also responsible for ensuring compliance with the terms and conditions of the chosen payment platform.
We encourage you to conduct thorough research and, if necessary, consult with a legal professional to make an informed decision.
This article looks into how to plan for building a marketplace app.
Marketplace apps are somewhat different from one-time paments and subscriptions, in that they involve a third party. In this article, we'll refer to the different roles in this transaction as the following:
The marketplace is your app (the Stripe account)
The customer is the person buying something
The seller is the third party selling something (the Connected Stripe account)
Marketplace apps have transformed the way we engage in commerce, creating digital spaces where buyers and sellers converge to exchange products, services, or information. Instead of an app selling a set catalog of products and services, marketplace apps allow sellers to sell their products and services in your app.
We define marketplace app as an app where a transaction is split between these three parties. The Bubble platform, for example, allows users to set up an app and generate revenue with it, but Bubble is not a marketplace app under this definition, as we're not a part of the customer transaction.
As illustrated in our list of different marketplace examples, marketplace apps encompass a broad spectrum of products and services. Interestingly, some apps operate as marketplaces without users always realizing their marketplace nature: for example, Uber and Lyft don't actually own any vehicles, but simply offer a marketplace that connects passengers with drivers and organizes the transaction.
There are a variety of marketplaces live today, selling stuff like:
Tangible goods
Video content, such as courses
Live sessions, such as coaching, counseling, and music lessons
Services like transportation and food delivery
Specialized product categories such as art and collectibles
Rental of real estate properties
Accommodation in hotels
Many marketplaces started out serving a niche, and then grew over time to handle multiple categories. As you plan your app, it's worth keeping in mind that everything starts with the first step.
In this article, we will use the term "product" to refer to any item or service being offered in a marketplace, regardless of its specific nature.
Stripe Connect offers various customization options to suit different business models, but this article primarily focuses on the model described below. If you are new to Bubble and/or Stripe, it's likely you will find this setup the easiest to set up.
While marketplace apps can have very different structures, many employ a revenue model that bears a resemblance to the following structure. We'll define the app user as end-user in this example, to separate them from sellers.
As illustrated the process is as follows:
End-user (customer) browses products in the marketplace.
End-user purchases one or more products.
End-user makes a payment through Stripe.
The amount is split between the three parties:
Stripe retains its transaction fee
A portion of the payment is retained in the seller's Stripe account.
Another portion is transferred to the marketplace owner's Stripe account.
Stripe's product, Stripe Connect, automates the allocation of payments and fees.
Stripe Connect is Stripe's solution for helping platforms and marketplaces efficiently manage payments and payouts for multiple sellers or service providers within their ecosystem. Whether you're building a marketplace for various types of products, services, or a combination of both, Stripe Connect simplifies the process of handling financial transactions. This section explores how Stripe Connect functions and how you can use it to establish a secure and streamlined payment system for your platform.
First, let's see how Stripe Connect relates to each of the three parties involved in a marketplace transaction:
Platform: The platform is your app, that facilitates transactions between buyers and sellers. The platform uses Stripe Connect to handle payments and payouts for its users.
Seller: Sellers are individuals or businesses that offer products or services on the platform. They receive payments from buyers through the platform. Each seller has their own Stripe account connected to the platform.
Customer: Customers are the users who purchase products or services from sellers within the platform. They make payments to the platform, which then distributes the appropriate portion to the seller after deducting any fees or commissions.
Stripe Connect acts as the intermediary that facilitates the flow of funds between these three parties, ensuring secure and transparent transactions within the platform.
The part of the transaction that the platform (your app) keeps, is often called the platform fee. To understand how this is structured, let's look at the total fee structure for each of these two parties (platform and seller).
In the example below, we show the calculation for each party, and how much is party is left with. Please note that these values are purely for demonstration and are not reflective of actual fees:
Description | Fee | Total |
---|---|---|
Transaction | $100 | |
0,5% | $0.5 | |
5% | $5 | |
Seller's payout | $94,5 | |
Stripe keeps | $0.05 | |
Platform keeps | $5 |
As the table illustrates, both the platform fee and Stripe transaction fee is paid by the seller, and whichever platform fee you've set is calculated on the total transaction value. The buyer is never made aware of the calculation going on behind the scenes, and is simply asked to pay the full $100 amount in one transaction.
The fee is set when you initiate the transaction, using the Charge the current user action (described below).
Every seller who sells something through your app needs to have their own individual Stripe account. This setup ensures that each seller can receive payments directly and manage their financial transactions independently within your platform.
The official Stripe plugin supports setting up seller accounts automatically. This will work whether the seller has an existing Stripe account, or wants to create a new one. To set up sellers on Stripe, use the action. Keep in mind that the must be installed and correctly set up to work.
When building a marketplace app, accurately identifying the appropriate seller for each sale is important to ensure proper payment to the respective seller. What you should keep in mind, is to structure your database so as to keep track of which seller is connected to a particular product.
You likely have a product data type (or similar) in your app, that contains information about the item being sold, such as price and description. You can store which user is the registered seller of that particular product on that data type, Alternatively, you can use a more over-arching data type that contains the user.
Whenever a thing is created in your Bubble database, the Created by (user) field on that thing is populated automatically with the user that created it. This is an easy way to identify the correct seller. However, there are some potential pitfalls that are worth considering:
The user needs to be logged in, to be associated with the record they create
The Created by field can't be edited
If you want to be able to move a product to a different user, you need to create a separate field of type user for this
If a user is deleted, the Created by field will be left empty
In a Bubble expression, you would refer to the seller as Product's Created by
, provided that the data type is called Product.
If you prefer to use a field that you can edit, you can instead set up a field on the product data type that identifies the seller. To do this, simply add a field of type User, and give it a descriptive name such as Seller or Owner. Keep in mind the following:
The field will not be populated automatically, meaning that you need to specify the seller in the workflow where the thing is created
If the user is deleted, the field will be left empty
In a Bubble expression, you would refer to the seller as Product's Seller
.
You can also consider using a broader data type to contain seller information. For example, if you have a marketplace where each user sets up a virtual "shop", you may use this data type to store the seller information.
For example, let's imagine that a seller called John Doe sets up a shop called John's Shop. In this case, each product would likely be connected to the shop, instead of directly to the user, looking something like this: Product's Shop
. To identify the seller to register with the sale, you would set up the expression like this: Product's Shop's Owner
.
This approach can be valuable in certain situations. For instance, if your application facilitates collaborative product management among teams, the shop entity can serve as the data type that connects them.
Let's look at some of the potential pitfalls:
The seller sent to Stripe needs to be a user. As such, you will still need to refer to one registered user when sending the charge to Stripe.
The initial setup and maintenance is slightly more complex, as you will be dealing with more data types.
If privacy rules apply to the products, you may need to as you structure your database
When you are ready to bill a buyer for a purchase linked to a seller, you use the , just like you would with any other one-time payment. The difference is that for this charge, you need to define which seller is responsible for the sale, so that the seller's fee can be registered with Stripe. The seller needs to be registered (see the above step) for this to work.
To instruct Bubble to sell on behalf of another user, and to identify that user, follow these steps:
Check the The payee of this transaction is another user
Assign the seller in the
If your app is to impose a fee on the sale, you can also fill out the field.
As the default setting, any funds transferred to a connected account are held in the connected account's (seller's) Stripe balance and are scheduled for daily rolling payouts. If you want to modify the payout frequency, you can do so by changing settings in the Stripe dashboard's payout settings.
For up-to-date information on that process, please check the documentation below:
External page: Stripe Connect Payouts