# Checkout Champ

> Learn how to integrate Checkout Champ with AnyTrack using Postback Export Profiles and Tracking Tags. Capture UTMs, click IDs, and send conversion events automatically.

## Overview

Checkout Champ conversions happen server-side, where browser Tracking Tags can't see them. When customers complete purchases, Facebook receives zero conversion signals—your ads look like they're failing when they're actually driving sales, so the algorithm stops optimizing and your cost per acquisition climbs.

This guide connects Checkout Champ conversions to AnyTrack using **server-side postbacks** and **client-side Tracking Tags** together. Postbacks send purchase data from Checkout Champ's backend (bypassing ad blockers), while Tracking Tags track the landing page visit (capturing UTM parameters and Click IDs that connect sales back to specific ads). Combined tracking delivers complete attribution and higher Event Match Quality.

***

## Why Use Both Tracking Methods?

Combining postback and Tracking Tag gives you the best of both worlds:

* **Higher Match Rates**: Server-to-server postbacks don't rely on browser loading, ensuring more conversions reach your ad platforms
* **Real-Time Data**: Postbacks send conversion data instantly without waiting for customer actions
* **Deduplication Support**: AnyTrack automatically prevents double-counting when both methods send the same conversion
* **Better ROAS**: More accurate data leads to better ad optimization and higher returns
* **Cross-Channel Attribution**: Track customers across different devices and sessions

***

<Prerequisites
  title="Before you begin"
  items={[
    { label: "You have an active Checkout Champ account with admin access", done: true },
    { label: "You have an AnyTrack property set up (e.g., mybrand.anytrack.io)", done: true },
    { label: "You can access ADMIN → EXPORTS in Checkout Champ", done: true },
    { label: "You have access to the landing page code to add the Tracking Tag", done: true }
  ]}
/>

***

## Step 1 – Pass Custom Parameters from URL

Checkout Champ lets you store **custom parameters** from the checkout URL directly onto an order. AnyTrack calls this "AutoTag" - it captures the AnyTrack Click ID and appends it to your checkout URL.

Add the Click ID parameter to your checkout URL like this:

```
https://checkout.yourwebsite.foo/checkout?cc_custom_click_id=--CLICK-ID--
```

**How it works:**

* `cc_custom_[name]` tells Checkout Champ to store the value in the order record
* `--CLICK-ID--` is a placeholder that AnyTrack's tracking tag replaces automatically
* The stored value `[cc_custom_click_id]` becomes available for postback exports

