Features

Everything between a spreadsheet and the inbox

MyNewsletter covers the whole loop — importing, segmenting, composing, sending at a controlled rate, and measuring what happened — without asking you to stitch four tools together.

Import

Point it at any CSV and it works out the rest

Exports from Customer.io, Close, HubSpot or a spreadsheet someone kept by hand all land the same way. Columns are matched by name, by fuzzy match, and — for the email column — by reading the values themselves.

Automatic field mapping

"Customer Email Address" becomes email. "Full Name" is split into first and last. You review and correct every decision before a single row is written.

Nothing gets dropped

Columns that do not match a standard field are kept as custom fields, so the plan, the account manager and the renewal date all survive the import and stay searchable.

Arrives already sorted

Low-cardinality columns like plan or country are offered as auto-tagging sources. Import 40,000 rows and they land tagged by tier, not in one undifferentiated pile.

Built for real files

Rows are parsed in your browser and streamed up in batches, so a 200MB export does not need to fit in memory anywhere — and the progress bar is measured, not guessed.

Map your columnscontacts-export.csv
Customer Email AddressEmaildetected
Full NameFirst + last namedetected
Company NameCompanydetected
Plan TierTag · free / pro / teamauto-tag
Renewal DateCustom · renewal_datekept
48,204 rows readyImport contacts
Compose

An editor that produces email HTML, not web HTML

Email clients are stuck around HTML 4. Outlook renders through Word. Gmail strips your stylesheet. The editor outputs nested tables with inline styles because that is what actually survives the trip.

Block editor with live preview

Headings, text, buttons, images, quotes, lists and dividers. The preview runs the same renderer that builds the real message, so what you see is what is sent.

Personalisation with fallbacks

Write {{first_name|there}} and nobody ever receives "Hi ,". Merge tags reach custom fields too, so {{custom.plan}} works out of the box.

Starter designs

Announcement, newsletter, event invite, and a plain-text-looking personal layout — which, in practice, is usually the one that performs best.

Or bring your own HTML

Paste a hand-built template and it is used verbatim. The compliance footer and tracking are appended for you.

Deliverability

The unglamorous work that decides whether any of it arrives

Most email problems are not content problems. Since 2024, Gmail and Yahoo reject bulk mail that fails authentication outright. These checks are built in rather than sold as an add-on.

Live SPF, DKIM and DMARC checks

Real DNS lookups against your sending domain, with specific instructions for whatever is missing or misconfigured — including the SPF ten-lookup limit that silently breaks records.

One-click unsubscribe (RFC 8058)

The List-Unsubscribe headers Gmail and Yahoo require from bulk senders. Their native unsubscribe button becomes a clean opt-out instead of a spam complaint.

Pre-send content audit

Scores your draft on trigger phrases, subject shape, text-to-image balance, link hygiene, URL shorteners and missing alt text — before you send, not after.

A suppression list that holds

Unsubscribes, hard bounces and spam complaints are blocked globally. An import can never resurrect someone who opted out, whatever the spreadsheet says.

Email authenticationyourcompany.com
SPFPass

include:zeptomail.zoho.com found · 4 of 10 lookups

DKIMPass

Key published for selector: zoho

DMARCNeeds attention

p=none — move to quarantine once reports look clean

Checked live against public DNS — not a checkbox someone ticked once.

Sending

Decide exactly how fast the mail goes out

Set a rate per minute, per ten minutes, per hour or per day. It is a rolling window measured against what actually left the building, so a restart or an overlapping run cannot cause a burst.

Rate limits you set

Thirty an hour while you warm a new domain, or two hundred a minute once it is established. Change it mid-send; the next batch picks up the new rate.

Spread across providers

Recipients are interleaved by mailbox provider rather than sent alphabetically, so Gmail does not receive twenty thousand messages in an unbroken block.

Pause and resume

Stop a send mid-flight, fix the thing you spotted, and carry on. Nothing is sent twice — the queue is claimed row by row.

Schedule ahead

Pick a date and time and it starts on its own. An account-wide hourly ceiling sits on top of every campaign as a safety net.

Sending raterolling window
Warming a new domain30 per minute
Established domain200 per minute
Slow drip over a day1,000 per hour
48,204 recipients would takeabout 4 hours
Measure

Your data, in your own database

Every open, click, bounce, complaint and unsubscribe is written to your Postgres instance as a row you can query. No export request, no API quota, no waiting.

Opens and clicks

Unique and total, per campaign and per contact, with click-to-open rate and a ranked list of which links people actually pressed.

Honest about the numbers

Open tracking undercounts — Apple Mail pre-fetches images and many clients block them. We say so in the interface rather than quietly inflating the figure.

Per-contact history

Open any contact and see every campaign they received, opened and clicked, alongside their tags, lists and custom fields.

Nothing locked in

It is a normal Postgres schema. Point any BI tool at it, or take the whole thing with you.

Try it with your own list

Import a CSV and see how much of it maps itself. Free for your first thousand contacts.