> ## Documentation Index
> Fetch the complete documentation index at: https://docs.agentlinkops.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Read competitor analysis progress

> Read saved competitor analysis progress and its inventory ID.

`get_competitor_analysis`

Read saved competitor analysis progress and its inventory ID. Unavailable checks and assessments are reported separately from retrieval. Reading does not fetch pages, buy supplier data or start monitoring.

<Note>This command name appears in deployment evidence dated 2026-10-16. This page describes current source; read your connected catalog for deployed inputs and access. Workspace scopes and enabled providers still apply.</Note>

| Access | Behavior |
| - | - |
| `discovery:read` | Reads saved data |

This read does not start a verification job.

## Example request

Connect through [MCP](/guides/connect-mcp), [CLI](/guides/connect-cli), or [HTTP](/guides/connect-http). Replace example identifiers with records from your workspace.

<CodeGroup>
  ```json MCP theme={null}
  {
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
      "name": "get_competitor_analysis",
      "arguments": {
        "analysisId": "ca_example"
      }
    }
  }
  ```

  ```bash CLI theme={null}
  agentlinkops call get_competitor_analysis --args '{"analysisId":"ca_example"}'
  ```

  ```bash HTTP theme={null}
  curl --fail-with-body https://app.agentlinkops.com/v1/commands/get_competitor_analysis \
    -H "Authorization: Bearer $AGENTLINKOPS_TOKEN" \
    -H 'Content-Type: application/json' \
    --data '{"analysisId":"ca_example"}'
  ```
</CodeGroup>

## Returned result

Illustrative data validated against the documented response schema. IDs and dates are examples, not a live account capture. MCP returns this data in `structuredContent` and in a text content block; generic HTTP and CLI return the JSON result directly.

<Accordion title="Full response example">
  ```json theme={null}
  {
    "schema_version": 1,
    "id": "ca_example",
    "workspace_id": "ws_example",
    "project_id": "prj_example",
    "competitor_binding": {
      "setId": "cs_example",
      "revision": 1,
      "memberId": "cm_example"
    },
    "scope": {
      "domain": "rival.example.org",
      "include_subdomains": true
    },
    "state": "pending",
    "stages": {
      "retrieval": {
        "state": "pending",
        "error_code": null,
        "updated_at": "2026-10-15T12:00:00.000Z"
      },
      "source_checks": {
        "state": "unavailable",
        "error_code": "COMPETITOR_VERIFICATION_NOT_CONNECTED",
        "updated_at": "2026-10-15T12:00:00.000Z"
      },
      "occurrence_context": {
        "state": "unavailable",
        "error_code": "COMPETITOR_CONTEXT_NOT_CONNECTED",
        "updated_at": "2026-10-15T12:00:00.000Z"
      },
      "assessment": {
        "state": "unavailable",
        "error_code": "MANAGED_ASSESSMENT_NOT_CONNECTED",
        "updated_at": "2026-10-15T12:00:00.000Z"
      }
    },
    "baseline_run_id": null,
    "inventory_id": null,
    "created_at": "2026-10-15T12:00:00.000Z",
    "updated_at": "2026-10-15T12:00:00.000Z",
    "last_activity_at": "2026-10-15T12:00:00.000Z",
    "next_eligible_at": "2026-10-15T12:00:00.000Z",
    "retrieval_deadline": "2026-10-15T13:00:00.000Z",
    "attempt_count": 0,
    "retry_count": 0,
    "last_error_code": null,
    "recurring_monitoring_created": false
  }
  ```
</Accordion>

## Input fields

Omit optional fields when you do not want to supply them. Null is accepted only where listed. Unknown input properties are rejected.

| Field | Type | Presence | Meaning and constraints |
| - | - | - | - |
| `analysisId` | string | Required | analysis ID from create/list. pattern: `"^[a-zA-Z0-9_-]{1,128}$"` |

### Validation and omitted values

Reads saved stage outcomes without fetching, charging or retrying. Completed retrieval can leave the overall analysis partial because other stages are unavailable.

inventory\_id identifies the frozen retrieval inventory. Supplier coverage does not describe the whole web.

## Output fields

Fields inside optional or nullable parents apply only when that parent exists. [Common schema conventions](/reference/schemas) explain evidence states, empty lists and extensions.

