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

# List Google Ads campaign optimization suggestions

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

Returns what to change on one campaign: budget, tracking and policy problems Base44 spotted, plus Google Ads' own recommendations for that campaign.

Base44's own suggestions are computed from its stored metrics for the last 14 days, so they cost no Google call. Google's recommendations for this campaign are merged in on top and carry `source` set to `google` along with `recommendation_type`; Base44's own suggestions have neither field, which is how you tell them apart.

When Google cannot be reached you still get a 200 with Base44's own suggestions only, and nothing in the response says the Google half is missing. An empty array means nothing needs attention.

A suggestion with `recommendation_type` `CAMPAIGN_BUDGET` can be applied with [Apply budget recommendation](/api-reference/apply-a-google-ads-budget-recommendation).

<Warning>The response includes fields beyond the ones documented here. Don't rely on undocumented response fields, as they can change at any time.</Warning>

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



## OpenAPI

````yaml /developers/references/app-management/app-management-openapi.json get /api/apps/{app_id}/google-ads/campaigns/{campaign_id}/optimization-suggestions
openapi: 3.1.0
info:
  title: Base44 App Management API
  version: 1.0.0
servers:
  - url: https://app.base44.com
security:
  - ApiKeyAuth: []
paths:
  /api/apps/{app_id}/google-ads/campaigns/{campaign_id}/optimization-suggestions:
    get:
      summary: List Google Ads campaign optimization suggestions
      description: >-
        <Info>This API is in beta. Endpoints, fields, and behavior may still
        change, so avoid depending on it in production.</Info>


        Returns what to change on one campaign: budget, tracking and policy
        problems Base44 spotted, plus Google Ads' own recommendations for that
        campaign.


        Base44's own suggestions are computed from its stored metrics for the
        last 14 days, so they cost no Google call. Google's recommendations for
        this campaign are merged in on top and carry `source` set to `google`
        along with `recommendation_type`; Base44's own suggestions have neither
        field, which is how you tell them apart.


        When Google cannot be reached you still get a 200 with Base44's own
        suggestions only, and nothing in the response says the Google half is
        missing. An empty array means nothing needs attention.


        A suggestion with `recommendation_type` `CAMPAIGN_BUDGET` can be applied
        with [Apply budget
        recommendation](/api-reference/apply-a-google-ads-budget-recommendation).


        <Warning>The response includes fields beyond the ones documented here.
        Don't rely on undocumented response fields, as they can change at any
        time.</Warning>


        <Note>This endpoint accepts a personal API key. Workspace API keys are
        not authorized for it and are rejected with a 403.</Note>
      operationId: >-
        campaign_optimization_suggestions_api_apps__app_id__google_ads_campaigns__campaign_id__optimization_suggestions_get
      parameters:
        - name: app_id
          in: path
          required: true
          schema:
            type: string
            description: ID of the app whose Google Ads campaigns to manage.
            title: App Id
          description: ID of the app whose Google Ads campaigns to manage.
          example: 6820f3a4e7b91d003c45a1f2
        - name: campaign_id
          in: path
          required: true
          schema:
            type: string
            description: >-
              Base44's ID for the campaign, as returned in `id` by [List
              campaigns](/api-reference/list-google-ads-campaigns). This is not
              the Google Ads campaign ID, which is reported separately as
              `google_campaign_id`.
            title: Campaign Id
          description: >-
            Base44's ID for the campaign, as returned in `id` by [List
            campaigns](/api-reference/list-google-ads-campaigns). This is not
            the Google Ads campaign ID, which is reported separately as
            `google_campaign_id`.
          example: 68b1c0d4e7b91d003c45a1f2
      responses:
        '200':
          description: What to change on this campaign.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/AccountInsight'
                title: GoogleAdsCampaignOptimizationSuggestions
        '401':
          description: Missing or invalid credentials.
        '403':
          description: >-
            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':
          description: >-
            The app has no connected Google Ads account, or there is no campaign
            with this ID.
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
components:
  schemas:
    AccountInsight:
      properties:
        id:
          type: string
          title: Id
          description: >-
            Stable ID for the suggestion. Pass it as `insight_id` to [Dismiss
            insight](/api-reference/dismiss-google-ads-insight) to stop it
            coming back.
          example: increase_budget:21458812345
        severity:
          type: string
          title: Severity
          description: 'How urgent the suggestion is: `high`, `medium`, or `low`.'
          example: medium
        title:
          type: string
          title: Title
          description: One-line summary of the suggestion.
          example: Increase budget for Spring sale - Search
        description:
          type: string
          title: Description
          description: The suggestion in full, written for an app owner to read as-is.
          example: >-
            This campaign is consistently spending its full daily budget.
            Raising it could capture more clicks and conversions.
        action:
          anyOf:
            - type: string
            - type: 'null'
          title: Action
          description: >-
            What resolving the suggestion involves: `edit_budget`,
            `edit_sitelinks`, `improve_assets`, or `open_campaign`. `null` when
            Base44 could not resolve a campaign to act on.
          example: edit_budget
        action_payload:
          additionalProperties: true
          type: object
          title: Action Payload
          description: >-
            The values the suggestion proposes. `campaign_ids` names the
            campaigns it applies to, `field` and `value` carry a proposed budget
            in micros where there is one.
          example:
            campaign_ids:
              - 68b1c0d4e7b91d003c45a1f2
            field: budget
            value: 30000000
        source:
          anyOf:
            - type: string
            - type: 'null'
          title: Source
          description: >-
            `google` when the suggestion is Google Ads' own recommendation
            rather than Base44's. Absent on Base44's own suggestions.
          example: google
        recommendation_type:
          anyOf:
            - type: string
            - type: 'null'
          title: Recommendation Type
          description: >-
            Present with `source`. `CAMPAIGN_BUDGET` for a Google budget
            recommendation, `AD_STRENGTH_DROP` for an ad-strength one.
          example: CAMPAIGN_BUDGET
      type: object
      required:
        - id
        - severity
        - title
        - description
      title: AccountInsight
      description: One suggestion in the account's insight feed.
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    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
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: api_key
      description: Personal API key.

````