What a ROAS floor actually means on Meta
Why setting a Meta ROAS floor is harder than picking a number — margin, lag, and the per-account decision ProfitMind makes before any shift.
Article sections
ROAS floor vs. ROAS target — they are not the same
A target is aspirational; a floor is the line below which the agent will not let an ad set operate. ProfitMind treats your floor as a hard stop on every shift — the agent will not move a cent into a destination ad set whose trailing ROAS is below the floor, no matter how much headroom the source has. That asymmetry is what stops a chance-the-floor shift from compounding into a one-day ROAS drop. For context on what the ceiling looks like in practice, the tier table on /pricing lists the bracket and the per-tier feature set side by side.
Why margin sets per-account floors, not a global default
Two clients on the same platform with the same ROAS can be profitable for one and unprofitable for the other depending on COGS, shipping, and discount depth. ProfitMind lifts margin targets into OptimizerConfigInput so each AdAccount can carry its own floor. The rule engine respects those numbers when it decides whether an ad set is a winner or a loser — and the bumped / pruned outcomes in the case studies below show what that looks like in practice for a few anonymised brands.
How often the floor recomputes, and what happens on a downturn
The floor is a setting, not a number the agent computes — you set it on the connection, the agent reads it daily. When performance drops, the floor does not move; instead, the agent enters a HOLD branch for the offending ad set, freezing it at the prior budget rather than compounding allocation. The decision log surfaces each HOLD so a manager can confirm it was the right call; the next rotation in this series tackles how the agent paces TikTok budgets daypart by daypart.