Every sale CrossUp brings in is proven by two things: what the shopper added from a recommendation, which arrives as a signal, and the order your store closed. The browser never says a purchase happened: the order does.

What counts as an attributed sale

It’s the value of the products the shopper added from a recommendation and actually bought. Attribution happens order by order. These don’t count:
  • the product the shopper had already picked;
  • recommendations that were dismissed;
  • orders without an accepted recommendation.

The seven signals

Each signal carries its own change, never the whole cart. There’s no purchase signal.

How the sale is tied

  1. Your store sends its cart id (cart_id) when asking for the recommendation and with the signals. With the SDK, once: the cartId option.
  2. The cart signals say what the shopper added from each recommendation.
  3. The order arrives from your platform —the CrossUp app or your connector— with that same id as its external_id. CrossUp matches the order against what was added and attributes the lines that were bought.
Without cart_id the recommendation still works, but that decision can’t be tied to any order. How the order has to arrive: The canonical model.

When to report each one

  • impression when the recommendation enters the screen, not when it’s generated.
  • click on the click, before navigating; the SDK sends it even if the page changes.
  • add_to_cart with the quantity added, not the line total.
  • checkout_started when the shopper heads to checkout, once.

How they’re sent

You report and move on: the SDK batches, sends and retries without holding up the page. Each track.* takes the recommendation you showed (in the API, Decision: the list of products recommended for that moment).
Retrying is safe: every signal has a stable id and a repeat isn’t duplicated. Each one gets its own answer, so a malformed signal doesn’t sink the batch.

What you will see

One response per signal: accepted, duplicate or rejected with a reason. In the SDK they reach onSignalResult.

What never travels

The visitor is an id made up by the SDK: never an email, a phone number or the platform’s customer id.

If you don’t see it

Report signals with the SDK

track.*: the seven signals and when to send each one.

Record signals via API

The operation, with a playground.