Install Meta Pixel on HubSpot
Meta Pixel (formerly Facebook Pixel) enables advertising and conversion tracking for Facebook and Instagram campaigns. This guide covers HubSpot-specific Meta Pixel implementation.
Prerequisites
- Meta Business Suite access - Create at business.facebook.com
- Meta Pixel created - In Events Manager
- HubSpot Site Header HTML access - Settings permissions
- Super Admin or Website Editor - HubSpot role
What is Meta Pixel?
Meta Pixel is a JavaScript snippet that:
- Tracks website visitors for Facebook/Instagram ads
- Measures ad campaign effectiveness
- Builds custom audiences for retargeting
- Optimizes ads for conversions
- Tracks conversions (leads, purchases, sign-ups)
Installation Methods
Method 1: Site Header HTML (Recommended)
Install Meta Pixel globally on all HubSpot pages.
Step 1: Get Your Pixel Code
- Go to Meta Events Manager (business.facebook.com/events_manager)
- Select your Pixel
- Click Continue Pixel Setup → Install code manually
- Copy the Pixel base code:
<!-- Meta Pixel Code -->
<script>
!function(f,b,e,v,n,t,s)
{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};
if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(t,s)}(window, document,'script',
'https://connect.facebook.net/en_US/fbevents.js');
fbq('init', 'YOUR_PIXEL_ID');
fbq('track', 'PageView');
</script>
<noscript>
<img height="1" width="1" style="display:none"
src="https://www.facebook.com/tr?id=YOUR_PIXEL_ID&ev=PageView&noscript=1"/>
</noscript>
<!-- End Meta Pixel Code -->
Step 2: Add to HubSpot Site Header
- In HubSpot, go to Settings → Website → Pages
- Scroll to Site Header HTML
- Paste the Meta Pixel code
- Replace
YOUR_PIXEL_IDwith your actual Pixel ID - Click Save
Step 3: Enhanced Implementation with HubSpot Data
Add HubSpot contact data to Meta Pixel for better matching:
<!-- Meta Pixel Code with HubSpot Data -->
<script>
!function(f,b,e,v,n,t,s)
{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};
if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(t,s)}(window, document,'script',
'https://connect.facebook.net/en_US/fbevents.js');
{% if contact %}
// Initialize with contact data for better matching
fbq('init', 'YOUR_PIXEL_ID', {
'em': '{{ contact.email }}',
'fn': '{{ contact.firstname }}',
'ln': '{{ contact.lastname }}',
'ct': '{{ contact.city }}',
'st': '{{ contact.state }}',
'zp': '{{ contact.zip }}',
'country': '{{ contact.country }}'
});
{% else %}
fbq('init', 'YOUR_PIXEL_ID');
{% endif %}
fbq('track', 'PageView');
</script>
<noscript>
<img height="1" width="1" style="display:none"
src="https://www.facebook.com/tr?id=YOUR_PIXEL_ID&ev=PageView&noscript=1"/>
</noscript>
<!-- End Meta Pixel Code -->
Note: User data is automatically hashed by Meta Pixel before sending.
Method 2: Google Tag Manager (Flexible)
Install Meta Pixel through GTM for easier management.
Prerequisites
Step 1: Create Meta Pixel Tag in GTM
- In GTM, go to Tags → New
- Tag Configuration → Custom HTML
- Paste Meta Pixel code:
<script>
!function(f,b,e,v,n,t,s)
{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};
if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(t,s)}(window, document,'script',
'https://connect.facebook.net/en_US/fbevents.js');
fbq('init', 'YOUR_PIXEL_ID');
fbq('track', 'PageView');
</script>
- Triggering: Select All Pages
- Name: "Meta Pixel - Base Code"
- Save
Step 2: Publish Container
- Click Submit → Publish
See GTM Setup for more details.
Method 3: Meta Pixel Integration App (Limited)
HubSpot has native Meta Pixel integration, but with limitations.
Setup via HubSpot App Marketplace
- Go to App Marketplace in HubSpot
- Search for "Facebook Pixel"
- Install official Facebook integration
- Connect your Facebook account
- Select your Pixel
Limitations:
- Limited custom event tracking
- Cannot customize parameters easily
- Less control over implementation
- May not support all Meta Pixel features
Recommendation: Use Site Header HTML or GTM for full control.
Verification & Testing
1. Use Meta Pixel Helper Browser Extension
- Install Meta Pixel Helper extension for Chrome
- Visit your HubSpot site
- Click extension icon
- Should show:
2. Use Meta Events Manager
- Go to Events Manager in Meta Business Suite
- Select your Pixel
- Go to Test Events tab
- Enter your website URL
- Open Website → Navigate your site
- Verify events appear in real-time
3. Check Browser Console
// In browser DevTools console
console.log(typeof fbq); // Should return 'function'
console.log(_fbq); // Should return Meta Pixel object
4. Check Network Requests
Advanced Configuration
Cookie Consent Integration
Respect user privacy with HubSpot cookie consent:
<script>
!function(f,b,e,v,n,t,s)
{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};
if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(t,s)}(window, document,'script',
'https://connect.facebook.net/en_US/fbevents.js');
// Wait for consent before initializing
var _hsq = window._hsq = window._hsq || [];
_hsq.push(['addPrivacyConsentListener', function(consent) {
if (consent.allowed) {
// User consented - initialize Meta Pixel
fbq('init', 'YOUR_PIXEL_ID');
fbq('track', 'PageView');
} else {
// User declined - don't initialize
console.log('Meta Pixel not loaded - no consent');
}
}]);
</script>
Multiple Pixels
For multiple ad accounts or business units:
<script>
fbq('init', 'PIXEL_ID_1'); // Main business pixel
fbq('init', 'PIXEL_ID_2'); // Agency pixel
fbq('track', 'PageView'); // Fires on both pixels
</script>
Cross-Domain Tracking
If your HubSpot site spans multiple domains:
<script>
fbq('init', 'YOUR_PIXEL_ID');
fbq('track', 'PageView');
// Track across domains
fbq('set', 'agent', 'tmgoogletagmanager', 'GTM-XXXXX');
</script>
Troubleshooting
Meta Pixel Not Loading
Check:
- Pixel ID is correct (numeric, no spaces)
- Code is in Site Header HTML (not footer)
- No JavaScript errors blocking execution
- Ad blockers disabled for testing
Debug:
// Check if fbq function exists
console.log(typeof fbq); // Should be 'function'
// Try manually firing event
fbq('track', 'PageView');
PageView Events Not Showing in Events Manager
Possible causes:
- Pixel code not loaded
- Ad blocker preventing tracking
- Events Manager delay (can take 20 minutes)
- Pixel not active in Events Manager
Solution: Use Meta Pixel Helper extension for instant verification.
Duplicate Events
Cause: Pixel installed multiple times (Site Header + App + GTM)
Fix:
- Check Site Header HTML
- Check installed HubSpot apps
- Check GTM tags
- Remove all but one implementation
Contact Data Not Passing
Issue: Advanced matching not working
Check:
{# Verify contact variables work #}
{{ contact.email }}
{{ contact.firstname }}
Fix: Ensure contact exists and variables are within HubL context.
Privacy & Compliance
GDPR Compliance
Meta Pixel must respect GDPR:
- Obtain consent before loading pixel
- Cookie notice must mention Meta Pixel
- Allow opt-out via cookie settings
- Data Processing Agreement with Meta
California Privacy Rights (CCPA)
For California visitors:
<script>
// Disable Meta Pixel for California (if needed)
if (navigator.language.includes('en-US') && userIsInCalifornia) {
// Don't initialize pixel or use limited data use
fbq('dataProcessingOptions', ['LDU'], 1, 1000);
}
</script>
User Data Hashing
Meta automatically hashes user data (emails, phone numbers) before transmission. This is done client-side for privacy.
Performance Considerations
Async Loading (Default)
Meta Pixel loads asynchronously by default:
t.async=!0;
Monitor Performance Impact
- Check PageSpeed Insights
- Meta Pixel typically adds 10-20kb
- Async loading minimizes render-blocking
See Performance Troubleshooting.
Next Steps
- Configure Meta Pixel Events - Track forms, CTAs, meetings
- Set up Conversions API - Server-side tracking
- Install GTM - For easier pixel management
For general Meta Pixel concepts, see Meta Pixel Guide.