How to Add Live Product Recommendations & Banners to Any Email Platform
A complete guide to embedding open-time personalized content from Personyze into Mailchimp, Klaviyo, HubSpot, ActiveCampaign, and more โ no switching ESPs required.
Your email platform is great at sending. But what if the product recommendations inside each email updated themselves in real time โ showing each recipient exactly what they’re most likely to buy, based on their most recent behavior, at the moment they open the email?
That’s what Personyze’s open-time email personalization does. And it works by dropping a single HTML snippet into any campaign template โ no matter which ESP you use. This guide walks you through the whole process.
Those Who Bought This Also Bought
Items bought by visitors who bought one or more of the items bought by the visitor. Prefer most recommended Recommend any
Last Bought: Those Who Bought This Also Bought
Items bought by visitors who bought the last item bought by the current visitor. Prefer most recommended
Personalized Recommendations
Products that the visitor is likely to buy or view, based on behavior of other visitors with similar demographics.
Managed Cross-Sells for Bought Products
Related or complementary items according to what is set in products catalog. You need to upload “Cross-Sale” catalog.
Up-Sell for Bought Items
Increase profit margins by recommending higher priced products similar to bought products. Upload “Up-Sell” catalog.
Recently Viewed
List of products recently viewed by the user. Show any Show any Show Recent first
Buy it Again
List of products the visitor Purchased in the past. Show any Show Recent first
Your Wishlist
Products from Personyze visitor’s wishlist. Show any
Final touches โ exclusions
Exclude all Added to cart
Exclude all Purchased
Visitor’s gender
Number of cells
Copy existing
Row Card
Self-contained card with rounded corners and soft shadows
Gradient Overlay
Full-bleed image with dark gradient rising from the bottom
Minimal Elegant
Refined, borderless cards with centered text and generous space
Dark Showcase
Bold dark-themed cards on near-black background with red accents
Horizontal Rows
Side-by-side layout with product image on the left and details on the right
Customers who bought your TV also loved these
SAR 1,599
โ Only 3 left in stock
<tr>
<td>
<a href=“https://pic.personyze.com/href/k=8qy0zs2vbzcv/email={INSERT EMAIL HERE}“>
<img src=“https://pic.personyze.com/png/k=8qy0zs2vbzcv/email={INSERT EMAIL HERE}“ alt=“Recommended”/>
</a>
</td>
<td>
<a href=“https://pic.personyze.com/href/k=8qy0zs2vbzcw/email={INSERT EMAIL HERE}“>
<img src=“https://pic.personyze.com/png/k=8qy0zs2vbzcw/email={INSERT EMAIL HERE}“ alt=“Recommended”/>
</a>
</td>
</tr>
<tr>
<td>
<a href=“https://pic.personyze.com/href/k=8qy0zs2vbzcx/email={INSERT EMAIL HERE}“>
<img src=“https://pic.personyze.com/png/k=8qy0zs2vbzcx/email={INSERT EMAIL HERE}“ alt=“Recommended”/>
</a>
</td>
<td>
<a href=“https://pic.personyze.com/href/k=8qy0zs2vbzcy/email={INSERT EMAIL HERE}“>
<img src=“https://pic.personyze.com/png/k=8qy0zs2vbzcy/email={INSERT EMAIL HERE}“ alt=“Recommended”/>
</a>
</td>
</tr>
</table>




