Get Google Ads budget boundaries

<Info>This API is in beta. Endpoints, fields, and behavior may still change, so avoid depending on it in production.</Info>

Reads the daily budget range Google accepts for a campaign type and currency, so you can validate a budget before you create a campaign.

The numbers come from a fixed table rather than from Google, because Google does not publish them as a queryable resource. They change rarely. min_daily_budget_micros is the same floor the create, update, and bulk-budget endpoints enforce, so a budget that passes here is accepted there.

clicks_per_unit_min and clicks_per_unit_max are always present, and are measured rather than forecast whenever clicks_per_unit_scope is campaign or fleet: the middle half of what one unit of currency_code in daily budget has actually bought across recent Base44 campaigns billing in that currency. Multiply a daily budget by them directly. Pass campaign_id to get the same pair for one campaign's own delivery once it has enough of a record to speak for itself. A scope of unavailable still returns a usable pair, but a stored one rather than a current measurement — read the scope before presenting these as live figures.

You do not need a connected Google Ads account to call this, which is what lets you show a budget slider before the account exists. An unrecognized currency_code or campaign_type is not rejected: you get the US dollar and Smart campaign defaults back, with the values you sent echoed in currency_code and campaign_type. Compare those two fields against what you sent if you need to know that happened.

<Note>This endpoint accepts a personal API key. Workspace API keys are not authorized for it and are rejected with a 403.</Note>

get/api/apps/{app_id}/google-ads/campaigns/budget-boundaries

Path parameters

app_idstring required

ID of the app you are planning a Google Ads campaign for.

ID of the app you are planning a Google Ads campaign for.

Query parameters

currency_codestring

Currency to report the bounds in, as an ISO 4217 code. An unrecognized code falls back to USD.

Currency to report the bounds in, as an ISO 4217 code. An unrecognized code falls back to USD.

campaign_typestring

Campaign type to report bounds for: SMART or PERFORMANCE_MAX. Anything else falls back to SMART.

Campaign type to report bounds for: SMART or PERFORMANCE_MAX. Anything else falls back to SMART.

campaign_idstring nullable

An existing campaign to quote the click rate for. With it, clicks_per_unit_min / clicks_per_unit_max describe that campaign's own recent delivery instead of the platform-wide range, and clicks_per_unit_scope reads campaign. A campaign without enough delivery, or one whose budget currency differs from currency_code, still answers from the platform-wide range.

An existing campaign to quote the click rate for. With it, clicks_per_unit_min / clicks_per_unit_max describe that campaign's own recent delivery instead of the platform-wide range, and clicks_per_unit_scope reads campaign. A campaign without enough delivery, or one whose budget currency differs from currency_code, still answers from the platform-wide range.

Response

The accepted daily budget range.

currency_codestring required

The currency these amounts are in, upper-cased from what you sent.

campaign_typestring required

The campaign type these bounds apply to, upper-cased from what you sent.

min_daily_budget_microsinteger required

Smallest daily budget Google accepts for this campaign type and currency, in micros (1,000,000 micros = 1 unit of the currency). Sending less than this to Create campaign is rejected with a 400.

max_daily_budget_microsinteger required

Largest daily budget accepted for this campaign type and currency, in micros.

recommended_daily_budget_microsinteger required

A sensible starting daily budget, in micros. Never above max_daily_budget_micros.

preset_daily_budget_microsinteger[] required

Three suggested daily budgets, in micros, from lowest to highest. These are raw presets, so unlike recommended_daily_budget_micros the highest one can sit above max_daily_budget_micros.

usd_to_currency_ratenumber required

How many units of this currency Base44 counts per US dollar when it converts the presets.

clicks_per_unit_minnumber required

Low end of the clicks one unit of currency_code in daily budget has actually bought. Multiply a daily budget by this directly — it is already in the same currency the budget is, so no conversion is involved. Always present — check clicks_per_unit_scope to see whether it is a live measurement.

clicks_per_unit_maxnumber required

High end of the same range, with the same caveat: measured when clicks_per_unit_scope is campaign or fleet, a stored rate when it is unavailable.

clicks_per_unit_scopestring required

Where the click range came from, and whether it is a measurement at all. campaign: measured on the campaign named by campaign_id. fleet: measured across accounts billing in this currency — also what an unknown campaign, or one without enough delivery, returns. unavailable: NOT measured — a stored range is being served because this currency has too few accounts to measure or the measurement could not be read. The range is usable in every case, but only the first two are measured.

Example response

{
  "currency_code": "USD",
  "campaign_type": "SMART",
  "min_daily_budget_micros": 10000000,
  "max_daily_budget_micros": 1000000000,
  "recommended_daily_budget_micros": 30000000,
  "preset_daily_budget_micros": [
    15000000,
    30000000,
    60000000
  ],
  "usd_to_currency_rate": 1,
  "clicks_per_unit_min": 1.9,
  "clicks_per_unit_max": 21.2,
  "clicks_per_unit_scope": "fleet"
}

Changes