Marin Software

Datafly Signal delivers conversions to Marin Software server-to-server using the Marin Tracker conversion endpoint (tracker.marinsm.com/tp). Marin uses these conversions to attribute revenue across your paid-search and social channels and to feed publisher optimisation. Because delivery happens from your server, conversions are not lost to ad blockers or browser tracking prevention.

Marin Tracker is a click-and-conversion system. The ad click (action type 1) is still captured first-party on your landing page by your existing Marin Tracker snippet. Signal sends only the conversion (action type 2) and forwards the Marin UUID so Marin can stitch the two together.

Prerequisites

Before configuring Marin in Signal you need:

  1. An active Marin Tracker deployment on your site (the click-capture snippet on your landing pages). This sets the first-party _msuuid cookie that links clicks to conversions.
  2. Your Client Tracking ID (cid) — the static alphanumeric value unique to your Marin account. It appears in your Marin Tracker snippet path (tracker.marinsm.com/tracker/async/<CLIENT-TRACKING-ID>.js). If you can’t find it, ask your Marin platform representative.
  3. The Conversion Type ID (convType) you want conversions recorded against. This is configured in Marin and is case-sensitive.

Step 1: Confirm the click snippet is live

Load a landing page and confirm in your browser’s developer tools that:

  • The Marin async tracker script loads from tracker.marinsm.com.
  • A first-party _msuuid cookie is set.
  • A request to tracker.marinsm.com/tp with act=1 fires (the click).

Step 2: Note your Client Tracking ID and Conversion Type ID

Record the cid value and the exact convType string. You will enter both in Signal.

Configure in Signal

Configuration Fields

FieldRequiredDescription
client_tracking_idYesYour Marin client tracking ID (cid). The static alphanumeric value unique to your Marin account.
conv_type_idYesThe Marin conversion type ID (convType) for your conversions. Case-sensitive; must match a conversion type configured in Marin.

Management UI Setup

Add the integration

Go to Integrations > Add Integration > Marin Software.

Choose the preset

Select the Default preset. It delivers Order Completed (and Lead Generated) as Marin conversions.

Enter your configuration

Enter your client_tracking_id and conv_type_id.

Select the consent categories that govern advertising/attribution (typically marketing or advertising). Conversions are only delivered when the visitor has granted the matching consent.

Save

Click Save.

API Endpoint

Signal delivers each conversion as a single HTTP GET to the Marin Tracker pixel:

GET https://tracker.marinsm.com/tp?act=2&cid={client_tracking_id}&currency={currency}&trans={trans}&mu={uuid}
ParameterDescription
actAction type. Always 2 for a conversion.
cidYour Marin client tracking ID.
currencyISO currency code of the conversion (e.g. GBP).
transPipe-delimited transaction string (see Event Mapping).
muThe Marin UUID (_msuuid) that stitches this conversion to the originating click.

The visitor’s IP address and User-Agent are forwarded as request headers (X-Forwarded-For, User-Agent) so Marin attributes the conversion to the real end user rather than to your server.

Identity Signals

Marin matches a conversion to its originating ad click using a single deterministic signal:

SignalSourceDescription
_msuuid (UUID)First-party cookieSet by the Marin click snippet on the landing page. Datafly.js reads it and Signal forwards it as the mu parameter. This is what links the conversion (action 2) to the click (action 1).
IP + User-AgentForwarded request headersHelp Marin attribute and de-duplicate the conversion.
⚠️

The Marin click snippet must be live on your landing pages, or there will be no _msuuid cookie to forward and conversions cannot be stitched to a click. Signal does not capture clicks.

Marin does not require hashed PII (email/phone) for this conversion endpoint — matching is based on the click UUID, so no personal data leaves your infrastructure for this integration.

Event Mapping

Only conversion events are sent to Marin. Page views and other engagement events are dropped (Marin captures the click first-party).

Signal eventMarin actionNotes
Order Completedact=2 conversionRevenue + line items become the trans string.
Lead Generatedact=2 conversionLead value (optional) becomes the trans string.
page(dropped)Not sent; clicks are captured first-party.

The trans string

Signal builds Marin’s pipe-delimited transaction string from the event properties. It has one transaction (UTM:T) row followed by one item (UTM:I) row per product, separated by a newline:

UTM:T|<order-id>|<affiliation>|<total>|<tax>|<shipping>|<city>|<state>|<country>
UTM:I|<order-id>|<conv-type-id>|<product>|<category>|<price>|<quantity>

Example: Purchase conversion

Datafly.js call:

datafly.track("Order Completed", {
  order_id: "ORD-001",
  revenue: 129.99,
  currency: "GBP",
  tax: 21.66,
  shipping: 4.99,
  products: [
    { product_id: "SKU-A", name: "Widget", category: "Tools", price: 49.99, quantity: 2 },
    { product_id: "SKU-B", name: "Gadget", category: "Tools", price: 30.01, quantity: 1 }
  ]
});

Request Signal sends to Marin (query parameters shown decoded for readability):

GET https://tracker.marinsm.com/tp
  ?act=2
  &cid=abc123def456
  &currency=GBP
  &mu=2f1c9a4e-7b3d-4a10-9c52-1e8f6b0a7d33
  &trans=UTM:T|ORD-001||129.99|21.66|4.99|||
         UTM:I|ORD-001|Purchase|Widget|Tools|49.99|2
         UTM:I|ORD-001|Purchase|Gadget|Tools|30.01|1

(The newlines in trans are URL-encoded as %0A, and Purchase is your configured conv_type_id.)

Testing Your Integration

Fire a test click

Visit one of your landing pages so the Marin snippet sets the _msuuid cookie and records an act=1 click.

Trigger a conversion

Complete a test purchase (or fire datafly.track("Order Completed", { ... })) on the same browser session so Signal delivers an act=2 conversion carrying the same UUID.

Check Signal’s event debugger

In the Management UI, open the Event Debugger for the integration and confirm the outbound GET to tracker.marinsm.com/tp returns 200 and contains the expected cid, currency, trans and mu values.

Verify in Marin

In Marin, open the conversion / tracking report and confirm both an Action ID 1 (click) and an Action ID 2 (conversion) row appear for the same UUID, with the correct revenue.

Troubleshooting

ProblemSolution
Conversion not appearing in MarinConfirm the cid is correct and the act=2 request returns 200 in Signal’s event debugger.
Conversion has no matching click (orphaned)The _msuuid cookie was missing — confirm the Marin click snippet is live on your landing pages and that the conversion happened in the same browser as the click.
Wrong / zero revenueCheck the revenue and currency properties on the Order Completed event; verify the trans string in the event debugger.
Conversion recorded under the wrong typeThe conv_type_id (convType) is case-sensitive — make it match exactly the conversion type configured in Marin.
400 responsesMalformed query string — inspect the trans value for stray `

Limitations

  • Marin Tracker has no JSON ingestion or batch conversion API — delivery is one HTTP GET per conversion to the pixel endpoint, so this integration does not batch.
  • Clicks are captured first-party, not by Signal. The Marin click snippet must remain on your landing pages.
  • For bulk offline conversions (e.g. CRM-sourced sales matched by order ID), Marin’s file-based Offline Connect / Revenue Upload is the appropriate path — that is a separate workflow from this real-time conversion integration.