Ad set limits and common Meta errors explained
Last updated June 10, 2026
Most "my launch partly failed" tickets trace back to a hard rule on Meta's side, not a bug in uplads. The good news: uplads checks the big ones before you launch and warns you in plain language. Here are the constraints you'll run into most often and what to do about each.
The 50-ads-per-ad-set limit
Meta enforces a hard cap of 50 ads per ad set — and that count includes paused and archived ads, not just active ones. Once an ad set is full, every extra ad you try to add is rejected.
uplads does the math for you on the review step before you launch. It reads how many ads each target ad set already holds, adds the number of new ads your launch would create, and flags any ad set that would go over 50. The warning spells out the arithmetic per ad set, for example:
- Summer Prospecting — US: 47 existing + 6 new = 53
A few things to know:
- The warning is informational, not blocking. You can still launch — only the overflow ads will fail, and the rest go through normally.
- Counts come straight from Meta, so they reflect paused and archived ads too. An ad set that "looks empty" in the UI can still be near the cap.
- If you hit this often, spread ads across more ad sets or duplicate an ad set with the same targeting to get a fresh 50 slots.
Daily budget minimums per currency
Meta sets a minimum daily budget that varies by the ad account's currency. Set a daily budget below the floor and Meta rejects it.
uplads applies the same check client-side so you get instant feedback instead of partial-failure rows. When you bulk-edit budgets, the dialog shows the floor for your currency (for example, "Minimum daily budget for USD: 1.00") and clamps anything below it up to the minimum automatically. Common floors uplads recognizes:
- USD, EUR, GBP, CAD, AUD, CHF — 1.00 per day
- MXN — 10, BRL — 5, INR — 50, TRY — 5
- JPY — 100, KRW — 1000 (pegged or weak currencies use higher floors)
The real list is longer; uplads falls back to a generic floor for currencies not in the table. Note this clamp applies to daily budgets only — lifetime budgets have no fixed per-day minimum, so Meta validates those against the schedule duration when you commit. See how to bulk edit status, budget and bidding for the full dialog.
Why dayparting requires a lifetime budget
Ad scheduling — running ads only on certain days or hours, also called dayparting — only works on ad sets that use a lifetime budget. Meta won't accept a custom schedule on a daily-budget ad set.
When you open the dayparting editor in uplads, it says so directly ("Needs a lifetime budget"). If you want to schedule ads, switch the ad set to a lifetime budget first, then set your weekday/hour windows. Leaving every slot off means the ad set runs all the time. More detail in how to edit targeting, placements and dayparting.
Where ROAS-goal bidding is and isn't allowed
The ROAS goal (minimum ROAS) bid strategy is ad-set-only. Meta rejects it at the campaign level, so uplads filters it out of the strategy list when you're editing a campaign — you simply won't see it there.
- On ad sets, ROAS goal appears as an option. Enter your target as a decimal (1.5 = 150%).
- On campaigns, the available strategies are lowest cost, bid cap, and cost cap — no ROAS goal.
This is why a min-ROAS value that "works on the ad set" can't be pushed up to the campaign. Keep ROAS-goal bidding at the ad-set level.
How special ad categories disable detailed targeting
If a campaign is declared under a special ad category — Housing, Employment, Credit, or Social Issues/Elections/Politics — Meta restricts how you can target the audience. Specifically, interest and behavior (detailed) targeting is disabled.
When you create or edit an ad set under such a campaign, uplads shows a Restricted badge and a note naming the category, then greys out detailed targeting so you can't pick something Meta will only reject later. Location, age, and the other allowed controls still work within Meta's narrowed ranges. This is a Meta policy requirement, not a uplads limitation — there's no workaround other than removing the special ad category (which you should only do if the ad genuinely isn't in that category).
Still seeing failures?
If a launch reported errors that aren't covered here, walk through why did my launch fail and how do I fix it? and why don't my launched ads appear in Meta Ads Manager?. For connection-level problems, see why is my Meta account not connecting?.