Dynamic keywords replace placeholder variables with real contact data at send time — first name, city, service type, vehicle year, last interaction date, or any field in your list. “Hi Sarah, your AC service is due in Baltimore this week” performs at a fundamentally different level than “Hi there, check out our special.” One campaign template. Unlimited personalized output. No manual message creation.
A generic mass text gets ignored. A personalized one gets replied to.
Identity keyword — most impactful single personalization field
{{city}}
Location keyword — local relevance across every market in one send
{{service}}
Service keyword — reference what the contact actually asked about
Any field
Custom keyword from any column in your contact list
What Are Dynamic Keywords
The message that gets openedis the one that feels written for them.
Dynamic keywords are placeholder variables inserted into a campaign message template. When the campaign sends, TextingOnly replaces each placeholder with the corresponding value from that contact’s record — automatically, for every contact, in the same send action. One template produces thousands of individually composed messages. The result is a reply rate that reflects actual relevance, not mass-blast noise.
👤
Identity Keywords
First name, last name, full name. A message that opens with the contact’s name reads differently than one that opens with ‘Hey there.’ The most basic personalization — and consistently the highest-impact field.
📍
Location Keywords
City, region, zip code, service area. One campaign with location keywords serves every market simultaneously — Baltimore contacts get ‘Baltimore,’ Phoenix contacts get ‘Phoenix.’ One send, local relevance in every market.
🏷️
Service & History Keywords
The specific service, vehicle, product, or inquiry from the contact’s record — plus any custom field: last service date, rep name, membership tier, last interaction. Reference what they actually asked about, not a generic offer.
See dynamic keywords in a live campaign.
We’ll walk through how your contact fields map to message variables for your specific list and use case.
Write once.Every contact gets a message that reads as written for them.
01
Prepare your contact list with keyword fields as column headers
Any column in your CSV or imported list becomes a usable keyword variable. First Name, City, Service, Vehicle Year, Last Service Date — column headers map directly to {{keyword}} syntax in your message template. Clean data in produces clean personalization out. Fields missing for any contact use a fallback value you define at campaign setup, so no message ever renders with a blank placeholder.
Compose the campaign message once, inserting double-brace placeholders wherever you want contact-specific data. “Hi {{first_name}} — your {{service}} special in {{city}} ends Friday. Still interested?” TextingOnly previews how the first few contacts’ messages will render before you send, so you can confirm personalization looks right across different data combinations.
Segment your list by the field you’re personalizing on
Dynamic keywords work best when paired with targeted segmentation. A campaign referencing {{service}} should only go to contacts who have that service field populated. A {{city}} keyword campaign should be split by geography so each market gets a message that references their city. Focused segment + relevant keywords outperforms a large generic send on every metric.
list segmentation · geographic targeting · service segmentation · field completeness
04
Send — every message is uniquely composed at delivery
At send time, TextingOnly replaces each placeholder with the real contact value. Every message in the campaign is individually composed — no two are identical. This delivers personalization but also protects deliverability: carriers flag identical bulk sends as spam regardless of 10DLC registration. Variable messaging ensures carrier pattern detection has nothing to flag.
Reply automations handle every response OTTO receives
Dynamic keywords get contacts to reply. OTTO’s outbound reply automations handle what comes back — YES routes to ITR qualification, questions get answered automatically, Spanish replies activate a Language Funnel, STOP suppresses immediately with TCPA documentation. The campaign doesn’t end at the send; it opens a conversation OTTO manages at scale.
OTTO reply handling · YES qualification · STOP suppression · Language Funnel routing
Who Uses Dynamic Keywords
Any business running outbound SMSwhere relevance drives the reply.
🚗
Automotive Dealerships
Reference the contact’s specific vehicle — year, make, model — in every service reminder or trade-in offer. ‘Your 2019 Ford F-150 is due for an oil change’ converts at a different rate than ‘Schedule your next service.’
🏠
Home Services
City plus service type equals local relevance. One HVAC campaign covering Baltimore, Annapolis, and DC uses {{city}} and {{service}} so every contact gets a message that reads as written for their area and their specific inquiry.
🏡
Real Estate
Neighborhood, property type, last interaction date. A buyer re-engagement references what they were looking for — not a generic ‘Are you still in the market?’ blast that reads like every other outreach they receive.
👔
Recruiting & Staffing
Job title, location, last application date. A staffing firm re-engaging a candidate pool references the specific role or city they applied for. Relevance is the margin between a reply and an opt-out.
🏢
Franchise Groups
Multi-location businesses use location keywords so each market’s campaign reads as locally composed — even when managed centrally. Each market’s contacts get their market’s message, from a local number, in one send operation.
♻️
Re-engagement Campaigns
Last service date, rep name, last offer — keywords that make a dormant contact feel remembered rather than blasted. ‘It’s been 8 months since your last visit, Sarah’ outperforms a generic win-back offer on every re-engagement metric.
Common questions
Questions aboutdynamic keyword personalization.
What happens if a contact is missing a keyword field?
TextingOnly uses a configured fallback value when a contact record is missing a dynamic keyword field. For {{first_name}} with no data, the fallback might be ‘there’ — producing ‘Hi there’ rather than a blank. You define fallback values for each keyword during campaign setup. Clean list data produces the best personalization, but fallbacks ensure no contact receives a broken message.
How does variable messaging protect deliverability?
Carriers flag identical bulk sends as spam — even from properly registered 10DLC numbers. When every message in a campaign is uniquely composed because each one inserts different dynamic keyword values, no two messages are identical. Carrier pattern detection has nothing to flag. Dynamic keywords are both a personalization strategy and a deliverability protection mechanism.
Can I use custom fields as dynamic keywords, not just standard ones like name and city?
Yes. Any column in your contact list can become a dynamic keyword — vehicle year, last service date, rep name, product type, inquiry type, membership tier, or any custom field you’ve imported. If it’s in the contact record, it can be inserted into the message template. This is how automotive campaigns reference specific vehicles and how re-engagement campaigns reference the exact service a contact previously inquired about.
Do dynamic keywords work with outbound reply automations?
Yes — and this combination is where the real campaign performance comes from. Dynamic keywords make the message relevant enough to generate a reply. OTTO’s outbound reply automations handle what comes back: YES routes to qualification, questions get answered, STOP suppresses immediately. Personalized outbound plus OTTO reply handling closes the loop between mass reach and individual qualification.
Dynamic keywords are placeholder variables in an SMS campaign template that are automatically replaced with contact-specific data at send time — first name, city, service type, vehicle year, last interaction date, or any custom field. TextingOnly renders each message uniquely per contact, producing a bulk campaign where every recipient receives a message that reads as individually written.
How do dynamic keywords work in TextingOnly?
A campaign template is written once using double-brace placeholders — {{first_name}}, {{city}}, {{service}}, {{vehicle}}. At send time, TextingOnly replaces each placeholder with the corresponding value from that contact’s record. Missing field values use configured fallback text so no message is blank. Every message in the send is uniquely composed — no two are identical.
Why do dynamic keywords improve SMS deliverability?
Carriers flag identical bulk sends as spam regardless of 10DLC registration. When every message is uniquely composed through dynamic keyword insertion, carrier pattern detection has nothing to flag. Variable messaging is both a personalization strategy and a deliverability protection mechanism — the same action produces both outcomes.
What is the outcome of using dynamic keywords?
Higher reply rates from messages that reference the contact’s actual name, city, service, and history. Improved deliverability from variable messaging that carrier pattern detection cannot flag. Every contact receives a message that reads as written for them specifically. Every interaction becomes an owned contact you can use again.