---
title: "Estimate a Google Ads campaign budget"
method: POST
path: "/api/apps/{app_id}/google-ads/campaigns/estimate"
---

# Estimate a Google Ads campaign budget

`POST /api/apps/{app_id}/google-ads/campaigns/estimate`

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

Asks Google to forecast the clicks and spend a set of keyword themes would produce, so you can show a projection before a campaign is created.

Send the themes you are considering, as they would go to [Create campaign](/api-reference/create-google-ads-campaign). Nothing is saved.

Google's planner picks the budget it forecasts at — it does not take one — so the figures come back for Google's own recommended daily budget, which `estimated_monthly_cost` reports.

Google forecasts for a landing page in specific places, so a request without `landing_page` or without at least one `geo_targets` entry is rejected with a 400 before it reaches Google.

The forecast comes from Google's own planner, so it needs a connected Google Ads account that has finished provisioning. An account that exists but has no Google customer ID yet is rejected with a 400; wait for provisioning to finish and retry.

`estimated_monthly_cost` is in micros and covers 30 days.

<Note>Each call asks Google's planner, so this endpoint has its own quota of 10 requests per minute per app — separate from the AI pool. A 429 means that quota is spent; retry in a minute.</Note>

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

## Path parameters

- `app_id` string, required — ID of the app you are planning a Google Ads campaign for.

## Request body

- BudgetEstimateRequest
  - `landing_page` string — Landing page the campaign would send clicks to. Required for a forecast.
  - `geo_targets` string[] — Locations to forecast for, as Google geo target constant IDs (`geoTargetConstants/1023191`, or just `1023191`). At least one is required for a forecast.
  - `keyword_themes` string[] — Themes the campaign would match on. An empty list forecasts nothing useful.
  - `language_code` string — Two-letter language the ads would run in. Defaults to `en`.
  - `business_name` string — Business name, which sharpens Google's forecast.
  - `daily_budget` integer — Daily budget you have in mind, in micros (1,000,000 micros = 1 unit of the account's currency). Google's planner chooses the budget it forecasts at, so this is only reported back when Google returns no recommendation of its own.

## Response `200`

Google's forecast for the themes and locations you sent.

- GoogleAdsBudgetEstimate — Google's forecast for a set of keyword themes in a set of locations.
  - `estimated_daily_clicks_low` integer, required — Low end of Google's forecast daily clicks.
  - `estimated_daily_clicks_high` integer, required — High end of Google's forecast daily clicks.
  - `estimated_monthly_cost` integer, required — Forecast spend over 30 days, in micros (1,000,000 micros = 1 unit of the account's currency). This is the recommended daily budget times 30, so it is a 30-day figure rather than a calendar month, and it can differ from the `daily_budget` you sent.

## Other responses

- `400` — The Google Ads account has not finished provisioning, or the request has no landing page / target locations.
- `401` — Missing or invalid credentials.
- `403` — You don't have access to this app, the app does not exist, or you used a workspace API key. A missing app and an app you cannot reach are deliberately the same answer.
- `404` — The app has no connected Google Ads account.
- `422` — Validation Error
- `429` — This endpoint's own forecast quota for this app is spent. Retry in a minute.

## Changes

- **2026-09-18** `f70e515893d2` — 5 info
  - added the new optional request property `business_name`
  - added the new optional request property `geo_targets`
  - added the new optional request property `landing_page`
  - added the new optional request property `language_code`
  - …1 more

[Change history](https://skmtc.dev/base44/apis/base44-app-management-api/changes/api/apps/:app_id/google-ads/campaigns/estimate/post.md)

---

[API](https://skmtc.dev/base44/apis/base44-app-management-api.md) · [All operations](https://skmtc.dev/base44/apis/base44-app-management-api/llms.txt) · [OpenAPI document](https://skmtc.dev/base44/apis/base44-app-management-api/revisions/cf164639a9bf?raw)
