Skip to content

Enhanced conversions in the SDK

Four ways to attach customer data to conversions with enhance(), trackConversion userData, the trackEnhanced methods and setEnhancedUserData().

article |6 min |Updated Sep 2026
On this page · 10 sections

Enhanced conversions send SHA-256 hashed customer data with conversion events so ad platforms can match conversions to clicks the click ID alone cannot. Google Ads enhanced conversions are live, and OpenAI Ads receives the same hashed identifiers. Meta and Microsoft Ads will use the same data when their conversion forwarding launches, which is coming soon.

How it works

  1. You pass customer data (email, phone, name, address) to the SDK.
  2. The SDK normalizes each field (lowercase, trimmed, phone digits) and sends it to Convultra with the conversion.
  3. Convultra hashes each field with SHA-256 before anything is sent to an ad platform.
  4. The platform matches the hashes against its own users to attribute the conversion.

The browser SDK does not hash; Convultra does, before forwarding. No ad platform ever receives plaintext customer data from Convultra. You are responsible for having consent to process the data; when a visitor has declined tracking, the script does not run and nothing is collected.

User data fields

FieldTypeDescription
emailstringCustomer email (required if phone is absent)
phonestringPhone number with country code (required if email is absent)
firstNamestringFirst name
lastNamestringLast name
address.streetstringStreet address
address.citystringCity
address.statestringState, province or region
address.postalCodestringPostal or ZIP code
address.countrystringISO 3166-1 alpha-2 code (US, GB, DE and so on)

Provide at least email or phone. Each extra field improves match accuracy. For best results send email, phone, first name and last name.

Approach 1: enhance the last conversion

Track first, then call enhance() to attach user data.

// Step 1: Track the conversion
Convultra.trackPurchase({
  orderId: 'order_8842',
  value: 149.99,
  currency: 'USD'
})

// Step 2: Enhance it with customer data
Convultra.enhance({
  email: 'sarah@example.com',
  phone: '+14155551234',
  firstName: 'Sarah',
  lastName: 'Chen'
})

enhance() always applies to the most recently tracked conversion. Call it immediately after the track* call.

Approach 2: track and enhance in one call

trackConversion() takes user data as its third argument.

Convultra.trackConversion('purchase', {
  orderId: 'order_8842',
  value: 149.99,
  currency: 'USD'
}, {
  email: 'sarah@example.com',
  phone: '+14155551234',
  firstName: 'Sarah',
  lastName: 'Chen',
  address: {
    street: '123 Market St',
    city: 'San Francisco',
    state: 'CA',
    postalCode: '94105',
    country: 'US'
  }
})

Approach 3: the trackEnhanced methods

Convenience methods that track and enhance together.

trackEnhancedPurchase

Convultra.trackEnhancedPurchase(
  // Conversion data
  {
    orderId: 'order_8842',
    value: 149.99,
    currency: 'USD',
    items: [
      { id: 'prod_001', name: 'Running Shoes', price: 89.99, quantity: 1 },
      { id: 'prod_044', name: 'Sport Socks 3-Pack', price: 19.99, quantity: 3 }
    ]
  },
  // User data
  {
    email: 'sarah@example.com',
    phone: '+14155551234',
    firstName: 'Sarah',
    lastName: 'Chen'
  }
)

trackEnhancedLead

Convultra.trackEnhancedLead(
  {
    leadId: 'lead_2291',
    value: 50.00,
    source: 'pricing-page-form'
  },
  {
    email: 'david@company.com',
    firstName: 'David',
    lastName: 'Park',
    phone: '+442071234567'
  }
)

trackEnhancedSignup

Convultra.trackEnhancedSignup(
  {
    userId: 'usr_90112',
    plan: 'pro-monthly'
  },
  {
    email: 'alex@startup.io',
    firstName: 'Alex',
    lastName: 'Rivera'
  }
)

Approach 4: set user data for every subsequent conversion

If you know the customer early, for example because they are signed in, call setEnhancedUserData() once. Every later conversion in the session includes it.

// Set once: applies to all conversions in this session
Convultra.setEnhancedUserData({
  email: 'sarah@example.com',
  phone: '+14155551234',
  firstName: 'Sarah',
  lastName: 'Chen'
})

// These conversions automatically include the user data above
Convultra.trackAddToCart({ productId: 'prod_001', productName: 'Running Shoes', value: 89.99 })
Convultra.trackBeginCheckout({ value: 149.99, currency: 'USD' })
Convultra.trackPurchase({ orderId: 'order_8842', value: 149.99, currency: 'USD' })

setEnhancedUserData() lasts for the page session. After a full page load you need to call it again. In a single-page app it persists across route changes.

Full example: enhanced checkout

<script>
  Convultra.trackEnhancedPurchase(
    {
      orderId: 'order_8842',
      value: 149.99,
      currency: 'USD',
      items: [
        { id: 'prod_001', name: 'Running Shoes', price: 89.99, quantity: 1 },
        { id: 'prod_044', name: 'Sport Socks 3-Pack', price: 19.99, quantity: 3 }
      ]
    },
    {
      email: 'sarah@example.com',
      phone: '+14155551234',
      firstName: 'Sarah',
      lastName: 'Chen',
      address: {
        street: '123 Market St',
        city: 'San Francisco',
        state: 'CA',
        postalCode: '94105',
        country: 'US'
      }
    }
  )
</script>

Server-side

When you POST to the tracking endpoint from your backend, include the same fields in a user_data object and Convultra hashes them before forwarding. The WordPress plugin hashes in PHP on your server and does it automatically for WooCommerce orders.

Enabling per platform

User data is captured regardless, but it is only forwarded to a platform where the switch is on:

  1. Go to Integrations.
  2. Open the ad platform’s card. The setup wizard opens.
  3. On the Value and matching step, switch Enhanced conversions on. It saves as you change it.

If the switch is off for a platform, that platform does not receive the data. Confirm capture by opening a conversion in Conversions and checking Enhanced Eligible. For the marketer’s checklist, see Raising Google Ads match quality.

Privacy

  • All user data is hashed with SHA-256 by Convultra before it is sent to any ad platform.
  • Hashing is one-way; the original cannot be recovered.
  • Hashed identifiers are pseudonymized data under GDPR.
  • When a visitor has declined tracking, the script does not run, so nothing is collected or forwarded for them. See consent management platforms.
  • You are responsible for having consent to collect and process customer data.
Next in Developers API overview →