Audiences
A saved question about your users, answered over the whole install base and pushed to ad partners — with an optional holdout so you can tell lift from correlation.
Dashboard → Audiences. An audience is a saved question about your users — "bought nothing, opened the app twice last week, lives in the US" — evaluated across your entire install base rather than one person at a time.
The number you see is a cache, not truth. Truth is the rules plus whatever your data says right now, and that moves every time somebody does something in your app. The dashboard shows the size next to the time it was computed, because a bare number with no timestamp is misleading in a way that a timestamped one is not.
Building one
Rules come in eight categories, and an audience combines them with and, or, and exclude:
| Category | What it asks about |
|---|---|
| Lifecycle | Installed, launched, clicked an ad, and the negations of each |
| In-app event | Any event you declare, optionally with a count and a window |
| Revenue | What somebody has spent, and on what |
| Country | Where they are |
| Owned media | Whether they came through your own links, email, or push |
| Device | Platform, model, OS |
| Attribution | Which campaign or creator brought them |
| User attribute | Anything you set on the user yourself |
Most rules take a timeframe ("in the last 14 days") and some take a frequency ("at least 3 times").
Rules fail closed
If a rule needs something we do not know about a user, that user is left OUT rather than let in. An audience that quietly grows when data is missing is the worse failure: the mistake gets uploaded to an ad partner, and you have sent strangers to a match API. A smaller audience is a visible problem. A wrong one is not.
Rules are data, never SQL. Every value is a bound parameter and every column name is chosen from a fixed list, so nothing you type into the rule builder can become part of a query.
Templates
You do not have to start from an empty rule builder. The library carries pre-written audiences for the situations most subscription apps have — people who hit the paywall and did not buy, trials about to end, users who have gone quiet, payers worth keeping. Each one arrives with its rules already set and a sentence saying who is in it, and you can edit either.
Who counts as one person
An audience is identified one of two ways, and the choice changes the number:
- By device — one row per device. Somebody with a phone and a tablet counts twice.
- By person — every device sharing an account is grouped, and one row is sent per human. This is what an ad partner's match API actually wants.
The same rules can report two different sizes under the two modes, and neither is wrong. The account id itself is never exported; it only decides the grouping.
Sending an audience somewhere
A connection is a credentialed destination — an ad partner you have connected. A sync joins one audience to one destination and carries that pair's share of the audience.
The shares across every destination, plus the holdout, must add up to 100. That is enforced when you save, because a split that quietly sums to 90 drops a tenth of your audience on the floor and nothing downstream would ever tell you.
The holdout, and why it is the point
Set a control percentage and that slice is held back from every destination. It is never uploaded anywhere.
This is the difference between knowing a campaign worked and assuming it did. Target an audience of engaged users and they will convert well — they were going to convert well. The held-back group is the same kind of people, not targeted, so the gap between the two is the campaign's actual effect rather than its correlation with people who were already interested.
A user stays in the same bucket across recomputes. If they drifted between the control group and the targeted group every night, the holdout would measure nothing.
Imported lists
You can also bring a list you already have — paste device identifiers or upload a file — and use it as an audience without writing any rules. It behaves like any other audience from that point on, including the split and the holdout.
Recounting
Audiences recompute nightly, and you can recount one by hand. A recount that fails leaves the previous size in place with the error recorded next to it, so the page shows a stale number and says so rather than showing nothing. A partially-replaced snapshot would be worse than an old one: an upload reading it mid-write would send half an audience.
What this page is not
There is no per-user view here and no way to look somebody up. An audience is a set and a size, and the individual rows only exist at the moment an upload or a CSV export reads them.
Deleting an audience is a soft delete. It stops being evaluated and uploaded immediately, but the row survives — because the usual reason an audience gets deleted is that somebody clicked the wrong one.