---
title: "List Google Ads insights"
method: GET
path: "/api/apps/{app_id}/google-ads/analytics/insights"
---

# List Google Ads insights

`GET /api/apps/{app_id}/google-ads/analytics/insights`

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

Returns the account's suggestion feed for a date window: what to change, on which campaigns, and how urgent it is.

The feed merges Base44's own suggestions with Google Ads' budget recommendations and ad-strength findings. Base44 removes the overlaps, so a campaign that both sides flag for the same reason appears once. Suggestions you dismissed are left out.

`action_payload.campaign_ids` holds Base44 campaign IDs on Base44's own suggestions, and Google Ads campaign IDs on ad-strength ones (`recommendation_type` `AD_STRENGTH_DROP`). Check `recommendation_type` before passing an ID to another endpoint.

Google's half of the feed is best-effort: when Google Ads is unavailable you get Base44's suggestions alone, under a 200 and with nothing in the response to say so.

An account with no synced campaigns returns an empty list.

<Note>`start_date` and `end_date` are inclusive and must both be `YYYY-MM-DD`. Anything else is rejected with a 400.</Note>

<Note>This endpoint accepts a personal API key. Workspace API keys are not authorized for it and are rejected with a 403.</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.</Warning>

## Path parameters

- `app_id` string, required — ID of the app whose Google Ads reporting you want to read.

## Query parameters

- `start_date` string, required — First day of the window, as `YYYY-MM-DD`. Inclusive.
- `end_date` string, required — Last day of the window, as `YYYY-MM-DD`. Inclusive.

## Response `200`

The account's suggestions, most urgent first.

- AccountInsight[]
  - `id` string, required — Stable ID for the suggestion. Pass it as `insight_id` to [Dismiss insight](/api-reference/dismiss-google-ads-insight) to stop it coming back.
  - `severity` string, required — How urgent the suggestion is: `high`, `medium`, or `low`.
  - `title` string, required — One-line summary of the suggestion.
  - `description` string, required — The suggestion in full, written for an app owner to read as-is.
  - `action` string, nullable — 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.
  - `action_payload` object — 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.
  - `source` string, nullable — `google` when the suggestion is Google Ads' own recommendation rather than Base44's. Absent on Base44's own suggestions.
  - `recommendation_type` string, nullable — Present with `source`. `CAMPAIGN_BUDGET` for a Google budget recommendation, `AD_STRENGTH_DROP` for an ad-strength one.

## Other responses

- `400` — `start_date` or `end_date` is not `YYYY-MM-DD`.
- `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

## Changes

- **2026-08-26** `f2727732ced1` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/idealspot/apis/base44-app-management-api/changes/api/apps/:app_id/google-ads/analytics/insights/get.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-service-production.skmtc.workers.dev/v1/apis/idealspot/base44-app-management-api/revisions/394136a6cdd4/schema)
