Stay organized with collectionsSave and categorize content based on your preferences.
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 theAccountBudgetby sendingAccountBudgetProposalobjects.
AccountBudgetobjects 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 theproposal_typespecified 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::V21::Resources::AccountBudgetProposal->new({billingSetup=>Google::Ads::GoogleAds::V21::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::V21::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_timeandproposed_end_date_timeare always in the customer's account timezone; you cannot specify a timezone.
Theproposed spending limitis 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 anAccountBudgetProposalOperation Removerequest 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::V21::Services::AccountBudgetProposalService::AccountBudgetProposalOperation->new({remove=>Google::Ads::GoogleAds::V21::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 anUPDATEoperation. Refer toUpdate 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 asproposedandapprovedthat allow for comparing the values that were initially proposed with
those that were approved. The spending limit has additional fields with theadjustedprefix 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 informationabout account budgetsandaccount credits and adjustmentscan 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 anpending_proposalfield
that can be selected. It will containthe resource IDof the associatedAccountBudgetProposalobject.
Manage existing account budgets
After you create an account budget for a customer, you can use theAccountBudgetProposalServiceto
manage the budget parameters. The most common management operations are to
update thespending_limitandend_date_timefields. For a complete list of
the mutable fields, refer to theAccountBudgetProposaldocument.
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 sendingAccountBudgetProposalobjects withAccountBudgetProposalTypeset toUPDATE. Note that you must also indicate the fields being updated in
the operation'sUpdateMaskargument.
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::V21::Resources::AccountBudgetProposal->new({proposalType=>UPDATE,accountBudget=>$account_budget->{resourceName},proposedSpendingLimitMicros=>$account_budget->{proposedSpendingLimitMicros}+$increaseAmount});my$account_budget_proposal_operation=Google::Ads::GoogleAds::V21::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::V21::Resources::AccountBudgetProposal->new({billingSetup=>Google::Ads::GoogleAds::V21::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::V21::Resources::AccountBudgetProposal->new({billingSetup=>Google::Ads::GoogleAds::V21::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::V21::Resources::AccountBudgetProposal->new({billingSetup=>Google::Ads::GoogleAds::V21::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 ofAccountBudgetProposalType.CREATEon 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 withAccountBudgetProposalType.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::V21::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 toTimeType.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 aAccountBudgetProposalType.REMOVEproposal 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::V21::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-09-03 UTC."],[[["\u003cp\u003eAccount Budgets control Google Ads account spending by setting limits and timeframes, managed through Account Budget Proposals.\u003c/p\u003e\n"],["\u003cp\u003eProposals are used to create, update, or remove account budgets, and are reviewed by Google before taking effect.\u003c/p\u003e\n"],["\u003cp\u003eOnly one active budget is allowed per customer, with new budgets needing to start after existing ones end.\u003c/p\u003e\n"],["\u003cp\u003eYou can retrieve and manage existing budgets using the Google Ads API, including updating spending limits and end dates.\u003c/p\u003e\n"],["\u003cp\u003eBudget chaining allows for sequential budgets by creating multiple proposals with specific start and end times.\u003c/p\u003e\n"]]],[],null,[]]