Every sale CrossUp brings in is proven by a signal. Without the purchase signal, that sale doesn’t show up in your admin.

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.

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.
  • purchase on the thank-you page, once, with your store’s order id.

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.