# Revenue Tracking

> How WinWinKit tracks revenue from your app's purchases to attribute revenue, commissions and conversions.

Revenue tracking is the foundation of everything WinWinKit does for affiliates, referrals, and promo codes.
Without accurate revenue data, commissions cannot be calculated, conversions cannot be attributed, and rewards cannot be granted reliably.

This section explains how WinWinKit ingests revenue data from each supported source, what gets tracked, and what to keep in mind when configuring an integration.

## Supported Sources

WinWinKit currently tracks revenue from four sources:

- [App Store](/docs/introduction/revenue-tracking/app-store/) — Apple's App Store, via App Store Server Notifications and the App Store Connect API.
- [Google Play](/docs/introduction/revenue-tracking/google-play/) — Google Play Store, via Real-time Developer Notifications and the Play Developer API.
- [Stripe](/docs/introduction/revenue-tracking/stripe/) — Subscription and one-off payments via Stripe webhooks.
- [RevenueCat](/docs/introduction/revenue-tracking/revenuecat/) — Aggregated revenue from App Store, Google Play, and Stripe via RevenueCat webhooks.

## What Gets Tracked

WinWinKit only tracks revenue from users who have engaged with an affiliate code, promo code, or referral program.
Purchases from users with no such engagement are not stored or counted toward any analytics.

For each tracked transaction, WinWinKit records:

- **Type** — Initial purchase, renewal, refund, or trial.
- **Amount** — Gross revenue (the actual amount paid by the user), normalized to USD.
- **Store** — Which platform the transaction originated from (App Store, Google Play, Stripe, etc.).
- **User** — The WinWinKit user the transaction belongs to, when it can be matched.

This data is then used to:

- Calculate affiliate earnings based on the campaign's revenue percentage.
- Determine when a user converts (for conversion-based rewards).
- Power analytics for affiliate codes, referral programs, and promo codes.

## Attribution

For revenue to be attributed to the right campaign, WinWinKit needs to associate each transaction with a WinWinKit user.
The way this association is made depends on the source — see the per-source pages for details.

## Sandbox vs Production

Sandbox transactions are stored and visible on each user's profile so you can verify that integrations and attribution work end-to-end.

However **only production** transactions are counted toward analytics and revenue tracking.

## Avoiding Duplicate Revenue

When more than one integration is configured for the same app, the same purchase will be reported multiple times.
WinWinKit does not deduplicate transactions across integrations — each integration assigns its own transaction identifier, so the same underlying App Store, Google Play, or Stripe purchase received via two integrations is recorded as two separate transactions.

<Warning>
  Configure only one integration per revenue source. If a third-party
  integration (such as RevenueCat) already forwards revenue from a given
  platform, do not also configure a direct integration for that platform.
</Warning>

## Refunds

When a refund event is received from any source, a corresponding negative-amount transaction is recorded against the original purchase.
Affiliate earnings tied to the refunded transaction are adjusted accordingly if the transaction belongs to upcoming or holding payout.

## Currencies

All revenue is normalized to USD before being stored.
The exchange rate used is the one available at the time the transaction is processed.
