Commerce glossary

Email marketing and flows

Emails a store sends to its customers: automatic flows that start when a shopper does something, one-off campaigns to a list or segment, and the sending, measurement and unsubscribe rules around them.

56 parts and 16 phrases. Apps in this area include Klaviyo, Omnisend, Mailchimp, Drip, Brevo.

Flowsemail.flowShowAn automatic sequence of emails: a trigger starts it, steps run in order, and conditions decide who goes on or stops.
What starts a flowemail.flow.triggerShowThe event, date or change that puts a contact into a flow.

How to extend

PartLitestore todayHow to extend
Cart left inactiveemail.flow.trigger.cart.inactiveThis trigger starts a flow when a shopper with a known email leaves items in the cart without ordering for a set time.
Coremodules/email/automations.ts
Event · many
Checkout startedemail.flow.trigger.checkout.unfinishedThis trigger starts a flow when a shopper begins checkout and does not finish the order.
Plugin
Event · many
Product viewed, not addedemail.flow.trigger.product.viewed_no_cartThis trigger starts a flow when a known visitor views a product and leaves without adding anything to the cart.
Plugin
Event · many
Account createdemail.flow.trigger.account.createdThis trigger starts a flow when a shopper creates an account, and Litestore sends a welcome email and an optional welcome coupon at that point.
Corejobs/domain-events.ts
Event · many
Joined a listemail.flow.trigger.list.joinedThis trigger starts a flow when a contact is added to a subscriber list, usually through a signup form.
Plugin
Event · many
Order placedemail.flow.trigger.order.placedThis trigger starts a flow when a customer places an order, and Litestore sends the order confirmation email from it.
Corejobs/domain-events.ts
Event · many
Order shippedemail.flow.trigger.order.shippedThis trigger starts a flow when an order is fulfilled and handed to the carrier, and Litestore sends the shipped email from it.
Corejobs/domain-events.ts
Event · many
Order deliveredemail.flow.trigger.order.deliveredThis trigger starts a flow when the carrier marks a shipment delivered, and Litestore starts its review request sequence from it.
Coremodules/email/automations.ts
Event · many
No order for a set timeemail.flow.trigger.customer.inactiveThis trigger starts a flow for a past buyer who has placed no order for a set number of days; Litestore runs it from a daily job and it is off until the number of days is set.
Corejobs/cron.index-data.ts
Event · many
Date on the profileemail.flow.trigger.profile.date_reachedThis trigger starts a flow on, or a set time before, a date stored on the contact, such as a birthday, and can repeat each year.
Plugin
Event · many
Product price loweredemail.flow.trigger.product.price_loweredThis trigger starts a flow when the price of a product a contact viewed, carted or saved falls by a set amount or percentage.
Plugin
Event · many
Product restockedemail.flow.trigger.product.restockedThis trigger starts a flow for contacts who asked to be told when a sold-out product or variant has stock again.
Plugin
Event · many
Entered a segmentemail.flow.trigger.segment.enteredThis trigger starts a flow when a contact starts matching the conditions of a segment.
Plugin
Event · many
Custom eventemail.flow.trigger.event.recordedThis trigger starts a flow from any named event the store or another app records against a contact.
Plugin
Event · many
Flow stepsemail.flow.stepShowWhat a flow does once a contact is in it, step by step.

How to extend

  • Core onlyLitestore's built-in flows are plain code with a durable sleep and send; a richer step builder belongs to a flow plugin.
PartLitestore todayHow to extend
Waitemail.flow.step.waitA wait step pauses the flow for a set time, such as two days, before the next step runs.
Coremodules/email/automations.ts
Core only
Send a messageemail.flow.step.sendA send step queues one email to the contact in the flow.
Coremodules/email/automations.ts
Core only
Split into branchesemail.flow.step.splitA split step sends each contact down one of two branches depending on whether a condition matches.
Plugin
Core only
Random splitemail.flow.step.random_splitA random split sends a set share of contacts down each branch so two versions of a flow can be compared.
Plugin
Core only
Update the profileemail.flow.step.update_profileAn update step writes a value onto the contact, such as a tag or a property.
Plugin
Core only
Call a webhookemail.flow.step.webhookA webhook step posts the contact and event data to an outside address so another system can act on it.
Plugin
Core only
Attach a couponemail.flow.step.add_couponA coupon step adds a discount code to the next message, and Litestore skips its recovery coupon when the configured code is expired or used up.
Coremodules/email/automations.ts
Core only
Flow conditionsemail.flow.conditionShowThe checks that stop a contact or keep them in a flow.

