> ## Documentation Index
> Fetch the complete documentation index at: https://docs.base44.com/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> Internal links on these pages omit the .md extension. Append .md to a docs page URL, or send an Accept: text/markdown header, to get that page as markdown.

# Suggest Google Ads budget options

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



## OpenAPI

````yaml /developers/references/app-management/app-management-openapi.json post /api/apps/{app_id}/google-ads/campaigns/suggestions
openapi: 3.1.0
info:
  title: Base44 App Management API
  version: 1.0.0
servers:
  - url: https://app.base44.com
security:
  - PersonalAccessTokenAuth: []
paths:
  /api/apps/{app_id}/google-ads/campaigns/suggestions:
    post:
      summary: Suggest Google Ads budget options
      description: >-
        <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>
      operationId: get_suggestions_api_apps__app_id__google_ads_campaigns_suggestions_post
      parameters:
        - name: app_id
          in: path
          required: true
          schema:
            type: string
            description: ID of the app you are planning a Google Ads campaign for.
            title: App Id
          description: ID of the app you are planning a Google Ads campaign for.
          example: 6820f3a4e7b91d003c45a1f2
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SuggestionsRequest'
      responses:
        '200':
          description: Google's budget options, as Google sent them.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GoogleAdsBudgetOptions'
        '400':
          description: >-
            The request has no `http` or `https` `landing_page` or no usable
            `geo_targets` entry, or Google Ads rejected the request.
        '401':
          description: Missing or invalid credentials.
        '403':
          description: >-
            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':
          description: The app has no connected Google Ads account.
        '409':
          description: The workspace is on a Google Ads billing hold.
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
        '429':
          description: >-
            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.
components:
  schemas:
    SuggestionsRequest:
      properties:
        keyword_themes:
          items:
            type: string
          type: array
          maxItems: 25
          title: Keyword Themes
          description: Themes the campaign would match on, up to 25.
          example:
            - handmade oak furniture
            - custom dining tables
        landing_page:
          anyOf:
            - type: string
            - type: 'null'
          title: Landing Page
          description: >-
            Page the campaign would send clicks to, as an `http` or `https` URL.
            Required: a request without one is rejected with a 400.
          example: https://example.com/furniture
        geo_targets:
          items:
            type: string
          type: array
          maxItems: 50
          title: Geo Targets
          description: >-
            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.
          example:
            - '1023191'
        language_code:
          type: string
          title: Language Code
          description: >-
            Two-letter code of the language the ads would run in. A missing or
            unsupported code plans in English.
          default: ''
          example: en
        business_name:
          type: string
          title: Business Name
          description: >-
            Business name, which sharpens Google's forecast. Only the first 120
            characters are used.
          default: ''
          example: Oakline Furniture
      type: object
      title: SuggestionsRequest
    GoogleAdsBudgetOptions:
      properties:
        low:
          anyOf:
            - $ref: '#/components/schemas/GoogleAdsBudgetOption'
            - type: 'null'
          description: >-
            The lowest budget Google suggests. Absent or `null` when Google has
            no tier at this level.
        recommended:
          anyOf:
            - $ref: '#/components/schemas/GoogleAdsBudgetOption'
            - type: 'null'
          description: The budget Google recommends. Absent or `null` when Google has none.
        high:
          anyOf:
            - $ref: '#/components/schemas/GoogleAdsBudgetOption'
            - type: 'null'
          description: >-
            The highest budget Google suggests. Absent or `null` when Google has
            no tier at this level.
      type: object
      title: GoogleAdsBudgetOptions
      description: Google's low, recommended and high daily budgets for a Smart campaign.
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    GoogleAdsBudgetOption:
      properties:
        dailyAmountMicros:
          type: string
          title: Dailyamountmicros
          description: >-
            The suggested daily budget in micros of the account currency, as a
            string, so `"30000000"` is 30.00.
          default: '0'
          example: '30000000'
        metrics:
          anyOf:
            - $ref: '#/components/schemas/GoogleAdsBudgetOptionMetrics'
            - type: 'null'
          description: >-
            Google's click forecast at this budget. Absent or `null` when Google
            has none.
      type: object
      title: GoogleAdsBudgetOption
      description: One daily budget Google suggests, with its forecast.
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError
    GoogleAdsBudgetOptionMetrics:
      properties:
        minDailyClicks:
          type: string
          title: Mindailyclicks
          description: >-
            Low end of the forecast daily clicks. Google sends 64-bit integers
            as strings, and leaves the field out when it is `0`.
          default: '0'
          example: '12'
        maxDailyClicks:
          type: string
          title: Maxdailyclicks
          description: >-
            High end of the forecast daily clicks, as a string. Left out when it
            is `0`.
          default: '0'
          example: '31'
      type: object
      title: GoogleAdsBudgetOptionMetrics
      description: Google's daily click forecast for one budget option.
  securitySchemes:
    PersonalAccessTokenAuth:
      type: http
      scheme: bearer
      description: 'Personal access token, sent as `Authorization: Bearer <token>`.'

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.