Every once in a while we get complaints from customers who want to run really complex segmentation criteria in MailChimp, but they keep bumping into our segmentation limitations. Truth is, we put those limits in place to keep a handful of customers from destroying our servers for the 900k other users on the system. Some of their queries could really turn our databases into a hairball of a mess. To get around those limitations, we’ve seen customers create multiple MailChimp accounts, open up separate tabs to run more segments, and all kinds of crazy hairbally stuff that would make our servers choke.
So we created Hairball. It’s an Air app that you install on your computer, and it syncs with your MailChimp list. Then, you can GO NUTS building all kinds of segments with your list. When you’re done, you sync it back up to MailChimp.
Hairball is currently in beta. If you’re interested in giving it a try, here’s where you can download:
- Mac: http://beaker.mailchimp.com/hairball/Hairball.air
- Windows: http://beaker.mailchimp.com/hairball/Hairball.exe
- Linux: http://beaker.mailchimp.com/hairball/Hairball.linux.air
Some Quick Tips
1. First, go to “Connect Account” (it’s the link in the top right of the screen) and tell it which MailChimp account to connect to:
2. Next, you’ll see all your MailChimp Lists:
3. For each list, you’ll need to click the “fetch” buttons to sync their data down. Depending on the size of your lists, downloading their data can take a while (now you know how our servers feel).
4. After the data is downloaded, you can build unlimited segments. Get whacky!
You can even build a segment that’s based on fields with empty data:
5. After you’ve saved your segment, upload it to MailChimp:

6. You can even generate random percentage segments (what’s more random than 17?):
7. You can view the members of your segments in Hairball, or export them for a spreadsheet app or something:
Static Segments
After building your segments in Hairball, they’re uploaded to MailChimp as “static segments.” That means we don’t have to build them dynamically for you, because you already did the hard work in Hairball (which makes our database servers purr happily).
Whenever you log in to MailChimp and create your next campaign, you’ll see an option in the segmentation screen for static segment:
That’ll show the segments you built in Hairball. Pick your segment, and it’ll zap into place and you’re on your way. Power tip: use this to build a big static segment of “proof readers” that can test all your campaigns before you send to the full list.
If you’re one of our users with ginormous lists and MailChimp just feels a little sluggish when you build out your segments, give Hairball a try. Post your comments below, or in our Jungle discussion.









