---
title: "Retrieve GEO analysis trends"
method: GET
path: "/v1/geo/analyses/{configId}/trends"
tags: ["GEO"]
---

# Retrieve GEO analysis trends

`GET /v1/geo/analyses/{configId}/trends`

## Request

- Base URL: `https://api.jasper.ai`
- URL: `https://api.jasper.ai/v1/geo/analyses/{configId}/trends`
- Auth: one of:
  - API key in header `X-API-Key`
  - OAuth 2
    - Authorization code: `https://api.jasper.ai/oauth2/authorize`
    - Token URL: `https://api.jasper.ai/oauth2/token` scopes: `user`

Score deltas and a time series over the range, plus key events that help explain score changes.

## Path parameters

- `configId` string, required

## Query parameters

- `range` 'daily' | '7d' | '30d' | '60d' | '90d' | 'all'
- `date` string

## Response `200`

- GeoTrendsResponseDto
  - `requestId` string, required
  - `resource` string, required
  - `data` GeoTrendsDto, required
    - `deltas` GeoTrendsDeltasDto, required
      - `currentAnalysisId` string, required: The id of the analysis the change is computed from.
      - `previousAnalysisId` string, required: The id of the analysis the change is computed against.
      - `overall` number, required: current - previous (positive = improvement).
      - `brandPresenceRate` number, required: current - previous (positive = improvement).
      - `citationRate` number, required: current - previous (positive = improvement).
      - `brandSentiment` number, required: current - previous (positive = improvement).
    - `series` GeoTrendsSeriesDto, required
      - `range` 'daily' | '7d' | '30d' | '60d' | '90d' | 'all', required: Echoes the requested range so the client can label the X axis correctly.
      - `points` GeoTrendsSeriesPointDto[], required: Ordered oldest -> newest (already downsampled when applicable).
        - `date` string, required: Calendar date of the plotted point (analysisDate for raw points, bucket-end for downsampled).
        - `overall` object, nullable, required
        - `brandPresenceRate` object, nullable, required
        - `citationRate` object, nullable, required
        - `brandSentiment` object, nullable, required
    - `events` union[], required: Events that may explain a change in the score, oldest to newest, discriminated by `kind`. Only events in the same window as `series` are included, and never before the first completed analysis. Label, schedule, timezone and topic cluster rename changes are left out. Empty when there are no events or the event ledger cannot be read.
      - union
        - GeoQueryModelChangedEventDto
          - `id` string, required: Stable id of the event. Use it to dedupe across requests.
          - `occurredAt` string, date-time, required: When the underlying change happened (ISO-8601).
          - `summary` string, required: Short human-readable label for the event.
          - `kind` 'query_model_changed', required
          - `provider` 'chatgpt' | 'gemini' | 'claude' | 'perplexity', required: Provider whose query model changed.
          - `modelName` string, required: Concrete model id that was introduced.
          - `scoresAffected` boolean, required: Whether the provider was enabled for the config. `false` means the change did not reach the scores.
        - GeoConfigChangedEventDto
          - `id` string, required: Stable id of the event. Use it to dedupe across requests.
          - `occurredAt` string, date-time, required: When the underlying change happened (ISO-8601).
          - `summary` string, required: Short human-readable label for the event.
          - `kind` 'config_changed', required
          - `changes` union[], required: Changes made to the config, discriminated by `field`.
            - union
              - …
        - GeoPageContentChangedEventDto
          - `id` string, required: Stable id of the event. Use it to dedupe across requests.
          - `occurredAt` string, date-time, required: When the underlying change happened (ISO-8601).
          - `summary` string, required: Short human-readable label for the event.
          - `kind` 'page_content_changed', required
          - `pages` GeoPageContentChangedPageDto[], required: Pages whose content changed.
            - `url` string, uri, required
            - `title` string: Page title when the event was written. Absent when the title is unknown.
        - GeoScoreMethodologyChangedEventDto
          - `id` string, required: Stable id of the event. Use it to dedupe across requests.
          - `occurredAt` string, date-time, required: When the underlying change happened (ISO-8601).
          - `summary` string, required: Short human-readable label for the event.
          - `kind` 'score_methodology_changed', required
          - `version` number, required: GEO score methodology version that was introduced.

## Other responses

- `404`: Analysis not found.

## Changes

- **2026-11-03** `3d5be7408661`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/jasper/apis/jasper-api/changes/v1/geo/analyses/:configId/trends/get.md)

---

[API](https://skmtc.dev/jasper/apis/jasper-api.md) - [All operations](https://skmtc.dev/jasper/apis/jasper-api/llms.txt) - [OpenAPI document](https://skmtc.dev/jasper/apis/jasper-api/revisions/3d5be7408661?raw)