👉 Hover on this [checkout champ link](https://checkoutchamp.foo/checkout?cc_custom_click_id=--CLICK-ID--&utm_source=google&utm_campaign=brand) to see the click_id value generated by the AnyTrack tag.

### Update the checkout URL destination

1. Edit your landing page call-to-action URL that points to the Checkout Champ checkout page
2. Add `cc_custom_click_id=--CLICK-ID--` to the checkout URL

> 🚧 **Important**
>
> Depending on your checkout URL, add either `?` or `&` before the parameter.
> Example: `?cc_custom_click_id=--CLICK-ID--`

3. Save your page

> 📘 **Verify your setup**
>
> 1. Hover on the checkout URL to see that `--CLICK-ID--` is being updated
> 2. Click on the checkout URL to verify it works and AnyTrack passes the ID to the destination

***

## Step 2 – Create a Custom Conversion Source in AnyTrack

Create a **Custom Conversion Source** in AnyTrack to generate the postback URL template.

1. Go to **AnyTrack → Integrations → Custom Sources**
2. Click **➕ New Source** and name it `Checkout Champ`
3. Fill in the **Connection Settings** using Checkout Champ's parameters:

| AnyTrack Field                      | Checkout Champ Placeholder          | Description                                          |
| ----------------------------------- | ----------------------------------- | ---------------------------------------------------- |
| **Sub ID / Click ID Placeholder**   | `[cc_custom_click_id]`              | Captures the AnyTrack Click ID from the checkout URL |
| **Commission / Payout Placeholder** | `[orderAmount]`                     | Sends the order value or revenue amount              |
| **Transaction ID Placeholder**      | `[orderId]`                         | Unique order identifier                              |
| **Product / Brand Name**            | `[campaignName]` or `[productName]` | Optional: Funnel or product name                     |
| **Timestamp of Event**              | `[orderDateTimestamp]`              | Optional: Order creation timestamp                   |

After saving, AnyTrack generates a postback URL like this:

```
https://t1.anytrack.io/<ACCOUNT_ID>/collect/?click_id=[cc_custom_click_id]&value=[orderAmount]&transactionId=[orderId]&currency=[orderCurrency]&event_name=purchase
```

> 📘 **Good to know**
>
> When AnyTrack successfully receives and verifies a conversion, the integration status automatically changes to **Active**.

***

## Step 3 – Create a Postback Export Profile

1. In Checkout Champ, navigate to **ADMIN → EXPORTS**
2. Click the **green "+"** button to create a **New Export Profile**
3. Choose **Postback** as the export type
4. Set a profile name, e.g., `AnyTrack S2S`

**General Settings Example:**

| Field            | Value                                 |
| ---------------- | ------------------------------------- |
| **Profile Name** | AnyTrack Postback                     |
| **Export Type**  | Postback                              |
| **Postback URL** | Paste the URL generated from AnyTrack |
| **Export Delay** | 0–15 min (recommended)                |

> ❗ **Important**
>
> Test card orders will not export through the webhook system.

***

## Step 4 – Map Standard Fields to AnyTrack Parameters

In the **Field Mappings** section, click **"+"** to add new fields.

> 📘 **Note**
>
> Create a postback in Checkout Champ for each conversion type you want to track in AnyTrack and send to your ad platform. Update the Event Name static value according to the conversion event you want to track.

Use the following mapping table:

| AnyTrack Parameter | Checkout Champ Field   | Type       | Example Value      |
| ------------------ | ---------------------- | ---------- | ------------------ |
| `event_name`       | Static                 | `Purchase` |                    |
| `click_id`         | `[cc_custom_click_id]` | Dynamic    | `a8f9b3c0d2...`    |
| `value`            | `[orderAmount]`        | Dynamic    | `79.00`            |
| `currency`         | `[orderCurrency]`      | Dynamic    | `USD`              |
| `transactionId`    | `[orderId]`            | Dynamic    | `ORD-58322`        |
| `email`            | `[emailAddress]`       | Dynamic    | `john@example.com` |
| `firstName`        | `[firstName]`          | Dynamic    | `John`             |
| `lastName`         | `[lastName]`           | Dynamic    | `Smith`            |
| `country`          | `[country]`            | Dynamic    | `US`               |
| `state`            | `[state]`              | Dynamic    | `CA`               |
| `city`             | `[city]`               | Dynamic    | `Los Angeles`      |
| `zipcode`          | `[zip]`                | Dynamic    | `90045`            |
| `shippingPrice`    | `[shippingAmount]`     | Dynamic    | `9.95`             |
| `taxPrice`         | `[taxAmount]`          | Dynamic    | `2.75`             |

> ⚠ **Warning**
>
> Use lowerCamelCase exactly as shown above.

***

## Step 5 – Configure POST and JSON Format

By default, webhooks are sent as GET requests. To send as POST (recommended):

1. Add static headers as additional fields:
   ```
   header:Content-Type = application/json  
   header:httpMethod = POST
   ```

<Image align="center" border={true} src={readmeAsset1} className="border" />

2. Checkout Champ will automatically send the mapped fields as a JSON payload

**Example JSON Payload Sent to AnyTrack:**

```json
{
  "event_name": "Purchase",
  "click_id": "f8e3bf8dfba8b51ce3340",
  "email": "john@example.com",
  "firstName": "John",
  "lastName": "Smith",
  "value": 79.00,
  "currency": "USD",
  "transactionId": "ORD-58322",
  "country": "US"
}
```

***

## Step 6 – Setup Profile Routing

Profile routing defines which conversion types will fire the postback.

> 📘 **Note**
>
> Fire the main conversion events that can be mapped to standard ad platform events.

1. Return to the **Export Profiles** list
2. Under **Profile Routing**, click **"+"**
3. Select which **event types** trigger exports:

| Checkout Champ Event     | Mapped AnyTrack Event | Details                                                                  |
| ------------------------ | --------------------- | :----------------------------------------------------------------------- |
| **New Sale**             | `Purchase`            | A purchase event                                                         |
| **Upsell**               | `Upsell`              | An upsell                                                                |
| **Subscription Started** | `subscription_start`  |                                                                          |
| **Partial**              | `Lead`                | Leads that started checkout but didn't complete it                       |
| **Lead**                 | `Lead`                | Leads that haven't started checkout (didn't add a product to their cart) |

