Creative Selection
How creatives are picked from the eligible pool for each ad set. The 3-pool model.
When the optimizer needs new creative, the creative-selection step runs:
- Filter —
organic_score >= 4.0ORoverride = 'include', AND notoverride = 'exclude', AND notsafetyFailed = true. - Bucket — into
generated,ugc, andmanualpools. - Rank within each pool by score.
- Pick top N per pool to fill the ad set, subject to
maxCreativesPerAdsetand platform hard limits. - Diversify — never put all generated or all UGC if both pools have eligible content above threshold.
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
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
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
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
- It's
override = 'exclude'. - Score below 4.0 (check the score history).
- Ad set already has its
maxCreativesPerAdsetslots 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
Selection re-runs nightly via the refresh cycle. It can also be triggered manually via the ad set's Refresh now button.