EmailOctopus first impressions
I’ve been interested in exploring EmailOctopus since seeing Cory Zue start to use it and we’ve now begun using it with some clients alongside their other email marketing tools. So far, we really like it! The user interfaces are really well designed and responsive; complex operations (like segmentation, imports, and exports) run pretty quickly; and it does what it says it will do (sending emails). It’s also got a pretty nice API, and pricing is quite reasonable, especially if you’re a non-profit.
Things we really like
EmailOctopus has some excellent features and UI-level details that many other email marketing platforms don’t do so well — some of our favorites so far:
Activity timelines everywhere
Timelines are great! EmailOctopus gives you the ones you’d hope to see. When you click on a sent campaign, you’ll see a sidebar showing up-to-the-minute open/click1/etc activity:
The same goes for contacts — when you click through to a specific person (or just find them from the contact list) you get a similar activity sidebar:
Segmentation on the fly
Contacts are organized into lists, and within a list, you can build segments for your audience targeting.
Their segment-building UI calculates subscriber count as you go, so you can adjust your logic, watch the audience go up or down, and repeat until you’re happy:
Those calculations run quite quickly, even for often-slower operations like “email address contains $value” or searches against custom user fields.
Segments can include (or exclude) other segments
When you’re building a segment, one of the building-block filters you can use is “User is in (or not in) another segment”:
This allows you to build pretty intricate segmentation when you need to!
Simple per-campaign exports
You can easily export the engagement data about a specific campaign to separate CSV files listing who your campaign was sent to, who opened, who clicked, who unsubscribed, who didn’t open, and so on.
The pricing is great
We cannot stress this enough — their pricing is really reasonable, and they offer a 20% lifetime discount to registered charities & nonprofits.
Plans are per-contact and allow for up to 10x emails per month relative to your list size (e.g. if you are paying for a 40,000-subscriber list, you can send up to 400,000 messages per month) — so if you’re an extremely high-volume sender (even just relative to your list size) it might not be a natural fit, but if you’re sending roughly 2-3 full-list emails per week (or more but only to a highly-engaged subset) it’s a great price.
Webhooks and automations!
We mentioned above that their API is pretty good. In particular:
They let you set up webhooks to listen for all engagement events — so your server will be notified about every open/click/bounce/unsubscribe/etc, as well as for contact lifecycle events like contact created, updated, and deleted.
They allow you to build an “automation” (i.e. a mailing that’s not a “fixed targeting, sent all at once” bulk mailing) to be triggered by an API call — so you can send mailings to people based on activity that occurs outside of your email platform / ecosystem, like purchase-driven communications, event attendee followups, monthly donation reminders, etc.
These alongside the more core API features for getting and setting contact & campaign engagement data open up a lot of possibilities for automation, integration, and extensions.
Things we’d love to see
Static segments
When you build a segment, it’s all dynamic — always. Sometimes, though, you want to freeze a static segment for cohort analysis or just to retarget some subset of your segment — particularly if your segment is made out of inherently-about-to-change building blocks like “Was not sent any campaign in the past 30 days.”
This is pretty easy to work around with “segmentation → filter → apply tag” or “export → import” workflows — or in some cases by building your next segment based on who you sent your last campaign to — but it would be nice to have that “static or dynamic” question posed front and center when you need it.
Implicitly segmented imports
After running several imports in quick succession for the first time, I was slightly surprised to discover that you can’t just filter users, build segments, or target campaigns based on what import(s) a contact was in.
Here too there are workarounds, but they’re considerably clunkier — like remembering to include an “Import Batch” custom contact field with a different fixed value for every import you do. This is a big one for me!
Updating existing contacts from an import
Once I discovered the need for an “Import Batch” type field, I wanted to redo my past imports with that included. But it’s not clear whether you can just update existing contacts from an import without also touching their subscription status:
Of course, this is quite important if you’ve already been mailing your contacts — you don’t want to resubscribe the folks who’ve unsubscribed, but you do want to tag them with the appropriate import batch (or whatever else you’re updating via import)
I’m honestly not sure whether this is a missing feature or a confusingly-phrased user interface, because I’m reluctant to try it & find out.
Provider-specific campaign reports
When you view a campaign you get nice front-and-center visual displays of your engagement toplines:
However, we often want to drill down into campaign engagement by inbox provider, so that we can spot deliverability issues with (e.g.) Gmail or Verizon specifically — particularly when you’re doing a list warmup or sending to a large batch of less-engaged contacts. It seems like this currently requires exporting the engagement data and doing the analysis yourself.
More broadly, it would be nice if you could apply filters to these engagement reports — so you could look at how your mailing performed with folks tagged a particular way, or with a particular source, or who joined on or after a certain date. (Or folks in a static segment, if that existed!)
Campaign performance visualization
There’s a very pretty “Performance in the first 24 hours” chart that you get when looking at any sent campaign:
It’s unclear to me how useful this is in practice? It seems like virtually all campaigns will have roughly the same general shape here: high opens & clicks early on, then trailing off pretty sharply. Particularly since you can’t apply per-provider filters; if you could instantly spot an unusual lag in opens among Microsoft recipients, that would tell you something actionable about throttling. Without that, though, this seems like it’s mostly going to be a proxy for whether you accidentally sent the mail when your recipients were asleep.
Timezone-based sends
Speaking of sending when your recipients are asleep — it would be nice if you could schedule sends for a particular time in the recipient’s local time zone. (EmailOctopus does offer scheduled sends, but they just go out all at once.) That said, I believe it’s possible to implement workarounds here using an API-triggered automation.
More insights on soft bounces & delays
It looks like EmailOctopus provides only very limited visibility into your soft bounces and provider delays. You can always see (and export) which recipients bounced — and it does differentiate hard vs soft bounces, with different handling for each — but from what I can see there’s no way to find out why a soft bounce occurred, either in the UI or in exports. There’s also no information provided about throttling / delays at all.
Managing campaigns over the API
Unfortunately, you can’t create, update, or send a campaign — or an automation — or manage segments — programmatically using their API. You have to use their interfaces for composing your content, targeting to an audience, and hitting send.
That said, we do want to reiterate that their interfaces for all of those things are very good!
But for more sophisticated use cases it would be really nice to know we could build our own here — so that we could:
Target a mailing to an arbitrary externally-determined audience, either directly or via segment-building. (I think the closest you can come here is applying tags to individual contacts, and then going back in to their interface to target and send based on that tag.)
Build streamlined staff interfaces for common types of mailings, and then loading in a draft that ensures brand consistency, structural consistency, mobile-friendliness, and so on. (Think monthly newsletters, event invites, breaking news alerts, reportbacks, and so on — where you want the mailings to be consistent over time, and want something with guardrails that’s neither “full visual editor” nor “full code editor”.
Try it out!
Anyway, all of this is to say: we are very excited about EmailOctopus! We’ll continue to post about it as we use it more, and let us know if you have any questions about our experience in the comments or at hello@thirdbearsolutions.com.
But it would be nice if you could just hover over a click event in the timeline and see what link they clicked.