Segmenting a MailChimp List by Signup Source

I love Nathan Barry’s post on how he does email marketing. One small, but important, detail that I picked up the second time through the post is that Nathan keeps all of his subscribers in a single MailChimp list and then segments them down by signup source in order to deliver the most relevant content.

This is an excellent way to structure your list. You could achieve the same result with separate lists for each signup source, but that will become unwieldy when you want to send a single campaign to multiple lists, or to your entire subscriber base.

So, how do you capture signup source?

It’s really easy! Login to MailChimp and click on Lists in the left nav and then click on your list name. Click Signup Forms and then General Forms.

Add a hidden text field called SOURCE with a label “Signup Source” and a reasonable default value (in case you forget to pass one). Save your form.

signup-source

Notice how I put the merge code *|SOURCE|* in the header of the signup form as well — this essentially lets you call your list something different to people signing up for different reasons versus settling on a generic name and potentially confusing people.

Now, wherever you embed your form, simply add the following line of HTML right above the <div> that encloses your submit button:


<input type="hidden" name="SOURCE" id="SOURCE" value="RobSobers.com Newsletter">

Obviously you should change the value parameter to whatever you want that signup source for that form to be.

That’s it — now you’ll have an extra property on every subscriber record that indicates which form they came in on. If you’re capturing email addresses with multiple different incentives, this extra bit of data is vital.

