Skip to main content

Why the Converge Spec?

Most CDPs are not very strict about which events you track, where you track them (client or server) and with which properties. This usually leads to problems with destinations downstream as each destination does have very specific integration requirements to operate optimally.

Advantages of a strict spec

Converge, therefore, works with a strict Converge event spec. Because we have a semantic understanding of what you are tracking, we can:
  1. Automatically map your source events to destinations in an optimal way through our Destinations
  2. Surface your meaningful analytics through our Attribution
    product.
  3. Monitor and flag when you are wrongly tracking events or properties negatively affecting your destinations or analytics through Source Monitoring
    .
Of course, you can still extend the Converge Spec with your own events, properties, etc.

Auto-tracking

These events, event properties, profile properties and aliases will be auto-tracked by the Converge Pixel.

$page_load

When a user views a page.
This event should be tracked on the client.
cvg({ method: "track", eventName: "$page_load" });
You do not need to manually implement any of the below properties, they will be automatically tracked for all client-side events.
$ip
string
IP address of the user.
$url
string
URL of the pageview.
referrer
string
URL referrer of the pageview.
timezone
string
Browser timezone.
viewport
string
Viewport size of the pageview.
$sales_channel_type
string
The sales channel where the event occurred. For client-side events tracked through the Converge Pixel, this will always be “web” by default. More on supported sales channels can be found here.
$ip
string
IP address of the user.
Converge cookie ID.
$user_agent
string
User Agent of the last browser session of the user.
Alias based on the Converge cookie ID.

Ecommerce events

These events and properties should be passed for Ecommerce brands. All of these events will contain additional prepopulated properties through auto-tracking.

Viewed Product

When a user views a product detail page.
This event should be tracked on the client.
product_id
string
required
Product ID of the item that is being viewed.
variant_id
string
Variant ID of the product variant that is being viewed
sku
string
SKU of the product and variant that is being viewed
name
string
required
Product Name of the item that is being viewed
variant_name
string
Variant name of the product variant that is being viewed
price
float
required
Unit price of the item that is being viewed
currency
string
required
Currency of the product that is being viewed, as per ISO 4217
vendor
string
Name of the vendor of the product that is being viewed.
url
string
URL to the product page of the item that is being viewed.
image_url
string
URL of a product image of the item that is being viewed.
cvg({
  method: "track",
  eventName: "Viewed Product",
  properties: {
    product_id: "123456",
    variant_id: "78910", // if available
    sku: "MY_SKU",
    name: "My Product",
    variant_name: "Vanilla", // if available
    price: 42,
    currency: "USD",
    vendor: "My Store",
  },
});

Viewed Collection

When a user views a collection detail page that includes multiple products.
This event should be tracked on the client.
id
string
required
Collection ID of the collection that is being viewed.
name
string
required
Name of the collection that is being viewed.
description
string
Description of the collection that is being viewed.
items
list of Item
cvg({
  method: "track",
  eventName: "Viewed Collection",
  properties: {
    id: "123456", // Collection ID
    name: "My Collection Name",
    description: "My Collection Description",
    items: [
      {
        product_id: "123456",
        variant_id: "78910", // if available
        sku: "MY_SKU",
        name: "My Product",
        variant_name: "Vanilla", // if available
        price: 42,
        currency: "USD",
        vendor: "My Store",
      },
    ],
  },
});

Added To Cart

When a user adds a product to cart
This event should be tracked on the client.
product_id
string
required
Product ID of the item that is being added to cart.
variant_id
string
Variant ID of the product variant that is being added to cart.
sku
string
SKU of the product and variant that is being added to cart.
name
string
required
Product Name of the item that is being added to cart.
variant_name
string
Variant name of the product variant that is being added to cart.
price
float
required
Unit price of the item that is being added to cart.
currency
string
required
Currency of the product that is being viewed, as per ISO 4217
quantity
int
required
Amount of times the item is being added to cart.
vendor
string
Name of the vendor of the product that is being added to cart.
url
string
URL to the product page of the item that is being added to cart.
image_url
string
URL of a product image of the product that is being added to cart.
cvg({
  method: "track",
  eventName: "Added To Cart",
  properties: {
    product_id: "123456",
    variant_id: "78910",
    sku: "MY_SKU",
    name: "My Product",
    variant_name: "Vanilla",
    price: 42,
    currency: "USD",
    quantity: 1,
    vendor: "My Store",
  },
});

Removed From Cart

