Account Budget
Stay organized with collections
Save and categorize content based on your preferences.
Page Summary
Account budgets manage account spending over time with defined limits and durations linked to a billing setup.
AccountBudget objects represent the final state after applying AccountBudgetProposal changes, which require review and approval.
AccountBudgetProposals are used to create, update, end, or remove account budgets and are typically reviewed within an hour.
You can manage existing account budgets by updating fields like spending limit or end date using AccountBudgetProposals with a proposal type of UPDATE.
Multiple account budgets can be chained together to define different spending limits over successive periods.
Account budgets control what an account can spend over a specific period of time
by defining budget properties like spend limit, start time, and end time. They
must point to one of the account's billing setups, to indicate which specific
Payments account will be billed. You can create, update, and remove the
AccountBudget by sending
AccountBudgetProposal objects.
AccountBudget objects represent the end result
of applying proposals. After a proposal is approved, its changes (subject to any
adjustments) will result in the creation of a new account budget or an
update to an existing one. This depends on the
proposal_type
specified in the request.
defmain(client:GoogleAdsClient,customer_id:str,billing_setup_id:str):account_budget_proposal_service=client.get_service("AccountBudgetProposalService")billing_setup_service=client.get_service("BillingSetupService")account_budget_proposal_operation=client.get_type("AccountBudgetProposalOperation")proposal=account_budget_proposal_operation.createproposal.proposal_type=client.enums.AccountBudgetProposalTypeEnum.CREATEproposal.billing_setup=billing_setup_service.billing_setup_path(customer_id,billing_setup_id)proposal.proposed_name="Account Budget Proposal (example)"# Specify the account budget starts immediatelyproposal.proposed_start_time_type=client.enums.TimeTypeEnum.NOW# Alternatively you can specify a specific start time. Refer to the# AccountBudgetProposal resource documentation for allowed formats.## proposal.proposed_start_date_time = '2020-01-02 03:04:05'# Specify that the budget runs foreverproposal.proposed_end_time_type=client.enums.TimeTypeEnum.FOREVER# Alternatively you can specify a specific end time. Allowed formats are as# above.## proposal.proposed_end_date_time = '2021-01-02 03:04:05'# Optional: set notes for the budget. These are free text and do not effect# budget delivery.## proposal.proposed_notes = 'Received prepayment of $0.01'proposal.proposed_spending_limit_micros=10000account_budget_proposal_response=(account_budget_proposal_service.mutate_account_budget_proposal(customer_id=customer_id,operation=account_budget_proposal_operation,))print("Created account budget proposal "f'"{account_budget_proposal_response.result.resource_name}".')
defadd_account_budget_proposal(customer_id,billing_setup_id)# GoogleAdsClient will read a config file from# ENV['HOME']/google_ads_config.rb when called without parametersclient=Google::Ads::GoogleAds::GoogleAdsClient.newoperation=client.operation.create_resource.account_budget_proposaldo|proposal|proposal.billing_setup=client.path.billing_setup(customer_id,billing_setup_id)proposal.proposal_type=:CREATEproposal.proposed_name='Account Budget (example)'# Specify the account budget starts immediatelyproposal.proposed_start_time_type=:NOW# Alternatively you can specify a specific start time. Refer to the# AccountBudgetProposal resource documentation for allowed formats.## proposal.proposed_start_date_time = '2020-01-02 03:04:05'# Specify that the budget runs forever.proposal.proposed_end_time_type=:FOREVER# Alternatively you can specify a specific end time. Allowed formats are as# above.## proposal.proposed_end_date_time = '2021-01-02 03:04:05'# Optional: set notes for the budget. These are free text and do not affect# budget delivery.## proposal.proposed_notes = 'Received prepayment of $0.01'# Set the spending limit to 0.01, measured in the Google Ads account currency.proposal.proposed_spending_limit_micros=10_000endaccount_budget_proposal_service=client.service.account_budget_proposal# Add budget proposal.response=account_budget_proposal_service.mutate_account_budget_proposal(customer_id:customer_id,operation:operation,)putssprintf("Created budget proposal %s.",response.results.first.resource_name)end
subadd_account_budget_proposal{my($api_client,$customer_id,$billing_setup_id)=@_;# Create an account budget proposal.my$account_budget_proposal=Google::Ads::GoogleAds::V22::Resources::AccountBudgetProposal->new({billingSetup=>
Google::Ads::GoogleAds::V22::Utils::ResourceNames::billing_setup($customer_id,$billing_setup_id),proposalType=>CREATE,proposedName=>"Account Budget (example)",# Specify that the account budget starts immediately.proposedStartTimeType=>NOW,# Alternatively you can specify a specific start time. Refer to the# AccountBudgetProposal class for allowed formats.## proposedStartDateTime => "2020-01-02 03:04:05",# Specify that the account budget runs forever.proposedEndDateTime=>FOREVER,# Alternatively you can specify a specific end time. Allowed formats are as below.# proposedEndDateTime => "2021-02-03 04:05:06",# Optional: set notes for the budget. These are free text and do not effect budget# delivery.# proposedNotes => "Received prepayment of $0.01",# Optional: set PO number for record keeping. This value is at the user's# discretion, and has no effect on Google Billing & Payments.# proposedPurchaseOrderNumber => "PO number 12345",# Set the spending limit to 0.01, measured in the Google Ads account currency.proposedSpendingLimitMicros=>10000});# Create an account budget proposal operation.my$account_budget_proposal_operation=Google::Ads::GoogleAds::V22::Services::AccountBudgetProposalService::AccountBudgetProposalOperation->new({create=>$account_budget_proposal});# Add the account budget proposal.my$account_budget_proposal_response=$api_client->AccountBudgetProposalService()->mutate({customerId=>$customer_id,operation=>$account_budget_proposal_operation});printf"Created account budget proposal '%s'.\n",$account_budget_proposal_response->{result}{resourceName};return1;}
In account budget proposal requests,
proposed_start_date_time
and
proposed_end_date_time
are always in the customer's account timezone; you cannot specify a timezone.
The
proposed spending limit
is always measured in the account's currency; specify this using "micro" units,
so $1.00 = 1,000,000 micros.
Optionally, you can include a Purchase Order number which will show next to
these charges on the invoice. This does not have any effect on budget delivery.
Remove a pending account budget proposal
You can remove an entire pending budget proposal by sending an
AccountBudgetProposalOperation Remove
request with an account budget proposal resource name. However, note
that budget proposals are usually applied within minutes.
Java
AccountBudgetProposalOperation operation = AccountBudgetProposalOperation.newBuilder()
.setRemove(StringValue.of(ResourceNames.accountBudgetProposal(customerId, accountBudgetProposalId)))
.build();
// Send request to Google Ads API (not shown).
C#
AccountBudgetProposalOperation operation = new AccountBudgetProposalOperation()
{
Remove = ResourceNames.AccountBudgetProposal(customerId, accountBudgetProposalId)
};
// Send request to Google Ads API (not shown).
operation = client.operation.remove_resource.account_budget_proposal(client.path.account_budget_proposal(customer_id, account_budget_proposal_id))
# Send request to Google Ads API (not shown).
Perl
my$account_budget_proposal_operation=Google::Ads::GoogleAds::V22::Services::AccountBudgetProposalService::AccountBudgetProposalOperation->new({remove=>Google::Ads::GoogleAds::V22::Utils::ResourceNames::billing_setup($customer_id,$account_budget_proposal_id)});# Send request to Google Ads API (not shown).
If you made a mistake with the original proposal, you can resubmit the
proposal as an UPDATE operation. Refer to
Update an existing account budget.
Retrieve existing account budgets
The following GAQL query fetches all of the existing account budgets in an
account:
Fields that encapsulate the account budget's start time, end time, and
spending limit have multiple variants with prefixes such as proposed and
approved that allow for comparing the values that were initially proposed with
those that were approved. The spending limit has additional fields with the
adjusted prefix to indicate the current spending limit in effect after any
adjustments were applied to the approved amount.
An account budget's approved spending limit can be adjusted over time to
reflect various credits for things like budget overdelivery, invalid click
activity, and promotional coupons. More information
about account budgets and
account credits and adjustments
can be found in the Google Ads Help Center.
Any new account budgets pending approval, along with any existing account
budgets that have updates pending, will also contain an
pending_proposal field
that can be selected. It will contain
the resource ID
of the associated AccountBudgetProposal
object.
Manage existing account budgets
After you create an account budget for a customer, you can use the
AccountBudgetProposalService to
manage the budget parameters. The most common management operations are to
update the spending_limit and end_date_time fields. For a complete list of
the mutable fields, refer to the
AccountBudgetProposal
document.
You have the option of updating an existing account budget or creating a
entirely new budget, both are shown here.
Update an existing account budget
You can update the existing account budget fields by sending
AccountBudgetProposal objects with
AccountBudgetProposalType
set to UPDATE. Note that you must also indicate the fields being updated in
the operation's UpdateMask argument.
The following snippet demonstrates how to update the proposed spending limit
for an existing account budget.
Java
AccountBudgetProposal proposal = AccountBudgetProposal.newBuilder()
.setProposalType(AccountBudgetProposalType.UPDATE)
.setAccountBudget(accountBudget.getResourceName())
.setProposedSpendingLimitMicros(
accountBudget.getProposedSpendingLimitMicros().getValue() + increaseAmount)
.build();
AccountBudgetProposalOperation operation = AccountBudgetProposalOperation.newBuilder()
.setCreate(proposal)
.setUpdateMask(
FieldMask.newBuilder().addAllPaths(Arrays.asList("proposed_spending_limit")).build())
.build();
// Send request to Google Ads API (not shown).
C#
AccountBudgetProposal proposal = new AccountBudgetProposal()
{
ProposalType = AccountBudgetProposalType.Update,
AccountBudget = accountBudget.ResourceName,
ProposedSpendingLimitMicros = accountBudget.ProposedSpendingLimitMicros + increaseAmount
};
AccountBudgetProposalOperation operation = new AccountBudgetProposalOperation()
{
Create = proposal,
UpdateMask = new FieldMask()
{
Paths = { "proposed_spending_limit" }
}
};
// Send request to Google Ads API (not shown).
PHP
$accountBudgetProposal=newAccountBudgetProposal(['proposal_type'=>AccountBudgetProposalType::UPDATE,'account_budget'=>$accountBudget->getResourceName(),'proposed_spending_limit_micros'=>$accountBudget->getProposedSpendingLimitMicros()+$increaseAmount])$accountBudgetProposalOperation=newAccountBudgetProposalOperation();$accountBudgetProposalOperation->setCreate($accountBudgetProposal);$accountBudgetProposalOperation->setUpdateMask(FieldMasks::allSetFieldsOf($accountBudgetProposal));// Send request to Google Ads API (not shown).
my$account_budget_proposal=Google::Ads::GoogleAds::V22::Resources::AccountBudgetProposal->new({proposalType=>UPDATE,accountBudget=>$account_budget->{resourceName},proposedSpendingLimitMicros=>$account_budget->{proposedSpendingLimitMicros}+$increaseAmount});my$account_budget_proposal_operation=Google::Ads::GoogleAds::V22::Services::AccountBudgetProposalService::AccountBudgetProposalOperation->new({create=>$account_budget_proposal,updateMask=>all_set_fields_of($account_budget_proposal)});# Send request to Google Ads API (not shown).
Account budget chaining
As an alternative to updating the existing budget, Google Ads lets you chain
multiple account budgets to run in succession. In the following example, a
customer has different spending limits each month.
$proposalMay=newAccountBudgetProposal(['billing_setup'=>ResourceNames::forBillingSetup($customerId,$billingSetupId),'proposal_type'=>AccountBudgetProposalType::CREATE,'proposed_name'=>'Maybudget','proposed_start_date_time'=>'2018-05-01','proposed_end_date_time'=>'2018-06-01','proposed_spending_limit_micros'=>1000000000]);$proposalJune=newAccountBudgetProposal(['billing_setup'=>ResourceNames::forBillingSetup($customerId,$billingSetupId),'proposal_type'=>AccountBudgetProposalType::CREATE,'proposed_name'=>'Junebudget','proposed_start_date_time'=>'2018-06-01','proposed_end_date_time'=>'2018-07-01','proposed_spending_limit_micros'=>5000000000]);$proposalJuly=newAccountBudgetProposal(['billing_setup'=>ResourceNames::forBillingSetup($customerId,$billingSetupId),'proposal_type'=>AccountBudgetProposalType::CREATE,'proposed_name'=>'Julybudget','proposed_start_date_time'=>'2018-07-01','proposed_end_date_time'=>'2018-08-01','proposed_spending_limit_micros'=>1000000000]);// Send request to Google Ads API (not shown).
my$may_proposal=Google::Ads::GoogleAds::V22::Resources::AccountBudgetProposal->new({billingSetup=>Google::Ads::GoogleAds::V22::Utils::ResourceNames::billing_setup($customer_id,$billing_setup_id),proposalType=>CREATE,proposedName=>"May budget",proposedStartDateTime=>"2018-05-01",proposedEndDateTime=>"2018-06-01",proposedSpendingLimitMicros=>1000000000});my$june_proposal=Google::Ads::GoogleAds::V22::Resources::AccountBudgetProposal->new({billingSetup=>Google::Ads::GoogleAds::V22::Utils::ResourceNames::billing_setup($customer_id,$billing_setup_id),proposalType=>CREATE,proposedName=>"June budget",proposedStartDateTime=>"2018-06-01",proposedEndDateTime=>"2018-07-01",proposedSpendingLimitMicros=>5000000000});my$july_proposal=Google::Ads::GoogleAds::V22::Resources::AccountBudgetProposal->new({billingSetup=>Google::Ads::GoogleAds::V22::Utils::ResourceNames::billing_setup($customer_id,$billing_setup_id),proposalType=>CREATE,proposedName=>"July budget",proposedStartDateTime=>"2018-07-01",proposedEndDateTime=>"2018-08-01",proposedSpendingLimitMicros=>1000000000});# Send request to Google Ads API (not shown).
Note the use of
AccountBudgetProposalType.CREATE
on each proposal. This will create three distinct budgets, rather than updating
the same budget three times.
Terminate account budgets
Account budgets can be ended while active, and removed entirely prior to
starting or while pending approval.
End the active account budget
The active account budget cannot be removed. However, you can set the end time
to the current time. The simplest way to achieve this is to send a proposal with
AccountBudgetProposalType.END.
The following snippet demonstrates how to end an existing account budget.
AccountBudgetProposal proposal = new AccountBudgetProposal()
{
ProposalType = AccountBudgetProposalType.End,
AccountBudget = accountBudget.ResourceName
};
// Send request to Google Ads API (not shown).
PHP
$accountBudgetProposal=newAccountBudgetProposal(['proposal_type'=>AccountBudgetProposalType::END,'account_budget'=>$accountBudget->getResourceName()])// Send request to Google Ads API (not shown).
my$account_budget_proposal=Google::Ads::GoogleAds::V22::Resources::AccountBudgetProposal->new({proposalType=>END,accountBudget=>$account_budget->{resourceName});# Send request to Google Ads API (not shown).
This is equivalent to setting the updating an account budget by setting the end
date time to TimeType.NOW.
Removing an approved account budget before its start time
If you proposed an account budget to start in future, you can remove this
entirely prior to the start time by sending a
AccountBudgetProposalType.REMOVE
proposal type.
The following snippet demonstrates the removal of an existing future account
budget.
Java
AccountBudgetProposal.newBuilder()
.setProposalType(AccountBudgetProposalType.REMOVE)
.setAccountBudget(accountBudget.getResourceName())
.build();
// Send request to Google Ads API (not shown).
C#
AccountBudgetProposal proposal = new AccountBudgetProposal()
{
ProposalType = AccountBudgetProposalType.Remove,
AccountBudget = accountBudget.ResourceName
};
// Send request to Google Ads API (not shown).
PHP
$accountBudgetProposal=newAccountBudgetProposal(['proposal_type'=>AccountBudgetProposalType::REMOVE,'account_budget'=>$accountBudget->getResourceName()])// Send request to Google Ads API (not shown).
my$account_budget_proposal=Google::Ads::GoogleAds::V22::Resources::AccountBudgetProposal->new({proposalType=>REMOVE,accountBudget=>$account_budget->{resourceName});# Send request to Google Ads API (not shown).
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-12-03 UTC."],[],[]]