The MVP for a multi-million dollar product built on Google Sheets and Iterable

In April 2020, I helped launch Calm Sleep School, which was an early prototype of the coaching product that later became Calm Sleep Coaching (Sept 2020-2021) and continued to grow into what we now know as Calm Health.

In late 2019 Calm hired a Chief Medical Officer to spearhead the company’s initiative to move into the mental health realm. The Chief Medical Officer-slash-head-of-sales came to us from a mental health platform that sold as a business-to-business product for large companies to offer therapy as an employee benefit. His Big Idea was for us to create a similar product that wasn’t quite therapy-level help but would address broad problems that affect mental health (i.e. sleep, diet, physical health, stress, anxiety, etc.). Leadership settled on sleep coaching in part because our CEO admitted that he was having trouble sleeping at night so he could be the Founder AND a customer.

The idea was simple: professional sleep therapists would conduct a series of 6 one-on-one video coaching calls with individual students to identify issues that were causing poor sleep and to provide a personalized sleep plan for the clients to follow. An example sleep plan might be to stop drinking caffeine after 3pm, turn off the TV at 9pm, and go to bed consistently each night.

The design concept was beautiful (see the Launch Email). Our product designers contracted a professional illustrator to create one-of-a-kind art with everything in a deep sleepy purple. Design was top-notch.

Calm Sleep School had some serious challenges. Engineering would commit near-zero resources to building the system. Since this was only going to be prototype with unknown value, leadership would not commit significant development time because the engineering team was already stretched thinner than a spider’s web.

Engineering worked on these components:

  • One backend engineer to create the SKU and hook up the Stripe billing mechanism. I believe she accomplished this within one sprint.
  • Frontend web team built a landing page
  • Frontend web team built the checkout page for customers (students) to pay via Stripe (via the billing backend)

Lifecycle (my team) was responsible for all of the onboarding and this is where I am quite proud of our achievement because I was able to build the onboarding AND a coaching management system using Google Sheets, Google App Script, and Iterable. (My equivalent of duct tape and paper clips.)

Launch Email

Sleep School Onboarding

Before onboarding could begin people would arrive on the landing pages and checkout built by engineering.

Upon successful purchase, a Welcome email to explain the product and inform the new student the details of Sleep School.

Using Google App Script I scripted the user intake form to take several actions:

The Welcome email pointed to a user intake form (Google Form) which asked a series of questions to understand why the new student needed help sleeping.

(1) It emitted an event to Iterable so that we would have a record of user’s progress.

(2) It sent an email and logged a row to our internal teams to know a new student signed up.

The coaching team would manually match the new student to one of six Sleep Coaches. The match of sleep coach to student was logged on the sheet. With the match made we would send an email with the introduction of the coach with name, picture, and bio.

(3) The script had to copy a Google Drive folder filled with a handful of assets that coaches used for taking notes and sharing reports with the students.

Since each student needed to have a unique Sleep Journal I logged the folder, Sleep Journal Google Form, and other things into the Google Sheet as well as Iterable. By saving the Sleep Journal Google Form ID we could send an email to each student that had a link to their personal Sleep Journal.

After students’ 7 days of journaling they would have a one-on-one Zoom call with their Sleep Coach and the coaches would then carryout delivering the remainder of the Sleep School experience.

Sleep coach match

We launched Sleep School slowly by sending batches of 10,000 emails to existing Calm Subscribers so that we could pace the flow of student enrollment and not overwhelm the coaching staff. Our goal was to sign up roughly 100 students to complete the 6-week course which we were able to accomplish. Students were satisfied with the program! I don’t think we had to issue any refunds related to the quality of the course. Some folks canceled because they didn’t realize the program cost around $600 USD. In further sales development our Head of Sales had inked a deal with some corporate clients to

As I said before, this was an early prototype. Leadership was encouraged by the product so they decided to build Calm Sleep Coaching product which was staffed by 1-2 full-time engineers. As of 2022 that product further evolved into Calm Health which has a full staff of 12+ full-time engineers dedicated to bringing mental wellness as an employee benefit for thousands of companies and tens of thousands of employees!

Black Friday 2021 notes

I identified a profitable segment combining app usage and sales data from the previous year