* **`schema_version`** (number, required): must equal `1`
* **`id`** (string, required): Resource identifier returned by the operation. pattern: `"^[a-zA-Z0-9_-]{1,128}$"`
* **`workspace_id`** (string, required): Workspace that owns this record. pattern: `"^[a-zA-Z0-9_-]{1,128}$"`
* **`project_id`** (string, required): Project that owns this record. pattern: `"^[a-zA-Z0-9_-]{1,128}$"`
* **`competitor_binding`** (object, required): additional fields rejected
* **`scope`** (object, required): additional fields rejected
* **`state`** (string, required): Saved lifecycle or evidence state, as enumerated for this record. values: `"pending"`, `"running"`, `"completed"`, `"partial"`, `"failed"`, `"stopped"`
* **`stages`** (object, required): additional fields rejected
* **`baseline_run_id`** (string / null, required): Identifier returned by the related operation.
* **`inventory_id`** (string / null, required): Identifier returned by the related operation.
* **`created_at`** (string, required): UTC timestamp when the record was created. format: `"date-time"`; pattern: `"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$"`
* **`updated_at`** (string, required): UTC timestamp of the last record update. format: `"date-time"`; pattern: `"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$"`
* **`last_activity_at`** (string, required): format: `"date-time"`; pattern: `"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$"`
* **`next_eligible_at`** (string, required): format: `"date-time"`; pattern: `"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$"`
* **`retrieval_deadline`** (string, required): format: `"date-time"`; pattern: `"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$"`
* **`attempt_count`** (integer, required): minimum: `0`; maximum: `9007199254740991`
* **`retry_count`** (integer, required): minimum: `0`; maximum: `9007199254740991`
* **`last_error_code`** (string / null, required).
* **`recurring_monitoring_created`** (boolean, required): Whether this operation enrolled recurring monitoring. must equal `false`
* **`replayed`** (boolean, optional): True when the response reuses an earlier request with the same idempotency value.