When a user removes a product from cart
This event should be tracked on the client.
product_id
string
required
Product ID of the item that is being removed from cart.
variant_id
string
Variant ID of the product variant that is being removed from cart.
sku
string
SKU of the product and variant that is being removed from cart.
name
string
required
Product Name of the item that is being removed from cart.
variant_name
string
Variant name of the product variant that is being removed from cart.
price
float
required
Unit price of the item that is being removed from cart.
currency
string
required
Currency of the product that is being viewed, as per ISO 4217
quantity
int
required
Amount of times the item is being removed from cart.
vendor
string
Name of the vendor of the product that is being removed from cart.
url
string
URL to the product page of the item that is being removed from cart.
image_url
string
URL of a product image of the product that is being removed from cart.
cvg({
  method: "track",
  eventName: "Removed From Cart",
  properties: {
    product_id: "123456",
    variant_id: "78910",
    sku: "MY_SKU",
    name: "My Product",
    variant_name: "Vanilla",
    price: 42,
    currency: "USD",
    quantity: 1,
    vendor: "My Store",
  },
});

Started Checkout

When a user starts the checkout process.
This event typically is used for stitching website sessions to server-side orders, make sure to add appropriate aliases
This event should be tracked on the client.
total_price
float
required
Total value of the cart at checkout with tax and shipping.
total_tax
float
required
Total tax of the cart at checkout.
total_shipping
float
required
Total shipping cost of the cart at checkout.
total_discount
float
Total discount of the cart at checkout.
coupon
string | list of string
The coupon or list of coupons used at checkout
currency
string
required
Currency of the cart that is being checked out, as per ISO 4217
items
list of CheckoutItem
cvg({
  method: "track",
  eventName: "Started Checkout",
  properties: {
    total_price: 42,
    total_tax: 3.5,
    total_shipping: 2.4,
    currency: "USD",
    coupon: 'COUPON123',
    items: [
      // Notice that this is a list of items
      {
        product_id: "123456",
        variant_id: "78910",
        sku: "MY_SKU",
        name: "My Product",
        variant_name: "Vanilla",
        price: 42,
        currency: "USD",
        quantity: 1,
        vendor: "My Store",
      },
    ],
  },
  aliases: ["urn:cart_token:xyz123"]
});

Added Payment Info

When a user adds their payment info.
This event typically is used for stitching website sessions to server-side orders, make sure to add appropriate aliases
This event should be tracked on the client.
total_price
float
required
Total value of the cart at checkout with tax and shipping.
total_tax
float
required
Total tax of the cart at checkout.
total_shipping
float
required
Total shipping cost of the cart at checkout.
total_discount
float
Total discount of the cart at checkout.
coupon
string | list of string
The coupon or list of coupons used at checkout
currency
string
required
Currency of the cart that is being checked out, as per ISO 4217
items
list of CheckoutItem
$email
string
required
Email Address of the user.
$phone_number
string
Phone Number of the user including the + sign and country code. For example: "+1 (917) 123-4567" or "+3295123456".
$city
string
City of the user’s address.
$country_code
string
Country code of the user’s address according to ISO 3166.
$state
string
State of the user’s address.
$zip_code
string
Zip code of the user’s address.
cvg({
  method: "track",
  eventName: "Added Payment Info",
  properties: {
    total_price: 42,
    total_tax: 3.5,
    total_shipping: 2.4,
    currency: "USD",
    coupon: 'COUPON123',
    items: [
      {
        product_id: "123456",
        variant_id: "78910",
        sku: "MY_SKU",
        name: "My Product",
        variant_name: "Vanilla",
        price: 42,
        currency: "USD",
        quantity: 1,
        vendor: "My Store",
      },
    ],
  },
  profileProperties: {
    // Pass if available
    $email: "john.smith@apple.com",
    $phone_number: "+199999999",
    $city: "San Francisco",
    $country_code: "US",
    $state: "California",
    $zip_code: "94103",
  },
  
  // important, this will be used for stitching backend orders to website sessions
  aliases: ["urn:email:john.smith@apple.com"],
});

Placed Order

When a user places an order.
Conversion event: you should adhere to the Where To Track, Deduplication and Session Stitching guidelines.
This event should be tracked on both the client and the server.
You should pass a unique eventID so client-side and server-side copies of the same order can be deduplicated.
You should make sure that the conversion can be stitched to the corresponding website session by including the right set of aliases on this event and corresponding web events.Common aliases are:
  • Email: urn:email:john.smith@apple.com
  • Checkout Token: urn:checkout_token:xyz_123
  • Customer ID: urn:customer_id:123456