I found a particularly profitable segment of users by looking cross-referencing app usage and purchase behavior. For the Black Friday 2020 campaign we sold far more high ticket items to people who had used the app for 12 consecutive months (the size of the circles represent # plans purchased). It helped us send our most active users our best deal. (High price but high discount)

Bigger circle = more sales. X-axis is consecutive months of activity.

Spreadsheet command center

To keep track of the 60 campaigns I built out a spreadsheet to track the different offers and email template modules to include in the campaign. Different segments received personalized offers (pictured) based on analysis from our Data Science team that found the optimal offer according revenue per email sent.

Each cohort, the day of the campaign, and the sales modules to be offered to the recipients

Landing page switch led to 40% conversion improvement

Toward the end of the campaign I created an A-B test for the email click’s landing page.

You should notice that the original page is a very simple credit card page. Because we were advertising a Black Friday time-limited sale our logic was to collect payment as quickly as possible.

You will notice that Treatment version has a lot more information. It has a big hero image, some science facts, a product comparison checklist in the middle, and testimonials on the bottom. Our product & engineering team had refined and tested this landing page for peak performance earlier in the year but we had never tested these two variants against each other within the context of a holiday sale.

The A-B test showed 50%+ sales conversion improvement over the 3-day observation period for the campaign. I wished I had tested these two landing pages earlier in the campaign!

I believe that part of the reason the page performed so much better is that we only sent this page to users who never subscribed before. These people barely know what Calm is so I believe that having the extra information on the page properly educated the returning inactive users and clearly did a better job at explaining the value of the Black Friday deal that we were offering them.

Next year I’ll be sure to compare the two variants across broader audience (churned, current paid, etc.)


Treatment landing page (green line) outperformed for duration of the sale
52% improvement & statistically significant

Iterable recipe: inject data from a custom event into userProfile for email template

An email I’ve been working on needs to refer back to information from a previous event.

... TEMPLATE ...

Hi {{firstName}}, 

Thank you for watching {{title of movie I watched}}!

... RENDERED ...

Hi Jeff, 

Thank you for watching STRANGER THINGS!

The problem here is that the I wanted to reference the title of a video that was watched in the past within a blast email. This is not possible without saving the information somewhere in Iterable. In my case I decided to store the data on the user’s profile.

To save data from an event onto the user profile I use a workflow and the Change Contact Field node.

The event data might look like this:

    "eventName": "Video : Watched",
    "eventType": "customEvent",
    "email": "<EMAIL_ADDRESS>",
    "dataFields": {
        "video_title": "Stranger Things",
  1. Create workflow
  2. Add node “change contact field”
  3. In the CHANGE CONTACT FIELD node define the data I want to save in JSON format.
## (You should use better field names than this) ##

Now when the event comes through Iterable will replace the template variable with the new value on the user profile and thus making it accessible on any email template.

Here I can put the saved_program_title into the subject line or email template body using the Handlebars.

Podcast generic takeaways

As a long time wantrepreneur with a brutal commute I listen to a lot of podcasts about business, real estate, investing, and online marketing. Podcasts and books in these realms have common threads that I believe must be basic common traits for being “successful” at what doing what you want to do.

The best way to learn is to start doing it.

Most people never even try. Just start. Do little things. Get over the fear of failure. Trying and failing is better than not trying at all. Take “massive action.”

Basically every business related podcast mentions this fact.  BiggerPockets almost every episode. Grant Cardone for sure. Pat Flynn pretty regularly.

Learn from a mentor or coach.

On the Rich Dad Radio podcast Robert Kiyosaki of Rich Dad, Poor Dad pushes for people to get a coach constantly. Pat Flynn of Smart Passive Income frequently touts coaching as well. Yes they have some financial interest in persuading you to use their companies as your coach but you don’t have to use them. I’m starting to think it could be valuable to me. Tim Ferriss uses many coaches to be more efficient (not a shortcut!) when picking up new skills.

Network, network, network.

It doesn’t matter if you’re an introvert. Networking can be achieved online in your pajamas through forums, social media, and Facebook Groups. Face-to-face meetings are better but the point is that building honest relationships with people is fundamental to success. 

Give more than you receive.

Serving others well (especially helping out your network) will return 100x whatever time/energy/expense you put in. Karma. Don’t give with the expectation of something in return. This is basic human kindness but I think it does take some effort.

Condominium Travel Club, Concord, CA

I unwittingly signed up to win s free trip to Hawaii at a home show in Santa Clara in January this year. About two weeks later I start getting a phone call from the same phone number four days in a row but I miss the call each time because I had some friends in town and I was skiing in Tahoe.

Condominium Travel Club (or Condo Travel Club)

Impossible-to-meet Terms & Conditions.