<Accordion title="All fields and nested objects">
  | Field | Type | Presence | Meaning and constraints |
  | - | - | - | - |
  | `schema_version` | number | Required | must equal `1` |
  | `id` | string | Required | Resource identifier returned by the operation. pattern: `"^[a-zA-Z0-9_-]{1,128}$"` |
  | `workspace_id` | string | Required | Workspace that owns this record. pattern: `"^[a-zA-Z0-9_-]{1,128}$"` |
  | `project_id` | string | Required | Project that owns this record. pattern: `"^[a-zA-Z0-9_-]{1,128}$"` |
  | `competitor_binding` | object | Required | additional fields rejected |
  | `competitor_binding.setId` | string | Required | Identifier returned by the related operation. pattern: `"^[a-zA-Z0-9_-]{1,128}$"` |
  | `competitor_binding.revision` | integer | Required | Revision of the approved competitor set bound to this offer or run. Pass the current set revision as revision when preparing an offer. maximum: `9007199254740991`; exclusiveMinimum: `0` |
  | `competitor_binding.memberId` | string | Required | Identifier returned by the related operation. pattern: `"^[a-zA-Z0-9_-]{1,128}$"` |
  | `scope` | object | Required | additional fields rejected |
  | `scope.domain` | string | Required | |
  | `scope.include_subdomains` | boolean | Required | |
  | `state` | string | Required | Saved lifecycle or evidence state, as enumerated for this record. values: `"pending"`, `"running"`, `"completed"`, `"partial"`, `"failed"`, `"stopped"` |
  | `stages` | object | Required | additional fields rejected |
  | `stages.retrieval` | object | Required | additional fields rejected |
  | `stages.retrieval.state` | string | Required | Saved lifecycle or evidence state, as enumerated for this record. values: `"not_started"`, `"pending"`, `"running"`, `"completed"`, `"partial"`, `"failed"`, `"unavailable"`, `"stopped"` |
  | `stages.retrieval.error_code` | string / null | Required | Latest delivery detail code; null when no failure or retry has been recorded. |
  | `stages.retrieval.updated_at` | string | Required | UTC timestamp of the last record update. format: `"date-time"`; pattern: `"^(?:(?:\\d\\d[2468][048]\|\\d\\d[13579][26]\|\\d\\d0[48]\|[02468][048]00\|[13579][26]00)-02-29\|\\d{4}-(?:(?:0[13578]\|1[02])-(?:0[1-9]\|[12]\\d\|3[01])\|(?:0[469]\|11)-(?:0[1-9]\|[12]\\d\|30)\|(?:02)-(?:0[1-9]\|1\\d\|2[0-8])))T(?:(?:[01]\\d\|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$"` |
  | `stages.source_checks` | object | Required | additional fields rejected |
  | `stages.source_checks.state` | string | Required | Saved lifecycle or evidence state, as enumerated for this record. values: `"not_started"`, `"pending"`, `"running"`, `"completed"`, `"partial"`, `"failed"`, `"unavailable"`, `"stopped"` |
  | `stages.source_checks.error_code` | string / null | Required | Latest delivery detail code; null when no failure or retry has been recorded. |
  | `stages.source_checks.updated_at` | string | Required | UTC timestamp of the last record update. format: `"date-time"`; pattern: `"^(?:(?:\\d\\d[2468][048]\|\\d\\d[13579][26]\|\\d\\d0[48]\|[02468][048]00\|[13579][26]00)-02-29\|\\d{4}-(?:(?:0[13578]\|1[02])-(?:0[1-9]\|[12]\\d\|3[01])\|(?:0[469]\|11)-(?:0[1-9]\|[12]\\d\|30)\|(?:02)-(?:0[1-9]\|1\\d\|2[0-8])))T(?:(?:[01]\\d\|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$"` |
  | `stages.occurrence_context` | object | Required | additional fields rejected |
  | `stages.occurrence_context.state` | string | Required | Saved lifecycle or evidence state, as enumerated for this record. values: `"not_started"`, `"pending"`, `"running"`, `"completed"`, `"partial"`, `"failed"`, `"unavailable"`, `"stopped"` |
  | `stages.occurrence_context.error_code` | string / null | Required | Latest delivery detail code; null when no failure or retry has been recorded. |
  | `stages.occurrence_context.updated_at` | string | Required | UTC timestamp of the last record update. format: `"date-time"`; pattern: `"^(?:(?:\\d\\d[2468][048]\|\\d\\d[13579][26]\|\\d\\d0[48]\|[02468][048]00\|[13579][26]00)-02-29\|\\d{4}-(?:(?:0[13578]\|1[02])-(?:0[1-9]\|[12]\\d\|3[01])\|(?:0[469]\|11)-(?:0[1-9]\|[12]\\d\|30)\|(?:02)-(?:0[1-9]\|1\\d\|2[0-8])))T(?:(?:[01]\\d\|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$"` |
  | `stages.assessment` | object | Required | additional fields rejected |
  | `stages.assessment.state` | string | Required | Saved lifecycle or evidence state, as enumerated for this record. values: `"not_started"`, `"pending"`, `"running"`, `"completed"`, `"partial"`, `"failed"`, `"unavailable"`, `"stopped"` |
  | `stages.assessment.error_code` | string / null | Required | Latest delivery detail code; null when no failure or retry has been recorded. |
  | `stages.assessment.updated_at` | string | Required | UTC timestamp of the last record update. format: `"date-time"`; pattern: `"^(?:(?:\\d\\d[2468][048]\|\\d\\d[13579][26]\|\\d\\d0[48]\|[02468][048]00\|[13579][26]00)-02-29\|\\d{4}-(?:(?:0[13578]\|1[02])-(?:0[1-9]\|[12]\\d\|3[01])\|(?:0[469]\|11)-(?:0[1-9]\|[12]\\d\|30)\|(?:02)-(?:0[1-9]\|1\\d\|2[0-8])))T(?:(?:[01]\\d\|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$"` |
  | `baseline_run_id` | string / null | Required | Identifier returned by the related operation. |
  | `inventory_id` | string / null | Required | Identifier returned by the related operation. |
  | `created_at` | string | Required | UTC timestamp when the record was created. format: `"date-time"`; pattern: `"^(?:(?:\\d\\d[2468][048]\|\\d\\d[13579][26]\|\\d\\d0[48]\|[02468][048]00\|[13579][26]00)-02-29\|\\d{4}-(?:(?:0[13578]\|1[02])-(?:0[1-9]\|[12]\\d\|3[01])\|(?:0[469]\|11)-(?:0[1-9]\|[12]\\d\|30)\|(?:02)-(?:0[1-9]\|1\\d\|2[0-8])))T(?:(?:[01]\\d\|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$"` |
  | `updated_at` | string | Required | UTC timestamp of the last record update. format: `"date-time"`; pattern: `"^(?:(?:\\d\\d[2468][048]\|\\d\\d[13579][26]\|\\d\\d0[48]\|[02468][048]00\|[13579][26]00)-02-29\|\\d{4}-(?:(?:0[13578]\|1[02])-(?:0[1-9]\|[12]\\d\|3[01])\|(?:0[469]\|11)-(?:0[1-9]\|[12]\\d\|30)\|(?:02)-(?:0[1-9]\|1\\d\|2[0-8])))T(?:(?:[01]\\d\|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$"` |
  | `last_activity_at` | string | Required | format: `"date-time"`; pattern: `"^(?:(?:\\d\\d[2468][048]\|\\d\\d[13579][26]\|\\d\\d0[48]\|[02468][048]00\|[13579][26]00)-02-29\|\\d{4}-(?:(?:0[13578]\|1[02])-(?:0[1-9]\|[12]\\d\|3[01])\|(?:0[469]\|11)-(?:0[1-9]\|[12]\\d\|30)\|(?:02)-(?:0[1-9]\|1\\d\|2[0-8])))T(?:(?:[01]\\d\|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$"` |
  | `next_eligible_at` | string | Required | format: `"date-time"`; pattern: `"^(?:(?:\\d\\d[2468][048]\|\\d\\d[13579][26]\|\\d\\d0[48]\|[02468][048]00\|[13579][26]00)-02-29\|\\d{4}-(?:(?:0[13578]\|1[02])-(?:0[1-9]\|[12]\\d\|3[01])\|(?:0[469]\|11)-(?:0[1-9]\|[12]\\d\|30)\|(?:02)-(?:0[1-9]\|1\\d\|2[0-8])))T(?:(?:[01]\\d\|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$"` |
  | `retrieval_deadline` | string | Required | format: `"date-time"`; pattern: `"^(?:(?:\\d\\d[2468][048]\|\\d\\d[13579][26]\|\\d\\d0[48]\|[02468][048]00\|[13579][26]00)-02-29\|\\d{4}-(?:(?:0[13578]\|1[02])-(?:0[1-9]\|[12]\\d\|3[01])\|(?:0[469]\|11)-(?:0[1-9]\|[12]\\d\|30)\|(?:02)-(?:0[1-9]\|1\\d\|2[0-8])))T(?:(?:[01]\\d\|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$"` |
  | `attempt_count` | integer | Required | minimum: `0`; maximum: `9007199254740991` |
  | `retry_count` | integer | Required | minimum: `0`; maximum: `9007199254740991` |
  | `last_error_code` | string / null | Required | |
  | `recurring_monitoring_created` | boolean | Required | Whether this operation enrolled recurring monitoring. must equal `false` |
  | `replayed` | boolean | Optional | True when the response reuses an earlier request with the same idempotency value. |
