AppLovin (Axon) Conversion API
Datafly Signal delivers web conversion events to AppLovin server-to-server using the Axon Conversion API (CAPI). This complements the Axon Pixel with reliable server-side delivery that is not affected by ad blockers or browser tracking prevention, improving campaign optimisation and attribution.
Prerequisites
Before configuring AppLovin in Signal, you need an Axon Ads Manager account with an active pixel, plus two keys from the Axon dashboard.
Step 1: Access the Axon Ads Manager
- Sign in to the Axon Ads Manager dashboard.
- Make sure your web campaign and pixel are set up. AppLovin recommends running the Conversion API alongside the Axon Pixel for optimal performance.
Step 2: Get Your Keys
- In the Axon dashboard, open the Keys section.
- Copy your Event Key (the pixel identifier).
- Copy your Conversion API Key (the secret used to authenticate API requests).
Treat the Conversion API Key as a secret. Store it securely and never expose it client-side.
Configure in Signal
Configuration Fields
| Field | Required | Description |
|---|---|---|
event_key | Yes | Your Axon Event Key (pixel identifier). Sent as the pixel_id query parameter. |
conversion_api_key | Yes | Your Conversion API Key. Sent in the Authorization header. |
Management UI Setup
Add the integration
Go to Integrations > Add Integration > AppLovin.
Choose a variant
Select the Retail preset for the full e-commerce funnel (page views, product views, cart, checkout, search, leads, and purchases).
Enter your keys
Paste your event_key and conversion_api_key.
Select consent categories
Choose the consent categories that gate advertising (typically marketing or advertising).
Save
Click Save. Signal begins delivering events to the Axon Conversion API.
API Endpoint
POST https://b.applovin.com/v1/event?pixel_id={event_key}
Authorization: {conversion_api_key}
Content-Type: application/jsonEvents are sent as a JSON object with an events array (up to 100 events per request).
Identity Signals
AppLovin matches server events to users using several signals. The more you provide, the better the match rate. Signal requires at least one identity signal per event.
Automatic Signals
Sent automatically by Signal — no configuration needed:
| Signal | Field | Description |
|---|---|---|
axwrt | user_data.axwrt | The Axon Pixel first-party cookie value. Captured by Signal and forwarded for high-accuracy matching. |
aleid | user_data.aleid | The AppLovin click ID, extracted automatically from the aleid URL parameter. |
client_id | user_data.client_id | Set to the Datafly anonymous_id — a stable cross-session identifier. |
client_ip_address | user_data.client_ip_address | Visitor’s IP address, forwarded from the original request. |
client_user_agent | user_data.client_user_agent | Visitor’s User-Agent string, forwarded from the original request. |
User-Provided Signals (Hashed)
When a user is identified via datafly.identify(), these fields are SHA-256 hashed by Signal before delivery:
| Signal | Hashing | Description |
|---|---|---|
email | SHA-256, trimmed, lowercase | User’s email address |
phone | SHA-256, E.164 normalised | User’s phone number |
All PII hashing is performed server-side by Signal before the data leaves your infrastructure. Raw PII is never sent to AppLovin. AppLovin also accepts raw values and hashes them server-side, but Signal hashes first so you keep raw data inside your own systems.
How to Send User Data
Call datafly.identify() when a user logs in, registers, or submits a form:
datafly.identify("user-123", {
email: "jane.doe@example.com",
phone: "+44 7700 900123"
});Event Mapping
Retail preset
| Signal event | AppLovin event |
|---|---|
page | page_view |
Products Searched | search |
Product Viewed | view_item |
Product Added | add_to_cart |
Product Removed | remove_from_cart |
Cart Viewed | view_cart |
Checkout Started | begin_checkout |
Payment Info Entered | add_payment_info |
Order Completed | purchase |
Signed Up | sign_up |
Logged In | login |
Lead Generated | generate_lead |
To customise, edit the integration’s Field Mappings in the Management UI.
Example: Purchase Event
Datafly.js call:
datafly.track("Order Completed", {
order_id: "ORD-001",
revenue: 129.99,
currency: "USD",
tax: 8.00,
shipping: 5.00,
products: [
{ product_id: "SKU-A", price: 49.99, quantity: 2 },
{ product_id: "SKU-B", price: 30.01, quantity: 1 }
]
});AppLovin CAPI payload sent by Signal:
{
"events": [
{
"name": "purchase",
"event_time": 1717660800000,
"event_source_url": "https://example.com/checkout/confirmation",
"dedupe_id": "evt_abc123def456",
"user_data": {
"axwrt": "axwrt-cookie-value",
"aleid": "click-id-from-url",
"client_id": "a1b2c3d4-anon-id",
"client_ip_address": "203.0.113.50",
"client_user_agent": "Mozilla/5.0 ...",
"email": "5e8...hashed",
"phone": "9f2...hashed",
"esi": "web"
},
"data": {
"transaction_id": "ORD-001",
"value": 129.99,
"currency": "USD",
"tax": 8.00,
"shipping": 5.00,
"items": [
{ "item_id": "SKU-A", "price": 49.99, "quantity": 2 },
{ "item_id": "SKU-B", "price": 30.01, "quantity": 1 }
]
}
}
]
}event_time is the Unix epoch in milliseconds for the Axon Conversion API.
Testing Your Integration
Trigger a test event
Browse your site with the integration live (e.g. view a product, add to cart, complete a test purchase).
Check the Axon dashboard
In the Axon Ads Manager, open the event activity / diagnostics view for your pixel. Server-side events should appear within a short delay.
Verify the response
A 200 response means all events in the batch were accepted. Use Signal’s event debugger to inspect the exact payload sent.
Deduplication
If you run both the Axon Pixel client-side and Signal server-side during a migration, deduplicate to avoid double-counting. Signal sends a unique dedupe_id with every event; pass the same value to the Axon Pixel so AppLovin can match and dedupe the pair.
Once server-side events are arriving correctly, you can remove the client-side Axon Pixel entirely. This eliminates a client-side tag, improves page performance, and removes the deduplication requirement.
Troubleshooting
| Problem | Solution |
|---|---|
401 authentication failed | Check the Conversion API Key in the Authorization header and the Event Key in the pixel_id query parameter. Regenerate keys in the Axon dashboard if needed. |
400 request error (batch dropped) | A required field is missing or malformed. Ensure each event has name, event_time, and event_source_url, and that purchase events include currency and value. Review the payload in Signal’s event debugger. |
| Events not appearing | Confirm at least one identity signal is present (axwrt, aleid, email, phone, or client_id). Events with no identity cannot be matched. |
| Low match rate | Capture the Axon Pixel cookie (axwrt) and the aleid click ID, and pass email/phone via datafly.identify(). |
Rate Limits
The Axon Conversion API accepts up to 100 events per request. Signal batches events automatically when batching is enabled for the integration.