How to extend

  • Core onlyThe checks in the built-in flows read Litestore's own orders, carts and reviews; a plugin flow brings its own checks.
PartLitestore todayHow to extend
Has not orderedemail.flow.condition.not_orderedThis condition stops the flow once the contact's cart becomes an order or is cleared.
Coremodules/email/automations.ts
Core only
Has not reviewedemail.flow.condition.not_reviewedThis condition stops a review request sequence once the customer has reviewed the order.
Coremodules/email/automations.ts
Core only
Opened or clickedemail.flow.condition.has_openedThis condition checks whether the contact opened or clicked an earlier email in the flow.
Plugin
Core only
In a segmentemail.flow.condition.in_segmentThis condition checks whether the contact currently matches a given segment.
Plugin
Core only
Re-entry limitemail.flow.condition.reentry_limitThis condition stops the same contact from entering the flow again within a set period.
Plugin
Core only
Who gets itemail.audienceShowThe lists, segments and contact data a send is addressed to.

How to extend

  • ProviderOne per storenewsletter list providerNewsletter signups go to one list provider at a time (Klaviyo, Mailchimp, ConvertKit, Buttondown, Loops, Beehiiv or a webhook).
  • Assistant toolcountBroadcastAudienceThe assistant counts the customers a lifecycle audience selects before a broadcast is proposed.
PartLitestore todayHow to extend
Subscriber listemail.audience.listA list is a named set of contacts who signed up to receive marketing email, and Litestore sends each newsletter signup to the list at the configured provider.
Coremodules/customers/newsletter/providers.ts
Provider · oneAssistant tool
Lifecycle stage audienceemail.audience.lifecycle_segmentA lifecycle audience selects customers by stage, such as new, registered, purchased or repeat, and never includes restricted or banned accounts.
Coremodules/email/broadcast-audience.ts
Provider · oneAssistant tool
Rule-based segmentemail.audience.rule_segmentA rule-based segment is a set of contacts that match conditions on their properties and behaviour, and it grows and shrinks as contacts start or stop matching.
Plugin
Provider · oneAssistant tool
Custom profile propertyemail.audience.profile_propertyA custom profile property is a named value stored on a contact, such as a birthday or a favourite category, that segments and messages can read.
Plugin
Provider · oneAssistant tool
Message typesemail.messageShowThe kinds of email a store sends.

How to extend

  • Assistant toolsendBroadcastEmailThe assistant proposes a broadcast, and it is sent only after the operator approves it.
PartLitestore todayHow to extend
Transactional emailemail.message.transactionalA transactional email is a message about an order or account, such as a confirmation or a sign-in link, and it is sent even to customers who unsubscribed from marketing.
Coremodules/email/send.ts
Assistant tool
Flow emailemail.message.flow_messageA flow email is a marketing message sent by a flow step to one contact at a time.
Coremodules/email/automations.ts
Assistant tool
Broadcast campaignemail.message.broadcastA broadcast is one subject and body sent once to every contact in an audience.
Coremodules/email/broadcast.ts
Assistant tool
One-off email to a customeremail.message.one_offA one-off email is a message staff write and send to a single customer from the admin.
Coremodules/email/custom-email.ts
Assistant tool
A/B testemail.message.ab_testAn A/B test sends two versions of a campaign to small parts of the audience and sends the better one to the rest.
Plugin
Assistant tool
What is in itemail.contentShowTemplates and the blocks inside an email.

How to extend

