This guide covers how to configure and use all available analytics pixels on the web2wave platform, including event mappings, data transmission, and testing recommendations.
🎯 Available Analytics Pixels
The platform supports the following analytics and advertising pixels:
- Facebook Pixel (Meta Pixel) - For Facebook/Instagram advertising
- TikTok Pixel - For TikTok advertising campaigns
- Snapchat Pixel - For Snapchat advertising
- Pinterest Tag - For Pinterest advertising
- AppLovin AXON - For mobile advertising attribution
- Google Analytics & Google Ads - For web analytics and Google advertising
🔧 How to Add Pixels to the Platform
General Setup Process
- Navigate to Project Settings → Analytics Tab
- Enable the desired pixel by checking the checkbox
- Configure required fields (Pixel ID, Access Tokens, etc.)
- Test configuration using the "Check token" buttons where available
- Save settings - The pixel will automatically load on your pages
Pixels and Conversions API: fields to fill in
Every network is connected in Project settings → Analytics. You never paste a pixel snippet into your pages. In each section the ID gives you browser events, and the token next to it is what adds server-side conversions — fill in both if you want both.
- Meta Pixel — Meta Pixel ID and Facebook Access Token. Facebook Test Event Code belongs in the field only while you are testing — clear it afterwards, or Meta keeps treating your traffic as test events.
- TikTok Pixel & Conversion API — TikTok Pixel ID and TikTok Access Token. The token also covers click ID forwarding to the TikTok Events API.
- Snapchat Pixel — Snapchat Pixel ID and Snapchat Access Token. Snapchat conversions are sent from web2wave servers once both fields are filled in.
- Pinterest Tag — Pinterest Tag ID for the browser tag, plus Pinterest Ad Account ID and Pinterest Conversion Token for server-side conversions. Pinterest is the one network where server events use the ad account, not the tag, so filling in the Tag ID alone leaves you with browser events only. Send Pinterest Conversions API events as test marks the server events as test data while you check the setup — switch it off afterwards.
- Choose which events each network receives on the server side in Events to send via Conversion API, on the same tab.
Saving is enough — the pixels then load on every quiz, paywall, and After Pay page in the project.
Don't connect a pixel by pasting the network's own snippet into HTML to HEAD or into a tag manager. Pixels added that way fire browser events only — server conversions need the token fields above — and a pixel your own code puts on the page can also pick up web2wave funnel events, which shows up in Events Manager as duplicated or unexpected conversions.
Need a different pixel for a single quiz or paywall, or none at all? See Custom and multiple pixels.
Configuration Fields by Platform
| Platform | Required Fields | Optional Fields | Server Events |
|---|---|---|---|
| • Pixel ID • Access Token | • Test Event Code • Server Events Only | ✅ Full Support | |
| TikTok | • Pixel ID • Access Token | • Server Events Only | ✅ Full Support |
| Snapchat | • Pixel ID • Access Token | None | ✅ Full Support |
| • Tag ID (browser) • Ad Account ID + Conversion Token (server events) | • Server events only • Send server events as test | ✅ With Ad Account ID and Conversion Token | |
| AppLovin | • Event Key | None | ❌ Browser Only |
| • Analytics ID • Tag Manager ID | • AdWords Tag ID | ✅ Full Support |
Note: Pinterest is the exception to "one ID plus one token". Its browser tag uses the Pinterest Tag ID, while its server-side conversions use Pinterest Ad Account ID and Pinterest Conversion Token — fill in all three to get browser and server events.
Don't use Birch for your Meta Pixel, choose "Set up manually" and input Pixel ID and Facebook Access Token.
📈 Event Mappings by Platform
Facebook Pixel Events
| Internal Event | Facebook Event | Event Type |
|---|---|---|
Purchase | Purchase | Standard |
Subscribe | Subscribe | Standard |
InitiateCheckout | InitiateCheckout | Standard |
CompleteRegistration | CompleteRegistration | Standard |
AddPaymentInfo | AddPaymentInfo | Standard |
StartTrial | StartTrial | Standard |
PageView | PageView | Standard |
Paywall Prices visible | ViewContent | Standard |
Paywall click price | ViewContent | Standard |
| Other events | Custom Events | Custom |
Special Features:
- ✅ Enhanced matching with hashed email and user_id (SHA-256)
- ✅ Event deduplication using
eventID - ✅ Facebook Click ID (
fbclid) and Browser ID (fbp) tracking - ✅ Automatic cookie management (
_fbc,_fbp)
TikTok Pixel Events
| Internal Event | TikTok Event | Notes |
|---|---|---|
Purchase | Purchase | With transaction data |
Subscribe | Subscribe | With subscription data |
InitiateCheckout | InitiateCheckout | With cart data |
CompleteRegistration | CompleteRegistration | User signup |
AddPaymentInfo | AddPaymentInfo | Payment info added |
StartTrial | StartTrial | Trial started |
PageView | PageView | Page view |
| All events | Forwarded | All events sent |
Special Features:
- ✅ Enhanced matching with email and external_id
- ✅ TikTok Click ID (
ttclid) tracking - ✅ Automatic user identification
- ✅ Full event forwarding with currency/value data
Snapchat Pixel Events
| Internal Event | Snapchat Event | Notes |
|---|---|---|
Purchase | PURCHASE | With price/currency |
Subscribe | PURCHASE | Subscription purchase |
InitiateCheckout | START_CHECKOUT | Checkout initiated |
CompleteRegistration | SIGN_UP | User registration |
AddPaymentInfo | ADD_BILLING | Payment info |
StartTrial | PURCHASE | Trial signup |
PageView | PAGE_VIEW | Page view |
Paywall Prices visible | VIEW_CONTENT | Content view |
AddToCart | ADD_TO_CART | Cart addition |
Search | SEARCH | Search performed |
Special Features:
- ✅ Client deduplication ID (
client_dedup_id) prevents duplicate events - ✅ Snapchat Click ID (
sccid,ScCid) tracking - ✅ Enhanced user matching with email
- ✅ Only sends mapped standard events (filters irrelevant events)
Pinterest Tag Events
| Internal Event | Pinterest Event | Notes |
|---|---|---|
Purchase | checkout | With transaction data |
Subscribe | signup | User signup |
InitiateCheckout | addtocart | Checkout process |
CompleteRegistration | signup | User registration |
AddPaymentInfo | addtocart | Payment process |
StartTrial | checkout | Trial conversion |
PageView | pagevisit | Page view |
Paywall Prices visible | viewcategory | Category view |
AddToCart | addtocart | Cart addition |
Search | search | Search performed |
Special Features:
- ✅ Enhanced match with email and external_id
- ✅ Pinterest Click ID (
pinclid) tracking - ✅ Automatic email hashing for privacy
- ✅ Cross-device checkout tracking
AppLovin AXON Events
| Internal Event | AXON Event | Category |
|---|---|---|
Purchase | purchase | Required |
Subscribe | subscribe | Required |
StartTrial | subscribe | Required |
InitiateCheckout | begin_checkout | Required |
CompleteRegistration | sign_up | Recommended |
AddPaymentInfo | add_payment_info | Recommended |
PageView | page_view | Required |
Paywall Prices visible | view_item | Required |
AddToCart | add_to_cart | Required |
Search | search | Recommended |
Special Features:
- ✅ Rich ecommerce data with items array
- ✅ Product categorization (
item_category_id: 317) - ✅ Automatic additional events (
landon page_view,add_to_carton checkout) - ✅ Mobile-optimized attribution
Google Analytics Events
| Internal Event | Google Event | Notes |
|---|---|---|
Purchase | purchase | Enhanced ecommerce |
Subscribe | purchase | Enhanced ecommerce |
StartTrial | purchase | Enhanced ecommerce |
InitiateCheckout | begin_checkout | Ecommerce funnel |
CompleteRegistration | sign_up | User action |
AddPaymentInfo | add_payment_info | Checkout step |
PageView | page_view | Standard tracking |
Paywall Prices visible | view_item | Product view |
Special Features:
- ✅ Enhanced ecommerce tracking
- ✅ Multiple tag support (Analytics + Tag Manager + Ads)
- ✅ Data Layer and gtag support
- ✅ Custom send_to targeting
📊 Data Transmitted with Events
Common Data Sent to All Platforms
{
user_id: "unique_user_identifier",
email: "[email protected]", // when available
value: 29.99, // transaction value
currency: "USD",
subscription_id: "sub_123456",
price_id: "price_123",
external_price_id: "stripe_price_123",
quiz_id: "quiz_123",
paywall_id: "paywall_123",
app_version: "1.0.0"
}Platform-Specific Data
Facebook Pixel
{
eventID: "user123_Purchase", // Deduplication
fbc: "fb.1.1703123456000.abc123", // Facebook Click ID
fbp: "fb.1.1703123456000.xyz789", // Facebook Browser ID
external_id: "hashed_user_id", // SHA-256 hashed
em: "hashed_email" // SHA-256 hashed email
}TikTok Pixel
{
external_id: "user_123",
email: "[email protected]",
// Full event properties forwarded
}Snapchat Pixel
{
client_dedup_id: "user123_Purchase", // Deduplication
user_id: "user_123",
user_email: "[email protected]",
price: 29.99,
currency: "USD",
transaction_id: "subscription_123"
}Pinterest Tag
{
external_id: "user_123",
em: "[email protected]", // Auto-hashed
value: 29.99,
currency: "USD",
order_id: "subscription_123"
}AppLovin AXON
{
items: [{
item_id: "price_123",
item_name: "Subscription",
quantity: 1,
price: 29.99,
currency: "USD",
item_category_id: 317
}],
value: 29.99,
currency: "USD",
transaction_id: "subscription_123"
}Notes:
- The function is executed per system. Returning
falseblocks sending only for that specific system. - If the function throws an error, the event will be sent (errors are swallowed to avoid losing analytics).
- Keep logic simple and fast; the function runs for every event.
🔍 Testing Pixels with Browser Extensions
Facebook Pixel Helper
- Extension: Facebook Pixel Helper
- Features: Real-time event monitoring, error detection, parameter validation
- Testing: Shows all fired events, parameters, and errors
- What to Check: Event names, parameters, enhanced matching data
- Recommendation: ⭐⭐⭐⭐⭐ Essential for Facebook debugging
TikTok Pixel Helper
- Extension: TikTok Pixel Helper
- Features: Event tracking, parameter validation, data quality monitoring
- Testing: Monitors TikTok events and enhanced matching
- What to Check: Event firing, user identification, currency data
- Recommendation: ⭐⭐⭐⭐ Very useful for TikTok campaigns
Snapchat Pixel Helper
- Extension: Snap Pixel Helper
- Features: Event validation, test events, deduplication monitoring
- Testing: Real-time Snapchat event monitoring
- What to Check: Event mapping, deduplication IDs, user matching
- Recommendation: ⭐⭐⭐⭐ Important for Snapchat attribution
Pinterest Tag Helper
- Extension: Pinterest Tag Helper
- Features: Tag verification, event tracking, enhanced match validation
- Testing: Monitors Pinterest events and data quality
- What to Check: Event firing, enhanced match data, conversion tracking
- Recommendation: ⭐⭐⭐ Useful for Pinterest campaigns
Google Tag Assistant
- Extension: Google Tag Assistant
- Features: Google Analytics, GTM, Google Ads tracking validation
- Testing: Comprehensive Google ecosystem debugging
- What to Check: Enhanced ecommerce, goal tracking, conversion data
- Recommendation: ⭐⭐⭐⭐⭐ Essential for Google properties
Generic Analytics Debuggers
- Extension: Analytics Debugger
- Features: Multi-platform analytics debugging
- Testing: Supports multiple analytics platforms simultaneously
- What to Check: Cross-platform event consistency
- Recommendation: ⭐⭐⭐ Good for cross-platform testing
🛠️ Advanced Configuration
Server-Side Events
Currently supported platforms for server-side events:
- Facebook: ✅ Full server events support with Conversions API
- TikTok: ✅ Full server events support with Events API
- Snapchat: ✅ Full server events support with Conversions API
- Pinterest: ✅ Server events through the Pinterest API for conversions
- Google: ✅ Enhanced conversions and server-side tracking
- AppLovin: ❌ Browser-only (no server events available)
To enable: fill in the platform's token in Project settings → Analytics — Facebook Access Token, TikTok Access Token, Snapchat Access Token, or, for Pinterest, Pinterest Ad Account ID plus Pinterest Conversion Token — then list the events you want on the server side in Events to send via Conversion API. There is no separate switch that turns server events on: the credentials plus the event list are the whole configuration, and an event that is not in that list stays browser-only.
"Use [Platform] for server events only" does something different: it stops the browser pixel or tag from loading, so the platform receives server events only. It is available for Meta, TikTok, and Pinterest (Use Pinterest Tag for server events only). Leave it off if you want browser and server events together — that combination is what the ad networks deduplicate and optimize best on.
Click ID Parameters
The platform automatically tracks and forwards click IDs:
| Platform | Click ID Parameter | Cookie Created | Purpose |
|---|---|---|---|
fbclid | _fbc | Attribution tracking | |
| TikTok | ttclid | _ttp | Campaign attribution |
| Snapchat | sccid, ScCid | None | Click tracking |
pinclid | Platform-managed | Attribution | |
gclid, gbraid | Platform-managed | Ads attribution |
Enhanced Matching Configuration
Platforms that support enhanced matching automatically use:
- Email addresses (hashed when required)
- User IDs as external identifiers
- Phone numbers (when available)
- First-party data for better attribution
Event filter function (per system)
You can define an optional JavaScript filter function for each analytics system. This function allows you to:
- Skip events by returning
false - Override event name by returning
{ event_name: "NewEventName" } - Override event properties by returning
{ event_properties: {...} } - Override both by returning
{ event_name: "...", event_properties: {...} }
How to configure
In the admin UI (Project → Analytics tab), each supported system includes a field named "Event filter function (JS)". Paste a function into that field. The function receives two parameters:
event_name- The name of the event being sentevent_properties- An object containing all event properties
Example Use Cases
1. Filtering Events by Name
Skip all events that start with "Step ":
function(event_name, event_properties) {
if (event_name.indexOf('Step ') === 0) {
return false; // Skip this event
}
}Skip events containing specific keywords:
function(event_name, event_properties) {
if (event_name.indexOf('Step') > -1 || event_name.indexOf('Scroll') > -1) {
return false;
}
}2. Modifying Event Properties
Multiply value by 3 for Meta/TikTok:
function(event_name, event_properties) {
if (event_properties.value) {
event_properties.value = event_properties.value * 3;
}
return { event_properties: event_properties };
}Adjust value based on price_id_internal:
function(event_name, event_properties) {
// Apply different multipliers based on internal price ID
if (event_properties.price_id_internal === 'premium') {
event_properties.value = event_properties.value * 1.5;
} else if (event_properties.price_id_internal === 'basic') {
event_properties.value = event_properties.value * 0.8;
}
return { event_properties: event_properties };
}3. Conditional Event Filtering
Skip events for specific user segments:
function(event_name, event_properties) {
// Skip events for users in test group
if (event_properties.user_segment === 'test' || event_properties.user_segment === 'beta') {
return false;
}
}Only send purchase events above a certain value:
function(event_name, event_properties) {
if (event_name === 'Purchase' || event_name === 'Subscribe') {
if (!event_properties.value || event_properties.value < 10) {
return false; // Skip low-value purchases
}
}
}4. Renaming Events
Rename events for better tracking:
function(event_name, event_properties) {
if (event_name === 'Paywall click price') {
return { event_name: 'ProductView' };
}
if (event_name === 'Paywall Prices visible') {
return { event_name: 'CatalogView' };
}
// otherwise
return true;
}5. Adding Custom Properties
Add custom properties to all events:
function(event_name, event_properties) {
// Add custom tracking properties
event_properties.custom_source = 'web2wave';
event_properties.timestamp = new Date().toISOString();
event_properties.platform_version = '2.0';
return { event_properties: event_properties };
}6. Currency Conversion
Convert values to a specific currency:
function(event_name, event_properties) {
const exchangeRates = {
'EUR': 0.85,
'GBP': 0.73,
'JPY': 110
};
if (event_properties.value && event_properties.currency === 'USD') {
const targetCurrency = 'EUR'; // Target currency
const rate = exchangeRates[targetCurrency];
if (rate) {
event_properties.value = event_properties.value * rate;
event_properties.currency = targetCurrency;
}
}
return { event_properties: event_properties };
}7. Complex Conditional Logic
Different rules for different event types:
function(event_name, event_properties) {
// For purchase events, ensure minimum value
if (event_name === 'Purchase' || event_name === 'Subscribe') {
if (event_properties.value < 5) {
return false; // Skip low-value conversions
}
// Add conversion source
event_properties.conversion_source = 'web';
}
// For page views, add viewport info
if (event_name === 'PageView') {
event_properties.viewport_width = window.innerWidth;
event_properties.viewport_height = window.innerHeight;
}
// Skip test events
if (event_properties.is_test === true) {
return false;
}
return { event_properties: event_properties };
}8. Filtering by Subscription Status
Only send events for active subscribers:
function(event_name, event_properties) {
// Skip events if user doesn't have active subscription
if (event_properties.subscription_status !== 'active' &&
event_properties.subscription_status !== 'trialing') {
return false;
}
}Important Notes
- Return
falseto skip sending the event to that specific system - Return an object with
event_nameand/orevent_propertiesto override values - Return nothing or
trueto send the event as-is - The function is executed per system - each analytics platform can have its own filter
- If the function throws an error, the event will be sent (errors are caught to prevent data loss)
- Keep logic simple and fast - the function runs for every event
- Don't modify the original
event_propertiesobject directly - create a copy or return a new object