Setup guide
Three steps, about ten minutes: connect MailerLite, connect your checkout, then turn on an automation or two. Checkout Sync works on every MailerLite plan, Free included.
On this page: 1. Connect MailerLite · What the token can do · 2. Connect your checkout · Who gets added · MailerLite's 250 limit · 3. What happens on each event · If the update-card link is empty
1. Connect MailerLite
- In MailerLite, open Integrations in the left menu. In the MailerLite API section, press Use next to API (not the E‑commerce API).
- Press Generate new token. Name it Checkout Sync, leave All IPs allowed on, tick the box that you've read the API terms, and press Create token.
Create new API tokenEnter token nameCheckout SyncChoose IP restrictionsAll IPs allowedI have read and understood the API token requirements set out in the Terms of Use.Create token
A simplified drawing of MailerLite's window, not a screenshot. MailerLite shows the token once: copy all of it. - Open Checkout Sync, paste the token and press Connect MailerLite.
That's all on the MailerLite side. Next time you visit, paste the same token to sign back in. If you delete the token in MailerLite, paste a new one under Your MailerLite connection in your settings.
What this token can do
MailerLite doesn't offer limited tokens: any API token can do everything in your account. Here is everything Checkout Sync does with it: it looks up a buyer by their email, adds or updates that buyer, fills in the Checkout fields, and adds them to or removes them from the groups it makes. It also reads your total subscriber count (a number only) to warn you near the 250 limit, and it can delete a group it made. It doesn't read your campaigns or your other subscribers, and it doesn't send emails: your own automations do that. The token is stored encrypted. Delete it in MailerLite whenever you like and we lose access at once (what we store).
2. Connect your checkout
Follow the short guide for yours: Paddle, Lemon Squeezy or Polar. Then press Send a test sale in your settings, or make a test purchase in your checkout's test mode: it shows up under Recent activity, usually within a minute. Paddle sales can take a few minutes, because each one needs a lookup at Paddle to find the buyer; the row says so while it waits.
Who gets added to your list
In your settings you pick one of three for buyers who aren't subscribers yet:
- Add buyers, but group the ones who didn't opt in (the default). Everyone is added, so they can get emails about what they bought. Paddle asks buyers for marketing consent: those who didn't tick it join a Not opted in group. Lemon Squeezy and Polar don't send a consent answer, so all their new buyers join it. Leave that group out of your newsletters.
- Add every buyer, when your checkout already tells buyers they'll hear from you.
- Only update people already on my list. Nobody is added; sales from non-subscribers show as Skipped.
Double opt-in: if MailerLite asks your buyers to confirm
MailerLite has a setting called Double opt-in for API and integrations (Account settings, then Subscribe settings). It's off unless you turned it on. When it's on, every buyer Checkout Sync adds gets MailerLite's "confirm your subscription" email and stays unconfirmed until they click it, and MailerLite sends unconfirmed people nothing else: no welcome, failed-payment or win-back emails. If you add buyers with Checkout Sync, keep it off (buyers who didn't opt in still go into Not opted in). If it's on, those rows say Sent to MailerLite, unconfirmed and your settings tell you under Needs your attention.
Every buyer you add is a subscriber in MailerLite (active, unless double opt-in is on) and counts toward your MailerLite plan. On MailerLite's Free plan, once you go over 250 subscribers, MailerLite pauses sending campaigns, running automations and adding subscribers (by hand, through the API or through integrations like this one) until you upgrade or get back under 250 (MailerLite's Free plan FAQ). Addresses you delete still count until your MailerLite reset date (plan and billing page). The Free plan also includes 2,500 emails a month, and every welcome or reminder an automation sends counts toward it. From 200 subscribers your settings show a warning under Needs your attention with a one-click switch to Only update people already on my list. We read your subscriber count from MailerLite every 15 minutes, and within about 5 minutes after a sale adds someone. Changed your mind later? Start fresh in your settings clears our records so you can begin again (it doesn't remove anyone from MailerLite).
3. What happens on each event
Every event first fills in the buyer's Checkout fields, then puts them in a group. You can rename or switch off each group in your settings. Groups are made the first time they're needed.
| Event | Group they join | Also |
|---|---|---|
| A sale | Customers and Bought: product name | New buyers are added with their first name, as you chose above. One group per product: monthly and yearly buyers share it (the price name goes in {$checkout_plan}). An order with several products joins one Bought: group per product: an order with 3 products joins 3 groups, and the product field lists all three. |
| A free order ($0: a free product or a 100% coupon) | Customers and Bought: product name | Just like a sale, with the amount $0.00. Free orders never count toward your plan |
| A free trial starts (Paddle) | Customers and Bought: product name | Status trialing, last event Started trial. When the first payment goes through, the fields update (status active) and no group is joined again, so the welcome isn't sent twice |
| A renewal | No new group | Fields update; they leave Payment failed if they were in it |
| A full refund | Refunded | Takes them out of that order's Bought: groups and sets the status to refunded. They also leave Payment failed |
| A partial refund | No group | Logged in Recent activity only: the buyer keeps their groups and fields (so no "sorry to see you go" email to a customer who stays) |
| A full refund of an earlier payment, while the subscription goes on | No group | Logged only, like a partial refund: a newer payment has gone through since, so they keep their groups, fields and status |
| A cancellation | Canceled (from Lite) | With the last day of access; status stays active until that day. They also leave Payment failed |
| A cancellation taken back | They leave Canceled | The end date is emptied, last event Resumed, status active (or past_due if their last payment failed and none has gone through since) |
| The subscription ends (access over) | No group change | Status canceled, last event Subscription ended. They stay in Customers and Bought: (they did buy it), so an upsell or members-only email sent to a Bought: group should leave out {$checkout_status} = canceled (a segment in MailerLite) |
| A failed renewal payment | Payment failed (from Lite) | They leave the group when their next payment goes through |
On Checkout Sync's Free plan, a cancellation or failed payment still fills in the buyer's fields (status, end date, update-card link) and shows in Recent activity, but doesn't join Canceled or Payment failed, so those two automations start from Lite (every paid plan). Sales and full refunds join their groups on every plan, and the test buttons in your settings join the test groups on every plan.
The fields
Use these in any email by typing the merge tag, or with the {x} Variable button in MailerLite's editor. Most hold the details of the buyer's latest event.
When a field is emptied
When an event has nothing for a field, the field keeps what it had, with four deliberate exceptions: a new subscription sale or payment empties an old cancellation's end date and reason, so do a full refund and a cancellation taken back, and a sale whose price has no name empties the plan (so it never shows another product's plan). A one-off order never touches the end date or reason.
| Merge tag | What's in it | Filled on |
|---|---|---|
{$checkout_product} | Product name, like Budget Club. The same on every event of a subscription | Every event |
{$checkout_plan} | The price or variant name, like Monthly or Yearly, when the checkout has one | Sales, renewals, failed payments, cancellations (Paddle, Lemon Squeezy) |
{$checkout_amount} | Amount with currency, like $12.00 | Sales, full refunds, failed payments |
{$checkout_order_number} | Order or invoice number | Sales |
{$checkout_receipt_url} | Link to the receipt | Sales and renewals (Lemon Squeezy) |
{$checkout_update_payment_url} | Where the buyer updates their card | Failed payments (Paddle, Lemon Squeezy; Polar once you add your portal link). If there's none |
{$checkout_manage_url} | The buyer's subscription page | Cancellations (Lemon Squeezy; Polar once you add your portal link) |
{$checkout_ends_on} | Last day of access, like November 3, 2026 | Cancellations, and the day a subscription ends |
{$checkout_reason} | Why they canceled, when the buyer said | Cancellations (Polar) |
{$checkout_store} | Paddle, Lemon Squeezy or Polar | Every event |
{$checkout_last_event} | Bought, Started trial, Renewed, Refunded, Canceled, Resumed, Payment failed or Subscription ended | Every event |
{$checkout_status} | one-time, trialing, active, past_due, canceled or refunded | When it changes |
{$checkout_customer_since} | Date of their first purchase (a date field, good for segments) | First sale, or an older one found by an import |
When there's no update-card link
Paddle and Lemon Squeezy give us an update-card link for every subscription; Polar does once you add your portal link in your settings. If a checkout gives us none, the email's {$checkout_update_payment_url} is empty: the row in Recent activity says Sent to MailerLite, no update-card link (on Free, where the group isn't joined yet, it says No update-card link under the note) and it's listed under Needs your attention. To be safe, give the tag a fallback in MailerLite's own format, so the email always has a link:
MailerLite makes each merge tag from the field's name. If a field with the same name already existed in your account, your settings page shows the exact tag to use.
4. Turn on the emails
In MailerLite, open Automations, press Create workflow and pick the trigger Joins a group. Choose the group, add an email, and turn the workflow on. Three that pay for themselves:
Rescue failed payments (group: Payment failed) Lite+
Send it right away, with a reminder two days later. A short, friendly note works best:
Hi {$name|default('there')}, your payment for {$checkout_product} didn't go through. It's usually an expired card. You can update it here in a minute: {$checkout_update_payment_url}
Thanks for sticking with us!
In the trigger's settings, tick the checkbox that makes subscribers exit the automation when they no longer belong to the trigger group. Checkout Sync takes people out of Payment failed when they pay, cancel or get a refund, so the reminder never reaches someone who already sorted it out, and it costs no extra step (the Free plan allows 5 steps per automation). In the workflow's Settings tab, also tick Allow subscribers re-enter automation, so a card that fails again months later gets the email again.
Welcome new customers (group: Customers, or Bought: your product)
Thank them, link to the product, and send your onboarding tips over the first week. On MailerLite's Free plan, one workflow on Customers that says "Thanks for buying {$checkout_product}" welcomes every buyer's first purchase (Customers is joined once). To thank repeat buyers for each new product too, use a workflow per Bought: group: each product's group is joined on its first purchase.
Win back cancellations (group: Canceled) Lite+
Say thanks, ask what would have made them stay, and remind them their access runs until {$checkout_ends_on|default('the end of their billing period')} (the fallback covers a checkout that didn't send the date). Tick the same exit checkbox in this trigger's settings: if they take the cancellation back, Checkout Sync takes them out of Canceled, and the win-back stops.
MailerLite's Free plan allows 3 automations. On Checkout Sync's Free plan that's the welcome, a Refunded check-in ("sorry it didn't work out, here's how to reach me") and one spare; with Lite, the three above.
Test sales
Send a test sale in your settings sends a pretend sale or failed payment for one of your products (or a $19 sample product) to the email you type. You join Checkout Sync test: Bought or Checkout Sync test: Payment failed, never your real groups, and tests don't count toward your plan. To get the email yourself, add the test group to your automation's trigger: Joins a group accepts several groups, so pick your real group and Checkout Sync test: Bought (or …: Payment failed) in the same trigger. No extra automation needed, which matters on MailerLite's Free plan. In a test failed payment, the update-card link opens this page; a real one opens the buyer's own page.
Testing twice within a day?
MailerLite starts a workflow again for the same person at most once every 24 hours, even with Allow subscribers re-enter automation ticked. A second test to the same address within a day joins the test group but sends no second email: use another address (like you+test2@yourdomain.com) or wait a day.
Good to know
- If MailerLite refuses to add a buyer because the account is over its subscriber limit, the sale shows as Not sent with that reason. MailerLite's Free-plan limits are explained above. To stop adding buyers, choose Only update people already on my list.
- MailerLite only emails active subscribers. Buyers who are unconfirmed (your MailerLite has double opt-in for integrations on) get nothing until they confirm: see above. If a buyer unsubscribed earlier, we still update their fields and groups, but MailerLite won't email them, and we never re-subscribe anyone.
- Renewals don't join groups, so welcome emails don't repeat every month.
- Paddle's webhook simulator events go through like real ones when their customer exists, but never count toward your plan or the month's numbers.
- Everything we add stays in MailerLite if you stop using Checkout Sync.
Stuck? See quick fixes or write to us.