---
title: "Competitor gaps"
description: "Find the gaps in competitor products that your own customers also ask about, with evidence from both sides."
url: "/docs/agents/workflows/competitor-gaps"
---

This page is an agent-readable workflow for Deck. Humans can follow along. Coding agents should treat the steps as the source of truth.

# Competitor gaps — agent workflow

* **Use it when:** the user asks "where are competitors weak?", "what do competitors do better that our customers want?" or "which competitor complaints match our own feedback?"
* **Outcome:** the user has a list of competitor gaps. Each gap has the competitor evidence, the matching evidence from the user's own customers (or "none found"), its backlog status and Deck links. Nothing changes in Deck unless the user approves new research.
* **Needs:** Deck MCP, Competitors on for the workspace and a published competitor report. MCP cannot turn Competitors on. New research spends credits.

## 1. Probe Deck MCP

Call `get_user_context`. This must be a real tool call.

* 401 Unauthorized: tell the user to connect Deck MCP in this client (Settings → Connections). Stop.
* No Deck tools: fetch and follow [https://docs.getdeck.io/docs/agents/getting-started/prompts/ai-pm.md](https://docs.getdeck.io/docs/agents/getting-started/prompts/ai-pm.md). Stop this workflow until the tools work.

## 2. Check the competitor report

Call `explore_competitors` with no parameters.

* `feature_unavailable`: Competitors is off. An organization admin turns it on in Settings → Competitors. Stop.
* `collection.status` is `running` or `importing`: research is in progress. Tell the user. Deck emails the person who started it when it is ready. Stop.
* `collection.competitors` is empty: offer research. When `collection.suggested_competitors` lists names, ask "Want me to research your competitors? Deck found A, B and C." Use at most the first 3 names, and only those names. Otherwise let the user name the competitors and their websites.
* The user says yes: call `start_competitor_research`. This is a sensitive write. It spends credits and sends email. Get an explicit yes every time. Research runs in the background and can take more than 5 minutes. Stop this workflow until the report is ready.

The Free plan includes 1 competitor report for the first 2 competitors. See [Competitors](/docs/features/competitors).

## 3. Read the landscape

Make these calls at the same time:

* `explore_competitors` with `view: "overview"`. Read the strengths and weaknesses rows.
* `explore_competitors` with `view: "subthemes"` and `group: "weaknesses"`. These are the complaints of competitor customers. Each one is a possible opening.
* `explore_competitors` with `view: "subthemes"` and `group: "strengths"`. These are the places where competitors lead. Each one can be a gap in the user's product.
* `explore_competitors` with `view: "teasers"`. These are Deck's opportunity teasers, scored by impact.

Page with `cursor` when a list has more rows. A theme that is both a strength and a weakness shows only under weaknesses. Add `competitor_id` to focus on one competitor.

## 4. Pick the candidates

Take up to 10 candidates: the top weaknesses, the top strengths and the teasers with the highest impact. Use Deck's order. For each candidate, write one short keyword phrase from its name, for example "bulk export" or "SSO setup".

## 5. Match against your own feedback

For each candidate, make these calls at the same time:

* `search_deck` with the keyword and `types` set to `insight`, `theme`, `subtheme` and `opportunity`.
* `explore_insights` with the keyword as `query` and `limit: 10`.

Read the quotes. Count a match only when the insight is about the same problem. A shared keyword is not enough. When a theme matches, call `explore_themes` with its `theme_id` to get Deck's insight count and sentiment.

An `opportunity` result shows that the gap is already on the backlog. Promoted teasers also link back to their opportunity.

## 6. Sort the gaps

Put each candidate in one group:

* **Customers also ask:** Deck has matching evidence from the user's own customers.
* **Competitor only:** no matching first-party evidence. The gap can still matter, but the user's customers do not ask for it yet.
* **Already on the backlog:** an opportunity exists.

## 7. Write the report

Show a table with these columns: gap, side (weakness, strength or teaser), competitor, competitor evidence (Deck's count), your customers' evidence (Deck's count, or "none found"), backlog status and links. Put "Customers also ask" first.

Below the table, give two quotes for each top gap: one from a competitor review and one from the user's own customers.

## 8. Next steps (optional)

To put a gap on the backlog, fetch and follow [https://docs.getdeck.io/docs/agents/workflows/competitor-finding-to-backlog.md](https://docs.getdeck.io/docs/agents/workflows/competitor-finding-to-backlog.md). Pass the subtheme, teaser or competitor insight IDs from step 3.

## Rules

* Never suggest competitor names from your own knowledge. Use only the user's names or `suggested_competitors`.
* `start_competitor_research` and `add_competitor` are sensitive writes. They spend credits and send email. Get an explicit yes every time.
* Competitor insights are not first-party insights. Keep their counts apart. Their IDs do not work in `explore_insights`.
* Competitor research is not scoped to segments. Do not compare it with one segment unless the user asks.
* Quote Deck's numbers. Do not compute your own.
* Show the plan and get a yes before you call write tools.
* If the user has more than one Deck organization, call `select_organization` first and pass `org_id` on every call.

## Done when

* The user has the gap table, sorted into the three groups.
* Each gap has Deck's competitor count and Deck's first-party count, or "none found".
* Each gap has a Deck link, and no write ran without a yes.

See also: [Competitors](/docs/features/competitors), [Competitors settings](/docs/org-settings/competitors) and [Opportunity Backlog](/docs/features/opportunity-backlog).

---

[View full sitemap](/docs/sitemap)
