---
title: "Headline numbers for a project and window"
method: GET
path: "/projects/{project_id}/summary"
tags: ["Reports"]
---

# Headline numbers for a project and window

`GET /projects/{project_id}/summary`

## Request

- Base URL: `https://adslighthouse.com/api/v1`
- URL: `https://adslighthouse.com/api/v1/projects/{project_id}/summary`
- Auth: HTTP bearer

Returns the headline numbers of one project for a window and filters, in three blocks that match three app pages. overview (the Overview page) counts saved monitoring checks: checks_saved = search result pages saved; ads_observed = paid ad occurrences in them (one advertiser seen in ten checks counts ten times); advertiser_domains = distinct advertiser domains; active_keywords = keywords with paid monitoring on. paid_results (the Paid results page) also includes imported studies unless engine or country filters are set: observations = saved checks (the visibility denominator); each own domain's visibility = observations where it showed at least one ad / observations, not impression share; segments count advertiser domains tagged affiliate, brand_mention (the ad copy names the brand), coupon or lookalike, which are signals to review. affiliate_cases (the Non-compliant affiliates page) counts your affiliate IDs seen behind ads that used the brand, by review status. data_state says whether nothing was saved yet, nothing matched the selection, or checks found no ads: zero ads is a result only when checks were saved. Use this for triage; to compare periods, request the same filters for a previous comparable window, then inspect notable changes with get_timeseries or get_advertiser before recommending action. Defaults to the last 30 days in the person's time zone.

## Path parameters

- `project_id` string, required: The project: its id, its brand domain (for example nike.example) or its exact project or brand name. Unknown or ambiguous references return not_found; call list_projects then.

## Query parameters

- `range` '7d' | '14d' | '30d' | '12m' | 'custom': Window ending today: 7d, 14d, 30d (default) or 12m. Use custom with from and to for fixed dates.
- `from` string: First local day, YYYY-MM-DD (custom range).
- `to` string: Last local day, YYYY-MM-DD, included in full (custom range).
- `time_zone` string: IANA time zone for day boundaries, such as America/New_York. Defaults to the time zone of the person the credential acts for.
- `engine` union: Search engine, or a list of engines combined with OR.
  - 'google' | 'bing'
  - string[]
- `device` union: Device, or a list combined with OR.
  - 'desktop' | 'mobile'
  - string[]
- `os` union: Operating system. unspecified matches checks that did not pin one. Must fit the chosen device.
  - 'windows' | 'macos' | 'android' | 'ios' | 'unspecified'
  - string[]
- `country` union: ISO 3166-1 alpha-2 country code such as US, or a list.
  - string
  - string[]
- `location` union: Saved location key: code:<location code>, name:<label> or country:<ISO code>. get_project_details lists the keys that have data.
  - string
  - string[]

## Response `200`

Headline numbers for a project and window

- object
  - `project` object, required
    - `id` string, required
    - `name` string, required
  - `data_state` 'no_checks_saved' | 'no_checks_in_selection' | 'no_ads_found' | 'ads_found', required: no_checks_saved: the project has never saved a check. no_checks_in_selection: nothing matches this window and filters (no data, not zero). no_ads_found: checks were saved and none showed a paid ad. ads_found: at least one ad was observed.
  - `overview` object, required
    - `checks_saved` integer, required
    - `ads_observed` integer, required
    - `advertiser_domains` integer, required
    - `active_keywords` integer, required: Keywords with paid monitoring on, unfiltered.
    - `top_advertisers` object[], required: Up to five advertiser domains with the most ad occurrences.
      - `domain` string, required
      - `ads_observed` integer, required
  - `paid_results` object, required
    - `observations` integer, required
    - `ads_observed` integer, required
    - `advertiser_domains` integer, required
    - `other_advertisers` integer, required: Advertiser domains that are not your own.
    - `segments` object, required
      - `affiliate` integer, required
      - `brand_mention` integer, required
      - `coupon` integer, required
      - `lookalike` integer, required
    - `own_domains` object[], required
      - `domain` string, required
      - `visibility` number, required
      - `observations_with_ads` integer, required
      - `ads_observed` integer, required
    - `policy_reviews` object, required: Automated first reading of ads that use the brand in their copy, against the advertising policy on trademarks and misrepresentation. It is a triage aid, not a legal finding.
      - `reviewed_ads` integer, required: Saved Google ads with an automated policy review.
      - `likely_policy_concern` integer, required
      - `needs_review` integer, required
      - `likely_allowed` integer, required
      - `insufficient_evidence` integer, required
      - `pending` integer, required: Queued, not reviewed yet.
      - `unavailable` integer, required: The review could not be completed.
  - `affiliate_cases` object, required
    - `configured` boolean, required: False when no affiliate URL parameter is set, so nothing can be detected.
    - `total` integer, required
    - `new` integer, required
    - `in_progress` integer, required
    - `resolved` integer, required
    - `ignored` integer, required
  - `note` string, nullable, required: A caution about sample size or configuration to repeat when reporting results.
  - `window` object, required
    - `from` string, required: First local day included, YYYY-MM-DD.
    - `to` string, required: Last local day included, YYYY-MM-DD.
    - `time_zone` string, required
    - `start` string, required: Inclusive start instant, ISO 8601.
    - `end` string, required: Exclusive end instant, ISO 8601.
  - `request_id` string

## Other responses

- `400`: Invalid parameters, cursor or body.
- `401`: Missing, invalid, expired or revoked credential.
- `403`: The credential lacks the write scope, the plan does not include the API, or the allowance is used up.
- `404`: Unknown project, keyword or run in this account.
- `409`: The idempotency key was already used for a different request.
- `429`: Rate limit reached. Retry after the Retry-After seconds.
- `503`: The requested service or file is temporarily unavailable.

---

[API](https://skmtc.dev/adslighthouse/apis/ads-lighthouse-api.md) · [All operations](https://skmtc.dev/adslighthouse/apis/ads-lighthouse-api/llms.txt) · [OpenAPI document](https://skmtc.dev/adslighthouse/apis/ads-lighthouse-api/revisions/e1a4a40b11a9?raw)
