Modeling SaaS setup fees and one-time fees
Tags: stripe, saas, tutorial, payments
Published: 2022-08-09 15:30:00

If you’re building a SaaS company that involves heavy onboarding configuration or an expensive sales and marketing process, one way to offset the cost of this work is to charge an initial one-time fee. This fee might be called a setup fee, implementation fee, configuration fee, deployment fee. Customers are generally willing to pay this because they have more confidence that the software will be configured and deployed correctly. 

Customers may also want to purchase a one-time service like an audit or data migration that is not part of the initial set up process, but occur months after they are onboard. In the last edition, you learned how to model your business to collect recurring payments. Now let’s talk about ways to collect one-time payments from existing customers.

## Setup fees

To model a set-up fee called “Configuration fee”, we’ll create a new Product with a single, one-time Price. 


```
stripe products create --name "Configuration Fee" --description "Ensure your account is configured by a certified professional."
```

Notice the only difference when creating a one-time price is that we omit the `recurring[interval]` argument.


```
stripe prices create --product prod_124pax --unit-amount 7999 --currency USD --tax-behavior=exclusive
```

Now we can include this one-time price with our recurring prices later to create the subscription with a setup fee. These are fees that are rolled into the first payment the customer makes. The transaction for the customer will include the price of the setup fee *and* the first month’s payment. 


![Screenshot of Checkout with a Configuration Fee of $79.00](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vkjw9s1ofh4p740apqfl.png)
 
But some customers may want to buy one-time services later.

## Mid-billing cycle one-time fees

Modeling a mid cycle one-time fee is exactly the same as a setup fee. You’ll create a single Product with a Price to represent the thing you plan to charge for.

We might offer one-on-one training to learn how to use the software. That might cost $300 and would be modeled as a new Product called “1:1 Training” with a single price of USD 300.

```
stripe products create --name "1:1 Training" --description "Go from noob to ninja with our 1:1 training session where you'll learn all the tips and tricks."
```

```
stripe prices create --product prod_2123ada --unit-amount 30000 --currency USD --tax-behavior=exclusive
```

When collecting a one-time payment in the middle of a billing cycle, consider whether you want to collect this payment as part of the renewal or immediately when the customer purchases the good or service. If you plan to have many one-time mid-cycle payments, it might be better to roll those into the renewal to avoid annoying the customer with many payments throughout the month. However, if your service is typically $10/month and you want to charge a single one-time fee of $399, then it might make more sense to collect that immediately.

To collect payment outside of the renewal period, we have several options: Dashboard, API, Payment Links, Checkout, Invoice, PaymentElement. (Wow, so many ways to collect payment!)

These questions will help us decide which is the best option:

*Do we want the new payment associated to the same Stripe Customer object as the one for the Subscription?* Then we don’t want to use Payment Links as those will create a new Stripe Customer object. Instead, we can use Stripe Checkout, Invoices, the Dashboard, or the API.

*Do we have the customers’ permission and consent to charge their saved payment method for the new payment?* Consider using the Dashboard or the API. If we want the customer to select a saved payment method or add a new payment method, we could build a custom interface with PaymentElement. If we want to force the customer to enter a new payment method, then sending them to the Hosted Invoice page or to Stripe Checkout is the easiest way to implement.

*Are we using the customer portal to display past Invoice history for the customer?* Then we don’t want to use Stripe Checkout as it doesn’t create Invoice objects, so we’ll need to create an Invoice through the Dashboard or API.

For SaaS businesses using the customer portal I recommend collecting one-time mid-billing cycle payments from existing customers with **Invoices**. You can either finalize and pay an invoice with a saved payment method (without the customer needing to come onto your site), or you can create and send the Invoice email to the customer. The invoice will be associated with the existing customer and the invoice will appear in the invoice history in the customer portal. 

See this episode about [sending invoices](https://www.youtube.com/watch?v=y1g2z4hNAqI) to learn more. 

Invoices can be composed of line items using Products and Prices similar to one-time setup fees. Note: In the future, we’d love to create Invoices after someone pays a one-time fee with Stripe Checkout. If that’s a feature you’re interested in, please let me know!

What types of one-time payments do you collect as part of your SaaS business? Leave a comment with your use-case!



## About the author

![CJ Avilla](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w9voulm8bc0devmc3b1p.png)



[CJ Avilla](https://cjav.dev) ([@cjav_dev](https://twitter.com/cjav_dev)) is a Developer Advocate at Stripe, a Ruby on Rails developer, and a [YouTuber](https://www.youtube.com/CJAvilla). He loves learning and teaching new programming languages and web frameworks. When he’s not at his computer, he’s spending time with his family or on a bike ride 🚲.