Our verdict
This is a short scenario with a few modules per route. Get three details right: the trigger event, consent and refunds. Use checkout.session.completed and check the payment status, because some payment methods finish later. [5] Only add buyers to marketing groups when Stripe recorded consent. [6] Undo the buyer group on refund, or your customer segment will slowly fill with people who are not customers. [7]
MailerLite's create-or-update behaviour makes retries mostly harmless. [3] Even so, log Stripe event IDs if anything downstream, such as a welcome automation, should run only once per purchase. [4]
The scenario at a glance
Make's Stripe Watch Events trigger is instant and creates the Stripe webhook for you when you save the module. [1] Make's MailerLite app (for accounts created after March 22, 2022) has Create/Update a Subscriber, Add Subscriber to a Group and Remove Subscriber from a Group. [2]
| Step | Module | Purpose | Credits |
|---|---|---|---|
| 1 | Stripe Watch Events: checkout.session.completed, checkout.session.async_payment_succeeded, charge.refunded | Receive purchase and refund events [1] [7] | 1 per event |
| 2 | Router with filters | Send purchases and refunds down separate routes | 0 [8] |
| 3a | Filter: payment status is not unpaid | Skip delayed payments until they succeed [5] | 0 [8] |
| 4a | Stripe Make an API Call: retrieve the session with line_items expanded | Get the product name for the field [1] [5] | 1 |
| 5a | MailerLite Create/Update a Subscriber | Add or update the buyer with fields and groups [2] [3] | 1 |
| 3b | MailerLite Remove Subscriber from a Group | Take refunded buyers out of the buyer group [2] | 1 |
| Optional | Data store lookup and write of the Stripe event ID | Stop downstream steps running twice [4] | 2 |
Map the subscriber fields
MailerLite's create endpoint takes the email, a fields object whose keys must match existing default or custom field names, and a list of existing group IDs. If the subscriber exists, MailerLite updates it, returns 200 instead of 201 and does not remove fields or groups you leave out. [3] Create the custom fields and the buyer group in MailerLite before you map them.
| MailerLite field | Map from Stripe | Note |
|---|---|---|
| customer_details.email on the Checkout Session | Stripe's consent example reads the email from this field [6] | |
| fields.last_product (custom) | The product or price name from the session's line items | Line items come from retrieving the session with line_items expanded, as Stripe's fulfillment guide does [5] |
| fields.promo_consent (custom) | consent.promotions | Keeps a record of what the buyer agreed to [6] |
| groups | Buyers - Product A; add Newsletter only if consent.promotions is opt_in | Groups are added, never removed, by this call [3] |
| resubscribe | Leave off | True would resubscribe someone who unsubscribed [3] |
Consent: keep buyers and subscribers apart
Stripe's documentation says customers must agree to promotional emails before you contact them. Checkout can collect that if you create the session with consent_collection.promotions set to auto. [6] This is available only when your business and customers are in the US, and Checkout disables or limits it where local rules prohibit it. [6]
The result is stored on the session as consent.promotions. Stripe's example listens to checkout.session.completed, reads that value and stores emails for customers who consented. [6] In Make, put the newsletter group on a route with a filter for consent.promotions equal to opt_in, one of the two values Stripe documents along with opt_out, and give everyone else only the buyer group. [9]
Refunds and retries
Stripe sends charge.refunded whenever a charge is refunded, including partial refunds. [7] Route it to MailerLite Remove Subscriber from a Group for the buyer group. Decide whether a partial refund should count. If not, add a filter that checks the charge in the event was fully refunded before removing the group.
Stripe retries undelivered events for up to three days in live mode. It does not guarantee order, and it says an endpoint might occasionally receive the same event more than once. Its advice is to log the event IDs you have processed and skip ones already logged. [4] Stripe also says fulfillment can run more than once for the same Checkout Session, even at the same time, so the handler must be safe to repeat. [5]
In this scenario the MailerLite upsert is already safe to repeat. [3] Add the event-ID log when a later step is not safe, such as a module that sends a one-time email or creates an invoice.
Credit cost per sale and test plan
Make charges most modules 1 credit per operation, and routers and filters nothing. [8] A purchase runs the trigger, the session lookup and the MailerLite module, about 3 credits. With the event-ID log it is about 5, and a refund adds about 2. At 200 sales a month with logging, budget around 1,000 credits plus 2 per refund.
- Create the buyer group, newsletter group and custom fields in MailerLite first. [3]
- Connect Stripe with a restricted key that has only the access Make needs, or with OAuth. [1]
- Run a test-mode purchase with consent ticked and another without, and check the groups.
- Refund one test payment fully and one partially, and check the buyer group.
- Resend an event from Stripe and confirm the subscriber count does not change. [4]
- Turn on incomplete executions in Make so a MailerLite error can be retried.
Watch demos / Official walkthroughs
See how the tools work.
Videos load from YouTube only when you press play. These are provider videos, not our own product tests.

Make / Official video
Make—Building Your First Automated Workflow from Scratch
What to look for: Follow how modules connect and how data moves through the first workflow.
Watch on YouTubeQuestions before you decide
Which Stripe event should add a buyer to my list?
checkout.session.completed, which Stripe sends when a Checkout Session completes. For delayed payment methods such as ACH debit, also handle checkout.session.async_payment_succeeded, because the payment succeeds later.
Will Stripe retries create duplicate MailerLite subscribers?
Not if you use Create/Update a Subscriber. MailerLite updates an existing subscriber with the same email, returning 200 instead of 201, and omitted fields or groups are not removed.
Can I add every buyer to my newsletter?
Stripe says customers must agree to promotional emails before you contact them. Checkout can show a consent checkbox, for US businesses and customers, and records the answer in consent.promotions on the session.
How long does Stripe keep retrying a webhook?
In live mode, Stripe retries delivery for up to three days with exponential backoff. In a sandbox it retries three times over a few hours.
Sources & verification
Product details and prices can change. Check the linked provider before buying.
- Make Apps: Stripe Accessed 30 Oct 2026
- Make Apps: MailerLite Accessed 30 Oct 2026
- MailerLite API: Subscribers Accessed 30 Oct 2026
- Stripe Docs: Receive Stripe events in your webhook endpoint Accessed 30 Oct 2026
- Stripe Docs: Fulfill orders Accessed 30 Oct 2026
- Stripe Docs: Collect consent for promotional emails Accessed 30 Oct 2026
- Stripe Docs: Types of events Accessed 30 Oct 2026
- Make Help: How features use credits Accessed 30 Oct 2026
- Stripe API: The Checkout Session object (consent) Accessed 30 Oct 2026
Sources link directly to providers. Product buttons may use separately labeled affiliate links. Read our disclosure.
