The Lunchbox Marketing CRM Onboarding Guide
Everything you need to go from an empty workspace to live, revenue-driving lifecycle campaigns — in the order you should do it.
Before you begin
Work through these sections in order. Each one depends on the one before it — you can't segment guests you haven't imported, and you can't automate against segments that don't exist yet.
You'll need: a Customer.io login for your brand's workspace, access to your DNS records (for email), and an export of your guest list from your POS, loyalty, or CRM system.
Timeline: most brands complete steps 1–4 in the first week, channel setup in week one or two, and go live with their first automations in week three.
Who should do this: whoever owns marketing for the brand. Loop in whoever manages your website DNS for the email verification step — that's often a different person.
1. Importing your customer list
Guests who order through Lunchbox flow into Customer.io automatically. Importing is how you bring in the guests you already have — from your POS, an old loyalty program, or a previous email tool — so your campaigns can reach them from day one.
Two ways to do it
Use the Lunchbox import template — easiest if your data is scattered or you're combining sources. Make a copy of the template, paste your values into the matching columns.
Use your own export — faster if you already have a clean export. You only need to rename the column headers to match the field naming convention (for example, change “email address” to “email”).
The one rule that matters: your column headers must exactly match the field naming convention. Customer.io matches on the header text, so “Email Address”, “email_address”, and “Email” will not map to the email field. Get the headers right and everything else follows.
Step by step
Copy or download the Lunchbox import template so you can edit it: Lunchbox-Customerio-Import-Template
Paste your guest data under the correct columns, or rename your own export's headers to match.
Delete the instructions tab and any unused tabs.
Download as a CSV (File > Download > Comma Separated Values).
In Customer.io, go to More > Imports > Import a CSV. (On the classic dashboard this lives under People > Add People > Import a CSV.)
Upload or drag your file into the import field.
When asked “How to identify People,” select email.
Map your fields, then review the import to confirm everything landed in the right place.
Preview and complete the import, then open People to see your guests — including any that merged with guests who have already ordered through Lunchbox.
Field naming reference
These are the field names Customer.io expects. Only include the columns you actually have data for — you do not need all of them.
Category | Fields |
Identity | email · first_name · last_name · phone · patron_id · cio_id · zip_code · timezone |
Dates | anniversary_date · birthday_date · birthday_day · birthday_month · birthday_year · first_order_date · last_order_date |
Order behavior | total_orders_placed · total_order_lifetime_spend · average_ticket_price · total_orders_web · total_orders_app · total_orders_ios · total_orders_android |
Service type | total_pickup_orders_placed · total_delivery_orders_placed · total_dinein_orders_placed · total_catering_orders_placed · last_pickup_order_date · last_delivery_order_date · last_dinein_order_date · last_catering_order_date · total_catering_lifetime_spend |
Loyalty | loyalty_credit_available · lifetime_credits_spent · loyalty_progress_percentage · tier_status · total_loyalty_lifetime_points |
Location | last_location_visited · last_location_visited_zip · last_location_delivered_zip · most_frequent_locations_visited · total_number_locations_visited · location_count |
Consent & status | email_optin · sms_optin · is_guest |
Watch out for: every guest needs a unique email address — duplicates will merge or fail. cio_id, id, and created_at are reserved by Customer.io; don't repurpose them.
Use the current template. Earlier versions of the import template were missing email_optin, sms_optin, is_guest, zip_code, total_pickup_orders_placed, and the Lunchbox 2.0 loyalty fields (tier_status, loyalty_progress_percentage, total_loyalty_lifetime_points). Segments for SMS, pickup conversion, guest-account creation, and loyalty tiers all depend on those columns — without them, those segments build empty. The template linked above includes all of them. Confirm consent values with your account team before importing them.
2. Using the Data Index to understand your guests
The Data Index is Customer.io's inventory of everything it knows about your guests — every attribute, every event, and how recently each one was seen. Before you build a single segment, spend ten minutes here. It's the difference between a segment that works and one that silently matches nobody.
What to check
Which attributes actually have data. An attribute can exist in the index but be empty for most guests. If only 4% of your list has a birthday date, a birthday campaign will reach almost no one — and that's a data collection problem, not a campaign problem.
Which loyalty fields you have. loyalty_progress_percentage, tier_status, and total_loyalty_lifetime_points only exist on Lunchbox 2.0.
What's on your order event
Beyond guest attributes, each order carries its own data you can use for filtering and personalization:
Attribute | What it holds |
order_id | The Lunchbox order number |
total · subtotal · tax · shipping | Order value, plus the delivery fee |
products | Array of items — category, name, price, product_id, quantity |
discount | Discount detail including name, value, coupon ID, whether it was a loyalty discount, and start/end dates |
affiliation | Location, as State - City (e.g. MA - Lowell) |
first_placed_order | True or false — was this the guest's first order |
Tip: first_placed_order is one of the most useful fields in the whole index. It lets you trigger a welcome sequence off the order itself, rather than waiting for a segment to rebuild.
3. Creating Segments
A segment is a saved group of guests. Segments are what your campaigns target, so building a good set up front means every campaign afterward is a few clicks instead of a rebuild.
Two kinds
Data-driven (dynamic) — defined by conditions. Guests move in and out automatically as their behavior changes. This is what you'll use for almost everything.
Manual (static) — a fixed list you add people to. Useful for one-off sends, VIP lists, or a seed list of your own team for testing.
How to build one
Go to Manage audience > Segments and click Create Segment.
Choose data-driven, and give it a clear name and description. Future-you will not remember what “Segment 4” meant.
Add your conditions — attribute values, events performed or not performed, membership in another segment, or device attributes.
Save, then wait for the segment to finish building before you use it. Large segments take a few minutes.
Check the member count against what you expect. A count of zero almost always means a typo in an attribute name or a timestamp condition that isn't matching.
A starter library
These eleven segments cover the campaigns most restaurant brands run. Thresholds are starting points — tune them to how often your regulars actually visit.
Segment | Conditions |
Lapsed guests | last_order_date more than 45 days ago AND total_orders_placed greater than 1 |
Web orderers, no app | total_orders_web greater than 1 AND total_orders_app equals 0 |
Delivery-only guests | total_delivery_orders_placed greater than 2 AND total_pickup_orders_placed equals 0 |
One-and-done | total_orders_placed equals 1 |
Unredeemed loyalty credit | loyalty_credit_available greater than 0 AND last_order_date more than 14 days ago |
Near reward threshold (2.0) | loyalty_progress_percentage between brand reward conversion (ex: 75 and 99.9 if conversion happens at 100) |
VIP / top-value guests | total_orders_placed greater than 9 AND total_order_lifetime_spend greater than 500 |
Lapsed catering buyers | total_catering_orders_placed greater than 0 AND last_catering_order_date more than 180 days ago |
Guest checkout, no account | is_guest equals true AND a valid email |
SMS eligible | sms_optin equals true AND phone exists |
Multi-location advocates | total_number_locations_visited greater than 2 |
The most common segment mistake: “in the past X days” conditions behave differently than people expect. The window is measured backward from right now and keeps sliding — and two conditions in the same segment are evaluated independently, each against its own window. Segments cannot express “did A within 24 hours of doing B.” That needs an automation with a Wait Until step.
4. Creating Automations (formerly Campaigns)
An automation is an ongoing workflow: guests enter when they meet a trigger, move through your sequence of messages and delays, and exit when they convert or when the sequence ends. This is where most of your recurring revenue comes from.
Automations vs. broadcasts vs. transactional
Automations run continuously. Anyone who qualifies enters, whenever they qualify. Use these for lifecycle campaigns.
Broadcasts are one-time sends — a newsletter, an LTO announcement, a closure notice.
Transactional messages are triggered by your system for a specific guest — order confirmations, receipts, password resets.
Choosing a trigger
Trigger type | Use it when | Example |
Segment or attribute | Membership in a group defines who should enter | Guest becomes lapsed |
Event | A specific action should start the sequence | Guest places an order |
Date | A date on the guest's profile drives timing | Birthday, first-order anniversary |
API-triggered | Your team fires it on demand for a chosen list | New location opening |
How to build one
Go to Send messages > Automations and create a new automation.
Pick your trigger type. This cannot be changed later — if you get it wrong you'll have to rebuild, so think it through.
Add filters if you need to narrow who enters beyond the trigger itself.
Build your workflow on the canvas: messages, delays, branches, and exits.
Set a conversion goal and your exit conditions. Do not skip this — see below.
Write your content and set the sender on each message.
Send test messages to yourself and your team.
Review the whole workflow, then set it live.
The building blocks
Messages — email, SMS, push, in-app.
Delay — wait a fixed amount of time.
Time window — hold until a specific window, like weekday mornings or the hour before dinner. Can follow each guest's own time zone.
Wait Until — hold until something happens, with a timeout. Use this instead of a delay whenever you're waiting on a guest action; it reacts the moment the action happens rather than checking once at the end.
True/False branch — split on something the guest already is.
Multi-split branch — route down one of several paths; first matching condition wins.
Random cohort — split the audience by percentage. This is how you build a holdout group.
Exit — ends the journey for that guest.
Goals and exit conditions
Set a conversion goal on every automation. Without one you're measuring opens, not orders. Match the attribution window to a realistic decision horizon — about a week for a reorder nudge, two weeks for a win-back, a month for app adoption.
Turn on “exit on conversion.” If a guest orders after your first message, they should never receive the discount queued for message three. This is the most common and most expensive mistake we see in mature workspaces.
Decide your re-entry frequency. Should a guest be able to go through this automation again? A win-back, yes — on an interval. A welcome series, no.
Before you set anything live: check that every message has a sender identity set. Content lives on the message template, and a message with no sender will never deliver. Also confirm each message is switched from draft to sending — drafted messages pile up unsent and look like a delivery failure.
5. Pre-launch and post-launch
The brands that see the strongest first-party numbers are the ones that treated launch as a campaign, not a switch-flip. Here's the sequence that works.
Four to six weeks before launch
Start collecting emails now. Put a signup form on your site offering early VIP access or a launch-day reward. A list you build before launch is a list you can message on day one.
Run an awareness drip. Nurture that list with a short sequence — tease what's coming, explain what guests get from ordering direct, introduce the loyalty program.
Verify your email domain. Do this early. Verification can take up to 24 hours to propagate, and you don't want it blocking launch day.
Warm your sending domain. If you're sending from a brand-new domain, ramp volume gradually rather than blasting your entire list at once. Sudden volume from an unknown sender is the fastest route to the spam folder.
Order your on-premise collateral. A-frames, window clings, floor decals, pickup signage, bag inserts, and bag stickers. Every guest already in your restaurant is a first-party guest you don't have to pay to acquire.
Launch week
Launch loud. A strong call-to-action email in the days after go live in the app store and on web. Include a promo code or signup bonus to drive that first order.
Send a loyalty overview email. Make the value concrete — what they earn, how fast, and what they can redeem it for.
Turn on social. Teaser stories, a grid post, and retargeting ads pointed at your delivery zones.
Prime push permissions in-app, before triggering the system prompt. A guest who declines the OS prompt is very hard to win back.
The first month after launch
Day three: a follow-up email to everyone who hasn't ordered yet, plus a repeat-purchase nudge to those who have.
Week one: turn on your first-order-to-second-order automation. This is the highest-leverage campaign you will run.
Week two: add loyalty credit reminders and web-to-app conversion.
Week three or four: add win-back, and only then start layering in the rest.
Don't judge anything before two weeks. Lifecycle campaigns build momentum as guests filter into the audience. Early numbers are almost always misleading. Give higher-value campaigns four weeks before you change them.
Launch sequencing matters: resist turning on all your automations at once. Guests who qualify for four campaigns simultaneously will receive four messages, and your global frequency cap will start silently suppressing sends. Stagger them.
6. Setting up your channels
Email domain verification
This proves you own your domain and lets Customer.io send from your branded address. It also substantially reduces the chance your marketing emails land in spam. Setup takes about ten minutes; propagation can take up to 24 hours.
You'll need: access to your DNS records and a Customer.io login for your workspace. If you don't manage your own DNS, loop in whoever does before you start.
The process: in Customer.io go to Settings > Workspace Settings > Email > Verify Domain. Customer.io shows you the MX, SPF, and DKIM records to add. Add each one to your DNS, set TTL to one hour, save, and then click Verify Domain.
If it doesn't verify immediately, wait and click Verify Domain again periodically. If it's still failing after 24 hours, double-check that every value was copied exactly.
This will not affect your existing online ordering website or any other part of your DNS. You are only adding records — never delete existing ones.
Pick the guide that matches your DNS provider — the records are identical, only the interface differs:
Google Domains no longer exists. It was sold to Squarespace, and domains registered there were migrated automatically. If your DNS was on Google Domains, use the Squarespace guide.
SMS via Twilio
Customer.io sends SMS and MMS through Twilio, so you'll need a Twilio account before you can send.
Key things to know: Speak to your Onboarding or Account Manager (after go-live) for SMS account creation and connection. The submission can take multiple attempts for Twilio to approve.
To connect: in Customer.io, Lunchbox will enter the Account SID and Auth Token, and Validate Credentials.
Always limit your send rate. Set a maximum of around 190 messages per minute. Sending as fast as possible triggers carrier limits and produces errors.
Segments: Twilio charges by message “segments,” where each segment is up to 160 characters—what you might sometimes see as a single chat bubble in traditional SMS applications. Emojis, m-dashes and special characters will always count for more than 1 character. So keeping your message to 1 segment will cut down on sms charges dramatically.
Always lead with your brand name in the message body. Guests receiving a text from an unfamiliar number need to know who it's from in the first two words.
Guests opt out by replying STOP. Lunchbox recommends not enabling general replies, as inbound messages can incur additional charges.
Two gaps to close: carriers now require A2P 10DLC brand and campaign registration before you can send marketing SMS in the US — budget a few business days for approval and start it early. Also note that SMS is currently US numbers only; international sending needs additional setup.
Push notifications
Push is already configured as part of your Lunchbox app build — no separate setup needed. Just confirm you can send a test push before you build any push-dependent campaign, and remember that only guests who have installed the app and accepted notifications are reachable (device = true). Always build an email fallback into any push campaign.
7. Inviting your team
Only Lunchbox Admins can invite people, so provide this to Onboarding or Support (after go-live) to receive access
Levels of access
Every brand team member can have a role for their workspace.
Role | Level | What they can do |
Workspace Admin | Workspace | Full control of that workspace, including settings and channels. |
Author | Workspace | Can build and send campaigns, but not change workspace settings. |
Viewer | Workspace | Read-only. Good for GMs and ops who want visibility without edit rights. |
Suggested mapping for a restaurant team
Marketing lead → Workspace Admin for the brand workspace.
Marketing coordinator or agency → Author for the brand workspace.
GM or operations → Viewer.
Notes
A team member can have a different role in each workspace — Admin in your test workspace, Viewer in production.
Sensitive data can be hidden per role. Admins can mark attributes as sensitive in the Data Index and hide them from specific team members.
If an invite doesn't arrive, have them check spam first, then confirm the email address was entered correctly. Admins can resend from the team members page.
8. Finding your way around
The left sidebar is grouped by what you're trying to do. This is the current Customer.io layout — if yours looks different, you may still be on the classic dashboard, which is linked at the bottom of the Home page.
Group | Items | You'll use it for |
Home | Workspace dashboard | Recent work, activity chart, suggested tasks, team audit log |
Agent | AI assistant | Building segments and answering questions about your workspace |
Review | Goals · Reports · Profile activity · Message activity | Measuring performance and debugging what did or didn't send |
Send messages | Automations · Broadcasts · Transactional · Anonymous · Message library | Building and running everything that sends |
Manage audience | Profiles · Custom objects · Segments | Finding guests and building the groups you send to |
Create content | Design Studio · Assets | Designing messages and storing images |
Configure data | Data index · Integrations · Geofences | Checking what data you have and where it comes from |
More | Email layouts · Snippets · Imports · Exports · Collections · Customize sidebar | Overflow menu — this is where CSV Imports and Exports live |
Two things people hunt for: Imports and Exports are under More, not under Manage audience — that trips up most new users on their first CSV upload. And Goals and Reports sit under Review rather than a separate analytics section. You can reorder any of this with More > Customize sidebar.
Also on screen
Global search (top center, or ⌘K). Searches automations, profiles, and documentation at once. Fastest way to find a campaign by name.
Home page suggestions. Customer.io surfaces prompts like "verify your segment health" and "audit your campaign coverage." These are genuinely useful early on — worth clicking through in your first weeks.
The three screens worth knowing well
Manage audience > Profiles > an individual guest. Every attribute, every event, every message they've received, and which automations they're currently in. The best debugging tool in the platform — when something looks wrong, start here.
Review > Message activity. Every message the workspace has attempted, with status. Tells you whether something sent, bounced, was suppressed, or was held by a message limit.
Configure data > Data index. Every attribute in your workspace with a sample value. If a segment is empty, this is where you find out why.
9. Measuring what matters
Where to look
Home dashboard — the high-level view of sends, engagement, and conversions across the workspace.
Automation metrics — per-campaign delivery, open, click, unsubscribe, and conversion numbers. Open any automation and check its metrics tab.
Goals — conversion tracking, either per-automation or as standalone goals that span multiple campaigns.
Reports — build custom views when the standard dashboards don't answer your question.
Deliverability metrics — bounce rates, spam complaints, and inbox placement. Check these monthly even when nothing looks wrong.
Setting up goals properly
A conversion goal on each automation tells you whether that specific campaign drove orders.
A standalone goal measures an outcome across campaigns — web-to-app conversion, first-to-third order, reactivation — with multiple automations attached as sources. This gives you multi-touch attribution instead of each campaign claiming credit separately.
Assign a value to each conversion by pulling from the order total. Reporting then reads in revenue rather than completions, which is what makes any of this reviewable with your leadership team.
The numbers to actually watch
Metric | Why it matters | Check it |
First-party share of orders | The whole point — orders you keep the margin on | Monthly |
Repeat rate | Are guests coming back at all | Monthly |
Days between orders | Are they coming back faster | Monthly |
Second-order conversion | The biggest step change in guest value | Monthly |
App installs → first app order | Installs without orders are a vanity metric | Monthly |
Revenue per campaign | Which campaigns actually earn their keep | Every 4 weeks |
Unsubscribe and spam rate | Your early warning that you're sending too much | Weekly |
On holdout groups: for any campaign with a discount attached, hold back five to ten percent of the audience using a random cohort split. Comparing the two groups is the only way to know whether the campaign caused the orders or simply took credit for orders that would have happened anyway. Without it you are measuring correlation.
10. Troubleshooting
Nobody is entering my automation
Date-triggered automations need a backfill. They evaluate forward from the moment you activate them, so every guest who already existed is skipped unless you activate with backfill enabled. This is the single most common cause of “the birthday campaign is broken.”
The segment may still be building. Large segments take time. Check that it shows a finished state before expecting entries.
Check your trigger versus your filters. A filter that contradicts the trigger produces an automation nobody can enter.
Confirm the event name. If the automation triggers on an event that doesn't exist in your workspace, it runs forever and matches no one — with no error message.
Guests are entering but not receiving messages
The message is still in draft. Drafted messages queue up unsent. Switch each one to sending.
No sender identity is set on the message template. Messages without a sender never deliver.
Your message frequency cap is suppressing them. Check the review queue — suppressed messages show up there.
They're unsubscribed from that channel, or their email previously bounced and is now suppressed.
My segment shows zero members
Check the attribute name character by character. A typo produces a valid, empty segment rather than an error.
Check the data actually exists. Look at the Data Index to see how many guests have that attribute populated.
Check your timestamp condition. Date conditions are the most common culprit. Confirm the format and the direction of the comparison.
Check case sensitivity. Attribute values are case sensitive in some comparisons.
Emails are landing in spam
Verify your domain if you haven't. This is the single biggest deliverability factor.
Warm the domain gradually rather than sending it to your full list on day one.
Clean your list. Importing old, stale addresses drives bounces, and bounces damage your sender reputation for everyone.
Watch your send frequency. Spam complaints climb sharply when guests feel over-messaged.
SMS isn't sending
Check your send rate limit is set to around 190 per minute. Unlimited rates trigger carrier throttling.
Confirm your A2P registration is approved with Lunchbox. Unregistered campaigns are blocked by US carriers.
Confirm the guest has sms_optin set and a valid phone number on their profile.
Where to get help
Lunchbox support — support.lunchbox.io covers Lunchbox-specific setup, data sync, and platform questions.
Customer.io documentation — docs.customer.io is thorough and well-maintained for anything platform-specific.
Your Lunchbox account team — for campaign strategy, segment design, or a walkthrough of your first build.

