---
title: "Suggest Google Ads budget options"
method: POST
path: "/api/apps/{app_id}/google-ads/campaigns/suggestions"
---

# Suggest Google Ads budget options

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

## Request

- Base URL: `https://app.base44.com`
- URL: `https://app.base44.com/api/apps/{app_id}/google-ads/campaigns/suggestions`
- Auth: HTTP bearer

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

Asks Google's Smart campaign planner for a low, a recommended and a high daily budget for a set of keyword themes, each with its daily click forecast.

The response is Google's own answer, passed through as Google sends it. That is why its fields are camelCase and its numbers are strings, unlike the rest of this API, and why a value of `0` is left out rather than sent. Any tier can be missing. [Estimate a Google Ads campaign budget](/api-reference/estimate-a-google-ads-campaign-budget) makes the same planner call and returns one recommended forecast in this API's usual shape, so prefer it unless you need all three tiers.

Google needs a landing page and at least one location, so a request without an `http` or `https` `landing_page` or without a usable `geo_targets` entry is rejected with a 400 before it reaches Google. Entries in `geo_targets` that are not geo target constant IDs are dropped. Nothing is saved.

The app needs a connected Google Ads account that has finished provisioning. Check that `google_customer_id` in [Get Google Ads account](/api-reference/get-google-ads-account) is not empty before you call this.

This shares a quota of 10 requests a minute per app with [Estimate a Google Ads campaign budget](/api-reference/estimate-a-google-ads-campaign-budget). Some workspaces have a different limit. It is refused with a 409 while the workspace is on a Google Ads billing hold.

<Note>This endpoint accepts a personal API key from anyone who can edit the app. A read-only key is refused with a 403, and so are workspace API keys.</Note>

<Warning>The response includes fields beyond the ones documented here. Don't rely on undocumented response fields, as they can change at any time. Send only the fields documented here. Other request fields are not supported and their behavior can change.</Warning>

## Path parameters

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

## Request body

- SuggestionsRequest
  - `keyword_themes` string[]: Themes the campaign would match on, up to 25.
  - `landing_page` string, nullable: Page the campaign would send clicks to, as an `http` or `https` URL. Required: a request without one is rejected with a 400.
  - `geo_targets` string[]: Locations to plan for, up to 50, as Google geo target constant IDs (`geoTargetConstants/1023191`, or just `1023191`). Entries in any other form are dropped, and at least one usable entry is required.
  - `language_code` string: Two-letter code of the language the ads would run in. A missing or unsupported code plans in English.
  - `business_name` string: Business name, which sharpens Google's forecast. Only the first 120 characters are used.

## Response `200`

Google's budget options, as Google sent them.

- GoogleAdsBudgetOptions: Google's low, recommended and high daily budgets for a Smart campaign.
  - `low` GoogleAdsBudgetOption: One daily budget Google suggests, with its forecast.
    - `dailyAmountMicros` string: The suggested daily budget in micros of the account currency, as a string, so `"30000000"` is 30.00.
    - `metrics` GoogleAdsBudgetOptionMetrics: Google's daily click forecast for one budget option.
      - `minDailyClicks` string: Low end of the forecast daily clicks. Google sends 64-bit integers as strings, and leaves the field out when it is `0`.
      - `maxDailyClicks` string: High end of the forecast daily clicks, as a string. Left out when it is `0`.
  - `recommended` GoogleAdsBudgetOption: One daily budget Google suggests, with its forecast.
    - `dailyAmountMicros` string: The suggested daily budget in micros of the account currency, as a string, so `"30000000"` is 30.00.
    - `metrics` GoogleAdsBudgetOptionMetrics: Google's daily click forecast for one budget option.
      - `minDailyClicks` string: Low end of the forecast daily clicks. Google sends 64-bit integers as strings, and leaves the field out when it is `0`.
      - `maxDailyClicks` string: High end of the forecast daily clicks, as a string. Left out when it is `0`.
  - `high` GoogleAdsBudgetOption: One daily budget Google suggests, with its forecast.
    - `dailyAmountMicros` string: The suggested daily budget in micros of the account currency, as a string, so `"30000000"` is 30.00.
    - `metrics` GoogleAdsBudgetOptionMetrics: Google's daily click forecast for one budget option.
      - `minDailyClicks` string: Low end of the forecast daily clicks. Google sends 64-bit integers as strings, and leaves the field out when it is `0`.
      - `maxDailyClicks` string: High end of the forecast daily clicks, as a string. Left out when it is `0`.

## Other responses

- `400`: The request has no `http` or `https` `landing_page` or no usable `geo_targets` entry, or Google Ads rejected the request.
- `401`: Missing or invalid credentials.
- `403`: You can't edit this app, the app does not exist, or you used a read-only or 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.
- `409`: The workspace is on a Google Ads billing hold.
- `422`: Validation Error
- `429`: The app has used up the 10 planner requests a minute it shares with Estimate a Google Ads campaign budget, or Google Ads is rate limiting the account. Retry later.

## Changes

- **2026-10-11** `80287813ab84`: 1 info
  - the endpoint scheme security `PersonalAccessTokenAuth` was added to the API
- **2026-10-10** `fc604cdcc3a2`: 1 info
  - endpoint added

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

---

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