Leanplum
Leanplum (a CleverTap company) is a customer engagement platform for mobile and web. Datafly Signal sends your events to the Leanplum track API (POST /api?action=track) for campaigns and analytics, without the client SDK.
Why route Leanplum through Datafly Signal
- Events come from your server, not the browser. They reach Leanplum even when a tracker blocker or a failed page unload would have dropped a client-side call.
- Delivery is queued and retried. Signal buffers to Kafka and retries on 429 or a transient failure rather than dropping the event; a permanent rejection goes to the dead-letter queue with the vendor’s reason.
- One consent decision governs every destination. Leanplum is gated by the same consent state as the rest of your stack, so a withdrawal applies everywhere at once.
Get your Leanplum credentials
Copy your app keys
In Leanplum open App Settings > Keys & Settings and copy the App ID and the Production client key.
Configuration
| Field | Required | Description |
|---|---|---|
app_id | Yes | Your Leanplum Application ID. Find it under your app in the Leanplum dashboard navigation, or in App Settings > Keys & Settings. |
client_key | Yes | Your Leanplum Production API client key (App Settings > Keys & Settings). Use the Production key, not the Development key, so events land in your live environment. |
Management UI setup
- Go to Integrations in the sidebar and open the Integration Library tab.
- Find Leanplum under Marketing Automation and click Install.
- Choose a preset, enter the fields above and click Install Integration.
Management API setup
curl -X POST http://localhost:8084/v1/admin/integration-catalog/leanplum/install \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Leanplum",
"variant": "default",
"config": {
"app_id": "your_app_id",
"client_key": "your_client_key"
},
"delivery_mode": "server_side"
}'What Signal sends
An example request, rendered from the ecommerce preset for purchase:
POST https://api.leanplum.com/api?action=track
{
"apiVersion": "1.0.6",
"appId": "app_x",
"clientKey": "prod_x",
"currencyCode": "GBP",
"deviceId": "df_anon_m2_0001",
"event": "Purchase",
"params": {
"coupon": "AUTUMN10",
"item_brand": "NorthEdge",
"item_category": "Jackets",
"item_count": 2,
"item_id": "SKU-1",
"item_name": "Parka Jacket",
"price": 129.99,
"quantity": 2,
"shipping": 4.99,
"tax": 46.66,
"transaction_id": "ORD-1001"
},
"time": 1758500000,
"userId": "crm-user-7",
"value": 279.98
}| Field | Source |
|---|---|
appId, clientKey, apiVersion | Your keys and API version 1.0.6, in the JSON body (not the URL). |
userId, deviceId | The signed-in user ID, and the Signal anonymous ID as the device ID. Leanplum creates the user if new. |
event | The event name shown under Presets. Purchase is Leanplum’s monetization event. |
value, currencyCode | The amount and its ISO 4217 code (upper-cased); Leanplum converts to your reporting currency. |
time | Event time, Unix seconds. |
params | A flat object of the event’s properties (up to 50): product fields from the first items[] element and item_count. |
No email, phone or name is sent.
Presets
| Preset | Signal event → vendor event |
|---|---|
| Retail | search → Search, view_item → View Item, add_to_cart → Add to Cart, remove_from_cart → Remove from Cart, add_to_wishlist → Add to Wishlist, begin_checkout → Checkout Started, purchase → Purchase, refund → Refund, sign_up → Sign Up, login → Login |
| Default | sign_up → Sign Up, login → Login, search → Search, view_item → View Item, add_to_cart → Add to Cart, begin_checkout → Checkout Started, purchase → Purchase |
| Gaming | sign_up → Sign Up, login → Login, tutorial_completed → Tutorial Completed, level_started → Level Started, level_completed → Level Completed, level_failed → Level Failed, achievement_unlocked → Achievement Unlocked, item_purchased → Purchase, currency_earned → Currency Earned, currency_spent → Currency Spent |
| Media & Streaming | sign_up → Sign Up, login → Login, content_viewed → Content Viewed, content_completed → Content Completed, content_shared → Content Shared, video_played → Video Played, purchase → Purchase, subscription_renewed → Subscription Renewed, subscription_cancelled → Subscription Cancelled |
Events not listed are not sent. Each preset is a starting point: add, rename or remove mappings on the installed integration.
Notes and limits
- Leanplum accepts only JSON or multipart request bodies; Signal sends JSON.
Consent
Marketing-automation integrations have no consent category by default. Assign the analytics category when you install Leanplum, so an event is delivered only when the visitor has granted it. Cookie-banner consent is not email or SMS opt-in: keep messaging opt-in in Leanplum.
Verify it’s working
- Open the integration in the Signal Management UI and watch Live Events while you trigger a mapped event.
- Confirm a 2xx response from Leanplum.
- Find the contact in Leanplum and check the event or record arrived.
Troubleshooting
| Symptom | Resolution |
|---|---|
success: false in the response | Signal reports the error Leanplum returns (for example a wrong client key) as a permanent failure. |
| Events in the wrong environment | Use the Production key, not the Development key. |