20 Comments

  1. Thank you. This is exactly what I was looking for!

    -KP

  2. Quick question, I’m doing this on my forms (http://brandonhilkert.com), but I’ve found it difficult to manage signups for different things (newsletter, courses, workshop), that I ultimately want all to be on the single master newsletter list. If a user tries to sign up to the list again, with a different “SOURCE” you get a big ugly error that they already exist. Have you experienced this at all?

    • Rob Sobers

      Hey Brandon – I haven’t run into that yet. That’s an edge case I haven’t tested yet, but I would consider it a bug. Have you contacted MailChimp support?

      Multiple conversions is tricky because, not only do you want to avoid the ugly error, you probably also want to keep track of historical conversions as well. This is where something like KISSMetrics or trak.io comes in. I’m using trak.io to track each subscriber’s historical form submissions.

  3. Paul

    Thanks for the advice Rob. This is exactly what I was looking for. However, I notice the default merge tag doesn’t get added to the list for General Forms and this only works if you embed the form and add the HTML. Do you have a workaround for this?

  4. So Rob gets a couple things wrong here, but his method is completely valid and I use it myself. Rob’s method leads to the problem which “Brandon Hilkert” encounters. Although I’m pretty sure Nathan Barry’s method would as well, if you use embeded form. Not 100% sure with out testing.

    I’ll explain.

    I believe Nathan is using “Interest Groups” to segment his lists, and not “Hidden Text Fields” which is what’s explained in this article. There’s a very important difference between the two.

    Mailchimp creates “Interest Groups” for any checkbox field you add to your signup form. These checkboxes can be hidden from the end user should you choose, but the values I believe must be pre-defined in the mailchimp form builder. You can still set “Interest Groups” when someone signs up though an embeded signup form, much like Rob explains with “SOURCE” but it’s slightly different. Setting a value for a checkbox interest group looks something like this (names would differ for you)

    <input type="hidden" name="group[10697][1]" value="1">
    <input type="hidden" name="group[10697][2]" value="1">
    <input type="hidden" name="group[10697][4]" value="0">
    <input type="hidden" name="group[10697][8]" value="1">

    Hidden text fields as Rob explains in this article are different. They can only have a single value for email in a list. Additionally, once a user is subscribed to a list, they can not signup to that list again. ….but they can edit their “Interest Groups” should you make those fields visible. I suspect, this is what Nathan Barry does.

    Also there’s some confusion with the naming of these variables, as “Signup Source” in Mailchimp I believe is a reserved variable, which gets set regardless of if you’re using “Source” as Rob explains. I believe it’s set automatically from what ever “App” your users get signed up from.

    Examples:

    Signup Source
    Hosted Signup Form (from my embeded form)

    Signup Source
    Unknown (from my imports)

    Signup Source
    Chimpified (from the chimpified app)

    But I’m also using “Source” which is ok, but shows up as a normal merge variable in Mailchimp.

    I’ve been playing with this stuff today, and found this blog post when looking how to edit the “Signup Source” internal variable in mailchimp, so please excuse me for being verbose.

    • Tom

      I’m using the same method as you Jordan, with the group selection hidden from the user.

      I have a standard newsletter signup for my list but I also have a WordPress theme I give away once someone gives me their email on a different form (they get signed up to the same list), which gets assigned to a different group. The problem I’m having is that if someone has already signed up to the email list, they can’t get the free WordPress theme because they will get the “[email] is already subscribed to list” error message.

      Is there any way around this with MailChimp?

      • Hey Tom,

        There is currently no way around this in MailChimp, unless you use the API to subscribe people, or use a separate signup service for MailChimp. I discuss both of these options in my free Bootstrapper’s Guide to MailChimp. http://pocketproduct.com/mailchimpguide

        • Ryan, you seem to know these stuff pretty well!

          I was wondering, using this method, is it possible to record the “value” to be the name of a page/post or page slug…etc?

          I have an opt-in box under each post but would like to record which post did the subscriber come from… is that possible?

          Thanks in advance and also thanks Rob for writing this article.

    • thanks for this Jordan…. how would I find the codes for the groups? And where in the embed code would I place the preset values in the code?

  5. I have the same question as Andy. We have a signup form in the cart for people that have made a purchase and also one in the footer of our site. We would them it to go to the same list but segment them based on where they signed up. If it’s the same form for each source (in order to land in the same list) how do we designate from which source they signed up?

    • Rob Sobers

      Hey Elizabeth,

      You simply change the value of the hidden SOURCE field in each individual embed snippet for the form. I assume you embed the same form twice: one for the cart and one for the footer. Just manually hard code the SOURCE values and you should be good to go.

      The problem that you’ll still encounter is the one that Brandon Hilkert mentions, which is when a person tries to submit the same form twice MailChimp will tell them they’re already a member of your list. This is really a result of us all trying to use MailChimp forms for lead capture vs. traditional newsletter signups.

      • Rob, the problem I have is that the code is in the function.php of my WordPress theme; it’s a generic code for all posts.

        I was just wondering if there’s a way to make that a variable or something so that it calls out the post name or slug; otherwise I might just change it to a post-by-post basis rather than “one code fits all”.

        • Rob Sobers

          You can do this pretty easily by adding some jQuery code that loads on each post page. It’ll look at the post name and then set the hidden field value on the form dynamically. Something like this:

          $(function() {
          var sourceText = $(‘h2.entry-title a’).text();
          $(‘input#SOURCE’).val(sourceText);
          });

  6. I have been trying to figure this out forEVER. Ive always been confused with mailchimp…segments? groups? and what it could all be used for.

    This time I wanted to create a whole new automation campaign. I just tested this using a group and it worked great!!! If anyone wants to know, this is how i did it… first I created the group. Then I set up an autoresponder selecting Automation > Custom (triggers). I chose – send when the sub joins the list. Added a condition that matches the group I want them in. and finally, in my embedded form, instead of “source”, I used the checkbox code mailchimp gave me for users to select a specific group. I deleted the other groups and changed input type=”checkbox” to input type=”hidden”. Awesome! It works!

    Thanks so much for pointing me in this direction. Its a great way to create new campaigns!

    I have another scenario if anyone can help me get this working, i will be so grateful!!! I have a blog where I want to offer a different freebie on every post. The subscribers can go right in the main list without groups or segments, but I cannot seem to find the form code that redirects them to a specific page to download. I dont mind if a few people slip through the cracks and dont finish the signup process. They will if they like my content. Does anyone know custom form code to redirect to a different thank you page per form?

    • Rob Sobers

      Hey Trisha,

      I haven’t found a way to do different redirect URLs per form in MailChimp. It’s one of the reasons I switched away (now using ActiveCampaign).

      Another big problem for me was that if a single person wanted to get multiple freebies, they’d get a “You’re already subscribed to this list” message on their second try.

      I love MailChimp on so many levels, but they’re sorta caught in between email newsletters and marketing automation. Their forms are REALLY only meant to be entry points to a mailing list, not lead capture and content delivery. :(

  7. To segment my mailchimp list, I use a plugin that also parses the tracking code to mailchimp. The steps looks a bit more complicated but not that much.

    I agree with what you (Rob) mention about Mailchimp being an email newsletter provider vs marketing automation. I guess for simple business that don’t require that much slicing and dicing the list, it is still a good option.

  8. Simon Stratford

    I’m having the same problem, I want one list, but add people to a group that then triggers different offer emails. Works great apart from the error when you are already part of my main list.

    I don’t want to show all my groups to an existing subscriber. I just spent about 3hrs creating a custom form with hidden group fields, then converting that to a shortcode for wordpress.

    Really annoying as I’ve just moved from campaign monitor thinking mailchimp was able to do what I wanted.

    James what plugin do you use?

    Rob can active campaign do what I’m trying to do?

    • Rob Sobers (Author)

      ActiveCampaign can do exactly what you want without much pain at all. You can have all your forms funnel into one list, but have them apply different tags so that you can segment easily.

      I have it in play right now on http://munchkinreport.com/resources where you get tagged differently depending on which resource you download.

      As you can see from this thread, present day MailChimp makes segmenting super challenging because of their concept of a “mailing list” vs. repeat submissions.

      • Simon Stratford

        I just might have to check that out, at present I’ve found the only way is to use the mailchimp api, from standard forms there is a flag that generates the error rather than updating the record.

        so I’ll try that first and see if I can cobble something together.

        If that fails I’m jumping to Active campaign. Thanks for the info.

      • Simon Stratford

        I got it working via the api. I now have 2 sign up forms on my page. One where you join my regular newsletter. I used the standard form code for this, so you will get an error if you are already part of the list. That’s fine, thats what I want.

        Then on the other form I use the api to add you to a different group depending on what free font you want. This adds you to the same list but updates your interests without generating errors. That then triggers another email to give you the free font. If you join another group it triggers another email to give you that.

        I converted the whole thing to a very basic wordpress plugin. Now I can use a shortcode in my posts, so I can easily change the interest group I want you to join.

        It took me all day to create, what a ball ache.

        I might speak to a developer friend to see if he can tidy up my code.

Leave a Reply

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax