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

# End-to-end: Competitive research report

> From a one-line request to a cited competitor analysis, with cost estimates and failure triage

This is a complete flow you can copy verbatim. When you finish, you'll have a 10-20 page competitive research document (`.docx` or `.pdf`) where every claim traces back to a source link, and where the total cost was predictable before you started.

This scenario opens the guides because it stacks the three things people most often misjudge about Profy: **search spends money on reading results, not on issuing queries**; **nothing counts as delivered until it lands in a file**; and **research without citations is not research**. All three generalize to any information task, so getting burned once here saves you everywhere else.

## What you'll get

| Artifact            | Location                                    | Notes                                                    |
| ------------------- | ------------------------------------------- | -------------------------------------------------------- |
| Research document   | Workspace `research/competitor-report.docx` | Structured sections, comparison tables, source footnotes |
| Raw findings        | Workspace `research/sources/*.md`           | One file per source, easy to re-check and reuse          |
| Comparison matrices | Embedded tables (exportable to `.xlsx`)     | Features, pricing, positioning                           |

## Prerequisites

<Steps>
  <Step title="Confirm the sandbox is available">
    Research writes files, so a sandbox is required. It starts automatically the first time the agent writes a file in a new session — just confirm you can see the file tree in the workspace panel. Experts configured with no sandbox cannot do this.
  </Step>

  <Step title="Confirm you have enough credits">
    Work out the expected spend from the cost section below and keep at least 2× that in your balance. Running out mid-flow interrupts the run; whatever was already written to files survives, but you'll have to restart the remaining steps.
  </Step>

  <Step title="Prepare the competitor list yourself">
    Write down 3-8 competitors and their domains up front. Asking the agent to "also find all the competitors" makes the number of searches unbounded and tends to drag in irrelevant companies.
  </Step>
</Steps>

## Steps

### Step 1: Fix the framework before searching

"Research A, B and C for me" produces a pile without a skeleton. Nail down the evaluation dimensions first:

```text theme={null}
I need competitive research on Notion, Coda, and Airtable.
It feeds an internal product decision; the focus is how each prices team collaboration.

Don't search yet. First give me a research framework:
1) Which dimensions you'll compare on (six at most)
2) What kind of source you'll use for each dimension
   (official site / pricing page / third-party review / user community)
3) Which dimensions you expect to find no public data for

I'll confirm the framework before you start searching.
```

<Tip>
  Asking which dimensions have no public data is the highest-value part of this step. It surfaces metrics like customer retention or actual ARR — things you cannot get from public sources — before they end up as invented numbers in a table.
</Tip>

### Step 2: Search one dimension at a time and write to disk

Once the framework is agreed, work dimension by dimension and **write a file after each one**:

```text theme={null}
Framework confirmed. Work through the dimensions one at a time.
After each dimension, do two things:

1. Write raw findings to research/sources/<dimension>.md, formatted as:
   claim + verbatim quote + source URL + retrieval date
2. Tell me your confidence in that dimension (high/medium/low) and why

Start with "Pricing and plan structure", then stop and wait for me.
```

One dimension at a time is deliberate. Firing many searches in parallel pulls all the result bodies into context at once, which can exhaust the conversation budget before you've seen a single artifact.

### Step 3: Handle what can't be reached

Search only reaches publicly crawlable content. Pricing pages often render via JavaScript or hide behind a login, so switch tools:

```text theme={null}
The Coda team pricing page came back empty.
Open https://coda.io/pricing in the browser, take a screenshot,
and read the actual prices off the screenshot.
If the page requires a login, say so — don't guess.
```

The sandbox browser has none of your logins. "Content behind a login" is therefore a hard boundary — the right outcome is the agent stating it can't reach it, and you supplying a screenshot yourself.

### Step 4: Cross-check and surface contradictions

```text theme={null}
All three dimensions are done. Now cross-check:

1. List every data point where sources contradict each other,
   with both sides and their sources
2. For each contradiction, give your judgment on which is more credible and why
3. Do NOT smooth contradictions into a compromise number

Write the list to research/sources/_conflicts.md.
```

<Warning>
  Don't skip this. Competitor pricing varies by region, source, and date, and the default tendency is to settle on a plausible-looking middle value — a number that matches nothing. Keeping contradictions explicit is what tells readers which conclusions still need verifying.
</Warning>

### Step 5: Produce the document

```text theme={null}
Now generate the document: research/competitor-report.docx

Requirements:
- Structure: summary / three matrices (features, pricing, positioning) /
  per-company detail / contradictions and open questions / recommendations
- Footnote every data point, pointing at the specific source URL in research/sources/
- Keep the "contradictions and open questions" section — don't drop it
  because it makes the conclusion look less clean
- Use real tables, not ASCII tables inside code blocks
```

`.docx` generation goes through the docx skill's script pipeline; see [Word documents](/en/documentation/capabilities/office-docx) for its limits. If you need something you can send out as-is, ask for `.pdf` instead (see [PDF generation](/en/documentation/capabilities/office-pdf)).

## Step 6: Accept the work

Open the file and check, in order:

1. Pick 5 data points at random, open the footnote URL, confirm the number is actually on that page
2. Confirm the contradictions section is still there and not empty
3. Confirm no blank cells in the matrices other than explicit "N/A" — a blank means the agent skipped it without telling you
4. Confirm no third-party company appears that you didn't supply and that isn't in the source files

Item 1 is the only check that actually validates anything. A document that reads well says nothing about whether the numbers are right.

## Cost estimate

The cost shape here is worth internalizing, because it's counterintuitive:

| Step                                    | Billing unit                                | Share of cost |
| --------------------------------------- | ------------------------------------------- | ------------- |
| Issuing a search                        | `per_call` (flat per invocation)            | Small         |
| **Reading search results**              | `token_split` (result bodies enter context) | **Large**     |
| Browser screenshot + reading it         | `token_split` (image enters context)        | Medium        |
| Writing files / generating the document | `token_split` (generated text)              | Medium        |

The dominant cost is input tokens from result bodies entering context, not how many searches you ran. So the effective lever is **reducing how much body text each search brings back** (narrow dimensions, restrict source types), not reducing search count.

The platform truncates oversized search results, but that's a last line of defense against context blowout, not a cost-control mechanism. See [Billing formulas](/en/documentation/reference/billing-formulas) and [Web search](/en/documentation/capabilities/web-search).

## Boundaries and failure modes

| Symptom                                | Cause                                            | Fix                                                                             |
| -------------------------------------- | ------------------------------------------------ | ------------------------------------------------------------------------------- |
| Search returns nothing                 | Site blocks crawling, or content is JS-rendered  | Switch to the browser tool; if still unreachable, treat as publicly unavailable |
| Page requires login                    | The sandbox browser has none of your logins      | Screenshot it yourself, or connect your own browser via the Chrome extension    |
| Suspiciously round numbers in tables   | The model filled a gap with a plausible value    | Return to step 4, require a source per cell, change unsourced cells to N/A      |
| Run stops midway, artifacts incomplete | Conversation budget or account balance exhausted | Written files survive; top up and resume from the next dimension                |
| Tables drawn in ASCII                  | Real tables weren't requested explicitly         | Ask for native docx tables and regenerate that section                          |
| Cited URLs are dead                    | Source page changed or was removed               | Have the agent re-verify with a fresh search and note the retrieval date        |

## Variations

<AccordionGroup>
  <Accordion title="Turn it into ongoing tracking">
    Freeze steps 2-5 into a single prompt and run it weekly as a scheduled task to produce a "what changed this week" delta. Scheduled tasks spend credits while you're not watching, so price a single run first — see [Daily briefing](/en/documentation/guides/daily-briefing).
  </Accordion>

  <Accordion title="Package it as a reusable skill">
    If you'll run this repeatedly, have the agent write the flow into a skill so next time you only supply the competitor list. See [Skills catalog](/en/documentation/reference/skills-catalog) for ownership and scope.
  </Accordion>

  <Accordion title="Publish it as a site instead">
    Comparison matrices read far better on the web than in Word. See [Publish a site](/en/documentation/guides/publish-a-site).
  </Accordion>
</AccordionGroup>

## Related pages

<CardGroup cols={2}>
  <Card title="Web search" icon="magnifying-glass" href="/en/documentation/capabilities/web-search">
    Search billing and truncation guards
  </Card>

  <Card title="Word documents" icon="file-word" href="/en/documentation/capabilities/office-docx">
    What docx generation can and can't do
  </Card>

  <Card title="Browser automation" icon="window" href="/en/documentation/capabilities/browser-automation">
    Three-layer browser architecture and login boundaries
  </Card>

  <Card title="Billing formulas" icon="calculator" href="/en/documentation/reference/billing-formulas">
    Full algorithms for all five billing units
  </Card>
</CardGroup>