Awesome – you guys make bad-ass features that make me happy!
Introducing Hairball: an Air App for Really Complicated MailChimp … http://t.co/Ly8KwV0
Introducing Hairball: an Air App for Really Complicated MailChimp Lists: Every once in a while we… http://t.co/9rkPPSb via @MailChimp
Introducing Hairball: an Air App for Really Complicated MailChimp Lists: Every once in a while we get complaints… http://t.co/8xhr91K
Introducing Hairball: an Air App for Really Complicated MailChimp Lists http://t.co/s6ZLdzx via @mailchimp
Awesome – you guys make b… http://t.co/ZomObbh
Introducing Hairball: an Air App for Really Complicated #MailChimp Lists http://j.mp/ofRBjC
Introducing Hairball: an Air App for Really Complicated #MailChimp Lists http://j.mp/ofRBjC via @Leerentveld
Introducing Hairball: an Air App for Really Complicated MailChimp Lists: Every once in a… http://t.co/QTSOV4V
RT @emailupdater: #MailChimp makes desktop app for Complicated Selections or "Hairballs" http://j.mp/ofRBjC via @Leerentveld
RT @MailChimp: Introducing Hairball: an Air App for Really Complicated MailChimp Lists http://j.mp/ohuXAC
Perfect name and logo: Hairball from @MailChimp http://t.co/3iLCBND
now here’s a nice tool
RT @MailChimp: Introducing Hairball: an Air App for Really Complicated MailChimp Lists http://j.mp/ohuXAC
“@MailChimp: Introducing Hairball: an Air App for Really Complicated MailChimp Lists http://t.co/9nfMquH” nice!!
As someone who spends a serious amount of time inside @MailChimp , I am very excited for the new Air App – Hairball http://t.co/fyligr4
Love these guys RT @MailChimp Introducing Hairball: an Air App for Really Complicated MailChimp Lists http://t.co/EYalPDC
Introducing Hairball: an Air App for Really Complicated MailChimp Lists http://t.co/17mBZoA >>> cool…
A REALLY cool app for complicated @MailChimp accounts: http://t.co/c5OZnd3
Somebody’s gonna have to explain to me what an "Air App" is: http://t.co/SXGYoes Is it an app for Adobe Air?
Yep. It’s an app built in Adobe Air.
Hairball: an Air App for Really Complicated MailChimp Lists: http://t.co/f6xvfxk
This looks awesome.
Just wanted to point out you have a typeo in the app when fetching campaigns, it says: “Completed loading campiagn data”
Whoopsie, thanks for the note Jordan.
A Mail Chimp fan? Check this out @MailChimp: Introducing Hairball: an Air App for Really Complicated MailChimp Lists http://t.co/Kyl4fpP
Segmentation tool: RT @MailChimp Introducing Hairball: an Air App for Really Complicated MailChimp Lists http://j.mp/ohuXAC
Introducing Hairball: an Air App for Really Complicated MailChimp Lists http://t.co/2kEcGeq via @benchestnut
Could this app be used to mass-delete users? That’s one feature that would be really handy.
This is very cool. Any chance that we will see an update to the API that allow us to upload our own static segments? I would love to be able to slice my list up into much more complex segments and mail to them.
Thanks for all you guys do!
=C=
Static Segments have been supported via the API since July 16th, 2010:
http://groups.google.com/group/mailchimp-api-announce/browse_thread/thread/afabc8bf61ecc8a8
You’ll find the full docs near the end of the List Related API methods:
http://apidocs.mailchimp.com/api/rtfm/#listrelated
Thanks Jesse for the pointer. Don’t know why I missed that. Off to go spelunking in my database.
=C=
This looks great, although I’m not sure it will address the difficulty we have had with how we are trying to use segments. In our situation there are times when a simple “ALL” or “ANY” segment doesn’t suffice, and we need a combination. For example, suppose we have the state and age of each subscriber. Then suppose we want a segment with Ohioans between 21-35 and Pennsylvanians between 36-40. Right now we have to do two separate campaigns, each having the different segmentation criteria. Being able to combine multiple segments into a single campaign would be helpful.
Hey Denny, if you are using the absolute latest-and-greatest (pushed today, version 1.6.12) you can do this by building segments and then using those segments to build more segments. As soon as you’ve created one segment from a list, “Hairball Segments” becomes an option in segmentation conditions and you can then use those to build up fancy segment combinations. I’m sure I just broke the record for number of times saying ‘segment’ in one paragraph.
Thanks Eric! This is what I was looking for!
I tried the Mac App, but its not working for me, cant upload it. Any tips?
Hey Irina – can you provide more information on what can’t upload? Or you can give support a holler: http://kb.mailchimp.com/contact and they’ll help figure out what’s going on and get it straightened out.
My mac download isn’t working either. “there is no default application specified to open the document”
Ah. Install Adobe Air on your system, then run the downloaded file from us. Sorry about that, we’ll bundle up a better full installation process, but for now, install here: http://get.adobe.com/air
Looks promising, but I actually don’t see one of the criteria in the app that I see online: “Last updated”.
We use Mailchimp to track the last download someone initiated from our site so that we can email them later for feedback on that download. The “Last Updated” field was a nice proxy for the date of last download.
Is segmenting by that date possible with Hairball?
That’s not currently available in Hairball, there are a few omissions. Thanks for the feedback, though, we’ll add it to the list of updates.
Linux link doesn’t seem to be working.
Whoops, beaker.mailchimp.com was down for a few minutes, but it’s back online now. Try again, estradalvaro.
So glad there is another option. It’s been my one disappointment with Mailchimp – the challenges with segmentation. Thanks a bunch guys! Can’t wait to test Hairball out.
Can I just say I’m going “Ape Shit” over this new feature! Cn’t wait to get started.
Absolutely sweet!
I can not install on Linux (Ubuntu) there is a mistake in the pocket
Hey Petr, it works for me on all versions of Ubuntu I’ve tried it on. Did you install the latest version of AIR available (2.6) from here: http://get.adobe.com/air/otherversions/ ?
nice!!!! was just working on a solution to store contacts offline and work with them. Could you include a “search all subscribers” function?
Thanks for the suggestion. Right now Hairball is focused on the need for complex segmentation, which means we lose some of the features available in the app. You will still be able to search users in the app but it isn’t a great fit for Hairball at this stage in development.
Can’t add new subscribers.,………
This is a useful tool, but can Hairball automatically refresh segments? Testing indicates not. Hairball can automatically update its lists from Mailchimp, but if segments can’t be automatically updated back to Mailchimp then it falls short for me. Hopefully I’ve missed something?
Hey Peter, at the moment static segments are not re-populated automatically. We’re planning an update with functionality to handle that, so stay tuned.
i love mailchimp! muaaacks!
that’s what I was waiting for !!!! MCh ROCKS !!!!
This app totally makes my day!! I’ve been secretly wishing Mailchimp had a way to create micro-specific segments
Thank you, thank you, thank you!!
Hairball works perfectly and really makes things far easier. But what I find is that new Subscribers and Profile updates to a list are not automatically added/updated to the static segments. This is probably by design because static segments are sort of a snap shot of the subscribers at the moment of creation of the static segment? And we have to add the new subscribers ourselves using webhooks and the api. Can you confirm this?
Hey Pascal, you are correct, static segments are currently created and then not automatically updated by Hairball or MailChimp. They will never be automatically updated by MailChimp, but a future version of Hairball will include the ability to re-run segmentation queries and re-export to MailChimp.
Thanks for the clarification Eric! The re-run feature would be cool. Is hairball a html/javascript air app or a flex/flash air app? If the latter is the case you could easily make a iphone/ipad or android version with the Flash CS5 packager. Would be cool to run hairball on the iPad.
Hey Pascal, Hairball is built with the JavaScript SDK, so no using “Burrito” to bundle it up as a mobile app. While I like the notion of easily porting to mobile platforms, we made sure Hairball will work with mega-gigantic lists (we tested against synthetic 10M member lists, with full list fields and all the fixins) and I’m not sure an iPad would enjoy running complex segmentation queries against that much data. It would definitely be cool, though.
Will you all host one of your fancy webinars for us to use this?
I’ll certainly send this request on to our webinar team. They’re always up for teaching something new!
Clicked on one of your example screens and it gave me an enlarged view (exactly what I wanted). But then, I could not close it. I got a + no matter where the cursor was on the screen. Had to shut the window and start over. I’m using Safari 5.1 on iMac with OS X 10.6.8.
Heh, we’re linking to the enlarged view the old-fashioned way: we link to the file in your browser. If you click the old “back” button, it’ll work. No fancy pop-up modals or anything.
Does hairball have an import? I’d like to exchange data between hairball and my CMS.
It only imports from MailChimp.
HALP! Have downloaded and installed AIR and Hairball and can’t get beyond setup screen. Generated API Key and pasted it in. Click Create Account and nothing happens. ?????
Oh. Duh. Never mind. Virus filtering. Ooops. :: wipes egg off face. ::
Just tested it out…Percentage based segmenting worked great. Doing it conditionally for State or Country on matching ‘any’ doesn’t work at all though. Sad
NM, it just errors out on if the state is ‘ID’
What’s the best way to get support for Hairball? When I run the same basic segment as I do when I start a new email campaign in the web app, the numbers do no match. The difference is several thousand email addresses…
HairBall’s a MailChimp app, so you can contact our support team as you normally would: help@mailchimp.com, or use the live chat. Links are here: http://kb.mailchimp.com/
It’s a relatively new app, but our team will be able to help.
Love it! Two requests that would make it an even better tool:
1) Ability to edit existing static segments. I know you can include them as criteria in other static segments, but this seems a little clunky if what I really want to do is change the original
2) Ability to create a segment where membership is based on the presence in a list – for example, I want to create a segment with all email addresses that are present in this spreadsheet, text file, etc.
This is exactly the kind of thing that makes me love this company: nearly fell off my chair laughing when the page loaded, only to find a TRULY useful tool being built. “Use your own damn CPU!” is counter-culture hysterical. Who wants a banana?!
OK, one more (minor) feature request – when creating a particularly long set of conditions that takes up enough room to require vertical scrolling, how about auto-scrolling the window down to the bottom when we create a new condition? Scrolling down every time gets old…
Can Hairball segment by Subscriber Activity? I don’t see that option, and most of my segmenting is using that data.
Hey Jason – you have to “fetch campaigns” for subscriber activity to be a segmentation option. We separate “fetch list” from “fetch campaigns” because they both take a while (campaign subscriber activity can be a TON of data) and we figured people might want to get cranking without needing all that data.
-Eric
I’m trying to use this app and once I’ve entered all my criteria, I can’t get past this: http://cl.ly/15373v3N2y1T1X2y1v1z
Any thoughts on why I’m stuck here?
Hey Les, whoops, looks like you found a segmentation query that barfs. Sorry about that. Jump into support and we’ll get it figured out – http://kb.mailchimp.com/
-Eric
Hi there,
Thanks for improving MailChimp a little more everyday
However, I was sad to realise that there still isn’t the and/or option in the segmentation.
For companies that work a lot with multilingual campaigns, it would be great to set a defined language in the segment, and then chose the “any” for the rest of the criteria.
Hi Charlotte,
Hairball supports building segmentations that include other segmentations and you can use that to build fancy logical combinators that aren’t possible in MailChimp. If I follow your example, you could build two segments – “language is Spanish” and “Country is Mexico or Spain or Venezuela”. Then build a third that combines those two to give you “language is Spanish and (country is Mexico, Spain, or Venezuela)”. Kate explains it better than me over here: http://blog.mailchimp.com/create-nested-segments-in-mailchimp-with-hairball/
Hope that helps!
-Eric
Similarly I find the lack of ‘either’ ‘or’ options quite frustrating, as it’s a common feature in most CRM systems I use nowadays. Eric – thanks for the suggestions as to how to get around it, but it would be a lot simpler and faster if it was already built in to Mailchimp / Hairball. Unless I’m being dim and missing something :/
The system works well. Is there a function that would allow me to upload a list of emails to all either be ignored or included in a segment?
Hey Tony – that’s not currently available, but is a great idea. Look out for it in a future release.
Well, whatever was wrong previously, it’s fixed in the latest version of the app. That being said however, I found what might be a show-stopper for me.
When I create a segment in Hairball and upload it back to MailChimp, it is called a “static” segment. Does that mean that it never gets updated on the MailChimp side from that point on? This basically turns Hairball-created segments into one-off, “use it immediately” type segments – otherwise they are out of date the first time someone new signs up to the list.
Hey Brian – great to hear the issue was resolved. You’re correct, static segments are frozen at upload time. Hairball was built to support ginormous segmentations that wouldn’t be possible in the MailChimp application and uploading a static list of members enables that. With your use-case, you could create and upload the segment right before you send a campaign. Then when you’re ready to send another, update Hairball and re-run/upload the segment (the last part will be one click o’ the button in a soon-to-be-released version of Hairball).
Hi Eric,
This is great! You mention that in a future release you will add the ability to re-run segmentation queries and re-export to MailChimp. So that means that I would be able to rerun on say a daily basis and re-export? Any idea when this feature will be available?
Thanks,
Daniel.
Hey Daniel – glad you dig it. A new version with the ability to edit, re-run and re-export segmentations is being tested right now.
Hi, I was very excited about this, but I seem to actually be able to do less. I’d like to do segments of people who clicked in automated emails in the last 7 days. This doesn’t include User Activity on the list. Am I missing something?
Hey Stephanie – you have to “fetch campaigns” for subscriber activity to be a segmentation option. We separate “fetch list” from “fetch campaigns” because they both take a while (campaign subscriber activity can be a TON of data) and we figured people might want to get cranking without needing all that data. We’ll make that more clear in the next release.
-Eric
ah ha. I’d missed that. Thanks! I’ll give it a try now. I’m actually trying to use it for reporting purposes on autoresponder campaigns.
Hi Eric, Actually the campaign data doesn’t include the autoresponder campaigns
These are the majority of our campaigns. Any way to include these too?
Why does it even need to be so complicated? Why not allow users to select multiple lists when sending? This is so easy to do in Constant Contact so it’s obviously possible. It’s such a hassle to have to create separate lists every time i want to send to multiple lists.
Different email lists tend to have different audiences, who’ve signed up under different situations and with different expectations and different permissions granted. Therefore, it’s assumed you’d want to send emails to different lists using different campaigns entirely. In general, sending the same exact email to completely different lists is just not right to us.
I have three lists: 1) All customers, 2) Customers who want company news, and 3) Maybe-not-customers who want MailChimp power tips. I have three separate lists and 3 separate email templates for those three audiences, and they have three different permission reminders. Some people indeed might’ve subscribed to multiple lists. They’ll get entirely different emails, but that’s what they were expecting. Within the first list, however (“all customers”), I might create different segments: a) Customers who use our API, b) International customers, c) Customers by specific industry, and so on.
In order to send targeted emails to a segment as described above, MailChimp actually makes it unbelievably easy. Heck, even if you want to send to segments where you didn’t collect data (such as geo or social or engagement levels), we make it easy.
Then you have power users who want to send to very complex segments of their lists (Users in San Francisco, in the tech industry, who’ve opened the last 2 campaigns, with engagement level above 3 stars and klout score greater than 60, etc). Doing so in MailChimp is possible, but can be slow. Things get hard for those power users. So we created Hairball for them.
How are you currently separating your lists, and what types of campaigns do you send to them? There may be a very simple way to organize things. It sounds like Hairball is indeed overkill for what you might want to do, but sending to multiple groups is actually not too hard to get done in MailChimp.
I just want to be able to select multiple lists for one campaign. Instead, I have do multiple campaigns because that is faster. I don’t see this as a power feature, but basic logistics. This is why MailChimp isn’t a good choice for some of my clients.
Hi Ben, sorry if I’m repeating myself or if someone’s already answered this but could you let me know how to get ‘and/or’ list segmentation in Mailchimp? I work for a theatre with a very segmented audience (comedy/cabaret/theatre/writers’shows/kids etc) and we need to send multiple emails per week, segmenting with different priorities. We also have two opt-ins for our list – one coming through our website and one coming through our ticketing system. If someone could let me know how to do this (I assume I’m just missing something obvious) that would be very very helpful. Thanks!
I agree with Lynne.
I had to do multiple list becouse gruops didn’t work with my site.
So if I wan’t to send Christmass letter to all I need to create five campains.
Another problem is that some users are on multiple lists and they get more than one same letter.
This is an awesome feature, so happy!
How can I create a segment:
Users that did not recieve email the last 30 days?
Hey Sam. The built-in segmenting feature at step 1 of the campaign builder allows you to create segments based on your subscribers activity on the campaigns you have sent previously. However, you cannot create a segment based on subscriber activity based on a blanket “30 days” worth of activities. Long story short you can only create a “did not open” criteria based around the campaigns you have previously sent to that list
awesomely fast and easy to use! thx guys
Great tool. Gonna try it.
When lists are deleted in Mailchimp, Hairball doesn’t recognize this.
“Fetch new lists” gets new lists, but there doesn’t seem to be any way to get rid of old lists!
How can you do A and (B or C or D or E).
Eg. I might want to email all people added after January 1 AND are in (LA or New York or Texas)
I can’t seem to do this with hairball?
Hey Cham,
Following your example of after January 1 AND (LA or New York or Texas), you could accomplish that by doing the following…
1. Create a segment in Hairball called “in LA, New York or Texas” using the “any” condition and picking the appropriate fields.
2. Then create another segment with “all” and “Date Added is after January 1″ and then add another condition and select “Hairball Segment” -> “member is part of” -> “in LA, New York or Texas”
Hope that helps.
-Eric
My e-commerce store is integrated with mailchimp, it sends info about order total, products purchased, etc..
Data that you can use when using the segment list tool at mailchimp, actually is very cool.
i was trying hairball and it seems to be a missing feature of segmenting by this e-commerce data, am i missing something? i hope the feature get included in the future.
Thanks mailchimp team!
Advice ?
App won’t install on my mac osx 10.7.3
Sorry to hear you’re having problems. Did you start by installing Adobe AIR from here – http://get.adobe.com/air ? Once you have AIR installed, double-click the Hairball.air file to install it. If that doesn’t work, jump in with our support team and see if they can help ya out: http://kb.mailchimp.com/
-Eric
It would be awesome if there was a hairball integration with the Redtail CRM, the primary reason I love Redtail is the infinite segmentations using tags, interest, keywords, userfields, plus contact status and category. I would love it if there was a way to synch that data directly into this mail chimp hairball tool.
I use MailChimp for event registration reminder emails. I want to email all people on my list who are NOT currently registered, but I’d prefer to bulk-add a list of email addresses to exclude (versus adding individual rule lines for each person registered).
Is this possible with Hairball? I don’t readily see a way to have a way to make a single line item rule match a set of data.
Thanks!
For excluding emails I’ve found Static Segments work well. Just upload the emails to create a segment, then exclude that segment in the campaign setup.
I’ve had problems with Hairball not calculating counts correctly and other annoyances. Until it’s a better designed and more bug-free product, I’m using Excel (e.g. Advanced Filters) to create the list of emails, then uploading into a Static Segment.
I wasn’t aware of this feature. Thanks for pointing it out, Bob. I was wondering if I could just do it in Excel and then import it.
It’s still a bit tedious, but I’m glad I can make it work. I just spent 20 minutes adding 42 exclude rules in Hairball… not worth my time ongoingly. I’m glad to have a workable solution here, or this would have been a dealbreaker with MailChimp. I need to easily and quickly be able to exclude current registrants.
Whoo, thanks for helping out, Bob! I’m curious what issues you’re having with Hairball. First, have you updated to the latest version, 1.7.5 (click on “Preferences” and you should see the version number near the upper right)? 1.7.5 fixed several bugs from previous versions. If you haven’t, would you mind contacting support and letting us know what else is buggy? Support lives over here –> http://kb.mailchimp.com/ .
Thanks!
-Eric
Loving the “Wheee” sound that Hairball made after a successful upload!
Like the idea here but WHY WHY WHY is there no subscriber activity options in the filters when that is default behaviour on the main site?
I’d love it if we can create a segement between lists. I have some people in more than one list and I have a promo that I want to send to both lists but i don’t want to resend to the people who got the original send. I know I could remove them from the second list but i don’t want to have to delete them, just stop them from getting that one email campaign. This would be awesome if mailchimp let us filter lists based on the user activity on another list
It would be nice if you can include static segments as well. I can not select them now, which makes it difficult to exclude some list from the current segment.
BUT, I really like the random percentage! I often use it.
Improvement: Just select a random number, useful for sending out surveys.
Hello
I have one issue with Hairball, when I add a condition based on zip code for all zip code starting with”0″ the result is empty, it works with all other zip code.
Question: Can you build a segment that is based on sophisticated criteria that will combine OR (ANY) and AND (ALL): Any of the following rules (All – rule1, rule2, rule3) OR (All – rule4, rule5, rule6). In the regular mailchimp I can’t combine AND and OR together and it drives me crazy (!).
Hey Eyal,
You sure can. Hairball accomplishes this by allowing you to create a segment based on existing segments. To handle your example, you’d create three segments…
1. “Segment1″ – All rule 1, rule2 and rule3
2. Segment2″ – All rule 4, rule 5 and rule 6
then when you’ve got those two segments saved, you’d create:
3. “Segment3″ – Segment1 OR Segment2
Now you can re-run Segment 3 and Hairball will know it has to re-run Segments 1 and 2 first, then run the query to generate Segment 3. If you go back and edit Segment 1 or 2, then re-run Segment 3, it will reflect the changes you made.
Thanks. I’ll play around with it and see if it works.