Mail merge for Gmail and Google Spreadsheets
Ruby JavaScript
Switch branches/tags
Nothing to show
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.

HappyTo: No more "sad bcc"

What's a sad bcc, you ask? It's when you want to send an email a list of people:

  • who you'd prefer not to see each other's email addresses
  • who you want to still feel special
  • who you want to customize a piece of the email for

So, what does HappyTo do then? I'd be happy to tell you. Basically, all of those things. Remember the days of mail merge? It's that, but with Gmail and Google Spreadsheets.

HappyTo Screenshot

You just:

  1. Create a Google Spreadsheet with at least an "email" column. You can create other columns to customize what will go in the email each person receives (columns should be lower case).

  2. Publish the spreadsheet

  3. Export your Gmail user name and password locally

     export GMAIL_USERNAME =
     export GMAIL_PASSWORD = kazam
     # feel free to put a space in front of those commands so they don't get stuck in your history
  4. Grab and start the app

     git clone
     cd happy_to
     bundle install
     rake db:migrate
     rails s
  5. Enter your spreadsheet url. For example:
  6. Enter a subject template. You may use any column name as a Mustache template variable. Ex:

     Great to see you yesterday {{name}}
  7. Enter a body template. You may use any column name as a Mustache template variable. Ex:

     <p>Hi {{name}},</p>
     <p>I'm happy to tell you I'm using HappyTo to send an email to you at {{email}}.</p>
     <p>It was great to see you in your movie, {{movie}}. Gotta love the 90s!</p>

Kazaam! Your emails are sent.

What's under the hood

HappyTo uses a few different technologies:

What's next?

  • Allow email recipients to click links to answer simple questions like: are you coming to my event?
  • As the front end expands, use a single-page framework like Ember or Backbone instead of the existing lightweight option.
  • Include explicit test emails before sending all emails (it's currently handled by you managing your own spreadsheet).

Why don't you host this for me?

A few reasons:

  • You don't get between a dog and it's bone, and you don't get between a techie and their Gmail password.
  • I don't want to deal with spam-related issues. This is meant for personal use. Use something else to send out your shake weight emails. Gmail will cap you at about 200 bulk emails per day anyway.