> ## Documentation Index
> Fetch the complete documentation index at: https://unif.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Build a creator shortlist

> Sourcing affiliates on what they sell, not on how many followers they have.

Follower count is the worst available predictor of whether a creator will sell your product. This
guide builds a shortlist on evidence instead.

## Rank on efficiency, not reach

`gpm` — gross revenue per thousand views — is neutral to audience size. A creator with 40k
followers and a `gpm` of 85 is a better partner than one with 900k followers and a `gpm` of 6, and
costs a fraction as much.

```bash theme={null}
curl -X POST https://api.unif.dev/v1/creators/search \
  -H "Authorization: Bearer $UNIF_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "market": "US",
    "period": { "preset": "last_30d" },
    "currency": "USD",
    "filters": {
      "category_ids": ["cat_beauty_personal_care"],
      "followers": { "gte": 20000, "lte": 300000 },
      "revenue": { "gte": 25000 },
      "gpm": { "gte": 40 },
      "avg_commission_rate": { "lte": 0.25 }
    },
    "sort": [{ "field": "gpm", "direction": "desc" }],
    "limit": 50
  }'
```

| Filter                               | Reasoning                                                                                             |
| ------------------------------------ | ----------------------------------------------------------------------------------------------------- |
| `followers: 20k–300k`                | Below 20k, one good video distorts every metric. Above 300k, rates climb faster than conversion does. |
| `revenue: { gte: 25000 }`            | Proof they have actually sold, not just posted.                                                       |
| `gpm: { gte: 40 }`                   | The efficiency bar. Calibrate it to your category's price point.                                      |
| `avg_commission_rate: { lte: 0.25 }` | They work at rates you can afford.                                                                    |

<Note>
  `categories` on a creator is ordered by their **revenue share**, not by self-declared niche. A
  creator who posts about fitness but sells supplements is returned under supplements — which is
  what you wanted to know.
</Note>

## Start from a product, not a category

The highest-signal sourcing query does not start from a category at all. It starts from a product
like yours and asks who already sells it.

```bash theme={null}
curl "https://api.unif.dev/v1/products/prd_01k3m9x7v2q8r4t6y0b1n5d7fa/creators?period=last_90d&limit=50" \
  -H "Authorization: Bearer $UNIF_API_KEY"
```

These creators have demonstrated they can move this exact kind of product to an audience that
buys it. Run it across your three closest competitor products and intersect:

```python theme={null}
from collections import Counter

appearances = Counter()
for product_id in competitor_product_ids:
    for creator in list_product_creators(product_id, period="last_90d"):
        appearances[creator["id"]] += 1

# Creators who converted for more than one competitor product
proven = [cid for cid, n in appearances.items() if n >= 2]
```

A creator who appears for two or three competing products is not a one-off — they sell the
category.

## Filter out the profile you do not want

Two checks remove most bad shortlist entries.

<AccordionGroup>
  <Accordion title="Too many shops" icon="shop">
    `shops_count` above roughly 40 in a 30-day window usually means a creator taking every offer
    that arrives. Volume, not endorsement.

    ```python theme={null}
    candidates = [c for c in candidates if c["metrics"]["shops_count"] <= 40]
    ```
  </Accordion>

  <Accordion title="Engagement without sales" icon="heart">
    High `engagement_rate` with low `gpm` is an entertainment audience, not a buying one. Both
    matter; neither alone is enough.

    ```python theme={null}
    candidates = [
        c for c in candidates
        if c["metrics"]["gpm"] >= 40 or c["metrics"]["engagement_rate"] < 0.06
    ]
    ```
  </Accordion>
</AccordionGroup>

## Check the trend before you sign

A creator's 30-day numbers can be a tail. Look at the shape:

```bash theme={null}
curl "https://api.unif.dev/v1/creators/crt_01k3…fa/timeseries?metrics=revenue,gpm&granularity=week&period=last_90d" \
  -H "Authorization: Bearer $UNIF_API_KEY"
```

```python theme={null}
weeks = [p["values"]["gpm"] for p in series["data"]]
recent, earlier = weeks[-4:], weeks[:4]

trend = sum(recent) / len(recent) - sum(earlier) / len(earlier)
```

A `gpm` trending down over twelve weeks means their audience is fatiguing on commerce content.
The 30-day snapshot will not tell you that.

## Save and monitor

```bash theme={null}
curl -X POST https://api.unif.dev/v1/lists \
  -H "Authorization: Bearer $UNIF_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Creator shortlist — US skincare Q4",
    "entity_type": "creator",
    "item_ids": ["crt_01k3…fa", "crt_01k3…fb"]
  }'
```

Then a tracker on the list, so you know when a partner's performance changes while you are working
with them:

```json theme={null}
{
  "name": "Partner performance drift",
  "source": { "type": "list", "list_id": "lst_01k3…fb" },
  "schedule": "weekly",
  "conditions": [
    { "metric": "gpm", "change": "pct", "over": "30d", "lte": -0.25 },
    { "metric": "follower_growth", "lte": 0 }
  ]
}
```

<Tip>
  Re-read the shortlist quarterly with the same query. Creator performance moves faster than almost
  anything else in commerce data, and a list from two quarters ago is a list of who *used to*
  convert.
</Tip>