Which alias you use depends on your exact setup and which identifiers are available both on the browser and the server in a user journey.Learn more about session stitching and aliases here.
id
string
required
Order ID.
total_price
float
required
Total value of the order with tax and shipping.
total_tax
float
required
Total tax of the order.
total_shipping
float
required
Total shipping cost of the order.
total_discount
float
Total discount on the order.
coupon
string | list of string
The coupon or list of coupons used in the order.
currency
string
required
Currency of the order, as per ISO 4217
items
list of CheckoutItem
$is_new_customer
boolean
required
Whether this is a new customer order.
$sales_channel_type
string
The sales channel of the event. If no sales channel type is provided then Converge fallback to “web”. More on supported sales channels values can be found here. The sales channel type provided entirely depends on the context of the event, integration, and where the event originates from. Client-side Placed Order events should always be “web”.
$url
string
The URL of the page where the event occurred. This will be automatically tracked for all client-side events.
Some fields are required for both the Event Properties and the Profile Properties. The reason is that Event Properties are static and Profile Properties are dynamic. A customer might move address between two orders for example.
$email
string
required
Email Address of the user.
$phone_number
string
Phone Number of the user including the + sign and country code. For example: "+1 (917) 123-4567" or "+3295123456".
$city
string
City of the user’s address.
$country_code
string
Country code of the user’s address according to ISO 3166.
$state
string
State of the user’s address.
$zip_code
string
Zip code of the user’s address.
If you track conversions both server-side and client-side, you should make sure you use the "forward" method for the client-side event. See the client-side code example.Make sure you include the same eventID on the client-side and server-side event.
Note that client-side calls use camelCase (e.g. eventName) and server-side calls use snake_case (e.g. event_name).
cvg({
  method: "forward", 
  eventName: "Placed Order",
  eventID: "order-1", // used for deduplicating, should be unique
  properties: {
    id: "order-1",
    total_price: 42,
    total_tax: 3.5,
    total_shipping: 2.4,
    currency: "USD",
    coupon: 'COUPON123',
    items: [
      {
        product_id: "123456",
        variant_id: "654321",
        sku: "MY_SKU",
        name: "My Product",
        variant_name: "Vanilla",
        price: 42,
        currency: "USD",
        quantity: 1,
        vendor: "My Store",
      },
    ],
  },
  profileProperties: {
    // Pass if available
    $email: "john.smith@apple.com",
    $phone_number: "+199999999",
    $city: "San Francisco",
    $country_code: "US",
    $state: "California",
    $zip_code: "94103",
},
  aliases: ["urn:email:john.smith@apple.com"],
});

Viewed Cart

When a user views their cart.
This is an optional event
This event should be tracked on the client.
total_price
float
required
Total value of the cart with tax and shipping.
total_tax
float
required
Total tax of the cart.
total_shipping
float
required
Total shipping cost of the cart.
total_discount
float
Total discount of the cart.
coupon
string | list of string
The coupon or list of coupons used in the cart.
currency
string
required
Currency of the cart that is being checked out, as per ISO 4217
items
list of CartItem
cvg({
  method: "track",
  eventName: "Viewed Cart",
  properties: {
    total_price: 42,
    total_tax: 3.5,
    total_shipping: 2.4,
    currency: "USD",
    coupon: 'COUPON123',
    items: [
      // Notice that this is a list of items
      {
        product_id: "123456",
        variant_id: "78910",
        sku: "MY_SKU",
        name: "My Product",
        variant_name: "Vanilla",
        price: 42,
        currency: "USD",
        quantity: 1,
        vendor: "My Store",
      },
    ],
  },
});

Subscription lifecycle events

These events and properties should be passed by companies who operate on subscriptions.

Started Subscription

When a user starts a subscription.
Conversion event: you should adhere to the Where To Track, Deduplication and Session Stitching guidelines.
This event should be tracked on both the client and the server.
You should pass a unique eventID so client-side and server-side copies of the same order can be deduplicated.
You should make sure that the conversion can be stitched to the corresponding website session by including the right set of aliases on this event and corresponding web events.Common aliases are:
  • Email: urn:email:john.smith@apple.com
  • Checkout Token: urn:checkout_token:xyz_123
  • Customer ID: urn:customer_id:123456
