
We struggled with customer insights and tracking when people starting signing up for our app. To solve that pain, we built an automated workflow — with our own product. With about a 10-minute setup, we saved weeks of work, and saw a 10x increase in email response and 5x increase in demo calls.
No more ActiveAdmin, hacked together internal tools, or worst of all — leads that could have been.
Here’s our story and what we learned.
As an early stage startup, our primary focus is finding product market fit. We’re looking for users who get the most value out of our product. Who are they? How did they find us? What are they looking for?
To develop our ideal customer profile, we need more people using the product and converting to paying customers. Not too long ago, we noticed many people would sign up, but we struggled getting them to come back (and, ultimately, to convert).
Here’s what used to happen when a new user signed up for a free Flowdash account:
- User signs up for a free trial with their first_name , last_name, and email
- We send a Slack webhook to our #new-users channel with the email
- We send them an automated email drip sequence (offer to schedule a demo, give some product tips, highlight features etc.)
- Hope they engage & convert
Problems with the old approach:
(1) We don’t know who’s signing up (except for their name & email)
(2) We don’t know what they’re looking for
(3) They aren’t converting
Besides a clue from their name and (maybe) work email, we have no idea who they are and why / how they found us. We also can’t go back through that list without logging into a clunky ActiveAdmin UI or combing back through a messy list of Slack messages.
Proposed solution for better engagement & conversion:
A workflow with:
(a) Auto-assignment of new users to team members
(b) A repeatable email outreach flow
(c) A single view with enriched context / insights about the user
(d) Automations to keep things efficient as volume increases
Since Flowdash now supports database syncing, we decided to try eating our own dogfood. Given the requirements above, a workflow-driven internal tool felt like the perfect choice.
The Final Product

Results:
- 10x increase in response rate to email outreach post-onboarding.
- 5x increase in conversion rate to demo call
- No duplicate outreaches
- No changes to our code (except deleting the old drip campaign)
- All of our customer insights in one place
How we did it, step-by-step
Step 0. Turn off the automated emails.
This one’s easy. Just delete that code.
Note that automated drip emails can work well if you can’t reach out to everyone who might convert. With our current volume, we’re able to personally email high-intent users. But we’ll likely bring back the automated drip for users that are lower intent.
Step 1. Connect to our replica database

A workflow is home to a sort of living collection of tasks. Tasks move through a series of stages (“Pending approval”, “Done”), the movement through which can trigger / require / be conditional upon some pre-defined business logic.
One way to feed tasks to a workflow is by asking your database for them in SQL.

Before we ask the database for our tasks, let’s first establish a secure connection to it.

Compared to the world of internal resource-based CRUD tools, we can write any SQL to better fit our business logic. Only care about a few columns from a table? Need to join a few tables to describe a task? No problem.
Once we finished this step, we could see all our existing users in our new Admin / Users workflow based on a single SQL query. With all the data we cared about, it was now time to add the bells and whistles to bring the workflow to life.
Step 2. Define a process with the Flow Builder

Basically, we just thought about how we’d like to triage and connect with users (edge cases included) and converted that to a state machine.
For example, start by auto-assigning Tanner to take a look at each new user. If they appear to have high intent — based on the data shown in our custom customer insights UI — Tanner will click “Prioritize for follow-up”, which we’ve defined to mean: Re-assign to Nick and let Nick know about it. Now, Nick can push them along the personalized outreach out.
Step 3. Add assignment and Slack automations

Here’s the breakdown of 4 automations that get triggered by a new users record that our sync picks up:
- Enrich the email with additional user data using the Clearbit API
- Slack post to our #new-users channel
- Auto-assign Tanner to take a look
- Deprioritize if they’re an existing, paying customer
Let’s break down a few of them.
Enrich email automation



Send a Slack post automation



Step 4. Customize the layout to bring everything we know in one place

And this is the juicy details view that renders when we click to view the user in Flowdash. Here, we know where they came from (Lead Sources), where they’re located (IP Data), what they do for work (Details), and exactly what they did on the platform (not shown – request to Fullstory API with a table of their sessions and custom SQL queries for the data they created on the platform).
Prioritization is dead simple with so much context.
And that’s it.
We threw out our hacked up solutions that weren’t working and built something with effectively no code. Now, we have actionable customer insights, and it took us a matter of minutes.
What will you build?
Curious what you could build with access to app events and customized notifications based on business logic? Get started with our templates when you sign up, browse our docs, or drop us a line — we’d love to help you get started building your workflow 🙂