I was recently hired by a fellow online instructor to migrate from Mailchimp to ConvertKit (affiliate link), and then integrate ConvertKit with Teachable and WordPress. Setting up the various tools and services is a common challenge that all digital entrepreneurs face. Integrating those services and making sure they work well together significantly adds to the challenge. Online course creators, for example, often need to integrate their website, their teaching platform and their email autoresponder service. If you need an integration done for you, you can hire me!

This is the full project report. It is a good example of how migration and integration projects can go. Names and URLs have been changed due to the technical details included. Let’s call my client “Jack”.

Meet Jack:


Jack. Online Entrepreneur with Tech Issues.

Jack’s Problem

Jack is a technical training expert and he has recently started to teach online. His Teachable school is set up (and gaining traction), and he runs a WordPress blog. On this blog he offers lead magnets to potential students. If visitors subscribe to receive his lead magnets, they are sent to a free Mailchimp account. Now Jack has a problem:

  • His lead magnet subscribers are sent to different lists (depending on the lead magnet) within Mailchimp for organizational purposes. This is not very cost-effective (Mailchimp counts the same subscriber in different lists twice). It also makes maintenance and selecting the right subscribers a bit of a nightmare.
  • Jack doesn’t know how to code, so he hired someone on Upwork to create a WordPress theme for him. The result is a theme where nothing is customizable without coding. Even the mailing list signup forms are partially hardcoded into the theme code. Jack can’t add further lead magnets on his own, or change the existing sign-up forms.
  • Jack’s students on Teachable stay on Teachable. There is no integration with Mailchimp.

Jack’s Original Project Scope

So when Jack approaches me with his problem, this is what he wants to achieve:

  • Jack wants to integrate Mailchimp with WordPress so that subscribers are placed in one and the same list and put in different Mailchimp groups depending on which lead magnet they signed up for.
  • He also wants Teachable students to be sent to Mailchimp. Again, students should be put in different groups corresponding to different courses.
  • A list of existing LinkedIn contacts and an excel file of former classmates need to be imported into separate groups.
  • Jack wants to be able to add further courses and lead magnets on his own in the future. How to do this needs to be documented.

Step 1: Analysis

Every good IT project starts with a thorough analysis. A common mistake in IT projects is implementing the client’s requirements as stated in the very first conversation (in a valiant attempt to save time and cost). If you want to help your clients get closer to their goals, you need to take a step back and align the solution with your clients’ goals. Simply implementing a list of tasks doesn’t accomplish that. Also, projects that rush a job often end up finishing late and over-budget. That’s not good for customer satisfaction. So let’s make sure we understand Jack’s problem. This can happen via email if we have the time, or via phone or skype if you want to be faster. I usually try to describe what I’m would do in quite a bit of detail. I try to put myself in my clients’ shoes. When thinking about their everyday processes, often obstacles become quite obvious. In addition to a textual project scope description, I’ll usually try to create a simple, graphical project outline. This provides so much more clarity to the client. It also makes it easier to think about the problem and reconsider possible solutions. /Users/gxxr/Dropbox/0Projects/soloprenaut.com/articles/2016/TODO/tech/12neilsmigration/Screenshot 2016-12-04 15.44.22.png

Breaking the Problem Down

Now that we have our top-level view, let’s break down the problem further. Manual imports (the green arrows) shouldn’t be a problem once we have a clean structure in place. What remains are thus the two components

  • WordPress to Mailchimp (blue arrows) and
  • Teachable to Mailchimp (yellow arrows)

Teachable to Mailchimp Integration

Integrating Teachable with Mailchimp isn’t that difficult. Using Zapier, we can send Teachable users to Mailchimp groups. The only catch is that courses need to be named exactly the same as groups in Mailchimp in order to be able to set up a zap with a free account. It’s possible to translate a different course name to a group name, but this requires a multi-step zap, which in turn requires a premium Zapier account (more about this problem later).

WordPress to Mailchimp Integration