Which alias you use depends on your exact setup and which identifiers are available both on the browser and the server in a user journey.Learn more about session stitching and aliases here.
total_price
float
required
Total value of the subscription with tax and shipping.
total_tax
float
required
Total tax of the subscription.
total_shipping
float
Total shipping cost of the subscription.
total_discount
float
Total discount on the subscription.
coupon
string | list of string
The coupon or list of coupons used in the subscription.
currency
string
required
Currency of the subscription, as per ISO 4217
items
list of CheckoutItem
$sales_channel_type
string
The sales channel where the event occurred. For client-side events tracked through the Converge Pixel, this will always be “web” by default. More on supported sales channels can be found here.
Some fields are required for both the Event Properties and the Profile Properties. The reason is that Event Properties are static and Profile Properties are dynamic. A customer might move address between two orders for example.
$email
string
required
Email Address of the subscriber.
$phone_number
string
Phone Number of the subscriber including the + sign and country code. For example: "+1 (917) 123-4567" or "+3295123456".
$city
string
City of the subscriber’s address.
$country_code
string
Country code of the subscriber’s address according to ISO 3166.
$state
string
State of the subscriber’s address.
$zip_code
string
Zip code of the subscriber’s address.
If you track conversions both server-side and client-side, you should make sure you use the "forward" method for the client-side event. See the client-side code example.
cvg({
  method: "forward", 
  eventName: "Started Subscription",
  eventID: "order-1", // should be the subscription id or order id of the first purchase
  properties: {
    id: "order-1",
    total_price: 42,
    total_tax: 3.5,
    total_shipping: 2.4,
    currency: "USD",
    coupon: 'COUPON123',
    items: [
      {
        product_id: "123456",
        variant_id: "654321",
        sku: "MY_SKU",
        name: "My Product",
        variant_name: "Vanilla",
        price: 42,
        currency: "USD",
        quantity: 1,
        vendor: "My Store",
      },
    ],
  },
  profileProperties: {
    // Pass if available
    $email: "john.smith@apple.com",
    $phone_number: "+199999999",
    $city: "San Francisco",
    $country_code: "US",
    $state: "California",
    $zip_code: "94103",
  },
  // important, this will be used for stitching backend orders to website sessions
  aliases: ["urn:email:john.smith@apple.com"],
});

Cancelled Subscription

When a user cancels a subscription.
This event should be tracked on the server.
total_price
float
required
Total value of the subscription with tax and shipping.
total_tax
float
required
Total tax of the subscription.
total_shipping
float
Total shipping cost of the subscription.
total_discount
float
Total discount on the subscription.
coupon
string | list of string
The coupon or list of coupons used in the subscription.
currency
string
required
Currency of the subscription, as per ISO 4217
items
list of CheckoutItem
$sales_channel_type
string
The sales channel where the event occurred. Due to this event typically being server side, the sales channel type should be “offline”. More on supported sales channels can be found here.
Some fields are required for both the Event Properties and the Profile Properties. The reason is that Event Properties are static and Profile Properties are dynamic. A customer might move address between two orders for example.
$email
string
required
Email Address of the subscriber.
$phone_number
string
Phone Number of the subscriber including the + sign and country code. For example: "+1 (917) 123-4567" or "+3295123456".
$city
string
City of the subscriber’s address.
$country_code
string
Country code of the subscriber’s address according to ISO 3166.
$state
string
State of the subscriber’s address.
$zip_code
string
Zip code of the subscriber’s address.
resp = requests.post(
    "{YOUR_POSTBACK_ENDPOINT}",
    json=
        {
        "event_name": "Cancelled Subscription",
        "properties": {
            "id": "4001920", # the subscription id
            "total_price": 42,
            "total_tax": 3.5,
            "total_shipping": 2.4,
            "currency": "USD",
            "items": [
                {
                    "product_id": "123456",
                    "variant_id": "654321", # important for Shopify stores
                    "sku": "MY_SKU",
                    "name": "My Product",
                    "variant_name": "Vanilla",
                    "price": 42,
                    "currency": "USD",
                    "quantity": 1,
                    "vendor": "My Store",
                },
            ],
            "$sales_channel_type": "offline",
        },
        "profile_properties": {
            # Pass as many as possible
            "$first_name": "John",
            "$last_name": "Smith",
            "$email": "john.smith@apple.com",
            "$phone_number": "+199999999",
            "$city": "San Francisco",
            "$country_code": "US",
            "$state": "California",
            "$zip_code": "94103",
        },
        "aliases": ["urn:email:john.smith@apple.com"],
    }
)