PartLitestore todayHow to extend
Coded templateemail.content.templateA template is the fixed layout of one email type, such as order shipped or cart reminder, filled with the data of each send.
Coremodules/email/templates
Slot · many
Shared layoutemail.content.shared_layoutThe shared layout wraps every email in the same header, footer and colours.
Coremodules/email/templates/components/email-layout.tsx
Slot · many
Personal fieldemail.content.merge_fieldA personal field fills in data about the recipient, such as a first name, at send time.
Coremodules/email/automations.ts
Slot · many
Coupon blockemail.content.coupon_blockA coupon block shows a discount code inside the email body.
Coremodules/email/templates/customer-winback.tsx
Slot · many
Block editoremail.content.block_editorA block editor builds an email from blocks such as text, images and buttons without writing code.
Plugin
Slot · many
Product list blockemail.content.product_list_blockA product list block fills in products at send time, such as the items left in the cart or recommendations.
Plugin
Slot · many
How and when it is sentemail.sendingShowThe sender, the delivery service and the rules on timing and frequency.

How to extend

  • ProviderOne per storeemail senderOne delivery service sends all store email; Litestore uses Resend.
PartLitestore todayHow to extend
Delivery serviceemail.sending.delivery_serviceThe delivery service is the outside API that hands each email to the recipient's mail server.
Coreplatform/resend.ts
Provider · one
Send queueemail.sending.queueThe send queue holds each email as a background job so it is retried on failure and sent once per idempotency key.
Corejobs/email.send.ts
Provider · one
Sender domainemail.sending.sender_domainThe sender domain is the address emails come from, verified with DNS records so mail servers accept it.
Plugin
Provider · one
Frequency capemail.sending.frequency_capA frequency cap skips a marketing message when the contact already received one within a set number of hours.
Plugin
Provider · one
Quiet hoursemail.sending.quiet_hoursQuiet hours hold messages that fall at night in the recipient's time zone until the morning.
Plugin
Provider · one
Per-contact send timeemail.sending.send_timeA per-contact send time picks the hour each recipient gets a campaign from the hours they opened past emails.
Plugin
Provider · one
Measuring resultsemail.measurementShowWhat is recorded about each send and the orders it led to.

How to extend

  • ProviderMany side by sideemail analyticsOpens, clicks and attributed revenue come from the sending or marketing service when a plugin reads them.
PartLitestore todayHow to extend
Send logemail.measurement.send_logThe send log records each email's type, recipient, subject and whether it was queued, sent or failed.
Coremodules/email/send.ts
Provider · many
Opens and clicksemail.measurement.opens_clicksOpen and click counts record how many recipients opened a message and clicked a link in it.
Plugin
Provider · many
Attributed revenueemail.measurement.attributed_revenueAttributed revenue adds up the orders placed by recipients within a set window after they opened or clicked a message.
Plugin
Provider · many
Attribution windowemail.measurement.attribution_windowThe attribution window is the number of days after an open or click in which an order is counted for the message.
Plugin
Provider · many
Consent and unsubscribesemail.complianceShowThe rules that keep marketing email to people who agreed to it.

How to extend

  • Core onlySuppression is enforced in the one send path for every marketing email, so no plugin can send around it.
PartLitestore todayHow to extend
Suppressionemail.compliance.suppressionSuppression blocks every marketing email to a customer who unsubscribed, complained or hard-bounced, while order emails still go out.
Coreapp/api/webhooks/resend/route.ts
Core only
Marketing or transactionalemail.compliance.marketing_classEach email type is classed as marketing or transactional, and only marketing email checks the unsubscribe state.
Coremodules/email/send.ts
Core only
Double opt-inemail.compliance.double_opt_inDouble opt-in sends a confirmation email after signup and adds the contact to the list only after they click it.
Plugin
Core only
Stop mailing unengaged contactsemail.compliance.unengaged_stopAn unengaged stop rule stops mailing contacts who have not opened or clicked for a set period.
Plugin
Core only

What the phrases mean

The words apps use for a feature, and the plain parts the feature is made of, in the order they happen.

Phrases left out

These phrases mean different things at different apps, so the glossary doesn't map them.

  • predictive analyticsVendors use it for predicted lifetime value, churn risk, next order date or product picks; no one part matches it.
  • automationSome vendors mean a whole flow, others one trigger or a single scheduled send.
  • omnichannelIt names a channel list at one vendor and a shared customer profile at another.

Sources

The app documentation these parts were checked against.