Choose “After Purchase” โ “Those Who Bought This Also Bought”
Ahmed just bought a 65″ QLED TV. By selecting the After purchase tab and the “Those Who Bought This Also Bought” algorithm, Personyze will recommend accessories that other TV buyers also purchased โ soundbars, HDMI cables, wall mounts, streaming devices.
How Open-Time Personalization Works
Traditional email product blocks bake content in at send time โ everyone gets the same thing. Personyze’s approach is different: you embed a single HTML snippet once inside your order confirmation template. Every time a customer opens that email, the snippet calls Personyze live, identifies the recipient, and renders a personalized recommendation image right then.
From Purchase to Personalized Email โ How It Works
Click Play to see the complete journey. One snippet in your ESP template does everything.
Personyze tracks the purchase LIVE
window.personyze.push([‘trackEvent’, ‘purchase’, {
order_id: ‘ORD-8821’,
products: [{
product_id: ‘TV-65-QLED’,
price: 1299.00
}],
email: ‘john.morris@gmail.com’
}]);
This event links John’s email to his purchase history, so Personyze knows exactly what to recommend when the order email arrives.
๐ง Order confirmation template with Personyze snippet
Hi John, your order #ORD-8821 has been confirmed. Estimated delivery: 3โ5 business days.
โ Personyze recommendation block (paste once, works forever) โ
k=8qy0zs2vbzcv/email=*|EMAIL|*“>
<img src=“https://pic.personyze.com/png/
k=8qy0zs2vbzcv/email=*|EMAIL|*“/></a>
Works with any ESP
{{ email }}
{{ contact.email }}
%EMAIL%
{{ contact.EMAIL }}
โ Order #ORD-8821 confirmed
Hi John, your Samsung 65″ TV ships in 1โ2 days.
pic.personyze.com/png/k=โฆ/
email=john.morris@gmail.com
John sees personalized accessories โ live, right in the email
No static product picks. No guessing. The exact accessories other TV buyers purchased, rendered at the moment he opened the email.
store@yourshop.com โ john.morris@gmail.com
What happened โ in order
Purchase tracked
Personyze logged the TV purchase via the on-site event script
ESP sent the email
Order confirmation sent with the Personyze snippet already in the template
Snippet fired at open time
pic.personyze.com received the request with John’s email address
Rendered live accessories
Algorithm ran, catalog checked, personalized image returned in milliseconds
Step 1 of 4
ESP sends
Email opens
Result
Prerequisites
- An active Personyze account with email recommendations enabled on your plan
- Access to your email platform (Mailchimp, Klaviyo, HubSpot, etc.) with permission to edit campaign HTML
- A product catalog ready to upload โ or one already synced in Personyze
- Personyze’s tracking script installed on your website for behavioral data
If you have on-site recommendations running, your catalog is loaded and interaction tracking is active. You can skip Steps 1 and 2 and go straight to building your email widget.
1Upload Your Product Catalog
Personyze uses a single unified product database. If you’ve already uploaded products for on-site recommendations, skip this step entirely.
If not, go to Settings โ Product Catalog and choose one of three sync methods:
CSV Upload
Export your product feed from Shopify, WooCommerce, Magento, or any other platform and upload directly. Required fields: product_id, name, price, image_url, product_url. Optional but recommended: category, brand, availability.
XML / JSON Product Feed (Auto-Sync)
Provide a URL to your product feed (Google Shopping XML format is natively supported). Personyze can auto-sync hourly, daily, or weekly โ essential for keeping availability and pricing current at email open time.
API Integration
Use the Personyze Catalog API to push products programmatically from your backend. Best for large catalogs or real-time inventory accuracy requirements.
Since recommendations render at open time, a product showing as available that’s actually out of stock is a frustrating experience. Set up scheduled feed syncing wherever possible.
2Set Up Product Interaction Tracking
Personyze captures behavioral data through product interaction events โ views, add-to-carts, and purchases โ fired from your website. If Personyze is already running on-site, this is already done.
Install the Personyze Tag
Add the Personyze tracking script to your site’s <head>. You’ll find your unique snippet in Settings โ Tracking Code. It looks like this:
window._S_T || function(s) { s.async = true; s.src = '//counter.personyze.com/stat-track-lib.js'; s.onload = function() { _S_T.async = true; _S_T.setup(YOUR_ACCOUNT_ID, "your-domain.com"); }; (document.querySelector('head') || document.documentElement).appendChild(s); }(document.createElement('script'))
Fire Product View Events
On each product detail page, fire a product view event so Personyze can build behavioral profiles. This is what powers the “Personalized Recommendations” algorithm in email:
window.personyze = window.personyze || []; window.personyze.push(['trackEvent', 'product_view', { product_id: 'SKU-1234', product_name: 'Blue Running Shoe', category: 'Footwear > Running', price: 89.99, currency: 'USD' }]);
Track Add-to-Cart and Purchases
For the strongest recommendations, also fire add_to_cart and purchase events on those respective pages/events:
// On add-to-cart window.personyze.push(['trackEvent', 'add_to_cart', { product_id: 'SKU-1234', price: 89.99, currency: 'USD' }]); // On purchase confirmation page window.personyze.push(['trackEvent', 'purchase', { order_id: 'ORD-9876', products: [ { product_id: 'SKU-1234', price: 89.99, quantity: 1 } ], total: 89.99, currency: 'USD' }]);
For Personyze to connect on-site behavior to an email recipient, it needs to know their identity. You can do this by passing the user’s email or CRM ID to Personyze after login or from a known session. Check the Personyze product interaction tracking guide for full details on identifying users.
3Build Your Widget in Personyze
Navigate to Email Recommendations โ Get Code Wizard. The wizard takes you through three sub-steps: algorithm, template, and customization โ exactly as shown in the interactive demo above.
Algorithm Options
๐ฏ Personalized Recommendations
Based on each recipient’s individual browsing and purchase history. Strongest for warm audiences who’ve visited your site before.
๐ฅ Best Seller / Most Popular
Surfaces currently popular products based on aggregate behavior. Ideal for new subscribers or cold audiences. Great fallback for any campaign.
๐ Based on Last Purchase
Recommends products related to or complementary to what the recipient last bought. Perfect for post-purchase follow-up sequences.
๐ Based on Recently Viewed
Surfaces products the recipient was browsing most recently. Great for re-engagement or abandoned browse campaigns.
๐ท Promotional Banner
Display a fully designed promotional banner targeted by segment, time of day, or personalized with the recipient’s name or location โ instead of product cards.
Template & Customization
After choosing an algorithm, select a template layout from the library (Row, Grid, Minimal Elegant, Dark Showcase, Horizontal Rows, etc.), then use the left panel to customize colors, badges, button text, image sizing, and spacing. The live preview updates in real time.
Set the number of products to display โ typically 3โ4 for transactional emails, up to 6 for dedicated recommendation campaigns.
4Understanding the Embed Code
How it actually works โ unique URLs per recipient
The snippet Personyze generates is not a generic image. Each <img src> is a unique URL that encodes the recipient’s identity. When a subscriber opens the email, their email client requests that URL from Personyze’s servers. Personyze then:
- Looks up the subscriber’s behavioral profile (browsing history, purchases, categories viewed)
- Runs your chosen recommendation algorithm against that profile
- Checks your live product catalog for current pricing and availability
- Renders and returns a personalized product image โ live, at that moment
Each product slot in the widget has its own URL (ending in /k=...v, /k=...w, etc.) so Personyze can independently optimize what goes in each slot.
The generated snippet
<table> <tr> <td> <a href="https://pic.personyze.com/href/k=8qy0zs2vbzcv/email={INSERT EMAIL HERE}"> <img src="https://pic.personyze.com/png/k=8qy0zs2vbzcv/email={INSERT EMAIL HERE}" alt="Recommended"/></a> </td> <td> <a href="https://pic.personyze.com/href/k=8qy0zs2vbzcw/email={INSERT EMAIL HERE}"> <img src="https://pic.personyze.com/png/k=8qy0zs2vbzcw/email={INSERT EMAIL HERE}" alt="Recommended"/></a> </td> </tr> <tr> <td> <a href="https://pic.personyze.com/href/k=8qy0zs2vbzcx/email={INSERT EMAIL HERE}"> <img src="https://pic.personyze.com/png/k=8qy0zs2vbzcx/email={INSERT EMAIL HERE}" alt="Recommended"/></a> </td> <td> <a href="https://pic.personyze.com/href/k=8qy0zs2vbzcy/email={INSERT EMAIL HERE}"> <img src="https://pic.personyze.com/png/k=8qy0zs2vbzcy/email={INSERT EMAIL HERE}" alt="Recommended"/></a> </td> </tr> </table>
The fallback โ why you always get something useful
When you send a campaign, Personyze has never seen your recipient list before โ it doesn’t know who is in your Mailchimp or Klaviyo audience. That’s expected. So Personyze is designed with a smart fallback:
Fallback Behavior by Default
If a recipient’s email is known to Personyze (they’ve visited your site with tracking active and their identity was captured), they get fully personalized recommendations.
If a recipient’s email is not yet in Personyze (new subscriber, or tracking not yet linked), the widget automatically falls back to your configured fallback algorithm โ typically Most Popular or Best Sellers โ so the email still shows relevant, high-quality product suggestions rather than a broken image.
Configure your fallback in the Recommendation step under “Fallback recommendation if no results.”
Non-personal recommendations (no tracking required)
Don’t have behavioral tracking set up yet? You can still use Personyze for email recommendations using context-based approaches that don’t require individual user data:
Pass a Product ID in the URL
If you know the product context (e.g., a post-purchase email for order #XYZ), pass the product ID in the URL. Personyze will surface items that were bought together or viewed together with that product, based on aggregate behavior across all your visitors.
Site-Wide Best Sellers / Most Popular
With no individual or product context, Personyze surfaces your current top-performing products based on all visitor activity โ a strong baseline that still beats static editorial picks.
Each product slot has two occurrences of
{INSERT EMAIL HERE} โ one in the href (click tracking) and one in the src (the image render). Make sure you replace all occurrences, not just the first one.
5Insert Into Your Email Platform
The process is the same for every ESP: add the Personyze HTML snippet to your campaign, then swap the placeholder with that platform’s merge tag for the subscriber’s email address. Here’s exactly how to do it in each major platform:
Open Your Campaign Template
Go to Campaigns โ Email Templates (or open a draft campaign and click Edit Design). This opens the drag-and-drop editor.
Add a Code Content Block
Drag a Code block from the sidebar into your template where you want recommendations to appear โ typically below your main hero content, above the footer.
Paste the Personyze Snippet
Click into the Code block and paste the full HTML. Then replace {INSERT EMAIL HERE} with Mailchimp’s merge tag:
...?email=*|EMAIL|*
Send a Test Email to Verify
Use Preview & Test โ Send a Test Email โ not just the visual preview, which won’t substitute merge tags. Open the test in your actual inbox to confirm the image loads with real recommendations.
*|EMAIL|* in the URL. Always send a real test email to verify.
Open the Email Template Editor
In Klaviyo, navigate to Content โ Templates or open your Flow/Campaign email and click Edit. Use the drag-and-drop or HTML editor.
Add a Text / HTML Block
Drag in a Text block and switch it to HTML mode, or use an HTML block if your template supports it. Paste the Personyze snippet.
Replace the Email Placeholder
Klaviyo uses double-curly-brace Django-style templating. Replace {INSERT EMAIL HERE} with:
...?email={{ email }}
Preview with a Real Profile
Use Klaviyo’s Preview as Person feature, select a real subscriber, and verify the Personyze image loads correctly with personalized recommendations.
Open the Email Editor
In HubSpot, go to Marketing โ Email and open or create a campaign. Click Edit to open the drag-and-drop template editor.
Add a Rich Text or Custom HTML Module
Drag a Rich Text module into your template. Click the </> Source Code icon in the editor toolbar to switch to HTML mode. Paste the Personyze snippet.
Replace the Email Placeholder
HubSpot uses HubL (HubSpot’s templating language). Replace {INSERT EMAIL HERE} with:
...?email={{ contact.email }}
Send a Test & Preview
Use HubSpot’s Send Test Email feature with a real contact record to confirm the merge tag resolves and recommendations load correctly.
Open the Email Designer
In ActiveCampaign, navigate to Campaigns โ Create a Campaign or open an existing automation email. Use the New Email Designer.
Add an HTML Block
Drag an HTML content block into your template. Click to edit and paste the full Personyze snippet into the HTML editor.
Replace the Email Placeholder
ActiveCampaign uses percent-wrapped personalization tags. Replace {INSERT EMAIL HERE} with:
...?email=%EMAIL%
Test via Automation
Add a test contact to the automation or use Send Preview Email with a real contact to verify the tag resolves and recommendations appear.
Open the Template Editor
In Brevo, go to Email โ Templates and open or create a template. Use the drag-and-drop editor or the HTML editor.
Switch to the HTML Editor
Click the </> HTML button in the top right of the template editor to access the raw HTML. Paste the Personyze snippet where you want the recommendations to appear.
Replace the Email Placeholder
Brevo uses double-curly-brace syntax. Replace {INSERT EMAIL HERE} with:
...?email={{ contact.EMAIL }}
Send Test
Use Brevo’s Preview & Test โ Send Test Email. Enter a real contact email to confirm personalization renders correctly in your inbox.
Open the Email Template
In Constant Contact, go to Campaigns โ Create an Email. Choose your template and open the editor.
Add a Custom Code Block
In the editor, click Insert โ More โ Custom Code to add a raw HTML block. Paste the Personyze snippet into this block.
Replace the Email Placeholder
Constant Contact uses an older-style tag format. Replace {INSERT EMAIL HERE} with:
...?email=$[LN:EMAIL:$]
Preview & Test
Use Preview โ Preview As Subscriber and select a real subscriber to verify the personalization tag resolves correctly before sending.
Quick Reference: Email Address Merge Tags
Here’s a summary of the exact merge tag to use for each platform when replacing {INSERT EMAIL HERE} in the Personyze snippet:
| Email Platform | Replace {INSERT EMAIL HERE} with |
Notes |
|---|---|---|
| Mailchimp | *|EMAIL|* |
Standard Mailchimp merge tag |
| Klaviyo | {{ email }} |
Django-style template variable |
| HubSpot | {{ contact.email }} |
HubL contact property |
| ActiveCampaign | %EMAIL% |
ActiveCampaign personalization tag |
| Brevo | {{ contact.EMAIL }} |
Brevo template variable (uppercase field) |
| Constant Contact | $[LN:EMAIL:$] |
Constant Contact substitution tag |
| Campaign Monitor | [email] |
Campaign Monitor merge tag |
| Salesforce Marketing Cloud | %%emailaddr%% |
AMPscript substitution string |
| Any other ESP | Your ESP’s email merge tag | Check your platform’s merge tag docs. If using CRM ID instead: replace {INSERT USER ID HERE} with the ID merge tag. |
If your Personyze profiles are keyed by internal user ID rather than email, replace
{INSERT USER ID HERE} (the other placeholder variant in the snippet) with your platform’s merge tag for that field instead. This also avoids passing email addresses in URL parameters.
6QA & Preview Your Recommendations
Before sending to your full list, use Personyze’s built-in QA tool (the QA step in the wizard) to verify the recommendations are working and personalized correctly.
Look up any subscriber by email
In the QA step, type any subscriber’s email address into the Find user field. Personyze will instantly render the exact product images that user would see when they open their email โ based on their current behavioral profile in real time.
Below the rendered recommendations, you can also expand the user row to see their full product interaction history: every product they’ve viewed, added to cart, or purchased, along with timestamps and session data. This is useful for confirming that your tracking is working correctly and that the algorithm is picking up on the right signals.
If the email you enter has no history in Personyze, the QA tool will show your configured fallback recommendations (Most Popular / Best Sellers). This is exactly what that subscriber would receive in the real email โ so it confirms the fallback is working correctly too.
What to verify before sending
Recommendations look personalized
The products shown in the QA preview should relate to that user’s known interests โ not random. If they look generic, check that behavioral tracking events are firing and that the user’s email is being passed correctly from your site.
Fallback renders cleanly
Test with a brand-new email address that has no history. You should see Best Sellers or Most Popular โ not a blank or broken widget.
Send a real test from your ESP
Always send a test email from your actual ESP (not just the visual preview, which won’t resolve merge tags). Open it in your real inbox and confirm the images load with real recommendations.
Click-through destination is correct
Click each product image in your test email. Verify it goes to the correct product page and that Personyze’s click tracking fires for accurate attribution.
All major ESPs’ drag-and-drop visual previews do not substitute merge tags. They will show the raw placeholder text in the URL, causing the image request to fail. Always use a real test send.
7Performance Reporting
After your campaign goes live, Personyze’s Performance tab gives you detailed attribution metrics that go well beyond what your ESP’s native analytics provide for the recommendation block.
Campaign-level metrics
๐ Viewed
Total number of times the recommendation widget was rendered โ i.e., the email was opened with image loading enabled. This is your impression count for the personalization layer.
๐ฑ Clicked
The percentage of viewers who clicked at least one product in the widget, plus the total number of product clicks and average clicks per user. This tells you how engaging the recommendation selection is.
๐ Added to Cart
Users who clicked through and subsequently added a recommended product to cart, tracked via your site’s Personyze event tracking.
๐ฐ Purchased & Revenue
Total transactions, revenue, and contribution ratio attributed to the email recommendation widget. This is your direct ROI number for the personalization layer on top of your ESP campaign.
Drill down by user
Switch to the Users tab within Performance to see a breakdown by individual subscriber โ which specific email addresses clicked, added to cart, or purchased, and exactly which products they interacted with. This is invaluable for:
- Validating that high-intent users are getting the most relevant recommendations
- Identifying which user segments drive the most purchase conversions from email
- Feeding insights back into your algorithm or segment choices for future campaigns
Use the time range selector (From start, From last edit, Last 7 days, custom date range) to isolate performance from a specific campaign send or test period. Performance data updates approximately 1 hour after visitor sessions end.
Tips for Best Results
Maximize Open-Time Personalization
- Keep your catalog fresh. Schedule daily or hourly feed syncs. Stale prices and out-of-stock products erode trust instantly.
- Mid-email placement outperforms top or bottom. Below the hero banner, above the footer consistently drives higher click-through than other positions.
- 3โ4 products for transactional emails, 4โ6 for dedicated recommendation sends. More products means more scrolling โ test to find the sweet spot.
- Set a meaningful fallback. For new subscribers with no behavioral history, fall back to Best Sellers or Most Reviewed โ not random products.
- Match your subject line to the personalization. If your subject says “Picked just for you,” the recommendations need to actually feel personal. Ensure behavioral data is populating before deploying at scale.
- Don’t skip the alt text. A descriptive
altattribute on the recommendation image ensures corporate Outlook users who block images by default still see a clear CTA.