> AffiliateOS Help Center. Index of every article for AI tools: https://www.affiliateos.ai/help/llms.txt

# Why our numbers and yours differ

Reporting · For everyone · Updated 30 October 2026
Web version: https://www.affiliateos.ai/help/reporting/why-numbers-differ

Two sets of numbers that track the same users rarely match to the unit, and the gap almost always has one of a few causes: our days are UTC days, our **Conversions** count only an offer's first step, reversals lower the day a conversion was earned and postbacks that failed, repeated or were tests count differently on your side than on ours.

To find the exact rows, follow [Reconcile our numbers with yours, step by step](https://www.affiliateos.ai/help/troubleshooting/numbers-differ).

## The usual causes

| Cause | What we count | What you might be counting |
|---|---|---|
| Time zones | UTC days. A Texas evening lands partly on tomorrow. | Your local days |
| Conversions and events | **Conversions** is the first step of an offer only. Later steps are **Events**. | Every postback as a conversion |
| Reversals | Taken off the day the conversion was earned, so a closed week can drop | Taken off the day the reversal arrived, or not at all |
| Postbacks that never reached you | Every conversion, sent or not | Only what your server received |
| Repeats | One conversion, even when the postback was sent twice | Each copy, if you dedupe on `action_id` alone or not at all |
| Test postbacks | Nothing: a test creates no conversion | Tests your code credited |
| Rejected or in-review conversions | Not in totals | Nothing, since no postback was sent |
| Money fields | Your earnings | `payout` on the Hosted Offerwall, which is the player's reward there |
| Clicks | Taps that reached our tracking link | Taps on your own button, including ones that never loaded the link |

## Example

Example, made up: Pebble Rewards' own database shows 12 Harbor Blocks installs for 29 October, Texas time. Our **Dashboard** shows 10 conversions for 29 October.

- One install came in at 7:30 PM in Texas, which is 12:30 AM on 30 October in UTC. It's in our 30 October.
- One "install" in their database is the player reaching level 10. Their code booked every postback as an install. On our side it's an event.

12, less one on the next UTC day, less one later step, is 10. Nothing is missing.

## Reconcile in four steps

1. **Get our rows for the same UTC window.** Publishers: **Conversions**, then **Download CSV**, or `GET /publisher/conversions` with your API key; [Pull conversions instead](https://www.affiliateos.ai/help/postbacks/pull-conversions-reporting-api) has the call. Networks: **Reporting**, then **Flight Recorder** lists each postback with its **Action** ID.
2. **Match on action ID and status.** Our `actionId` is the postback's `action_id`. A [reversal](https://www.affiliateos.ai/glossary#reversal) repeats the `action_id` with `status=reversed`, so match on both. For conversions first sent before 10 September 2026, match on the end of the ID: the postback's can be longer.
3. **Rows we have and you don't:** open **Reporting**, then **Flight Recorder**, and look at **Delivery**. failed means your server didn't answer with a 2xx; skipped_no_url means no postback URL matched. Publishers: with no postback secret, nothing is sent at all. [How to answer a postback](https://www.affiliateos.ai/help/postbacks/answer-postback-timeouts-retries) covers retries.
4. **Rows you have and we don't:** look for `test=true`, and for the same `action_id` and `status` stored twice.

> **Read the right money field.** On Offer API, feed and link postbacks, `payout` is your earnings. On Hosted Offerwall postbacks, `revenue` is your earnings and `payout` is the player's reward. Install-paid games pay you once, at install: their later steps carry `payout=0`, or `revenue=0` on the wall.

## Advertisers: our numbers and your attribution tool's

We charge and count an event only when it carries a click ID that matches a tap on your campaign. These never count:

- Events without a click ID, logged as `missing_attribution`.
- The same `eventId` sent again: we answer `duplicate` and count only the first.
- Events whose `timestamp` is more than 48 hours from when we received them, logged as `outside_window`.
- Test events.

Your attribution tool also has its own windows and its own way of picking which tap gets the credit, so its installs from AffiliateOS can be higher or lower than ours. **Event logs** on each campaign shows each event we logged and its status; a repeated `eventId` isn't logged again.

## Send us this

If the gap is still there: the email you sign in with, the UTC window, your count and ours, and a few `action_id` values (advertisers: event IDs) that you have and we don't, or the other way round.
