Most. Help

Offer Rotation Tracking: Many Offers, One Pixel, No Mixed Conversions

Published Sep 14, 2026Updated Sep 22, 20267 min readIntermediate
Hand-drawn railway junction splitting one track into three labeled branches, an orange coin traveling each branch into its own envelope, with a crossing marked as the mixing trap
What you'll learn
  • How rotation multiplies conversion-mapping problems - and the label that solves them
  • How to mark the offer on the click so every postback returns it
  • How to build per-offer events, values, and custom conversions
  • Which traps silently merge two offers' data into one unusable number
Intermediate
2views

As a discipline, offer rotation tracking looks harmless until the first mixing incident: three offers rotating through one campaign, one pixel, one event name - and a report that says the campaign works while saying nothing about which offer pays. Rotation multiplies a small mapping problem into a data-ownership problem, because every conversion must stay attached to the offer that produced it through four more hops of plumbing. This guide builds the mapping that survives rotation: label the offer on the click, carry the label through the postback, map each offer to its own event and value, and read per-offer truth in custom conversions instead of one blended number.

The transport chain the labels ride on is built in the postback-to-CAPI guide; this page is about keeping offers distinct inside it.

Why Rotation Breaks Naive Tracking

With a single offer, every Purchase implicitly belongs to it - no labeling needed. Rotate offers and the implicit link dies: a Purchase event says "someone paid" but not which funnel produced the payment, which creative deserves the credit, or which payout value matches which offer's economics.

On the platform side the consequence is exact: the optimizer and the reports can only split conversions along labels you transmitted. The event's event_name and its custom_data parameters are the only offer-specific information in the payload (server event parameters). If three offers all send Purchase with different values, the platform will happily optimize the blend - and the blend optimizes toward whichever offer converts cheapest, not whichever pays most.

The tracker-side consequence mirrors it: unmatched or unlabeled conversions make per-offer ROI arithmetic impossible, and rotation decisions become guesses.

Label the Offer at the Click

Rotation happens in the tracker - its streams decide which offer a click sees - so the click row is where the offer label is born. Keitaro's postback contract gives the label a ride home: sub_id_1 through sub_id_30 are documented as "extra data to update the click record," which is exactly where an offer tag belongs, and the alias system maps whatever parameter name the network uses onto those fields (Keitaro postback documentation).

The labeling chain:

  1. Each rotation branch appends its own marker to the offer URL - the offer's sub ID parameter carries a distinct value per offer.
  2. The network's postback echoes the marker back through those sub ID fields.
  3. The tracker stores the marker on the conversion's click row; the delivery layer reads it when building the platform event.

From that point on, offer identity is data, not guesswork: the S2S postback macros - {external_id} for the click, {conversion_revenue} for the payout, {offer_name} for the offer itself - let the delivery layer address each offer distinctly (S2S postbacks). The full macro vocabulary lives in the Keitaro macros reference.

Map Each Offer to Its Own Event

Two documented shapes cover rotation on the platform side:

ShapeHow it worksBest when
Per-offer custom eventsOfferA_Sale, OfferB_Sale as event namesFew offers, hard separation, per-offer custom conversions
One event, parameter-labeledSame event_name, offer ID in custom_dataMany offers, reporting via custom-conversion rules

Custom events keep offers separated at the platform's top level - each name builds its own custom conversion, appears in reporting separately, and can serve the ad set's optimization dropdown (custom conversions). Parameter labeling keeps the event list short and splits offers inside Events Manager by rule; the cost is that the raw event count blends until a rule separates it.

Either shape works; mixing them mid-flight does not. Renaming events after volume accumulates splits each offer's history across two names - the single most common self-inflicted wound in rotation tracking.

Value Rules Under Rotation

Rotation makes value discipline mandatory, because offers have different money:

  1. Per-offer payout as value. The postback's {conversion_revenue} is the offer's own payout - forwarded as value with its currency (custom data parameters; the payout hop itself is covered in payout as conversion value). A blended average value poisons every offer's optimization at once.
  2. Per-offer acceptance windows. The platform's event_time window is seven days for Meta's Conversions API regardless of offer (using the API) - but offer-specific confirmation lags differ, so slow offers get closer to the edge.
  3. Per-offer identity. Multi-action offers need the tid-style transaction parameter so repeats do not overwrite (postback URL); rebilling offers need their own cycle events, as in the subscription funnel.

Configuration belongs to the offer, not the campaign: name, value source, status mapping, and identity rule defined per offer in one place - the delivery layer - so rotation can shuffle traffic without editing wiring.

The Traps That Merge Offers' Data

  1. The shared Purchase. All offers firing the standard Purchase name with different values: the optimizer optimizes the blend, the reports cannot split, and pausing the losing offer looks like pausing the campaign.
  2. The averaged value. Sending a mean payout instead of the actual payout per conversion - value-based optimization learns a fiction and bids toward it.
  3. The mid-flight rename. Changing event names after history accumulated: each offer's record splits across old and new names, and neither half has enough volume to optimize.
  4. The unaliased parameter. A network posting clickid instead of the expected name, with no alias configured: postbacks arrive unmatched, and one offer silently reports zero.

Each trap has the same antidote - labels as data, defined per offer, applied by the delivery layer - and the same test: one conversion per offer through the real chain, verified in the postback log and Test Events (get started), before rotation scales. The postback troubleshooting checklist covers the failure modes the test flushes out.

Offer Rotation Tracking: Frequently Asked Questions

Frequently asked questions

Sources

Sources

Rotation without mixing
  • Test each branch: Pixel Activator fires free named events per offer while you validate the mapping.
  • Per-offer delivery rules: Most maps every offer to its own event, value, and identity automatically.
Was this guide helpful?
Author
Most Team
Справочная служба

Официальные руководства и глоссарий для платформы Most и Активатора пикселей.

Topic
Affiliate Conversion Tracking: The Complete Guide
Main article of the topic
Related articles

Related guides

Affiliate Conversion Tracking: The Complete Guide

The entry point to our affiliate tracking cluster: how a conversion that lands on someone else's offer travels through a postback, a tracker, and a Conversions API call, and where each specific failure has its own deep-dive guide.

16 min

Pixel Warming Without Burning Budget: A Practical Sequence

Warming is not a ritual - it is an ordering problem. Verify delivery before spend, feed clean well-attributed events while the baseline forms, and scale on evidence. This guide turns pixel warming into the sequence buyers actually follow, with the platform documentation behind each step and the affiliate-specific twists of warming a pixel you feed by postback.

7 min

Keitaro Macros: The S2S Postback and Sub ID Reference

Every Keitaro S2S postback is a template, and the placeholders are its vocabulary. This reference collects the documented macros in working groups - identifiers, money, statuses with mappings, timestamps, campaigns and offers, geo and device - plus the sub ID fields and the encoding and currency rules that keep substituted URLs intact.

6 min

Conversion Value Payout: Passing Affiliate Payout as Event Value

A flat Purchase counts actions; a Purchase with the network's payout counts money. This guide traces the payout number from the network postback into the event's value and currency fields, then through the messy parts - partial approvals, rebills, clawbacks, and currency mismatches - to a value policy the algorithm can actually optimize on.

8 min