> 📘 **Note**
>
> Add one route per Conversion Type. Since Checkout Champ does not pass an event name parameter to the postback URL, configure a route for each conversion type and add the conversion name to the URL.

***

## Step 7 – Verify Tracking

1. Go to **AnyTrack → Event Debugger**
2. Complete a live (non-test card) checkout
3. Verify that both:
   * The **Tracking Tag event** fires on-page (client-side)
   * The **postback event** appears in your AnyTrack logs (server-side)

> 📘 **Note**
>
> Checkout Champ logs each webhook in the Customer History section with a link showing the payload sent.

***

## Standard Parameters & Event Attributes Reference

| AnyTrack Parameter                    | Type   | Description                                                        |
| ------------------------------------- | ------ | ------------------------------------------------------------------ |
| `event_name`                          | string | Event type (`purchase`, `upsell`, etc.)                            |
| `click_id`                            | string | AnyTrack Click ID                                                  |
| `value`                               | number | Revenue amount                                                     |
| `currency`                            | string | ISO currency code (e.g., USD, EUR)                                 |
| `transactionId`                       | string | Unique order ID                                                    |
| `email`, `firstName`, `lastName`      | string | Customer PII (Personal Identifiable Information) for match quality |
| `country`, `city`, `state`, `zipcode` | string | Customer location data                                             |
| `items`                               | array  | Product details                                                    |
| `shippingPrice`, `taxPrice`           | number | Optional checkout costs                                            |

> 📘 **Note**
>
> AnyTrack automatically hashes PII (email, phone, etc.) according to each ad platform's requirements before sending to ad platforms.

***

## Troubleshooting Tips

| Issue                 | Possible Cause                          | Fix                                                                         |
| --------------------- | --------------------------------------- | --------------------------------------------------------------------------- |
| Postback not firing   | No routing configured                   | Check **Profile Routing**                                                   |
| No event in AnyTrack  | Missing `click_id`                      | Ensure `cc_custom_click_id` is passed in URL                                |
| Event mismatch        | Wrong case or spelling in parameters    | Use exact AnyTrack parameter names                                          |
| Event Logs show error | No matching clickid or refid parameters | The AnyTrack tag is not set in the head section of each page of your funnel |
| Test orders missing   | Checkout Champ test cards are excluded  | Use live payment for testing                                                |

***

## Summary

You've successfully connected Checkout Champ with AnyTrack using a **hybrid tracking model**:

* **Client-Side (Tracking Tag)**: For pageview and AutoTag tracking parameters
* **Server-Side (Postback)**: For real-time and rich conversion data from Checkout Champ backend

This setup ensures accurate match rates, better ROAS, and cross-channel attribution.

## Related Resources

- [Install AnyTrack Tag](/docs/install-anytrack-tag)
- [Facebook Ads](/docs/facebook-ads)
- [Event Mapping](/docs/event-mapping)

<FaqAccordion
  title="Frequently Asked Questions"
  icon="fa-duotone fa-circle-question"
  items={[
    {
      question: "Why do I need both postback and Tracking Tag?",
      answer: "Postbacks are server-to-server conversions that bypass ad blockers and capture all orders. The Tracking Tag captures UTM parameters and Click IDs on the landing page. Together, they ensure complete attribution and higher Event Match Quality for your ad platform."
    },
    {
      question: "What happens if I only use Checkout Champ postbacks?",
      answer: "You lose click attribution because the postback does not capture UTM parameters or Click IDs. Your ads appear ineffective even though they drive sales. Always pair postbacks with the Tracking Tag on your landing page."
    },
    {
      question: "How do I know if my conversions are being tracked?",
      answer: "Go to AnyTrack Event Debugger after a real purchase. You should see both a Tracking Tag event (client-side) and a postback event (server-side) from Checkout Champ. If you only see one, check your postback URL and Profile Routing settings."
    },
    {
      question: "Can I test tracking with Checkout Champ test card orders?",
      answer: "No. Checkout Champ excludes test card orders from postback exports. You must use a live payment method to test. Always verify with a real transaction before going live."
    },
    {
      question: "What if my postback is not firing?",
      answer: "Check three things: (1) Profile Routing is configured for your event type, (2) the postback URL contains all required placeholders like [cc_custom_click_id], and (3) the landing page has the Tracking Tag in the head section with the --CLICK-ID-- parameter in your checkout URL."
    }
  ]}
/>