There are two opt-in forms on Jack’s WordPress site. Both were built using Contactform7 with a Mailchimp extension. Contactform7 is a free plugin. In comparison with premium plugins it’s quite clumsy to use (no graphical form editor, you configure your forms with a special syntax). Mailchimp groups are not supported at time of this project. We’ll thus need to switch to a different plugin or use form code generated by Mailchimp directly. The first form is a simple inline form which could be replaced with a Mailchimp generated form relatively easily. This would probably require custom CSS styling to align the style with the website’s look and feel. The second form, however, is a HelloBar-style form, which, unfortunately, is hardcoded into the theme code. It’s going to have to go (and be re-done from scratch). As any software engineer will tell you, mixing display and logic isn’t a great idea, and this is a prime example: Instead of replacing just what-it-does or how-it-looks, we’ll get to redo both. Yay! jack4.jpg

Step 2: Consulting

Let’s do a quick recap:

  • We need to replace Contactform7 or use Mailchimp forms directly, possibly using CSS for styling. The latter would make it difficult for Jack to add further forms on his own in the future, limiting his potential to add further lead magnets easily.
  • We need to redo the HelloBar completely. If we keep the hardcoded form, Jack won’t be able to change his lead magnet (or the form’s style) in the future.

Jack tells me he’s going to sign up for a paid Mailchimp account because he wants to start using automations. This makes me reconsider: What if Jack doesn’t actually want Mailchimp? This is a question to solve before we plan the details of the integration. I point out that ConvertKit (affiliate link) is almost at the same price level, and – in my opinion – a much better fit for Jack’s requirements: /Users/gxxr/Dropbox/Screenshots/Screenshot 2016-12-04 15.50.46.png It’s also a good time for Jack to take a look at Thriveleads – in my opinion, the opt-in form generator plugin for WordPress with the best price-performance ratio. Contrary to most popular premium plugins, you only pay a one-time fee, and you get all kinds of forms, AB-testing, etc. It also integrates with ConvertKit. This is a significant advantage when Jack wants to add further forms at a later time. jack3.jpg Neither switch is necessary, but would help to achieve a clean and maintainable setup. The more plugins and plugin extensions you combine, the more you increase the risk of something breaking down along the way. Reducing the complexity of the setup would also reduce the number of steps to add further courses and lead magnets in the future. Jack decides to buy Thriveleads, and to switch from Mailchimp to ConvertKit (affiliate link). Wise choice!

New Project Scope

We thus have a brand-new project scope:

  • Set up ConvertKit and make sure subscribers’ origins can be identified and used to send out emails
  • Integrate WordPress with ConvertKit using Thriveleads
  • Eliminate the hardcoded HelloBar (but keep the style the same)
  • Eliminate Contactform7
  • Migrate from Mailchimp to ConvertKit
  • Document the process for adding additional lead magnets and courses

ConvertKit uses tags (as opposed to the less flexible groups), so our goals change accordingly:

  • There is no need to create separate groups or segments. In ConvertKit, the forms used are the “entrance gates” of subscribers which can act as tags to select subscribers. Forms are sufficient for our lead magnets. If subscribers subscribe to lead magnet 1, we’ll be able to select them using “form 1”. We’ll also use a form to identify all students that came from Teachable.
  • “Tags” can be applied to subscribers based on any number of conditions.
  • We can tag students based on the courses they enrolled in.


Step 3: Implementation

Now that we have a clear picture of what we want to do, let’s get to it.

ConvertKit Setup

I start by creating one form per lead magnet. I also create one form for Teachable, and then ask the ConvertKit staff to approve Jack’s account (this is necessary before sending out the first emails and normally gets done within a day). I also created tags for

  • Course 1
  • Course 2
  • LinkedIn Contacts
  • Classmates

These are necessary to precisely identify subscribers. Since we only import LinkedIn Contacts and classmates, we don’t need a form for these groups of subscribers. We could create forms, but it’s just not necessary.

WordPress and Thriveleads Setup

After the plugin installation and licensing, I set up the ConvertKit integration. I then proceed to create the opt-in forms with Thriveleads. I make sure to name the forms in Thriveleads exactly the same as the forms in ConvertKit. This is good practice in order to avoid confusion.


We encounter our first obstacle: The Thriveleads editor doesn’t load. The following section is a little technical, so you’re free to skip it. Its main point is to show you the unexpected issues that can make an otherwise simple project challenging.

