💰 Stripe Connect - Marketplace Payments Plugin (includes detailed tutorial!)

No problem @gpdmop. I agree that it certainly exposes the platform to additional risk from merchants who act in bad faith.

I wouldn’t be too confident of Stripe implementing any feature requests, but what you could do is:

  • Check the connected account’s balance using the ‘Stripe Connect - Retrieve Connected Account Balance’ call that comes with the plugin
  • If there’s a sufficient balance, go ahead and trigger the refund
  • If there’s NOT a sufficient balance, you could halt the refund and alert the merchant

Of course you would want to think about how this would affect the customer’s experience. They may not be delighted if they click a ‘Refund’ button and then don’t get anything.

PS - this Stripe page may be useful in understanding Connected account balances and how they interact with refunds.

Super helpful response. In my case the end user would be the admin issuing a refund so the ux you mentioned would be sufficient. I’m hoping there is some call available to trigger $$ from their bank account into the stripe account so they can then effectively issue the refund. Will do some more digging on that front.

Thanks again!

1 Like

No problem @gpdmop - if you’ve any other questions just let me know.

April-24 Updates

You can now autofill fields in the Stripe Checkout Session! Specifically, you can autofill the email field by adding the current user’s email address to the ‘Customer Email’ field in the ‘Stripe Connect - Create Checkout Session’ workflow action:

If you’ve saved down the Stripe Customer ID of the customer, you can go a step further and autofill their payment details too!

To do this, add the current user’s Stripe Customer ID to the Stripe Customer ID field.

A simple addition that really improves the customer experience.

Any questions let me know :slight_smile:

Does this plugin also have a “charge per hour” option, similar to the Upwork marketplace? If so, how do we use it?

Hi @omer.siddique98, thanks for your interest in my plugin!

You can implement this functionality with the ‘Price (Cents)’ field in the ‘Create Checkout Session’ action.

You can basically use a dynamic expression like:

number of hours * freelancer per hour rate

to calculate the total amount. I actually show how to do this at 11:50 in this video :slight_smile:

Let me know if you’ve any other questions.

May-24 update
Released a video tutorial earlier this week on how you can embed Stripe payments forms (i.e. Checkout Sessions) in your Bubble app with the Stripe Connect - Marketplace plugin:

The relevant section in the plugin documentation has also been updated :slight_smile:

Invoices - Significant Update - May-24

Just released a new version of the plugin (version 2.9.0) that allows you to create invoices and split the payment between your platform and the seller:

2024-05-30 17.19.58

The plugin documentation has been updated with instructions on how to create invoices (link here). The steps include:

  1. Create a Customer ID (if you don’t already have one saved down) for the customer using the ‘Stripe Connect - Create Customer’ action.
  2. Create a blank invoice using the ‘Stripe Connect - Create Invoice’ action. You can specify the platform fee using the ’
  3. Add an Invoice Item to the Invoice created in step 2 using the ‘Stripe Connect - Create Invoice Item’ action
  4. Send the invoice to the customer using the ‘Stripe Connect - Send Invoice’ action.

New actions added to this version of the plugin include:

  • Stripe Connect - Create Customer
  • Stripe Connect - Create Invoice
  • Stripe Connect - Create Invoice Item

If you have any questions, let me know :slight_smile:

Further information on creating invoices with Stripe Connect
As a follow-up to my previous post on creating invoices with Stripe Connect, I just wanted to post this image of the steps involved.

Creating invoices with Stripe Connect is slightly more complex than the standard way of processing payments via the Checkout, so hopefully this is useful to people :slight_smile:

The invoices section of the plugin documentation has also been updated.

June-24 updates
Just released a tutorial video on how you can create invoices with Stripe Connect in your Bubble app! :slight_smile:

(more) June-24 updates
I’ve just released a new version of the plugin (version 2.10.1) that has two updates:

  • The ‘Stripe Connect - Create a Transfer’ action now returns the unique Stripe ID associated with that transfer
  • A new data call ‘Stripe Connect - Retrieve a Transfer’ allows you to obtain additional info on the transfer

This can be useful if you’re using using a ‘Separate Charge & Transfer’ charge type, making a transfer to a connected account and want to get information on the transfer.

In order to use the new ‘Retrieve a Transfer’ call, you’ll need to save down the ‘Transfer ID’ that’s associated with the transfer. This transfer ID is now returned by the ‘Stripe Connect - Create a Transfer’ action.

You can then use this ID with the ‘Stripe Connect - Retrieve Transfer Details’ call to get information associated with the transfer.

The plugin documentation has also been updated with instructions on how to use the updates - see here.

Any questions just let me know :slight_smile:

Split a payment with Stripe Connect - video tutorial (short version)

We have several pretty lengthy videos out there (see here and here) on how to use the Stripe Connect - Marketplace plugin, but wanted to put something a bit briefer together on processing a marketplace payment.

Any questions just let me know :slight_smile:

Coupons / Promotion Codes - July-24 Update
The Stripe Connect - Marketplace plugin now allows you to give customers discounts with promotion codes.

2024-07-12 08.24.27

To activate promotion codes:

  • Go to Product Catalogue → Coupons in your Stripe
  • Create a new coupon (I recommend using customer-facing coupon codes)
  • When creating a Checkout Session with the plugin, set the ‘Enable Coupons’ field to ‘yes’

The user will now have the option to add a promotion code that is linked to the coupon you created in the Stripe Checkout Session.

Important: the discount will NOT be split evenly (or pro-rated) between the seller and the platform. The seller will effectively lose out by giving the discount, while your marketplace will get the same amount.

For example, let’s say a seller on your platform is selling a product for $100 and your platform takes a 20% platform fee. If a coupon that provides a 10% discount is used:

  • The customer will pay $90 instead of $100
  • Your platform will still get 20% of $100 (so $20)
  • The seller will get $70

