All Drafts

Getting a purchase after an email doesn't prove the email sold. Here's how I measure it

This is the mailing platform I built for a Chilean eCommerce: lists that build themselves, emails written with AI, sending that protects your domain, and a control group to know how much each campaign really sells.

Daniel Flores Osses
Daniel Flores Osses
Oct 20, 2026 · 6 min read

Monday comes and someone asks in the meeting: "How much did Friday's email sell?". The tool says lots of people opened it and several bought afterward. Sounds good, but nobody can answer the real question: did they buy because of the email, or were they going to buy anyway?

For a Chilean eCommerce with two stores, I built its own mailing platform. You choose who you write to, artificial intelligence drafts the email in the store's brand voice, you review it, schedule it, and then you see opens, clicks, unsubscribes and how much it really sold. Order emails keep going out from the store, and every campaign is scheduled by a person.


The dashboard: can I send?

In this app the scarce resource isn't contacts: it's the emails the server lets you send, a limit shared with purchase confirmations.

This hour's quotarolling 60-minute windowToday's quotalast 24 hoursSteady pace, no burststhe hourly cap is spread across the whole hourWarm-upthe daily caprises 30% per dayup to the limit1234567day
What's scarce isn't contacts: it's the server's quota. That's why sending is steady and volume ramps up gradually.
  • Hourly and daily quota, in rolling windows, with the time it frees up.
  • Installation status: mail server, domain, AI and syncs.
  • Sales attributed to emails at 7 or 30 days, against the store's total.
  • Campaigns in progress and sent, with alerts when unsubscribes or bounces climb higher than is healthy.

Contacts, lists and segments

Email is the identity: if a person arrives through the web store and through the ERP, they merge into a single record. Contacts arrive on their own every early morning, or from a CSV or by hand, always recording where the consent came from.

What changed the way we work were the automatic lists, rebuilt from scratch every day:

  • Behavior: bought recently, frequent, at risk, inactive, best customers.
  • Arrival: which channel and page each customer came from on their first purchase.
  • No second purchase, in stages for the first reminder, the second nudge and the last call.
  • Repurchase based on each customer's rhythm: who's due to come back and who has drifted away.
  • Category, age, birthday and region.

When the list doesn't exist, you build a segment: rules like "spent over a certain amount and haven't bought in 90 days," with a live count, recalculated every time they're used.


A campaign in four steps

1. Audience

ListAt riskListLoyalSegmentClicked in 30 daysMerged without repeats− Suppression− Excluded listWill receive itthe real number, already netPart 1 · todaythe most activePart 2 · tomorrowthe next onesPart 3 · laterthe rest
Lists and segments are added together without duplicates, anyone who shouldn't receive it is subtracted, and if it doesn't fit in one day, it goes out in parts starting with the most active.
  • Lists and segments are added together and each person receives the email only once.
  • If it doesn't fit within a day's quota, the app tells you how many parts it will go out in.
  • Send order: the most active or best customers first, so the last day isn't theirs.
  • Control group: a random percentage that doesn't receive the email.

2. AI content

The briefwhat you're communicating, to whom, and under what conditionsThe AI writes in the brand's voicePick the subject lineOption 1: straight to the pointOption 2: with the benefitOption 3: with gentle urgencyRefine: bigger buttonv1v2v3No figures that aren't in the brief
You give it the assignment, pick from three subject lines and ask for changes in plain words. Every version is saved.

You write a brief with what's being communicated and the real conditions; the AI is forbidden from inventing prices, discounts or dates. In a minute or two the email arrives with the brand, three subject lines and the preheader (the line the inbox shows after the subject). You refine it by chatting, every change is saved as a version, and a test email goes out before you move on.

3. Review

✓Subject under 78 characters✓Sender from the store's domain✓Images with alt text!Word that filters penalize!No unsubscribe link: added automatically✕More than 20 links: blocks sending✓Links fixed: within the limitSpam scoreContinue
Red blocks scheduling; amber can be sent anyway, but is worth a look.

Some errors block sending, like a sender from another domain or too many links, and warnings let you send anyway, like a subject line that gets cut off on a phone. A spam score sums up the risk.

4. Schedule

It goes out now or on a set date. A long send can be split into campaigns, each with its own day and subject line. Once scheduled, the email and the audience are frozen.


Send without burning the domain

  • Steady pace: the hourly cap is spread across the whole hour, with no bursts.
  • Warm-up: the daily volume starts low and rises every day.
  • Automatic pauses if the server rejects the key or several emails fail in a row.
  • Authenticated domain: the app checks the records that prove to Gmail the email comes from the store.

How much it really sold

The platform matches the store's and the ERP's orders against what each person did. A confirmed sale is one from someone who came in through a link in the email; an attributedsale is one from someone who opened or clicked and bought in the following days.

Came in through the email linkconfirmed purchase · minimum 50%DecisiveClicked and bought laterattributed · up to 80%HighOnly opened the emailattributed · up to 50%LowWeighted sale = sum of amount × attributed %
Not every order from someone who opened an email is due to the email. Each one counts according to the interaction and the AI's judgment.

Each order carries an attribution percentage: an AI judges how much the email influenced it based on the interaction, the timing and the customer's history, within fixed margins. An order is never counted twice.

The control group

Even so, attributed is not the same as caused. The honest way to measure is to compare against those who didn't receive the email.

receivedcontrolboughtReceivedControlIncremental salesdifference in sales per person × sent
The control group doesn't receive the email. The difference between the two is what the campaign really sold.

The incremental sales are the difference in sales per person between the two groups, multiplied by the number sent. It can come out negative, and the app warns you when the sample is small.

Someone buying after your email proves nothing. Comparing against someone who didn't receive it does.

Unsubscribes, bounces and suppression

"Unsubscribe"with confirmationHard bouncethe address doesn't exist3 soft bounceswithin 30 daysSpam complaintnotice from the providerSuppressionoverrides everythingNever againreceives campaignsOnly an admin can reverse it, with a log
Unsubscribe, hard bounce, repeated bounces or complaint: all four paths end in the same list, and that list always wins.

Unsubscribing asks for confirmation, because some antivirus programs open every link in an email. Bounces and spam complaints are detected automatically, and unsubscribes from the ERP arrive too. Everything ends up in the suppression list, which overrides any other list, and only an admin can reverse it, with a log.


What the business gains

Audiences that build themselves from real purchase data, emails in minutes with no invented figures, a domain that doesn't end up in spam, and an honest answer to Monday's question: how much the email sold, and how much of that wouldn't have happened without it.

Sending emails is easy. Knowing which ones sold is what's worth it.

Want a system like this for your business? Let's talk.

Contact me