In this article
LLM actions let you call a large language model directly inside a Customer.io campaign workflow. You write the prompt, inject customer data with Liquid, and store the model's response as a journey or customer attribute—which you can use to personalize messages, branch workflows, or enrich customer profiles.
If you want the full breakdown of how LLM actions work, we've got that here. This post is about what teams are actually doing with them.
Some of these use cases are from customers who shared what they've built. Others are a natural extension of what's possible once you start thinking about LLM actions as a decision layer in your campaigns.
Email validation during signup
One of the first places teams are reaching for LLM actions has nothing to do with personalization at all. Korsit, a platform that intentionally keeps its data footprint lean, realized they had a different kind of problem: users signing up with typos in their email domain.
A mistyped domain means a failed send, a broken welcome flow, and a customer who never hears from you. They added an LLM action step to their welcome campaign to analyze the email address before any message goes out, flagging suspicious domains so they could route those users into a correction flow instead.
You are an email validation expert.
Analyze the provided email address for the following:
1. **Typographical Errors:** Identify potential misspellings in the domain name
(e.g., "gmial.com", "yaho.com").
2. **Domain Validity:** Determine if the domain is a legitimate, widely-used email
provider or a valid business domain. Flag disposable, temporary, or non-existent
domains.
**Email to analyze:** {{customer.email}}
**Examples:**
- Suspicious typos: gmial.com, yhaoo.com, outlok.com, gmal.com, yahooo.com
- Non-existent/fake domains: randomdomain123.xyz, fakeemail.gg, notadomain.abc
- Disposable/temporary services: mailinator.com, guerrillamail.com, temp-mail.org
- Legitimate providers (not suspicious): gmail.com, hotmail.com, outlook.com, yahoo.com,
icloud.com, protonmail.com, and any company business domain
**Output format:**
Respond ONLY with valid JSON matching the schema below. Do not include any prose,
markdown, or explanations.
{
"email_suspicious": true or false,
"email_suspicious_reason": "short explanation, or empty string if not suspicious"
}
Store email_suspicious as a boolean journey attribute, then add a True/False branch immediately after. Users flagged as suspicious can be routed into a re-engagement or correction flow, while everyone else continues through the welcome campaign uninterrupted.
Re-engagement emails that actually feel personal
Lunchbox.io powers loyalty and ordering for restaurant brands, including Biscuitville, a regional QSR chain with a distinct southern hospitality voice. Their challenge was familiar: customers who'd placed one order and hadn't come back in 90 days. The goal was to get them to place a second order without sounding like every other "we miss you" email they've ever received.
They used LLM actions to generate the full email, subject line, and CTA, personalized by first name, average ticket price, and first order date, with a detailed prompt that embedded brand voice guidance directly.
The result was a re-engagement email that felt like it came from a “friendly southern neighbor,” not a marketing automation system. The campaign is live and generating positive signals.
You are a Biscuitville marketing specialist tasked with re-engaging customers who have placed exactly one order and haven't returned in 90+ days. Target a list of 25K+ guests. The goal is to encourage these customers to place their next order with a $5 discount. Write a warm, personalized email that feels like a friendly southern neighbor checking in.
## Brand voice
Use a warm, kind, and southern hospitality tone. Speak as if you're a friendly
neighbor who's been thinking of the guest. Keep sentences short and conversational.
Examples: "We've been thinking of you," "How's life treating you?"
Avoid phrases like "limited time offer" or "act now" to maintain gentle urgency.
## Audience context
These guests are new to Biscuitville but haven't returned after their first order.
They may be busy or have forgotten about the brand. Address them as someone who
might appreciate a gentle nudge to return without pressure.
## Attribute usage
Use liquid placeholders like {{customer.first_name}}. Do not calculate dates —
reference to confirm inactivity for 90+ days. Never include sensitive attributes
like phone numbers in the message body.
## Channel-specific instructions
For email: Craft a subject line under 50 characters with {{customer.first_name}},
followed by 2–3 sentences of warm, conversational text mentioning the $5 discount
for their next order, and a clear CTA to apply the discount
(e.g., "Claim $5 off next order"). Avoid exclamation marks that feel pushy.
## Offer instructions
Mention the $5 discount for the next order without implying scarcity.
Phrase it as "Enjoy $5 off your next order" or similar. Do not use phrases like
"limited time" to keep urgency gentle.
You'll want to store the subject line and body as separate journey attributes (e.g., journey.subject_line and journey.body), then reference them in your message block. If the generated content includes Liquid syntax, use {% render_liquid journey.body %} so it renders dynamically.
Calendar invites generated mid-journey
GoStudent, an online tutoring platform, had an existing webhook handling the creation of iCal invites for trial lesson bookings. With LLM actions, they saw an opportunity to replace that external dependency with something native.
The prompt takes event attributes from the campaign trigger—lesson time, student name, tutor details—and generates a Base64-encoded iCalendar (.ics) file string that gets stored as a journey attribute and attached to the confirmation email. One less webhook to maintain. One less moving part.
Generate a Base64-encoded iCalendar (.ics) file from the input fields below.Rules:
1. Output only the Base64 string.
2. Do not include markdown.
3. Do not include code fences.
4. Do not include labels like "Base64:".
5. Do not include any explanation or extra text.
6. The decoded output must be a valid .ics file.
Use this exact VCALENDAR structure:
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Customer.io//Calendar Invite//EN
CALSCALE:GREGORIAN
METHOD:REQUEST
BEGIN:VEVENT
DTSTART:{{event.lesson_start_utc}}
DTEND:{{event.lesson_end_utc}}
SUMMARY:Trial lesson with {{event.tutor_name}}
DESCRIPTION:Your trial lesson is confirmed. Join here: {{event.lesson_link}}
ORGANIZER:mailto:{{event.organizer_email}}
ATTENDEE:mailto:{{customer.email}}
END:VEVENT
END:VCALENDAR
Store the output as a text journey attribute (e.g., ical_event), then attach it downstream using a webhook or inline as part of a rich email. This use case works well with the complex reasoning model since the formatting requirements are strict—a quick model may produce inconsistent output.
AI-generated email copy with boolean decisioning
Pitch, the collaborative presentation platform, was one of the first teams to ship a live campaign using LLM actions for fully AI-generated email content.
They began by using boolean output fields from LLM actions as decisioning steps in the workflow. Generate content and make a routing decision in the same step—then branch based on the boolean downstream.
For example: generate personalized email copy for a customer, and simultaneously ask the model to assess whether the customer shows strong intent to upgrade. Store both outputs. Use the copy in the message, use the boolean to route to a sales outreach sequence or a self-serve nurture flow.
You are a lifecycle marketing specialist writing a personalized email for
{{customer.first_name}}, a {{customer.plan}} user at {{customer.company_name}}.
## Your task
1. Write a subject line (under 60 characters) and a 2-paragraph email body
(4–6 sentences total) that speaks to their usage pattern and encourages
them to explore the next tier.
2. Assess whether this customer shows strong upgrade intent based on the
signals below.
## Customer signals
- Current plan: {{customer.plan}}
- Seats used vs. available: {{customer.seats_used}} of {{customer.seats_available}}
- Feature usage in last 30 days: {{customer.features_used}}
- Presentations created: {{customer.presentations_created_30d}}
- Pricing page visits: {{customer.pricing_views_30d}}
## Output format
Respond ONLY in valid JSON:
{
"subject_line": "...",
"email_body": "...",
"strong_upgrade_intent": true or false,
"intent_reason": "one sentence"
}
Store subject_line and email_body as journey attributes for the message, and strong_upgrade_intent as a boolean for your downstream True/False branch. Hot leads route to sales. Everyone else stays in the nurture flow.
Lead scoring without the webhook sprawl
For teams running B2B campaigns, lead scoring has traditionally meant external tools, Zapier, or custom webhooks that someone eventually has to maintain. LLM actions let you score and qualify leads natively, storing the result as a journey attribute you can branch on immediately.
This is especially useful for welcome or trial flows where you want to identify high-intent accounts early and route them to sales before they slip into a generic nurture sequence.
Evaluate this lead for sales readiness and generate a qualification score.
## Lead data
- Company: {{customer.company_name}}
- Industry: {{customer.industry}}
- Company size: {{customer.company_size}}
- Role: {{customer.job_title}}
- Signed up: {{customer.created_at}}
- Pricing page visits: {{customer.pricing_views}}
- Features activated: {{customer.features_activated}}
- Trial activity (last 7 days): {{customer.trial_events | json}}
## Scoring criteria
Score from 1–100 based on:
- Company size and industry fit (weight: 30%)
- Pricing page engagement (weight: 25%)
- Feature activation depth (weight: 25%)
- Recency of activity (weight: 20%)
Classify as one of: "hot", "warm", or "cold"
Respond ONLY in valid JSON:
{
"score": 0-100,
"qualification": "hot" | "warm" | "cold",
"reason": "one sentence explaining the score"
}
Store qualification as a journey attribute, then branch: hot leads go to a sales-routed sequence, warm leads get a targeted nurture, and cold leads continue through the standard flow. You can also set score as a customer attribute if you want it to influence future campaigns.
Post-support sentiment matching
Customer support interactions leave a clear signal about how a customer is feeling—but most post-support sequences ignore it entirely. A customer who just had a frustrating experience doesn't need the same message as someone who raved about your team.
LLM actions can analyze the tone of the most recent support interaction and adapt both the message content and the sending approach based on what it finds.
You are a customer experience specialist. Analyze the tone of this customer's
recent support interaction and generate an appropriate follow-up message.
## Customer context
- Name: {{customer.first_name}}
- Plan: {{customer.plan}}
- Support ticket topic: {{customer.last_ticket_topic}}
- Last support message (customer): {{customer.last_support_message}}
- Resolution status: {{customer.ticket_resolved}}
## Your task
1. Rate their sentiment as: "positive", "neutral", or "negative"
2. Recommend a response tone: "celebratory", "empathetic", or "neutral"
3. Write a follow-up email (2–3 sentences) that matches their emotional state.
- Positive: Thank them, ask for a review.
- Neutral: Check in, offer a resource.
- Negative: Acknowledge the experience, offer a direct line to help.
Respond ONLY in valid JSON:
{
"sentiment": "positive" | "neutral" | "negative",
"recommended_tone": "celebratory" | "empathetic" | "neutral",
"follow_up_message": "..."
}
Use the sentiment attribute to branch into three paths, then render the follow_up_message in the email body for each branch. For negative sentiment, you might also trigger an internal notification to the customer success team.
Ready to try it?
LLM actions are available in the campaign workflow builder under the Data section. Drag in a Run LLM step, write your prompt, define your output fields, and test before you activate.

If you're already a Customer.io customer, open any campaign and add your first LLM action today.
Not a customer yet? Start a free trial and see what your campaigns can do when they have a decision layer built in.
For setup guidance, output field configuration, and model selection, check out the full LLM actions documentation.






