Meta ads minimum daily budget: what the API actually reports
Meta's API has a minimum daily budget for your account. The official connector has no field for it, no tool for it, and one place where it silently applies it.
Meta's Marketing API does report a minimum daily budget, and it reports four of them. A read-only
edge on the ad account returns a minimum per currency, split by what the ad set optimises for:
impressions, high-frequency actions, low-frequency actions, and video views. Claude's official ads
connector exposes none of that. Its field catalogue does not know min_daily_budget, and
it does not know currency either. The one place it admits a minimum exists is the
Instagram boost tool, which quietly raises your budget to meet it.
You tell Claude to set a daily budget. It writes the value in. Nothing errors, nothing warns, and the entity comes back updated. Then you open Ads Manager and the figure sitting there is not the figure you said.
Two things cause that, and they pull in opposite directions: a floor Meta applies because your number was below what the account may spend, and the unit your number was read in. Neither announces itself, and the connector will not tell you which one you met.
Meta publishes a minimum. It publishes four.
The Marketing API has a dedicated edge for this, GET /{ad-account-id}/minimum_budgets,
and Meta's reference documents it as returning a list of MinimumBudget nodes. Every operation other
than reading is refused: the page says “You can't perform this operation on this
endpoint” for creating, updating and deleting. You can ask. You cannot set.
The node is five fields, and the names are the interesting part. currency, documented
as “the currency these budgets pertain to”. Then min_daily_budget_imp, for an
ad set “optimized for impressions”; min_daily_budget_high_freq, for
“high frequency actions like clicks and likes”; min_daily_budget_low_freq,
for “low frequency actions like mobile app installs”; and
min_daily_budget_video_views.
So there is no single answer to “what is the minimum daily budget on my account.” It
depends on the currency and on the ad set's optimisation goal, which means the floor can move the
moment you change a goal on an ad set you already built. The edge also takes an optional
bid_amount, for values “if you want to get values for manual bid”.
The connector ships a field-metadata tool reporting the name, type, levels and filterability of
everything it can query. Asked about min_daily_budget, currency,
account_currency, spend_cap, budget_remaining and the four
MinimumBudget field names, it returned every one in unknown_fields (checked 2026-09-02).
It does resolve daily_budget and lifetime_budget — campaign and ad set
level only, never the account — plus amount_spent, aliased spend. It
can tell you what you have spent. It has no field for what you are obliged to spend.
The Claude Ads Operator course builds the budget-change routine around reading the value back rather than trusting the confirmation.
The account listing tool is the other place people expect to find this. Its description names every key an entry carries: the account ID and name, the owning business ID and name, and the rollout and queryability flags. No currency, no minimum, no spend cap.
The unit is the expensive half
The floor costs you a little a day you did not mean to spend. The unit costs far more, because it is a multiplier rather than a clamp. Budget parameters across the connector are denominated in the smallest unit of the account currency. The update tool states it plainly: budget fields “must be integers in the ad account currency's minor unit (e.g. cents)”. The boost tool says the same thing with a second example, “cents for USD, whole yen for JPY”, and adds that its default budget is roughly the $5 USD/day equivalent in the account's currency, “clamped to the per-currency minimum”. That clamp is the only acknowledgement anywhere on the surface that a per-currency minimum exists — and it is applied, not reported.
Whole yen is not a footnote. Meta's currency documentation splits currencies by offset: at an offset of one hundred the smallest unit is a hundredth of the base currency; at an offset of one the smallest unit is the base currency. Eleven currencies sit in the second group — among them the yen, the Korean won, the Hungarian forint, the Vietnamese dong and the Taiwan dollar. There, treating the field as cents inflates every budget by two orders of magnitude, and the API accepts it, because it is a perfectly valid number.
That is not hypothetical. On 26 May 2026 an issue was filed against Anthropic's own
claude-code repository by a user reporting that an agent had set a Meta ads daily budget
two orders of magnitude too high on a Taiwan dollar account, and that it ran for about two days
before anyone noticed. The stated cause was that no unit check was performed. The second complaint is
the one worth reading twice: when the spend was queried, the agent investigated instead of pausing.
The issue was closed as not planned. It is one user's bug report, not an audited incident — and
it is a public, dated account of the exact failure the schema warns about.
| The question | What the connector can answer | Where the answer lives |
|---|---|---|
| What is my account's minimum daily budget? | Nothing — no tool, no field | The minimum_budgets edge, four values, per currency |
| What currency is this account in? | Not a queryable field; the boost plan carries one | Ads Manager, or the plan output before you confirm |
| Was my budget raised to a floor? | Only by reading the stored value back | The entity itself, after the write |
What to do instead
-
Read the value back, every time START HERE
A write that returns success has told you the request was accepted, not that the stored number matches your intent. Ask for the entity again and read
daily_budget, which the catalogue does expose at campaign and ad set level. If it differs, you met either the floor or the unit, and the size of the gap tells you which. -
Establish your account's unit once, in writing
Work out which offset your currency has and write it into the project instructions Claude reads, rather than relying on it inferring the unit. The trade: this fact lives outside the connector, so nothing keeps it current if the account's currency changes.
-
Set the floor yourself, above Meta's
The minimum that matters is usually yours, not Meta's, and the connector enforces neither. A lower bound you wrote down is checkable in a way a silent server-side clamp is not.
A number the server quietly corrects is worse than one it rejects, because a rejection is information and a correction is not.
The mistakes
- Assuming cents. It is the right guess in most currencies and catastrophically wrong in eleven of them, and the wrongness is silent.
- Treating the minimum as one number. It is four, keyed to the optimisation goal, so the floor can move when you change a goal on an ad set that already exists.
- Asking Claude what the minimum is. There is no field and no tool behind that question, so whatever comes back was assembled from general knowledge rather than from your account.
- Investigating an overspend before pausing it. Pausing is cheap and reversible, and the investigation keeps its value with the ad set off.
Try this tonight Take one live ad set, ask for its daily_budget,
and compare it to what you believe you set. A gap of a hundredfold means your account is not a cents
currency and every budget instruction you have written needs rewriting; a small gap means you found a
floor. Either way, write the account's currency and its unit at the top of the instructions you reuse,
so the next budget change starts from a fact.
Can Claude read my minimum daily budget through the official connector?
No. There is no tool for the minimum_budgets edge and no minimum-budget field in the
catalogue. An answer to that question is coming from somewhere other than your account.
Why did my budget change on its own after I set it?
Most likely it was raised to the per-currency minimum for that optimisation goal. The Instagram boost tool documents doing exactly this, without an error. Reading the stored value back is the only way to see it.
Is the budget field in cents or in whole units?
It depends on the currency. Meta documents an offset per currency; most are hundred-to-one, and eleven are one-to-one, including the yen, the won and the Taiwan dollar. The connector's tools say “smallest unit”, which is correct and is not the same as “cents”.
Does the connector stop a budget that is obviously too large?
Nothing in the declared surface does. Budget changes are the one class of action worth keeping manual for exactly this reason — see what to never let it do.
The pattern is the one that shows up all over this connector: a value the server knows, acts on, and does not return. Meta publishes the minimums and the connector does not carry them; the minor unit is in the tool descriptions and nowhere in the response. If you are setting budget work up for the first time, start with the setup guide, and read what the boost defaults choose before a one-line instruction builds an ad set. The habit that survives all of it is small: say the number, then go and read the number.
Run the budget change the way it should be run
The course is the operator routine behind these posts: what to hand Claude, what to keep manual, and how to verify a change actually landed the way you asked.
See what's inside — $67 founding pricePre-sale: the modules are still being recorded and founding members get the checkout link first. No charge today. Public price $97.