Marketing Automations
Visual customer journeys with your own email & SMS providers — segments, compliance, analytics, A/B tests, and AI-assisted building.
Overview
Marketing automations let you build visual customer journeys on Becomy: welcome emails after signup, cart recovery sequences, post-purchase follow-ups, product browse retargeting, VIP segments, A/B tests, and more. You design flows on a canvas, connect steps with arrows, and Becomy runs them automatically for each contact who matches your trigger and entry filters.
Each automation is called a scenario. A scenario has one trigger (what starts the journey), a graph of steps (what happens next), and enrollments (individual contacts moving through the flow).
What’s included
- Visual flow editor with templates and AI assistant
- Your own email & SMS providers (SendGrid, Mailgun, Twilio, etc.)
- Segments, consent, unsubscribe, and frequency caps
- Email open/click tracking, UTM tagging, and funnel analytics
- A/B splits with optional winner selection
- MCP & AI tools for building flows from Cursor or Claude
Getting started
1. Connect your integrations (first time)
Go to Marketing → Integrations and connect at least your email provider before going live. See Integrations & delivery setup for SendGrid, Mailgun, Twilio, and Stripe details.
2. Open the flow editor
From your store admin, go to Marketing → Automations (flow editor).
3. Pick a template (recommended)
On the scenarios list, click a template card — Welcome series, Cart recovery, Post-purchase, Win-back, VIP thank you, or Review request. Each opens the editor with a ready-made flow you can customize.
4. Build your flow
- Click step types in the left palette to add nodes to the canvas.
- Drag nodes to arrange them.
- Connect steps by dragging from an output port (bottom of a node) to an input port (top of another node).
- Click any node to edit its settings in the right panel.
- Click the trigger node to rename the scenario, pick a segment, set entry filters, and configure when contacts enter.
- Use the AI Assistant panel at the bottom to describe your flow in plain language.
5. Test, save, and go live
- On an email step, use Preview or Send test to me (requires connected email provider).
- Click Save to persist your graph (Ctrl+S also works).
- Connect at least one step to the trigger — otherwise activation is blocked.
- Click Go live to start enrolling contacts, or set a scheduled activation date on the trigger.
- Use Pause to stop new enrollments without deleting the scenario.
/docs/marketing-automations on your store domain or on becomy.com.
Integrations & delivery setup
Before your automations can send emails or SMS in production, connect your own provider
accounts. Keys are stored per store, encrypted at rest, and never shown
in full after saving (masked as ••••1234).
Open the integrations hub
Go to Marketing → Integrations in admin, or visit
/admin/integrations on your store domain while signed in as an admin.
| Integration | Purpose | What you need |
|---|---|---|
| Email delivery | All automation emails and test sends | SendGrid, Mailgun, Postmark, Amazon SES, or custom SMTP — plus a verified from email and optional from name. |
| SMS (Twilio) | Text messages from SMS steps | Twilio Account SID, Auth Token, and a sending phone number. |
| Store payments (Stripe) | Your storefront checkout (customer payments) | Stripe publishable + secret keys for your Stripe account. |
Setup workflow
- Choose a provider card on the integrations hub (status: Not set up / Connected / Needs attention).
- Enter credentials — inline hints point you to each provider’s console.
- Click Save credentials, then Test connection.
- When status is Connected, return to the flow editor and go live.
Email deliverability (recommended)
After connecting SendGrid, Mailgun, or Postmark, authenticate your sending domain (SPF, DKIM, DMARC) in the provider’s dashboard. This improves inbox placement for marketing emails.
Editor behavior without integrations
- A setup banner appears on the automations list and editor until email is connected.
- Email and SMS steps show a Connect provider link instead of sending.
- Send test to me requires a connected email provider.
In development, Becomy may fall back to the platform mailer when no merchant email provider is configured. Production automations should always use your own provider.
Compliance & consent
Becomy blocks marketing sends when a contact has opted out, lacks consent, or is on your suppression list. Transactional flows can bypass consent when configured.
Marketing consent
-
New store customers have marketing consent off by default
(
marketing_consent: false). - You can collect consent at registration with an optional checkbox (when enabled in store marketing settings).
- Customer signed up triggers respect consent by default — only contacts who opted in are enrolled unless you change the trigger configuration.
Transactional vs marketing
On the trigger node, set communication type to
transactional for order confirmations and other essential messages that
should send even without marketing consent. Leave as marketing (default)
for promotional flows.
Unsubscribe
Every automation email automatically includes an unsubscribe footer with
{{ unsubscribe_url }} (you can also place this variable manually in your
template). When a contact clicks the link:
- Their unsubscribed_at timestamp is set.
- Marketing consent is turned off.
- They are added to your store’s suppression list.
Public URL format: /marketing/unsubscribe/:token on your store domain.
Suppressions are visible read-only under Marketing → Email suppressions in admin.
Frequency caps
Limit how many marketing emails a contact receives per rolling 7-day window (default: 5 per week, configurable in marketing store settings). When the cap is reached, the email step is skipped and logged as skipped_frequency_cap.
What the send gate checks
Before every email or SMS, Becomy verifies:
- Marketing consent (unless transactional)
- Contact is not globally unsubscribed
- Email is not on the suppression list
- Frequency cap not exceeded
The visual editor
The editor has four areas:
- Palette (left) — add new steps: messages, logic, actions.
- Canvas (center) — your flow diagram. Pan by scrolling.
- Settings panel (right) — configure the selected node or trigger.
- AI Assistant (bottom) — describe changes in natural language.
Connecting steps
Draw a connection from the small circle at the bottom of a node to the circle at the top of the next node. Click a connection line to remove it.
Branching nodes
Some nodes have multiple output ports:
- Condition — green yes port and red no port.
- A/B split — purple a port and pink b port.
Each port should connect to a different path so contacts follow the right branch.
Email step tools
- Preview — renders subject and body with sample data in a new tab.
- Send test to me — delivers via your connected email provider to your admin email.
- Insert snippet — append a saved snippet from your snippet library.
Toolbar
- Save — persists the graph; dirty state shows until saved.
- Go live / Pause — activate or pause the scenario.
- Analytics — link to funnel stats and CSV export for this scenario.
Duplicate scenarios
From the scenarios list, duplicate any scenario to clone all steps and edges into a new draft. Bulk export enrollments and bulk pause are also available from the list page.
Deleting steps
Click the × on a step node to remove it. Connections to that step are removed automatically. The trigger node cannot be deleted.
Triggers
A trigger defines when a contact enters a scenario. Select the trigger on the trigger node and configure options in the settings panel.
| Trigger | When it fires | Options |
|---|---|---|
| Order created | A customer completes checkout and a new order is recorded. | Re-enrollment policy, segment, entry rules. |
| Order fulfilled | An order’s fulfillment status changes to fulfilled. | Ideal for shipping confirmations, review requests, or loyalty offers. |
| Customer signed up | A new customer account is created (guest checkouts are excluded). | Respects marketing consent by default. Great for welcome series. |
| Cart abandoned | A cart still has items and has not been updated for a set number of hours. | Abandoned after (hours) — default 4 hours. Min cart value entry filter uses cart total in context. |
| Tag added | A marketing tag is applied to a contact (manually or by another automation). | Tag to watch — leave empty to match any tag, or enter a specific tag name. |
| Product viewed | A customer views a product page on your storefront. | Product filter — optional; run only when a specific product is viewed. Guest views are tracked via browse session and merged when the visitor signs in. |
Segment & entry filters
On the trigger node you can also set:
- Segment — only contacts matching the segment can enroll.
- Min cart value — minimum cart total for abandonment triggers.
- Scheduled activation — auto-activate the scenario at a future date/time.
See Segments & entry filters for the full rules reference.
Audiences (segments) & entry filters
Audiences are reusable contact groups. Use them on triggers to limit who enters a scenario, or in condition steps to branch the flow.
Two kinds
- Living — rules stay active; contacts enter/leave as they match (dynamic).
- Saved list — fixed membership you freeze once (static): paste emails or snapshot current matches.
Managing audiences
Go to Marketing → Audiences (/marketing/segments).
Start from a template, or build conditions with the visual rule builder
(no JSON required). Use Preview count before saving.
Supported segment rules
| Field | Description |
|---|---|
has_tag | Contact has a marketing tag |
orders_count | Number of orders (with operator) |
total_spent | Lifetime order value |
last_order_days_ago | Days since last order |
average_order_value | Average order amount |
purchased_product_id | Bought a specific product |
email_opened_in_days | Opened an email in the last N days |
email_clicked_in_days | Clicked an email link in the last N days |
marketing_consent | Whether consent is true/false |
in_segment_id | Nested segment membership |
email_suffix | Email domain suffix (e.g. gmail.com) |
first_name / last_name | Name is / contains (e.g. Julie) |
birthday | Day+month every year (e.g. 7 août, 07-08) |
date_of_birth | Full DOB (before / after / eq) |
shipping_city / shipping_country | Ever shipped to (any order/address) |
phone_country_code | Calling code from E.164 phone (e.g. 33) |
paid_with_card_scheme | Paid at least once with brand (visa, mastercard, …) |
purchased_product_id | Bought a specific product |
purchased_collection_id | Bought any product from a collection |
Trigger entry filters
On the trigger node, in addition to choosing an audience:
- Min cart value — for cart abandoned (uses
cart_totalin context). - Audience — dropdown of saved audiences; contact must match to enroll.
- Inline rules in
entry_rules:min_order_count,max_order_count,required_tag,exclude_tag.
Condition step: In segment
Add a Condition step with check type In segment and pick an audience to branch yes/no mid-flow.
Customers filter
On Customers, filter the list by audience to see who would be targeted before you wire the automation.
Steps
Steps are the building blocks of your scenario. Add them from the palette and connect them in order.
Messages
| Step | What it does |
|---|---|
| Send email |
Sends via your connected email provider (SendGrid, Mailgun, etc.).
Subject and body support Liquid personalization.
Opens and link clicks are tracked automatically; links include UTM parameters
(utm_source=becomy, utm_medium=email,
utm_campaign, utm_content).
Unsubscribe footer is appended automatically.
|
| Send SMS |
Sends a text via your connected Twilio account using Liquid in
the body. Uses the phone number from enrollment context or the contact’s most
recent order. Requires Twilio integration at
/admin/integrations.
|
Logic
| Step | What it does |
|---|---|
| Delay | Pauses the contact for a set amount of time (minutes, hours, or days) before continuing. Optionally set Send at hour (0–23) to deliver the next step during a specific hour in your store timezone. |
| Condition | Branches the flow on yes/no based on contact data, segments, cart value, or email engagement. See Conditions & email tracking. |
| A/B split | Routes contacts to variant A or B — random split or winner mode after an evaluation period. See A/B testing. |
Actions
| Step | What it does |
|---|---|
| Grant coupon |
Makes a coupon code available to the contact. Choose an existing store coupon or
enter a code manually. The code is stored as
{{ context.coupon_code }} for use in emails. Optionally add a tag
when the coupon is granted.
|
| Webhook | Sends a JSON payload to an external URL (POST or GET). Payload includes contact, store, scenario name, segment (if any), funnel position, UTM campaign, and full enrollment context. |
| Add tag | Applies a marketing tag to the contact. Can trigger other tag-based scenarios. |
| Remove tag | Removes a marketing tag from the contact. |
| Exit | Stops the scenario for this contact immediately (status: exited). |
Conditions & email tracking
How email tracking works
Every email sent by an automation includes an invisible tracking pixel and rewrites links so Becomy can record opens and clicks. Links are tagged with UTM parameters for analytics in your store and external tools. No extra setup is required beyond connecting your email provider.
- Opened email — the contact loaded the email (tracking pixel fired).
- Clicked email link — the contact clicked a link inside the email.
Using conditions after an email
A typical engagement branch looks like this:
Condition types
| Check | Description |
|---|---|
| Contact has tag | Whether the contact currently has a specific marketing tag. |
| Total orders | Compare the contact’s order count using >, ≥, =, ≤, or <. |
| Total spent | Lifetime revenue from the contact’s orders. |
| Cart value | Cart total from enrollment context (cart abandonment flows). |
| In segment | Whether the contact matches a saved segment’s rules. |
| Opened email | Whether a tracked email was opened. Optionally pick which email step to check; default is the most recent. |
| Clicked email link | Whether the contact clicked a link in a tracked email. Same step selector as opens. |
A/B testing
The A/B split step routes contacts into two paths so you can compare different messages, offers, or timing.
Random split (default)
- Add an A/B split step where you want to branch.
- Set mode to Random split.
- Set Variant A traffic (%) — e.g. 50 means half go to A and half to B.
- Connect the left port (a) to your first variant path.
- Connect the right port (b) to your second variant path.
Winner mode
After an evaluation period, remaining contacts at the split can be routed to the winning variant based on email performance:
- Set mode to Winner after evaluation.
- Choose Winner metric: open rate or click rate.
- Set Evaluation days (e.g. 7) — Becomy evaluates daily via
marketing:evaluate_ab_winners. - Connect variant A and B paths to different email steps so metrics can be compared.
Example
Each contact’s assigned variant is stored on their enrollment. Compare results in Analytics for the scenario (funnel + per-step open/click rates) or inspect enrollments in admin.
Personalization with Liquid
Email subjects, email bodies, and SMS messages support
Liquid
variables. Use double curly braces: {{ variable }}.
Available variables
| Variable | Description |
|---|---|
{{ user.first_name }} | Contact’s first name |
{{ user.last_name }} | Contact’s last name |
{{ user.email }} | Contact’s email address |
{{ store.name }} | Your store name |
{{ store.url }} | Your storefront URL |
{{ context.coupon_code }} | Coupon code after a Grant coupon step |
{{ context.order_id }} | Order ID when triggered by an order event |
{{ context.product_title }} | Product title for product viewed triggers |
{{ context.cart_total }} | Cart value for abandonment triggers |
{{ unsubscribe_url }} | One-click unsubscribe link (also auto-appended in footer) |
Example email body
Re-enrollment policies
Control how often the same contact can enter a scenario. Set this on the trigger node under Re-enrollment policy.
| Policy | Behavior |
|---|---|
| One active run at a time | Default. A contact cannot enter again while already active in this scenario, but may re-enter after completing or exiting. |
| Once per contact (never re-enroll) | Each contact enters at most once, ever — even if they place multiple orders or abandon carts again. |
| Cooldown between enrollments | A contact must wait N days since their last enrollment before entering again. Set Cooldown (days) on the trigger. |
| Allow concurrent enrollments | The same contact can be enrolled multiple times simultaneously. Useful for product-viewed triggers where each browse may deserve its own journey. |
Snippets, scheduling & version history
Email snippets
Reusable email blocks live at Marketing → Email snippets
(/marketing/snippets). Start from a recipe (welcome, drop alert,
cart nudge, VIP thanks, review ask, win-back, trust footer, collab code), drag
smart tags into the subject or body, and check the live preview with sample shopper data.
In an automation, select an email step and use the Insert snippet dropdown to append snippet content to the body (and subject when set).
Scheduled activation
On the trigger node, set Scheduled activation to a future date/time.
The scenario stays in draft until Becomy activates it automatically (checked every few
minutes via marketing:scheduled_activations).
Version history
When saving, you can snapshot the graph to version history. Restore a previous version to your draft without affecting contacts already enrolled in the live flow — in-flight enrollments keep their current step.
Campaign calendar
View active scenarios and upcoming scheduled activations at
Marketing → Campaign calendar (/marketing/calendar).
Starter templates
Besides Welcome, Cart recovery, and Post-purchase, you can start from:
- Win-back — re-engage lapsed buyers after 60 days.
- VIP thank you — for customers with 3+ orders.
- Review request — 7 days after fulfillment.
Analytics & monitoring
Scenarios list
The automations list at /marketing/automations shows live stats for each scenario:
- Enrolled — total contacts who ever entered.
- Active — currently moving through the flow.
- Completed — reached the end of the graph.
- Exited / failed — stopped at an Exit step or hit an error.
- Completion — percentage of enrollments that completed successfully.
Scenario analytics page
Open any scenario and click Analytics, or visit
/marketing/automations/:id/analytics. You’ll see:
- Funnel — contacts entered → completion count per step → exit/fail rates.
- Email step stats — sent, open rate, and click rate per email step.
- Revenue attribution — orders within 7 days after an email send (default window).
- CSV export — download funnel data from the analytics page.
Contact journey
View a single contact’s timeline at
/marketing/contacts/:user_id/journey — enrollments, step events,
email deliveries, and tags. Useful for support and debugging.
Step event log
Every step records events: started, completed,
failed, or skipped (e.g. when send gate blocks an email due to
consent, suppression, or frequency cap).
Admin resources
Under Marketing in your Becomy admin:
- Automation scenarios — browse scenarios, status, and enrollment counts (read-only).
- Scenario enrollments — inspect individual contacts: current step, status, and full context JSON.
- Email suppressions — contacts who unsubscribed or were suppressed manually.
- Campaign calendar — month view of active and scheduled scenarios.
Enrollment statuses
| Status | Meaning |
|---|---|
| Active | Contact is in the flow, possibly waiting on a delay. |
| Completed | Contact finished all connected steps. |
| Exited | Contact hit an Exit step. |
| Failed | A step error occurred (e.g. provider misconfiguration). Check context for details. |
Example workflows
Welcome series (with consent)
Cart recovery with segment
Post-purchase review ask
Product browse retargeting (guests + members)
VIP win-back
Frequently asked questions
Why isn’t my scenario enrolling anyone?
- Confirm the scenario status is active (not draft or paused).
- Ensure at least one step is connected to the trigger.
- Check the re-enrollment policy — the contact may already be enrolled or blocked by cooldown.
- Verify segment and entry filters — the contact may not match
min_cart_valueor required tags. - For customer signed up, confirm the contact has marketing consent.
- For cart abandoned, Becomy checks carts periodically; allow enough hours to pass.
Why didn’t my email send?
- Connect your email provider at
/admin/integrations. - Check if the contact unsubscribed, lacks consent, or hit the weekly frequency cap.
- Inspect the enrollment context for
skippedstep events in analytics.
Can I edit a live scenario?
Yes. Save changes anytime. Contacts already enrolled continue from their current step; new contacts use the updated graph from their entry point. Use version history to restore an earlier draft without affecting in-flight enrollments.
Do emails include an unsubscribe link?
Yes. Becomy automatically appends an unsubscribe footer with
{{ unsubscribe_url }}. Clicks add the contact to your suppression list and
set unsubscribed_at. See Compliance & consent.
How do SMS messages send?
Connect Twilio at /admin/integrations with your Account SID,
Auth Token, and from number. SMS steps use the same credentials as production. Contacts
can reply STOP to opt out (handled via Twilio webhook).
Does product viewed work for guests?
Yes. Anonymous visitors get a browse session cookie; product views are merged when they sign in or register, then matching product viewed scenarios can enroll them.
What data does a webhook receive?
A JSON body including:
- Contact id, email, first name, last name
- Store id and name
- Scenario id, name, and enrollment id
- Segment name (if trigger uses a segment)
- Funnel position and UTM campaign slug
- Full enrollment context (order ids, coupon codes, A/B variant, SMS SID, etc.)
Where can I get help?
Share this documentation with your team at
/docs/marketing-automations. For technical issues, contact Becomy support
through your admin dashboard.
AI assistant & MCP
Becomy includes in-editor AI assistants and a Model Context Protocol (MCP) server so you can build automations with natural language — in the browser or from Cursor, Claude Desktop, and other MCP clients.
In-editor AI assistants
| Surface | Agent kind | What it does |
|---|---|---|
| Marketing flow editor | marketing |
Build and edit scenario graphs, query segments and analytics |
| Theme editor | theme |
Edit Dawn-compatible theme sections and files (draft only) |
| Strategy advisor | strategy |
Read-only commerce and scenario analysis |
Marketing flow editor
- Open any scenario in the flow editor.
- Use the AI Assistant panel at the bottom of the screen.
- Describe what you want, e.g. “Build a VIP segment welcome with a coupon for customers with 3+ orders.”
- The assistant updates the canvas automatically. Review the flow, tweak if needed, then click Save.
- Use New chat to start a fresh conversation; prior turns are restored via
chat_id.
OPENAI_API_KEY on your Becomy server (or
openai.api_key in Rails credentials).
Without it, assistants return a configuration error. Full agent API details:
MCP docs — AI agents.
MCP integration (Cursor & external agents)
Connect your store’s MCP endpoint to build or audit scenarios from your IDE. Full setup instructions: Becomy MCP documentation.
- Endpoint:
https://your-store.becomy.com/mcp - Auth:
Authorization: Bearer <mcp_api_token>(find the token in store settings)
Marketing MCP tools
| Tool | Description |
|---|---|
list_marketing_scenarios | List scenarios with enrollment stats |
get_marketing_scenario | Full graph JSON for one scenario |
create_marketing_scenario | Create a new draft scenario |
save_marketing_scenario_graph | Save steps and edges from the editor format |
activate_marketing_scenario | Go live (requires confirmation in the in-app agent) |
pause_marketing_scenario | Pause enrollments |
duplicate_marketing_scenario | Clone scenario with all steps and edges |
list_marketing_segments | List audience segments and rules |
get_scenario_analytics | Funnel, email stats, revenue attribution |
get_store_integrations_status | Connection status (no secrets returned) |