---
title: "Compare two GEO audit runs"
method: GET
path: "/geo_audits/{id}/comparison"
tags: ["GEO Audits"]
---

# Compare two GEO audit runs

`GET /geo_audits/{id}/comparison`

## Request

- Base URL: `https://api.llmpulse.ai/api/v1`
- URL: `https://api.llmpulse.ai/api/v1/geo_audits/{id}/comparison`
- Auth: API key in header `Authorization`

## Path parameters

- `id` string, required

## Query parameters

- `project_id` integer, required
- `from_run` integer
- `to_run` integer

## Response `200`

The comparison

- GeoAuditComparison
  - `project_id` integer
  - `from_run` GeoAuditRun, nullable: One run of an audit. Null where an audit has no run yet (latest_run) or a comparison has no earlier run (from_run).
    - `sequence` integer: Run number within the audit, starting at 1
    - `status` 'queued' | 'running' | 'completed' | 'failed' | 'unreachable'
    - `trigger` 'scheduled' | 'manual' | 'api' | 'mcp' | 'legacy_import'
    - `score` number, nullable
    - `grade` string, nullable
    - `score_delta` number, nullable: Score change against the previous completed run
    - `comparable_to_previous` boolean: False when the checks or the audit settings changed since the previous run, so a diff may reflect that change
    - `new_issues` integer
    - `fixed_issues` integer
    - `regressed_issues` integer
    - `error` string, nullable
    - `engine_version` string, nullable
    - `created_at` string, date-time
    - `finished_at` string, date-time, nullable
    - `app_url` string
  - `to_run` GeoAuditRun, nullable: One run of an audit. Null where an audit has no run yet (latest_run) or a comparison has no earlier run (from_run).
    - `sequence` integer: Run number within the audit, starting at 1
    - `status` 'queued' | 'running' | 'completed' | 'failed' | 'unreachable'
    - `trigger` 'scheduled' | 'manual' | 'api' | 'mcp' | 'legacy_import'
    - `score` number, nullable
    - `grade` string, nullable
    - `score_delta` number, nullable: Score change against the previous completed run
    - `comparable_to_previous` boolean: False when the checks or the audit settings changed since the previous run, so a diff may reflect that change
    - `new_issues` integer
    - `fixed_issues` integer
    - `regressed_issues` integer
    - `error` string, nullable
    - `engine_version` string, nullable
    - `created_at` string, date-time
    - `finished_at` string, date-time, nullable
    - `app_url` string
  - `comparable` boolean
  - `score_delta` number, nullable
  - `metric_deltas` object
  - `counts` object
  - `changes` object[]
    - `check_key` string
    - `check_title` string, nullable
    - `subject_key` string
    - `subject` string, nullable
    - `severity` string
    - `from_status` string, nullable
    - `to_status` string, nullable
    - `change` 'new' | 'fixed' | 'changed' | 'appeared' | 'disappeared' | 'unchanged'
  - `request_id` string

## Other responses

- `404`: Resource not found

## Changes

- **2026-10-09** `61976d9236d8`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/llmpulse/apis/llm-pulse-api/changes/geo_audits/:id/comparison/get.md)

---

[API](https://skmtc.dev/llmpulse/apis/llm-pulse-api.md) - [All operations](https://skmtc.dev/llmpulse/apis/llm-pulse-api/llms.txt) - [OpenAPI document](https://skmtc.dev/llmpulse/apis/llm-pulse-api/revisions/38a31f123641?raw)
