---
title: "List Top Cited Urls"
method: GET
path: "/v1/visibility/citations"
tags: ["Visibility"]
---

# List Top Cited Urls

`GET /v1/visibility/citations`

## Request

- Base URL: `https://api.lightsage.com`
- URL: `https://api.lightsage.com/v1/visibility/citations`
- Auth: API key in header `X-Lightsage-Api-Key`

Returns the most cited URLs for GEO analysis and outreach.

Returns URL-level citation counts ranked from most to least cited. Results
can be filtered to a single answer platform such as ChatGPT and to owned or
external sources. Counts include only runs from currently active prompts.

## Query parameters

- `start_date` string, date
- `end_date` string, date
- `platform` string
- `source_type` 'all' | 'owned' | 'external'
- `limit` integer

## Response `200`

Successful Response

- PublicTopCitedUrlsResponse
  - `date_range` PublicCitedUrlDateRange, required
    - `start_date` string, required: Start date used for the calculation.
    - `end_date` string, required: End date used for the calculation.
    - `active_prompts_only` boolean: Whether only currently active prompts were included.
  - `platform` string, nullable: Platform selector applied to the results, or null for all platforms.
  - `source_type` 'all' | 'owned' | 'external', required: Whether the results include all, owned, or external URLs.
  - `has_data` boolean, required: Whether any citations matched the selected filters.
  - `count` integer, required: Number of URL rows returned.
  - `data` PublicCitedUrl[]: Cited URLs ranked by citation count in descending order.
    - `url` string, required: Most frequently observed variant of the cited URL.
    - `domain` string, nullable: Domain of the cited URL.
    - `title` string, nullable: Page title, when available.
    - `favicon_url` string, nullable: Page favicon URL, when available.
    - `is_company_link` boolean, required: Whether the URL belongs to an owned company domain.
    - `citation_count` integer, required: Number of citations to this normalized URL in the date range.
    - `prompt_count` integer, required: Number of distinct active prompts that cited this URL.
    - `platform_names` string[]: Platforms that cited this URL in the selected date range.
  - `period` PublicResolvedPeriod
    - `name` string, nullable: The `period` requested, or null when the range came from `start_date` and `end_date`.
    - `start_date` string, required: First day of the period (UTC), inclusive.
    - `end_date` string, required: Last day of the period (UTC), inclusive.
    - `days` integer, required: Days in the period, counting both ends.
    - `previous_start_date` string, required: First day of the previous period it is compared with.
    - `previous_end_date` string, required: Last day of the previous period. While a calendar week, month, or quarter is in progress, the previous one is cut to the same number of days.
    - `previous_days` integer, required: Days in the previous period.
    - `partial` boolean, required: Whether the period includes today, so its last day is still in progress.
    - `timezone` 'UTC'
  - `coverage` PublicCoverage
    - `comparable` boolean, required: Whether totals can be compared between the two periods. False when either period has a missing or short day or runs per day differ by more than 20%; compare per-run rates instead.
    - `notes` string[]: Why the periods are not comparable, in plain sentences.
    - `current` PublicPeriodCoverage, required
      - `start_date` string, required
      - `end_date` string, required
      - `runs` integer, required
      - `expected_runs` integer, required
      - `complete_days` integer, required: Days in the period other than today in progress.
      - `runs_per_day` number, nullable: Runs per complete day.
      - `missing_days` string[]
      - `short_days` string[]
    - `previous` PublicPeriodCoverage, required
      - `start_date` string, required
      - `end_date` string, required
      - `runs` integer, required
      - `expected_runs` integer, required
      - `complete_days` integer, required: Days in the period other than today in progress.
      - `runs_per_day` number, nullable: Runs per complete day.
      - `missing_days` string[]
      - `short_days` string[]
    - `days` PublicCoverageDay[]
      - `date` string, required
      - `period` 'current' | 'previous', required
      - `runs` integer, required: Successful prompt runs of active prompts that day.
      - `expected_runs` integer, required: Median daily runs over the 7 days before; 0 when no daily runs are expected.
      - `status` 'ok' | 'short' | 'missing' | 'in_progress' | 'not_expected', required: `missing`: no runs on a day that expected some. `short`: under half the expected runs. `in_progress`: today, before its runs finished.
  - `rates` PublicRates
    - `headline_metric` 'owned_citations' | 'owned_citations_per_run', required: The number to lead with: owned citations when the periods are comparable, otherwise owned citations per run.
    - `current` PublicPeriodRates, required
      - `runs` integer, required
      - `owned_citations` integer, required: Citations of the organization's own domains.
      - `owned_citations_per_run` number, nullable
      - `brand_mention_runs` integer, required: Runs that mention the primary company.
      - `mention_rate` number, nullable: Share of runs that mention the primary company, from 0 to 1.
    - `previous` PublicPeriodRates, required
      - `runs` integer, required
      - `owned_citations` integer, required: Citations of the organization's own domains.
      - `owned_citations_per_run` number, nullable
      - `brand_mention_runs` integer, required: Runs that mention the primary company.
      - `mention_rate` number, nullable: Share of runs that mention the primary company, from 0 to 1.
    - `change` PublicRateChanges, required
      - `owned_citations` number, nullable: Relative change from the previous period; 0.25 means 25% higher.
      - `owned_citations_per_run` number, nullable: Relative change from the previous period.
      - `mention_rate` number, nullable: Relative change from the previous period.

## Other responses

- `400`: The requested date range is invalid.
- `422`: Validation Error

## Changes

> 8 revisions in range; 1 not diffed.

- **2026-10-28** `2c64a77a3936`: 3 info
  - added the optional property `coverage` to the response with the `200` status
  - added the optional property `period` to the response with the `200` status
  - added the optional property `rates` to the response with the `200` status

[Operation history](https://skmtc.dev/usesapient/apis/sapient-public-api/changes/v1/visibility/citations/get.md)

---

[API](https://skmtc.dev/usesapient/apis/sapient-public-api.md) - [All operations](https://skmtc.dev/usesapient/apis/sapient-public-api/llms.txt) - [OpenAPI document](https://skmtc.dev/usesapient/apis/sapient-public-api/revisions/14890dfe867e?raw)