Any questions just let me know :slight_smile:

Cross Border Transfers / Payouts - July-24 update
I’ve got some queries from customers over the past few months about making cross-border payouts.

This is something that’s only applicable for US-based platforms. As you can see from this Stripe article, US platforms can use certain payment flows to pay out merchants in other countries in their local currencies.

However, there are often special requirements when onboarding merchants from these countries. Two that users of the Stripe Connect - Marketplace plugin have run into over the past few months include:

  • The capabilities.card_payments parameter
  • The tos_acceptance parameter (terms of service)

Some countries (EG Nigeria and the Philippines) do not allow merchants who are signing up for Express accounts to request the card_payments parameter to be set to true. Similarly, some countries will only allow merchants to register with a Recipient service agreement.

Happy to say that the latest version of the Stripe Connect - Marketplace plugin allows you to set both of these parameters when creating Express accounts for merchants with the ‘Stripe Connect - Create Express Account’ action:

Any questions just let me know :slight_smile:

@alexcooney5 - sorry to pester on this one again but I can’t seem to figure this out.

  • I set up the refund flow (as communicated here: https://www.youtube.com/watch?v=QGaSZU1HomU)
  • I generate the refund, but the refund amount is taken directly from my platform account’s funds (even though the related connect account has a positive balance that is more than the amount they’re refunding in my application)

Questions:

  1. Can you maybe suggest what I might be missing that would cause the funds to come from my platform account instead of the connected account?
  2. Assuming I’ve gotten #1 figured out
 In the event that the connected account’s balance is not larger than the amount they’re attempting to refund - what is the best practice here?
    To your previous response we can check the balance and alert the user if there isn’t enough in the account
 but what should we say in that alert? Log into your stripe dashboard and upload funds then submit the refund again? If so, can they access this just by viewing the "create express dashboard link? If not, what is the alternative message (sorry we can’t help you do this refund OR something else)?

Hi @gpdmop, no problem at all! Always happy to help where I can :slight_smile:

That’s an interesting one. It’s hard for me to say for sure without seeing your app and the specific transaction, but were you using a ‘Separate Transfer & Charge’ charge type by any chance?

What you could do is:

  • Have a button for customers called ‘request refund’
  • If there are sufficient funds in the connected account when the customer requests the refund, process it as normal
  • If there are NOT sufficient funds in the connected account, send an email notification to the the connected account owner letting them know that someone has requested a refund and there are not sufficient funds in their connected account to process it
  • To my knowledge, there is no way for Express account owners to add funds to their Stripe account. However, they could add the necessary funds to their bank account
  • As mentioned in my previous comment, Stripe will attempt to claw back funds from the linked bank account before taking them from your platform account), so you could prompt them in the email notification to add funds to their linked bank account
  • You will need to let the end customer know that their request for a refund is being reviewed (or something like that)

This is just a suggestion. There are other ways you could handle refund situations like this, but the above should at least help the end customer understand what’s happening with their refund and give your sellers a chance to provide the necessary funds.

You nailed it. Accidentally switched it to “Seperate Transfer & Charge.” Switched back and I’ve made some progress. Now I’m just stuck on checking whether or not the account balances are sufficient. Does it look like I’ve set these up right (cart item sum = dollar amount so I’m multiplying by 100 to get to cents)?


1 Like

Excellent!

Yep, this looks correct. However, I would double check by putting the two expressions:

  • cart each item’s Amount:sum * 100
  • Stripe Connect - Retrieve Connected Account Balance’s available:each item’s amount:sum

Inside two text elements to make sure you’re getting the numbers you would expect.

Also, I presume the first workflow is for when there are not enough funds in the connected account and the second for when there are enough funds? If so, I would consider changing the ≄ to a > and the < to a ≀ (you want to be able to process refunds if there is exactly the amount required in the connected account :slight_smile: )

Manual Payouts - July-24 Update
We recently released a new version of the Stripe Connect - Marketplace plugin that allows you to make manual payouts. This can be really useful if you’re building a marketplace where you want to control when the funds are paid out to a seller’s bank account.

For example, if you’re building a services marketplace (like Upwork), you may allow the customer to make a payment upfront, but want to wait until the seller has delivered the service before paying out funds to the seller’s bank account.

To implement manual payouts:

  • When registering sellers for a Stripe Express Account (with the ‘Stripe Connect - Create Express Account’ action), set the payout interval is set to 'Manual ’
  • When the funds are ready to be paid out to the seller (EG when a service has been delivered), trigger the ‘Stripe Connect - Manual Payout’ action.

Optional (but highly recommended step):

  • Ensure there are sufficient funds available to make the payout. For new Stripe Express accounts, Stripe typically won’t make the funds available for a payout for 7-14 days. Therefore, you may wish to build in logic to first check if there are sufficient funds available in the connected account.

You can also watch the below video tutorial for an example of implementing manual payouts in a services marketplace

The plugin documentation and the demo app have also been updated with additional details.

Any questions just let me know :slight_smile:

Reverse a Transfer Action - July-24 Update
Just released a new version of the plugin (version 2.13.0) that has a new action:

Stripe Connect - Reverse a Transfer

This action can be useful if you’re issuing a refund for a payment that was made using the separate charges and transfers approach. If you use the ‘Stripe Connect - Create a Refund’ action to issue a refund (with this charge type), the full amount of the payment will be refunded from your platform account.

This is because the charge was made on your platform account, not the connected account.

The ‘Reverse a Transfer’ action means you can now reverse the transfer that was made to the connected account, effectively making the platform whole.

The ‘Processing Refunds’ section of the plugin documentation has also been updated to reflect this addition:

Any questions just let me know :slight_smile: