Here at Retool, we help thousands of early-stage startups build internal apps—everything from admin panels to dashboards to user management hubs—so that they can operate faster.
In order to give even more startups powerful internal tooling, we’ve partnered with incubators, venture funds, and affiliates to offer qualified startups free Retool credits at the earliest stages of their journey.
This is a behind-the-scenes look at how we built the process to offer startup credits and then automated it all with Retool.
In the beginning, we wanted to test and learn with a fairly manual process before building an app. Our first step was to create a simple Typeform that partners could use to get startups signed up for our program.
Once a new user submits a form, we add the data into a spreadsheet and generate an email that goes to our marketing team alias. One of us then goes into Stripe and issues the credits. After confirming that the startup received their credits, we quickly send them an email to welcome them to their startup account.
It’s not exactly the most beautifully automated of processes, but it got the job done and only took a bit of time to set up. Even so, there were two big issues with this approach. First of all, we needed to give every person on the team access to our Stripe dashboard, which we definitely want to avoid long term.
Second, each step required someone on our marketing team to input data into a different place. For example, every time a startup got approved, we’d have to manually log it in Google sheets.
When more than a few startups started signing up per week, our MVP process became too painful. Every additional customer meant more back and forth emails, spreadsheets, account checks, and multiple Stripe tabs to issue credits.
Granting startup credits takes 5-10 minutes per customer, but there is time sensitivity: a quick turnaround is crucial to give the customer a great onboarding experience.
But that also means you can’t necessarily carve time between all of your other work. So we decided it was time to build an app that could solve these headaches for us.
Here’s what we needed our app to do:
- Pull information from our spreadsheet into a queue
- Validate the account was created + credit card added
- Add startup credits in Stripe
- Validate that credits were applied
Our biggest priorities were 1) automating away work and 2) creating an interface that was simple enough for anyone on the team to jump in. Below is the app that I built (including integrations) in ~ 1 day.
When figuring out what do with the backend, we realized that the underlying data source didn’t need to be more complex than a spreadsheet, so we kept it as is (when this gets more legit we might move this to Postgres, but for now a sheet is more than fine).
For every customer submission, I needed to check if a Retool organization was already present for the email address provided. So I added a simple query to search our Postgres database using data from our Google Sheet, like email address or just company domain by adding some wild card characters ({{'%' + email.value + '%'}}) to make it a little intelligent.
Next, I needed to pull the stripe ID for the corresponding email address by calling the a GET/v1/customers API.
I also added an Add $``___
button that made it dead simple to add credits fast. To make it work, I needed to dig into the stripe API docs to find which API endpoint I needed to hit to update the balance. The POST /customers/{id}/balance_transactions
does the trick.
After configuring the addCredits
update query, I just need to hook up the button to it to trigger it on click.
And with that, I had built a really simple way for anyone on the marketing team to add credits.
I realize that this is pretty sensitive data, so I don't want to add credits twice accidentally. I needed to find a way to validate that this customer exists and check their balance to make sure someone does not accidentally double credit the same account. A simple GET /customer/{id}
pulls all the relevant information.
Before adding real money into people’s accounts, I needed to test all of this. So I connected all of these API endpoints to our Stripe test account. Using Retool’s test Stripe account, I was able to test for a day or two before the app was ready for our team.
Side note: A convenient side effect of building this app is the impact on our support team. Sometimes, users would write in about their startup credits. This required our support team to check the sheet, our database, and Stripe before resolving issues. Now it’s all in one source of truth.
It’s been a month since we’ve had this app in production and I’m happy to report the whole process has been really smooth for the team. Here’s a breakdown of our results:
- We’re saving the team 2 hours per week—that’s 96 hours a year we can dedicate elsewhere
- We improved approval time by 4x, with our average approval dropping from 48 to 12 hours
- The app was 3x faster to build than the MVP, and required zero engineers to make it happen
Up next? We’re automating the email confirmation process by leveraging Retool's SMTP integration. We’ve enjoyed writing out personalized emails, but as we scale we know we can automate the process with Retool.
Looking to build your own? I’ve turned this app into a template. Check out our Startup Credits template today!
Reader