---
title: "Suggest Google Ads setup targeting"
method: POST
path: "/api/apps/{app_id}/google-ads/setup-suggestions"
---

# Suggest Google Ads setup targeting

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

## Request

- Base URL: `https://app.base44.com`
- URL: `https://app.base44.com/api/apps/{app_id}/google-ads/setup-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>

Suggests where to advertise, which keyword themes to target, and which conversions to track for the app's first campaign, read from the app itself.

A language model reads the app's name, description, pages, data entities and page source once, then Base44 resolves the places it names to real Google locations. Everything here is a suggestion for someone to confirm. Nothing is saved, and the app does not need a Google Ads account yet.

The call never fails on the suggestions themselves. When the app has nothing to read, the model fails or answers with nothing usable, or Google can't resolve a place, the affected lists come back empty under a 200, so an empty list means "no suggestion" rather than "none apply". `conversion_categories` in particular is empty unless the app already has the flow behind a goal, such as a booking page or a checkout. Expect it to take 30 seconds or more.

Once the app has a provisioned Google Ads account, [Suggest Google Ads setup keyword themes](/api-reference/suggest-google-ads-setup-keyword-themes) gets Google's own themes for the locations you settle on. Use those first and fill up from `keyword_themes`.

<Note>This endpoint runs a language model and draws on a shared quota of 20 requests per minute per app, which every Google Ads AI endpoint debits. Enterprise workspaces get a higher quota. A 429 means the quota is spent, not that this endpoint has its own limit.</Note>

It is refused with a 409 while the workspace is on a Google Ads billing hold. Running the model does not spend credits.

<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>

## Path parameters

- `app_id` string, required: ID of the app you are setting up Google Ads for.

## Response `200`

Suggested locations, keyword themes and conversion goals.

- GoogleAdsSetupSuggestions: Suggested targeting and conversion goals for a first campaign.
  - `geo_targets` GoogleAdsSetupLocation[], required: Up to 10 locations worth advertising in, one per place the model named. Empty when it couldn't tell.
    - `resource_name` string, required: Google's identifier for the location. Pass it in `geo_targets` when you create a campaign.
    - `name` string, required: The location's own name.
    - `canonical_name` string, required: The location's full path, including its region and country.
    - `country_code` string, required: ISO 3166-1 alpha-2 country code the location sits in.
    - `reach` union, required: Google's estimate of how many people can be reached in this location. Google sends this 64-bit integer as a string of digits, so parse it before comparing. It is the number `0` when Google gives no estimate.
      - string
      - integer
  - `keyword_themes` string[], required: Up to 25 search themes a buyer might type, best first, in the app's own language.
  - `conversion_categories` string[], required: Conversion goals worth tracking because the app already has the flow behind them, from `PURCHASE`, `ADD_TO_CART`, `BEGIN_CHECKOUT`, `SUBSCRIBE_PAID`, `SUBMIT_LEAD_FORM`, `BOOK_APPOINTMENT`, `REQUEST_QUOTE`, `CONTACT`, `PHONE_CALL_LEAD` and `SIGNUP`. Often empty.
  - `language_code` string, required: Two-letter code of the language `keyword_themes` is written in, as the model reported it. Empty when it couldn't tell. Pass it to [Suggest Google Ads setup keyword themes](/api-reference/suggest-google-ads-setup-keyword-themes).
  - `limits` GoogleAdsTargetingLimits, required: The limits a campaign's keyword themes and excluded terms have to fit.
    - `max_keyword_themes` integer, required: Most keyword themes a campaign can have.
    - `max_excluded_terms` integer, required: Most excluded search terms a campaign can have.
    - `term_max_len` integer, required: Most characters in one theme or excluded term.
    - `term_max_words` integer, required: Most words in one theme or excluded term.

## Other responses

- `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.
- `409`: The workspace is on a Google Ads billing hold.
- `429`: The app has used up its 20 language-model requests a minute. 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/setup-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)
