Unbounce + Meta Ads Conversion Tracking Setup
I’ve audited probably 200+ Unbounce accounts, and about 60% of them are losing conversion data to Meta. The usual culprit? They’re only firing the Meta pixel client-side, which means iOS users, ad blockers, and anyone with tracking prevention enabled just… disappear from your conversion reports.
Unbounce’s built-in integrations are decent, but they don’t handle the server-side piece that Meta desperately needs in 2026. You need Meta CAPI (Conversions API) running alongside your pixel, or you’re leaving 20-30% of your conversions on the table.
What You’ll Have Working By The End
- Unbounce form submissions automatically firing as ‘Lead’ events in Meta
- Server-side conversion tracking via Meta CAPI with proper event deduplication
- Real-time conversion verification in Meta’s Events Manager
- Cross-platform attribution that survives iOS tracking prevention
- Backup tracking method that works even when pixels are blocked
Prerequisites
- Unbounce account with form(s) set up on your landing pages
- Meta Ads account with pixel installed on your Unbounce pages
- Google Tag Manager container (recommended for flexibility)
- Meta Conversions API set up (via GTM Server-side or third-party tool like Elevar)
- Admin access to your Unbounce account to add custom scripts
Step 1: Set Up the Unbounce Data Layer Push
Unbounce doesn’t have a native data layer, so we need to create one. Add this script to your Unbounce page in the “Scripts” section (after the form):
// Add this to Unbounce Scripts section
window.dataLayer = window.dataLayer || [];
// Listen for Unbounce form submissions
document.addEventListener('DOMContentLoaded', function() {
// Target all forms on the page
const forms = document.querySelectorAll('form');
forms.forEach(function(form) {
form.addEventListener('submit', function(event) {
// Get form data
const formData = new FormData(form);
const email = formData.get('email') || '';
const phone = formData.get('phone') || '';
const firstName = formData.get('first_name') || formData.get('name') || '';
// Generate unique event ID for deduplication
const eventId = 'ub_' + Date.now() + '_' + Math.random().toString(36).substr(2, 9);
// Push to data layer
window.dataLayer.push({
'event': 'unbounce_form_submit',
'form_id': form.id || 'unbounce_form',
'event_id': eventId,
'user_data': {
'email': email,
'phone': phone,
'first_name': firstName
},
'page_url': window.location.href,
'page_title': document.title
});
});
});
});
Warning: Don’t put this in the “Before Body End Tag” section — Unbounce loads forms dynamically, so the script needs to run after the DOM is ready.
Step 2: Configure GTM Trigger
In your GTM container, create a new trigger:
Trigger Type: Custom Event
Event name: unbounce_form_submit
This trigger fires on: All Custom Events
Test this first: Submit your form and check GTM Preview mode. You should see the unbounce_form_submit event firing with all the user data variables.
Step 3: Set Up Meta Pixel Tag in GTM
Create a new tag in GTM:
Tag Type: Meta Pixel
Event Name: Lead
Pixel ID: Your Meta pixel ID
Event Parameters:
event_id:{{DLV - event_id}}user_data.email:{{DLV - user_data.email}}user_data.phone:{{DLV - user_data.phone}}user_data.first_name:{{DLV - user_data.first_name}}
Trigger: The unbounce_form_submit trigger you created above
Advanced Settings → Tag Sequencing: Fire this tag before your CAPI tag (if you’re using GTM Server-side)
The event_id is crucial — this is what Meta uses to deduplicate events between your pixel and CAPI.
Step 4: Configure Meta CAPI
This is where most setups break. You need server-side tracking to capture the 20-25% of users who block client-side pixels.
Option A: GTM Server-side (Recommended)
If you have GTM Server-side set up, create a Meta Conversions API tag:
Tag Type: Meta Conversions API
Event Name: Lead
Access Token: Your CAPI access token
Test Event Code: (during testing only)
Event Parameters:
event_id:{{DLV - event_id}}user_data.email:{{DLV - user_data.email}}user_data.phone:{{DLV - user_data.phone}}user_data.first_name:{{DLV - user_data.first_name}}event_source_url:{{DLV - page_url}}action_source: website
Option B: Third-party CAPI Tool
Tools like Elevar, Stape, or Zapier can handle CAPI if you don’t have GTM Server-side. Most of them can consume GTM data layer pushes directly.
Step 5: Set Up Unbounce Webhook (Backup Method)
Unbounce has built-in webhook functionality that can serve as a backup tracking method:
- Go to your Unbounce page → Leads → Webhooks
- Add webhook URL pointing to your CAPI endpoint
- Configure payload to include the same
event_idfrom your form script
This ensures you capture conversions even if JavaScript fails to load.
{
"event_name": "Lead",
"event_id": "{{event_id}}",
"user_data": {
"email": "{{email}}",
"phone": "{{phone}}",
"first_name": "{{first_name}}"
},
"event_source_url": "{{page_url}}",
"action_source": "website"
}
Testing & Verification
In GTM Preview Mode:
- Submit your Unbounce form
- Verify the
unbounce_form_submitevent fires - Check that your Meta Pixel and CAPI tags both fire
- Confirm the
event_idis identical in both tags
In Meta Events Manager:
- Go to Events Manager → Your Pixel → Test Events
- Submit a test form
- Look for the ‘Lead’ event appearing in real-time
- Verify both browser and server events show up (with same event_id)
- Check that user data (email, phone) is being hashed properly
Cross-Check Numbers:
Compare Unbounce lead count vs. Meta conversion count over a 7-day period. Acceptable variance is 5-15% (higher variance usually means tracking issues or attribution window differences). If you’re seeing 30%+ variance, something’s broken.
Red Flags:
- Only browser events showing in Meta, no server events
- Duplicate conversions (same user, different event_ids)
- Conversion count dropping significantly after iOS updates
- Zero conversions from mobile traffic
Troubleshooting
Problem: GTM shows the event firing but Meta Events Manager shows nothing
Check your pixel ID in the GTM tag. I see wrong pixel IDs in about 20% of setups I audit. Also verify your Meta pixel is actually installed on the Unbounce page.
Problem: Getting duplicate conversions in Meta (same user showing up twice)
Your event_id isn’t matching between pixel and CAPI calls. The event ID must be identical for both the client-side pixel and server-side CAPI event. Check your data layer variable is pulling the same value.
Problem: Form submissions not triggering the GTM event
Unbounce sometimes loads forms after your script runs. Add a delay or use a MutationObserver to detect when forms are added to the DOM. Also check if your form has a different structure than expected.
Problem: Meta CAPI events showing but not attributing to campaigns
Your event_source_url needs to match exactly where the user came from. If they’re on a subdomain or custom domain, make sure the URL in CAPI matches what the pixel sees. Also check your fbp and fbc parameters are being passed correctly.
Problem: Conversions dropping after iOS updates
This means your server-side tracking isn’t working properly. iOS blocks pixels but can’t block server-side CAPI calls. If conversions drop significantly after iOS updates, your CAPI setup is broken or missing.
Problem: Webhook backup method firing but primary method isn’t
Check your Unbounce script placement. If the webhook is working but JavaScript isn’t, your script might be in the wrong section or there’s a JavaScript error preventing execution. Check browser console for errors.
What To Do Next
Once your Unbounce + Meta tracking is solid, consider these related setups:
- Unbounce + Google Ads Conversion Tracking — dual-platform attribution
- Unbounce + GA4 Conversion Tracking — complete analytics setup
- Unbounce + LinkedIn Ads Conversion Tracking — B2B campaign tracking
- Unbounce to HubSpot Integration — sync your leads to CRM
Need help getting this set up without breaking your current campaigns? Get a free tracking audit — I’ll review your current setup and give you specific recommendations for your account.
This guide is part of the Meta Ads Conversion Tracking Hub — covering every major form tool, CRM, and e-commerce platform integration with Meta’s conversion tracking.