</Accordion>

[Download input schema](/schemas/get_competitor_analysis.input.json) · [Download output schema](/schemas/get_competitor_analysis.output.json)

## Errors and retries

Follow the error recovery before retrying this read. Preserve the selected workspace, project, filters and feed. Recovering a read does not require an idempotency key or another verification job. Operation-specific errors include `COMPETITOR_ANALYSIS_UNAVAILABLE`, `COMPETITOR_ANALYSIS_NOT_FOUND`, `COMPETITOR_ANALYSIS_AUTHORITY_CHANGED`, `COMPETITOR_ANALYSIS_EXPIRED`.

See [error recovery](/reference/errors) for status, scope, cooldown, cursor and retry handling. Unknown observations are result data and do not establish loss.

## HTTP resource routes

These existing resource routes share the operation’s domain behavior. Their parameter placement, status and response envelope can differ from generic invocation. See [HTTP route details](/reference/http/routes).

| Method and route | Success | Details |
| - | - | - |
| `GET /v1/competitor-analyses/{analysisId}` | 200 | The path sets analysisId. Reads saved progress without starting work. |

## Continue

[list\_competitor\_inventory\_rows](/reference/commands/list_competitor_inventory_rows)

Follow the [related workflow](/guides/competitor-research), inspect [capability status](/capability-status), or return to the [command index](/reference/index).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.