What is it?
Personalization macros (also called variables or dynamic content) are placeholders that automatically insert specific subscriber or product data into your messages. They're formatted with double curly brackets—for example, {{subscriber.firstName}}—and resolve to actual text when sent to each recipient.
Macros let you scale personalized communication without manually editing individual messages. Every subscriber gets a message tailored to their behavior, purchase history, and profile data.
How do I use it?
Step 1: Insert a variable or dynamic link
In Text Messages/Push notifications:
- In your message composer, click the Variable button (or Insert variable icon)
- Choose a category: Subscriber, Product, Offer, etc.
- Click the variable you want
- (Optional) Add a Default value—a fallback text if data is missing (e.g., "friend" instead of an empty name)
- Click Insert
In Emails:
- In the email editor, click Insert variable or Insert dynamic link from the content block popup
- Search for your variable (e.g., "first name," "product," "discount")
- Click to insert it into text, button URLs, or image links
- (Optional) Add a Default value for missing data
Step 2: Available macros (all channels)
| Macro | Example Output | Use Case |
| {{subscriber.firstName}} | Jane | Displays subscriber's first name |
| {{subscriber.lastName}} | Smith | Displays subscriber's last name |
| {{subscriber.fullName}} | Jane Smith | Displays full name |
| {{subscriber.email}} | jane@example.com | Displays subscriber email |
| {{subscriber.cartLink}} | https://store.com/cart/123 | Link to subscriber's cart (Shopify-optimized) |
| {{subscriber.signupOffer.link}} | https://store.com/discount/SAVE | Link that auto-applies sign-up discount |
| {{subscriber.signupOffer.couponScreenLink}} | https://attnl.tv/o/abcde | Attentive-hosted offer page to copy code |
| {{offer.link}} | https://store.com/discount/20 | Link that auto-applies journey-specific discount |
| {{offer.code}} | ATTV-OLCHY8 | Displays discount code |
| {{offer.value}} | $10 or 10% | Displays discount value (requires "Discount amount" setup) |
| {{triggerEvent.product.link}} | https://store.com/products/item | Link to product page |
| {{triggerEvent.product.name}} | Downpour Rain Jacket | Displays product name |
| {{triggerEvent.product.price}} | $129.00 | Displays product price |
| {{triggerEvent.product.image}} | [Image] | Inserts product image (email and SMS only) |
| {{triggerEvent.product.quantity}} | 2 | Displays item quantity (post-purchase journeys only) |
| {{triggerEvent.checkout.checkoutLink}} | https://store.com/checkout/abc | Link to active checkout session |
| {{triggerEvent.product.priceDropPct}} | 20% | Price drop percentage (price drop journeys only) |
| {{originalPrice}} | $20 | Original product price (price drop journeys only) |
Custom attributes: If you use custom attributes to collect subscriber data, you can also add those as variables. Search for them in the Subscriber category under CUSTOM.
Step 3: Using default values
A default value is fallback text that appears when personalized data is missing. For example:
-
Without default: Hey {{subscriber.firstName}}, check out this deal!
- If first name is missing, the message won't send to that subscriber
-
With default: Hey {{subscriber.firstName | default:"friend"}}, check out this deal!
- If first name is missing, the subscriber sees: "Hey friend, check out this deal!"
When adding a variable, enter your default value in the Default value (optional) field. In the editor, it appears as {{variableName | default:"fallback text"}}.
Step 4: Preview how macros will appear
More information on previewing and testing
Text and Push:
- Go to your message
- Click Preview options
- Toggle Preview as a subscriber (on by default)
- Use the dropdown to preview as: a random subscriber, a specific subscriber, a subscriber in/not in a segment
- Click Submit to see resolved variables in your message
Email:
- In the email editor, click Preview
- Use the arrows or dropdown to preview as different subscribers
- Email shows actual subscriber data in place of variables (e.g., {{subscriber.firstName}} becomes "Jane")
- If data is missing, preview shows <Missing variable.Name>
Note: Test messages sent to real phone numbers or email addresses will show placeholder text for macros (e.g., [OFFER CODE] for {{offer.code}}), not the resolved values. Previews in-app show resolved values; live messages show personalized data.
Step 5: Add macros to links
You can use variables in URLs to send subscribers to personalized landing pages or track their behavior:
- Text messages and Push notifications: Click Variable in the message, then Add variable to link (if available)
- Email: Click Insert dynamic link instead of Insert variable
Example: https://yoursite.com/welcome?name={{subscriber.firstName}}&id={{subscriber.email}}
Special considerations by channel
Text Messages:
- Character count increases with resolved macro values; final count varies per subscriber
- All macros resolve the same way across campaigns and journeys
- Preview in-app shows resolved values; test SMS shows variable names (e.g., {{subscriber.firstName}})
Email:
- Supports advanced Liquid syntax for text manipulation (trimming long product names, changing casing, formatting dates)
- Conditional logic (if/else rules) available: show/hide email rows based on subscriber attributes or segment membership
- Dynamic images block: inserts exact product image a subscriber viewed
- Email size limit: keep emails under 102 KB
Push Notifications:
- Works identically to text messages
- All macros available in text and URLs
Why should I use it?
- Scale personalization: Send one message template that auto-adapts to each subscriber's data
- Reduce manual work: No need to edit 1000s of messages individually
- Higher engagement: Personalized messages (name, relevant products, custom offers) drive better click-through and conversion
- Better data: Track which personalized elements perform best and iterate
Important requirements and caveats
Missing data behavior:
- If a macro is used without a default value and data is missing for a subscriber, the message will not be sent to that subscriber
- If a product image macro is missing data, that row is omitted from the email; if all products are missing data, the email won't send
Journey-specific limitations:
- Welcome journeys: Only these macros work: {{message.messageId}}, {{message.messageName}}, {{message.messageType}}. Subscriber data (like first name) is not available at sign-up.
- Post-purchase journeys: {{triggerEvent.product.quantity}} only works here
- Price drop journeys: {{triggerEvent.product.priceDropPct}} and {{originalPrice}} only available here
- Custom event journeys: To include UTM parameters in dynamic links, ensure the custom event payload sent to Attentive already contains them
App integrations:
- Some macros only appear in the variable menu if the integration is active (e.g., Okendo review data, Recharge subscription data)
Data dependency:
- To use product-related macros, you must share product data with Attentive (typically via Shopify or manual catalog setup)
- To use custom attributes as variables, that data must be collected and synced to your subscriber profiles