---
title: "Retrieve GEO run by ID"
method: GET
path: "/v1/geo/analyses/{configId}/runs/{runId}"
tags: ["GEO"]
---

# Retrieve GEO run by ID

`GET /v1/geo/analyses/{configId}/runs/{runId}`

## Request

- Base URL: `https://api.jasper.ai`
- URL: `https://api.jasper.ai/v1/geo/analyses/{configId}/runs/{runId}`
- 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`

Returns the whole run, or only the sections named in `sections`.

## Path parameters

- `configId` string, required
- `runId` string, required

## Query parameters

- `sections` string
- `page` number
- `limit` number

## Response `200`

- GeoRunResponseDto
  - `requestId` string, required
  - `resource` string, required
  - `data` GeoRunDto, required
    - `overview` GeoRunOverviewDto
      - `summary` string, required: Natural-language summary of the run.
    - `sentiment` GeoRunSentimentDto
      - `summary` string, required: Natural-language summary of how AI answers portray the brand.
      - `workingWell` GeoRunSentimentThemeDto[], required: Themes working in the brand’s favour.
        - `theme` string, required: The theme the quote illustrates.
        - `quote` string, required: The excerpt of the AI answer behind the theme.
        - `provider` 'chatgpt' | 'gemini' | 'claude' | 'perplexity', required: AI provider that gave the answer.
        - `queryId` string, required: ID of the tracked query the answer responded to.
        - `query` string, required: Text of the tracked query the answer responded to.
      - `workingAgainst` GeoRunSentimentThemeDto[], required: Themes working against the brand.
        - `theme` string, required: The theme the quote illustrates.
        - `quote` string, required: The excerpt of the AI answer behind the theme.
        - `provider` 'chatgpt' | 'gemini' | 'claude' | 'perplexity', required: AI provider that gave the answer.
        - `queryId` string, required: ID of the tracked query the answer responded to.
        - `query` string, required: Text of the tracked query the answer responded to.
      - `distribution` GeoRunSentimentDistributionDto, required
        - `positive` number, required
        - `neutral` number, required
        - `negative` number, required
    - `completedAt` string: ISO 8601 timestamp the run completed at.
    - `metrics` GeoRunMetricsDto
      - `overall` GeoLabelledScoreDto, required
        - `label` string, required: Display label for the score.
        - `value` number, required
      - `brandPresenceRate` GeoLabelledScoreDto, required
        - `label` string, required: Display label for the score.
        - `value` number, required
      - `citationRate` GeoLabelledScoreDto, required
        - `label` string, required: Display label for the score.
        - `value` number, required
      - `brandSentiment` GeoLabelledScoreDto, required
        - `label` string, required: Display label for the score.
        - `value` number, required
      - `shareOfVoice` GeoLabelledScoreDto[], required: Share of voice of the brand and each competitor, labelled by name.
        - `label` string, required: Display label for the score.
        - `value` number, required
      - `shareOfVoiceByProvider` GeoProviderShareOfVoiceDto[], required: The brand’s share of voice per AI provider.
        - `provider` 'chatgpt' | 'gemini' | 'claude' | 'perplexity', required
        - `value` number, required: The brand’s share of voice in this provider’s answers.
    - `providerCoverage` GeoRunProviderCoverageDto[]: Per provider: queries attempted, succeeded, and coverage rate.
      - `provider` 'chatgpt' | 'gemini' | 'claude' | 'perplexity', required
      - `totalQueries` number, required: Tracked queries this provider was scheduled to answer.
      - `successfulQueries` number, required: Queries this provider answered.
      - `coverageRate` number, required: `successfulQueries / totalQueries`. `0` means the provider was unavailable for the run.
    - `recommendations` GeoRunRecommendationsDto
      - `items` GeoFindingDto[], required: The requested page of findings.
        - `id` string, required: Stable ID of this finding within the run.
        - `type` 'violation' | 'recommendation', required
        - `category` 'low-information-density' | 'missing-source-citations' | 'missing-summary' | 'poor-content-structure' | 'missing-faq' | 'missing-eeat-signals' | 'non-query-headings' | 'stale-content' | 'ambiguous-reference' | 'inconsistent-entity-naming' | 'poor-scannability' | 'format-mismatch' | 'missing-decision-criteria' | 'unclear-messaging' | 'inverted-structure-missing' | 'missing-content', required
        - `severity` 'critical' | 'warning' | 'info', required
        - `topicClusterId` string: Set when the finding belongs to a configured topic cluster.
        - `topicClusterName` string: Set when the finding belongs to a name-only proposed topic cluster.
        - `location` GeoFindingLocationDto, required
          - `title` string, required
          - `url` string, required
        - `description` string, required: What is wrong, in natural language.
        - `originalText` string: The offending excerpt, when the finding points at specific copy.
        - `action` GeoFindingActionDto, required
          - `instructions` string, required: What to change on the page to resolve the finding.
      - `pagination` GeoPaginationDto, required
        - `totalRecords` number, required: Findings matching the filters, across every page.
        - `page` number, required
        - `pageSize` number, required
        - `next` string, nullable, required: Link to the next page, carrying the same filters. `null` on the last page.
        - `prev` string, nullable, required: Link to the previous page, carrying the same filters. `null` on the first page.
      - `bySeverity` GeoFindingSeverityCountsDto, required
        - `critical` number, required
        - `warning` number, required
        - `info` number, required
      - `byCategory` object, required: Finding totals per category, across every page. Categories with no findings are omitted.
    - `citations` GeoRunCitationDto[]: Hostnames cited by AI providers, typed and counted per provider.
      - `hostname` string, required
      - `type` 'brand' | 'competitor' | 'community' | 'authority' | 'reference' | 'publisher' | 'other', required: What kind of site the hostname is.
      - `occurrences` object, required: Times cited, keyed by AI provider.
      - `urls` GeoRunCitationUrlDto[], required: The individual cited URLs on this hostname.
        - `url` string, required
        - `occurrences` object, required: Times cited, keyed by AI provider.
    - `topicClusters` GeoRunTopicClusterDto[]: Topic clusters, their queries, and brand mentions per domain.
      - `id` string, required
      - `name` string, required
      - `queries` GeoRunTopicClusterQueryDto[], required: Tracked queries in the cluster.
        - `id` string, required
        - `query` string, required
      - `brandMentions` GeoRunBrandMentionDto[], required: Mentions per domain across the cluster’s answers.
        - `domain` string, required
        - `count` number, required: Times answers in this cluster mentioned the domain.

## Other responses

- `404`: Run 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/runs/:runId/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)
