Magellan AI
Datafly Signal delivers conversion events to Magellan AI server-to-server, allowing Magellan to credit conversions back to the podcast ad that drove them. Server delivery gives you reliable attribution coverage that does not depend on third-party cookies or client-side pixels.
Why route Magellan AI through Datafly Signal
- Conversions survive ad blockers and tracking prevention. A browser tag served from an advertising domain is blocked outright for part of your traffic, and Safari’s ITP shortens the cookies it can set. Signal sends the event from your own server, so the conversions Magellan AI optimises against are not filtered by the browser.
- Client IP and user agent are preserved. Server-to-server delivery normally loses both, which weakens matching. Signal forwards the genuine visitor values as request headers so Magellan AI attributes the event to the right session.
- One consent decision governs every destination. Magellan AI is gated by the same consent state as the rest of your stack, so a withdrawal applies everywhere at once.
- No vendor tag on the page. Removing it removes its page weight and its independent access to your visitors.
Prerequisites
Before configuring Magellan AI in Signal, you need a Magellan advertiser account and an API key.
Step 1: Identify your advertiser ID
Log in to the Magellan AI dashboard and open Settings > Advertiser. Your numeric Advertiser ID is shown at the top of the page — this is what Signal sends with every conversion event.
Step 2: Generate an API key
- In the Magellan dashboard, go to Settings > API.
- Click Generate API Key.
- Name the key (e.g.
Datafly Signal) and copy the value immediately — Magellan only shows it once.
Treat the API key as a secret. Store it in your secrets manager and rotate it if you suspect it has leaked. Magellan API keys do not expire automatically.
Configure in Signal
Configuration fields
| Field | Required | Description |
|---|---|---|
api_key | Yes | Bearer token used to authenticate every request. |
advertiser_id | Yes | Numeric Magellan advertiser ID from the Magellan dashboard. |
Management UI setup
- Go to Integrations > Add Integration > Magellan AI.
- Select the Retail preset.
- Enter your
api_keyandadvertiser_id. - Set consent categories — defaults to
marketing. - Click Save.
Management API setup
curl -X POST http://localhost:8084/v1/admin/integrations \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"source_id": "src_abc123",
"vendor": "magellan_ai",
"name": "Magellan AI — Podcast Attribution",
"enabled": true,
"config": {
"api_key": "ak_magellan_abc123...",
"advertiser_id": "12345"
},
"consent_categories": ["marketing"]
}'API endpoint
POST https://api.magellan.ai/v2/integrations/conversions
Authorization: Bearer {api_key}
Content-Type: application/jsonEach conversion is delivered as a single JSON object.
Identity signals
Magellan matches conversions to podcast impressions using a combination of identifiers. The more identifiers you provide, the higher the match rate.
| Signal | Field | Notes |
|---|---|---|
external_id | Datafly anonymous_id | Stable cross-session identifier set by Signal as a first-party value. The strongest match key. |
ip | Visitor IP address | Forwarded from the original browser request. Used as a fallback match key. |
user_agent | Visitor User-Agent | Forwarded from the original browser request. Used alongside IP for probabilistic matching when no external_id is present. |
url | Page URL at conversion | Optional context. |
referrer | Referring URL | Optional context. |
utm_source / utm_medium / utm_campaign | UTM parameters | Optional. Useful when conversions also need to be attributed inside Magellan’s UTM-based reports. |
Magellan’s primary attribution path is the external_id (Datafly’s anonymous_id). For deterministic credit, ensure Signal’s first-party identification is enabled on every page that participates in the funnel.
Event mapping
Retail preset
| Signal event | Magellan event |
|---|---|
Order Completed | conversion |
Magellan’s API is conversion-only — page views and intermediate funnel events are not ingested. If you want to send other conversion types (sign-ups, leads, app installs) to Magellan, duplicate the integration and remap the source event to Order Completed’s slot, or add additional events to the blueprint’s event map.
Example: Order Completed
Datafly.js call:
datafly.track("Order Completed", {
order_id: "ORD-001",
revenue: 129.99,
currency: "GBP",
coupon: "PODCAST10"
});Magellan payload sent by Signal:
{
"advertiser_id": "12345",
"transaction_id": "ORD-001",
"value": 129.99,
"currency": "GBP",
"coupon": "PODCAST10",
"external_id": "anon_a1b2c3d4e5f6",
"ip": "203.0.113.50",
"user_agent": "Mozilla/5.0 ...",
"url": "https://example.com/checkout/confirmation",
"referrer": "https://example.com/cart",
"utm_source": "podcast",
"utm_medium": "audio",
"utm_campaign": "spring_2026"
}Testing
- In the Magellan dashboard, open Reports > Conversions and filter to the last 15 minutes.
- Trigger a test
Order Completedevent from your site or via the Management API preview tool. - The conversion should appear in the Magellan dashboard within a minute, with the
external_idand UTM fields populated. - To trace a specific event end-to-end, copy the
event_idfrom the Signal event log and search for the matchingtransaction_idin Magellan.
Troubleshooting
| Problem | Solution |
|---|---|
401 Unauthorized | API key is invalid or revoked. Generate a new key in Settings > API and update the integration config. |
403 Forbidden | The API key is valid but not authorised for the supplied advertiser_id. Confirm both belong to the same Magellan account. |
| Conversions arrive but are unattributed | The external_id is missing or doesn’t match any Magellan impression. Confirm Signal’s first-party identification is active on landing pages and that the listener clicked through a Magellan-tracked promo link. |
| Duplicate conversions | Ensure transaction_id is populated and unique per order. Magellan deduplicates on transaction_id within a 24-hour window. |
| Low match rate | Add user-level identifiers via datafly.identify() early in the funnel so the anonymous_id is bound to a known user before checkout. |