# Creative Selection (/docs/paid-media/creative-selection)



When the optimizer needs new creative, the creative-selection step runs:

1. **Filter** — `organic_score >= 4.0` OR `override = 'include'`,
   AND not `override = 'exclude'`, AND not `safetyFailed = true`.
2. **Bucket** — into `generated`, `ugc`, and `manual` pools.
3. **Rank** within each pool by score.
4. **Pick top N per pool** to fill the ad set, subject to
   `maxCreativesPerAdset` and platform hard limits.
5. **Diversify** — never put all generated or all UGC if both pools have
   eligible content above threshold.

## Default pool slots [#default-pool-slots]

Each pool gets an equal slot budget by default (3 per pool), with unfilled
slots redistributed round-robin across pools that still have candidates,
plus one extra "wildcard" slot for the best remaining candidate across
all pools:

| Parameter              | Default |
| ---------------------- | ------- |
| `generatedSlots`       | 3       |
| `ugcSlots`             | 3       |
| `manualSlots`          | 3       |
| `maxCreativesPerAdset` | 10      |

If the generated pool is short (say 1 candidate), the 2 unused slots get
redistributed to UGC + manual. Final count is then capped at
`maxCreativesPerAdset`.

## maxCreativesPerAdset [#maxcreativesperadset]

Default: 10. Hard upper bound is Meta's per-adset limit of 50 ads.
Adsets already at the 50-ad cap are skipped entirely from new selection.

## Pinning [#pinning]

Use **Pin creative** on the ad set's Creative tab to bypass selection
entirely. Pinned creatives always run; non-pinned creatives still go
through selection.

## Blocking [#blocking]

Use **Block creative** to exclude a specific creative from selection on
this ad set (without affecting other ad sets).

## Why your "best" creative isn't running [#why-your-best-creative-isnt-running]

* It's `override = 'exclude'`.
* Score below 4.0 (check the score history).
* Ad set already has its `maxCreativesPerAdset` slots filled with higher
  scorers.
* `safetyFailed = true` — regenerate.
* Missing a caption (candidates with no caption are filtered out before
  selection).
* Its media failed validation (e.g. video smaller than 10KB, or no
  valid video content-type).

## Refresh cycle [#refresh-cycle]

Selection re-runs nightly via the
[refresh cycle](/docs/paid-media/refresh-cycle). It can also be triggered
manually via the ad set's **Refresh now** button.