Placed Recurring Subscription Order

When a user places a recurring subscription order.
This event should be tracked on the server.
total_price
float
required
Total value of the subscription with tax and shipping.
total_tax
float
required
Total tax of the subscription.
total_shipping
float
Total shipping cost of the subscription.
total_discount
float
Total discount on the subscription.
coupon
string | list of string
The coupon or list of coupons used in the subscription.
currency
string
required
Currency of the subscription, as per ISO 4217
items
list of CheckoutItem
$sales_channel_type
string
The sales channel where the event occurred. Due to this event typically being server side, the sales channel type should be “subscription_contract”. More on supported sales channels can be found here.
Some fields are required for both the Event Properties and the Profile Properties. The reason is that Event Properties are static and Profile Properties are dynamic. A customer might move address between two orders for example.
$email
string
required
Email Address of the subscriber.
$phone_number
string
Phone Number of the subscriber including the + sign and country code. For example: "+1 (917) 123-4567" or "+3295123456".
$city
string
City of the subscriber’s address.
$country_code
string
Country code of the subscriber’s address according to ISO 3166.
$state
string
State of the subscriber’s address.
$zip_code
string
Zip code of the subscriber’s address.
resp = requests.post(
    "{YOUR_POSTBACK_ENDPOINT}",
    json=
        {
        "event_name": "Placed Recurring Subscription Order",
        "properties": {
            "id": "4001920", # the subscription id
            "total_price": 42,
            "total_tax": 3.5,
            "total_shipping": 2.4,
            "currency": "USD",
            "items": [
                {
                    "product_id": "123456",
                    "variant_id": "654321", # important for Shopify stores
                    "sku": "MY_SKU",
                    "name": "My Product",
                    "variant_name": "Vanilla",
                    "price": 42,
                    "currency": "USD",
                    "quantity": 1,
                    "vendor": "My Store",
                },
            ],
            "$sales_channel_type": "subscription_contract",
        },
        "profile_properties": {
            # Pass as many as possible
            "$first_name": "John",
            "$last_name": "Smith",
            "$email": "john.smith@apple.com",
            "$phone_number": "+199999999",
            "$city": "San Francisco",
            "$country_code": "US",
            "$state": "California",
            "$zip_code": "94103",
        },
        "aliases": ["urn:email:john.smith@apple.com"],
    }
)

Useful additional events

Most ad platforms rely on the email parameter being available on customer events. For that reason, you will want to capture events that pick up this parameter.

Logged In

When a user logs in.
This event typically is used for stitching website sessions to server-side orders, make sure to add appropriate aliases
This event should be tracked on the client.
This event does not require any event properties.
$email
string
required
Email Address of the user.
$phone_number
string
Phone Number of the user including the + sign and country code. For example: "+1 (917) 123-4567" or "+3295123456".
$city
string
City of the user’s address.
$country_code
string
Country code of the user’s address according to ISO 3166.
$state
string
State of the user’s address.
$zip_code
string
Zip code of the user’s address.
cvg({
  method: "track",
  eventName: "Logged In",
  profileProperties: {
    $email: "john.smith@apple.com",
    $phone_number: "+199999999",
    $city: "San Francisco",
    $country_code: "US",
    $state: "California",
    $zip_code: "94103",
  },
  
  // important, this will be used for stitching backend orders to website sessions
  aliases: ["urn:email:john.smith@apple.com"],
});

Signed Up

When a user signs up.
This event typically is used for stitching website sessions to server-side orders, make sure to add appropriate aliases
This event should be tracked on the client.
This event does not require any event properties.
$email
string
required
Email Address of the user.
$phone_number
string
Phone Number of the user including the + sign and country code. For example: "+1 (917) 123-4567" or "+3295123456".
$city
string
City of the user’s address.
$country_code
string
Country code of the user’s address according to ISO 3166.
$state
string
State of the user’s address.
$zip_code
string
Zip code of the user’s address.
cvg({
  method: "track",
  eventName: "Signed Up",
  profileProperties: {
    $email: "john.smith@apple.com",
    $phone_number: "+199999999",
    $city: "San Francisco",
    $country_code: "US",
    $state: "California",
    $zip_code: "94103",
  },
  
  // important, this will be used for stitching backend orders to website sessions
  aliases: ["urn:email:john.smith@apple.com"],
});