Stay organized with collectionsSave and categorize content based on your preferences.
4.3.2 Consolidated Billing Option
The following figure shows a recommended way to organize Google Ads manager
accounts and advertiser accounts.
The following notes refer to the numbers in the figure above:
A consolidated bill (CB) has a 15K limit on the number of accounts or
invoices that can be added. If the first consolidated bill (CB US1) reaches 15K
invoices or accounts, all upcoming invoices or accounts should be added to CB
US2.
Consolidated billing can be set up for your manager account by applying
through theConsolidated billing application form. You must first have an
approved line of credit with Google; if you don't have one yet, you can apply
for one through theContact Google form.
Inactive accounts (churned) can be moved into another manager account.
Separating these accounts helps you stay within the 15K limit. As a precaution,
we recommend that you remove the budget order for these accounts so that they
can't continue to spend unless manually re-activated.
If your integration allows users to use existing Ads accounts, create a
separate manager account for these. Consolidated billing shouldn't be used for
existing accounts, as they may already be spending on other campaign types and
are likely to already have direct billing set up.
To set up consolidated billing directly in the Google Ads UI, follow the
instructions inSet up consolidated billing.
Tech Guidance
To set up and manage billing for merchant Google Ads accounts using the API,
useBillingSetupresources to get and manage account-wide billing
configuration. A billing setup is an association between aPayments accountand a specific Google Ads account. It effectively
determines who pays for an advertiser's account. Follow theBilling Setup instructions.
Manage account budgets
Anaccount budgetdefines account-level budget properties, such as start
time, end time, and spending limit. All changes to account budgets are done by
submitting separate account budget proposals, which, after being reviewed and
approved, become account budgets. UseAccountBudgetProposalresources
to create newAccountBudgetsor update existing ones.
The following examples show how to create a new budget proposal:
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::V24::Resources::AccountBudgetProposal->new({billingSetup=>Google::Ads::GoogleAds::V24::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::V24::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;}
To update account budgets, use theAccountBudgetProposalServiceto
manage the budget parameters. The most common management operations are to
update the spending limit and date-time fields. For a complete list of the
mutable fields, seeAccountBudgetProposal. The following example shows
how to update the proposed spending limit for an existing account budget.
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::V24::Resources::AccountBudgetProposal->new({billingSetup=>Google::Ads::GoogleAds::V24::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::V24::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;}
To terminate an active account budget, set the end time to the current time by
sending a proposal withAccountBudgetProposalType.END.
Issue invoices
An invoice is issued monthly when enabled by the advertiser. Invoices contain
details such as adjustments, regulatory costs, taxes and account budgets, and
can be downloaded as PDF files. As a manager, you typically use them to
automatically reconcile your own customer invoices. You need the following to
enable invoicing:
Havemonthly invoicingenabled for the Google Ads account. See the
guides on accountbilling setupsandbudgetsto learn how to manage
billing using the Google Ads API.
If set,login-customer-idmust specify the customer ID of a manager
account that is managing the Google Ads account for which you're retrieving
invoices. This is labeled as thepaying managerin the Google Ads UI.
RetrieveInvoiceresources for invoice data using theInvoiceService. Request theInvoiceService.ListInvoicesmethod,
setting all the required fields in theListInvoicesRequest:customer_id,billing_setup,issue_year, andissue_month. The following
examples show how to make this request:
# Issues a request to list invoices.response=client.get_service("InvoiceService").list_invoices(customer_id=customer_id,billing_setup=client.get_service("GoogleAdsService").billing_setup_path(customer_id,billing_setup_id),# The year needs to be 2019 or later, per the docs:# https://developers.google.com/google-ads/api/docs/billing/invoice?hl=en#retrieving_invoicesissue_year=str(last_month.year),issue_month=last_month.strftime("%B").upper(),)
# Issues a request to list invoices.response=client.service.invoice.list_invoices(customer_id:customer_id,billing_setup:client.path.billing_setup(customer_id,billing_setup_id),# The year needs to be 2019 or later.issue_year:last_month.year.to_s,# '%^B' option returns the uppercased full month name (e.g. 'JANUARY').issue_month:last_month.strftime("%^B").to_sym,)
# Issue the request.my$response=$api_client->InvoiceService()->list({customerId=>$customer_id,billingSetup=>Google::Ads::GoogleAds::V24::Utils::ResourceNames::billing_setup(($customer_id,$billing_setup_id)),# The year needs to be 2019 or later.issueYear=>strftime("%Y",@last_month),issueMonth=>uc(strftime("%B",@last_month))});
The response is aListInvoicesResponseobject that contains the list of
matchingInvoices. An invoice combines data of all the Google Ads
accounts with billing setups that use the same underlying Payments account as
the one used by the requested billing setup. This happens only when the
underlying Payments account is eligible forconsolidated billing.
[[["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 2026-03-02 UTC."],[],[]]