I want to share my journey with marketing as a software developer. I am still a marketing novice but I've been able to collect close to 200 double opt-in subscribers who actually want to hear from me on a regular basis.

When I first got started with email marketing almost two years ago it was with a business partner. We were trying to build lead generation sites. We needed to have forms on the various sites and a basic email campaign drip. We went for a paid solution that cost us somewhere between $50 and $75 a month (I don't remember the exact amount). But what I do remember is we never collected a single email address for a few months. And for the bootstrapped business we were trying to build, this email service was a high priced item.

Things didn't work out with this business partner and we went our seperate ways. I was disappointed in the ways turned out, but moving back into a full-time software developer position was best for me.

I still had many side projects cooking on the side. One of which is an Ebook/Video course targeted at Node.js/PostgreSQL developers. I knew how important email marketing is to having a private communication channel with my customers that I control.

Because my main focus is my full-time job, I knew I needed to bootstrap any of my side efforts and keep the budget as lean as possible. I shopped around for many email marketing automation services like MailChimp, Active Campaign, or even rolling my own.

Most email services offer a free trail for a few weeks, but this just wasn't enough time for me to get any value before having to pay money. Rolling my own sounds good in theory, but I've been down that road before. It's nothing but a bug filled time sink. I needed a happy medium.

Enter Mautic

Mautic is open source marketing automation software built with PHP and MySQL. I knew there had to be existing software out there I could run my self. The Mautic organization lives at https://www.mautic.org/ and the Mautic the company lives at https://mautic.com. Mautic.com makes money by hosting, managing, and supporting enterprise customer's installations. They also provide free hosting. You don't get all of the features and the contacts are capped at 5000 and a daily email send limit of 1000.

The free tier of Mautic.com is more than enough to get started. You can see more details of the play here. If I didn't already have servers to run Mautic installations on, I'd probably switch to the free tier.

Mautic Overview


{% asset wlaurance-mautic-8-06-17 alt='Mautic Dashboard Overview', class='img-responsive' %}

The dashboard gives me quick access to see how many people became contacts (most pictured are anonymous). I can see my top lists or segments and where most of my traffic is coming from.


{% asset wlaurance-mautic-segments-8-06-17 alt='Mautic Segments Overview', class='img-responsive' %}

Segments are lists of contacts that have filled out a form on my website. I build my landing page and blog post forms to add a person to a campaign. These campaigns send out a welcome email with some information the person requested or expressed interest in by filling out the form. Since I like clean marketing lists, I also do a double opt-in email. When the person clicks subscribe in this email they are adding to a special confirmed segment and whatever other campaign segments I choose. This prevents me from trying to send email to 'blahblah @ gmail.com' continously and looking like a spammer. We'll talk about forms and campaigns next.


{% asset wlaurance-mautic-rep-form-08-06-17 alt='Robust PostgreSQL Form Chart', class='img-responsive' %}

Forms are where I capture names and emails for people interested in what I'm offering. These are the statistics for my Robust Express.js PostgreSQL form. If you visit that page you'll eventually see a full screen lead collector form.

{% asset wlaurance-mautic-rep-form-builder-08-06-17 alt='Robust PostgreSQL Form Builder', class='img-responsive' %}

Mautic gives me a form builder where I can fields and link them to a contact. This allows me to use that information in emails or marketing messages in the future. Forms are embeddable in any page with a JavaScript snippet or through the landing page builder.

In addition to forms Mautic has this idea of a focus item. Focus items are little popups or messages displayed on your website. In this example I have a focus item with the form mentioned above. The builder interface looks like this:

{% asset wlaurance-mautic-rep-focus-item-8-6-17 alt='Robust PostgreSQL Focus Item', class='img-responsive' %}

I recently upgraded to Mautic 2.9.2 and now I have the ability to use HTML for the entire focus item. I'm excited about that because my current focus item doesn't match my site design as much as I'd like too.

One feature I really like about focus items is it gives you a chart of the number of times the item was shown and the number of times the form was completed. It's easy to get an idea of your conversion rate by looking at the chart:

{% asset wlaurance-mautic-rep-focus-item-stats-8-6-17 alt='Robust PostgreSQL Focus Item Stats', class='img-responsive' %}

The form is a campaign form. This means that when a person submits their information, they are pushed into the campaigns that subscribe to this form.


{% asset wlaurance-mautic-campaign-overview alt='Robust PostgreSQL Double Optin Campaign Overview', class='img-responsive' %}

When a person submits the form from the focus item they are entered into my Express.js PostgreSQL Double Optin campaign. This chart shows me the number of contacts added, emails sent, pages hit, and any contact segment modifications. I tend to get most of the traffic to the landing page during the week so most weekends there is no activity.

So what does this campaign do exactly? Let's take a look at the builder UI and get a feel for the experience of someone in this campaign. One thing I love about Mautic's builder is it let's me name nodes in any way that makes sense for what I'm trying to accomplish.

{% asset wlaurance-mautic-campaign-builder alt='Robust PostgreSQL Double Optin Campaign Builder' class='img-responsive' %}

  1. Robust Express.js Pos... - This is which form this campaign listens too. In this case it's the one mentioned in the form section.
  2. The next steps are two emails are sent. Send double opt-in email and Send Robust Express.js P...
  3. The next step is a conditional step. We will only continue if Visits Node/PG Confirmation Page is true. This is the link I send in the Send double opt-in email email for the person to confirm their subscription.
  4. If they do click that link, they are added to the segments I want them added to. I also remove them from a special 'pending opt-in' list. After 5 minutes, I send them the lesson 1 sample of my Ebook that is ready for consumption.
  5. If they open that email, we queue up an email to send three days later asking them what they thought about the sample.

This is the highlevel overview of what this campaign does. When I have more chapters ready I will add them to this campaign as new nodes. For existing users who already finished the campaign actions, they won't be exposed to these new flows. I'll have to send them Broadcast Emails to reach them about new chapters.

Let's dig a little deeper into each of these campaign nodes.

Broadcast Emails

Broadcast emails are one off emails. You choose which segments which segments you want to send this email to. Once you are ready you send to the contacts in that segment. It's a one shot meaning if you had 100 contacts in a segment at the time of the send it will send to 100 contacts. If 10 more contacts are added to that segment the next day, there will be 10 pending contacts to send to for this broadcast email. Usually broadcast emails are time sensitive. So if it makes sense, I'll manually send for another day or two. But otherwise I can leave it alone.

{% asset wlaurance-mautic-broadcast-email-dashboard alt='Postgres 10 is here broadcast email mautic', class='img-responsive' %} {% asset wlaurance-mautic-broadcast-email-builder alt='Postgres 10 is here broadcast email builder mautic', class='img-responsive' %}

Landing Pages

Landing pages are an easy way to create dynamic HTML/JS/CSS pages. They are a native part of Mautic. You can use them in campaigns and emails easily. Forms are easily embeddeable in landing pages. A/B tests are also a nice feature of landing pages. You can build a second variant and assign a traffic weight percentage and winner criteria. So if you are trying to increase form signups you can choose submission rate as your winner criteria.

{% asset wlaurance-mautic-landing-page-builder alt='Robust Express.js PostgreSQL landing page builder', class='img-responsive' %}

The default themes that come with Mautic are OK. Luckily 'Code Mode' is allowed so you can have any custom HTML you want.

{% asset wlaurance-mautic-landing-page-edit alt='Robust Express.js PostgreSQL landing page edit', class='img-responsive' %}

Landing pages come with stats so you can see total visits and unique visits.

{% asset wlaurance-mautic-landing-page-stats alt='Robust Express.js PostgreSQL landing page', class='img-responsive' %}

Final version of this landing page is here, Robust Express.js PostgreSQL.

Hosting Mautic Yourself


For virtual private servers I use Digital Ocean. There are many out but for I have been super satisfied with their customer service and performance. I've become a true fan.

I run my Mautic instances on a $5 dollar per month box. If you are just starting out like me, this is plenty of horsepower. The nice thing about Digital Ocean VPSs is they can be resized at any point in time.

The other reason I use them is they play nicely with Server Pilot. From Server Pilot, The best way to run WordPress and PHP sites. Simple, fast, secure hosting on your DigitalOcean servers.. They deliver very well on their value proposition.

Server pilot is easy to install with SSH access to your Digital Ocean VPS.

PHP and MySQL Database

I use Server Pilot to create PHP applications. This creates the proper server blocks in nginx, creates SSL certs, and routes requests to the proper application directory. Creating a MySQL database is handled as a separate step in ServerPilot.

{% asset wlaurance-mautic-server-pilot-app alt='Server Pilot New App Screen', class='img-responsive' %}

Once the app is in place I download the lastest Mautic zip file and follow the installation guide.

The guide has me connect to the MySQL database, create an admin user, and configure the server to send mail.

Their are many details to get correct in the setup including CORS configuration, global page tracking snippets (like Google Analytics, Facebook Pixels etc), CRON jobs, and much more.

Email Send Provider

An email send provider is an absolute must. Mautic makes it possible to send using local sendmail. But this is a guaranteed way to end up in the spam folder.

I'm using Sendgrid and was grandfathered into a 12K emails / month plan.

I just discovered a new email provider, Elastic Email, that offers 150K emails per month free!!!

Each of these providers comes with some setup with DKIM and SPF records.


SSL is taken care of for free by Server Pilot. It's simple to enable rotating Let's Encrypt SSL certs for every single app you host wil Sever Pilot.

{% asset wlaurance-mautic-server-pilot-ssl alt='Server Pilot SSL', class='img-responsive' %}


Here are some of the links for services I use.

Interested in setting up your own Mautic installation?

If you are interested setting up your own Mautic, then please subscribe to this form. I'll send you my free Mautic Quick Start Guide.