One template. Thousands of personal messages. No code required.
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 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.
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 — for each 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.
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 among the highest-impact fields per TextingOnly campaign data.
City, region, zip code, service area. One campaign with location keywords serves all markets at once — Baltimore contacts get ‘Baltimore,’ Phoenix contacts get ‘Phoenix.’ One send, local relevance in each market.
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.
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.
list preparation · CSV import · column mapping · fallback valuesCompose 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.
template authoring · {{syntax}} · send preview · message reviewDynamic keywords work best 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 plus relevant keywords outperforms a large generic send on all key metrics.
list segmentation · geographic targeting · service segmentation · field completenessAt send time, TextingOnly replaces each placeholder with the real contact value. Each 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 (10-Digit Long Code) registration. Variable messaging ensures carrier pattern detection has nothing to flag.
send execution · unique message composition · deliverability protection · carrier complianceDynamic keywords get contacts to reply. OTTO’s outbound reply automations handle what comes back — YES routes to ITR (Interactive Text Response) qualification, questions get answered, Spanish replies activate a Language Funnel, STOP suppresses immediately with TCPA (Telephone Consumer Protection Act) 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 routingReference the contact’s specific vehicle — year, make, model — in each 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.’
City plus service type equals local relevance. One HVAC campaign covering Baltimore, Annapolis, and DC uses {{city}} and {{service}} so each contact gets a message that reads as written for their area and their specific inquiry.
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 the rest of the outreach they receive.
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.
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.
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 message on re-engagement sends · TextingOnly campaign data.
Fastest takes 30 seconds.
See a real dynamic keyword SMS flow in your Messages app. 30 seconds.
Live demo →OTTO configured for dynamic keyword SMS campaigns. Real contacts, real results, 90 days.
Start the pilot →We map dynamic keyword SMS campaigns to your specific business and contacts.
Schedule a call →