Chrome inspector shows a “500 – internal server error”. I ask Jack to do a full WordPress backup – we’re going to fiddle with more critical parts of the site now. Jack provides access to his cpanel account, and reading the server logs, I discover a broken instance of Font awesome. /Users/gxxr/Dropbox/0Projects/soloprenaut.com/articles/2016/TODO/tech/12neilsmigration/jack2.png I deactivate it with Jack’s permission, and soon discover the next problem: There are known problems with Thriveleads editor and themes coded in a way not conforming to WordPress standards. Knowing that Jack’s theme is custom-coded, this is my immediate suspicion. With Jack’s permission, I switch to a WordPress standard theme for a couple of seconds. The Thriveleads editor immediately loads, and we know that the custom theme is at fault. Now the question is if that can be fixed, and how to fix it. It turns out that it can be – although not in a way I would recommend. The theme code loads a non-standard version of jQuery in a non-standard way. When I deactivate the code to load jQuery, the website’s frontend doesn’t load. Now I can see why the theme developer loads his own version of jQuery. The reason is that jQuery is loaded in noconflict mode in WordPress, whereas the theme developer likes accessing jQuery with the $ variable. I therefore try to make the standard jQuery library included with WordPress available to the theme code via the $ variable: This is something to keep in mind if other plugins are installed in the future and don’t work (i.e. because they use $ for other purposes). I don’t recommend this strategy – it’s a dirty workaround, required by dirty code in the theme code, that could break with updates. Switching to a properly coded premium theme would be my long-term suggestion. Now we’re in business and can finally proceed to setting up our forms.

HelloBar Next, I deactivate the HelloBar by removing the code from the theme’s header.php file. Ugly work, but someone’s got to do it. New Forms

  • I create a new HelloBar with Thriveleads
  • I replace the inline form with a new Thriveleads form

As soon as the new forms are online, the first subscribers start showing up in ConvertKit – a great sign

The Teachable to ConvertKit Integration

ConvertKit features a native Teachable integration, which is quite easy to set up. The trouble with the native teachable integration is that it only works for course sales (which seem to be the same as enrollments). Anything else, like a user signing up for a school doesn’t trigger anything in CK. Zapier to the rescue. With Zapier, you can easily set up a zap to subscribe new teachable users to a form in CK. I first create a “Teachable Users form”. The next step is a little more difficult. When users enroll in a course, they should be given a tag in ConvertKit. With Zapier, this should be easy. It isn’t. Here’s why:

  • Although I called my tag in CK exactly the same as the Teachable course, it doesn’t work: The CK API expects the tag ID instead of the tag name. Obviously, Teachable doesn’t send the Tag ID (how would it know about the ID?).
  • This could be solved with Zapier: Using a formatter action and a lookup table, we could map course names to ConvertKit tag IDs. (Want to find your ConvertKit tag ID? Simply read it from the URL when you open the tag in ConvertKit).
  • However, that would require a multi-step-zap – and you need a premium Zapier account for that.

Luckily, now we can go back to the native Teachable/ConvertKit integration. When a “sale” occurs (and luckily, an enrollment seems to count as a sale as well), Teachable can be told to tag a subscriber in ConvertKit. You can configure this directly in ConvertKits “Automations Rules”: And so we’re done.

Step 4: Testing & Documentation

Testing is successful – everything works as expected, so all that remains to be done is documentation. In this case, I go for video documentation. This is easier both to create and to use for our purposes. I simply go through the process of adding further forms and tags and setting up automations and record my screen. I also show the process for manually importing subscribers to ConvertKit.

Integration Recap

So here’s what we’ve done:

  • We’ve eliminated the hardcoded HelloBar form
  • We’ve installed Thriveleads and gotten rid of Contactform7 generated forms
  • We’ve replaced the old HelloBar with a Thriveleads HelloBar. This is much more maintainable. Whenever Jack wants to change the style or content of the form, he can do so with a couple of clicks. The native ConvertKit Integration of Thriveleads makes it easy for Jack to set up new forms (and all kinds of varieties, such as exit-intent popups)
  • We’ve replaced the inline form with a Thriveleads form.
  • We’ve used Zapier to send Teachable learners to ConvertKit
  • We’ve used the native Teachable to ConvertKit integration to tag ConvertKit subscribers whenever they enroll in a course. This works for multiple courses as well.


Jack. Happy Digital Entrepreneur with working tech.

Jack is pretty happy with the result and can start adding further lead magnets and courses without external help. Want a done-for-you integration? No troubles, just systems that work and talk to each other? Get in touch.


Want to learn how to use Zapier? Check out my FREE COURSE!