---
title: 'The Report screen: a client-ready report for every project'
description: 'What the Report screen shows before and after a research run, where each section comes from, the markdown and PDF downloads, and the re-sync dialog.'
slug: report
group: app
order: 28
keywords:
  [report screen, starting point report, seo opportunity report, pitch report, pdf download, asset profile, resync]
related: [client-reports, data-backed-path, free-and-paid, prompts]
updated: '2026-10-26'
---

The Report screen sits under Report in each project's sidebar. It holds one document for the project: the free starting-point report until a research run completes, and the SEO Opportunity Report after that. [Client reports](/docs/client-reports) covers both reports as your agent sees them. This page covers the screen itself.

## What the screen shows

With no completed run, the header reads that this is a starting-point report built from your project setup, free on every plan. The report has five sections:

- **Positioning**: industry, target customer, core problem, market (city, country, language) and up to eight related terms.
- **The site**: name, URL, description, primary offer and differentiators.
- **Current content inventory**: the first 15 pages mapped from your site, with a count of the rest.
- **Competitor set**: the competitors curated at setup, with domain and competition type.
- **Early market signals**: rising topics from the radar, each with its momentum and a summary.

Below it, a card titled "What a research run adds" names each locked section and what it would hold. Nothing in it is previewed.

Once a run completes, the screen shows the SEO Opportunity Report for the niche, with the number of keywords discovered and companies analyzed. Its sections are Market snapshot, The site, Competitor landscape, Where to win, "Already covered — defend & refresh", the 90-day content sequence and Methodology. Each card in Where to win carries its score out of 100, a headline, the keyword count, average difficulty, the demand bucket, the dominant intent and its top keywords. It also says whether the topic is net-new to the site or how many of its keywords the site already covers, with the closest page. A topic flagged as a poor fit for your offer says it was down-weighted and why.

## Where the data comes from

The starting-point report is built from setup data: the niche profile, the site's asset profile, the pages mapped from the site, the curated competitors and the radar. The full report comes from the most recent completed research run. The header says when that run completed and when the site's profile was last synced. Run a new research run and the screen moves to the new one.

## What you can do here

- **Download markdown** saves the report on screen as a `.md` file, either report.
- **Download PDF** appears once a run has completed and saves the full report as a PDF.

When the site's profile is older than the run, the first download opens a dialog titled "The site profile is older than this research run". It offers two choices of equal weight. **Re-sync profile first** re-reads the live site, refreshes the report and then downloads it. **Generate with profile from <date>** downloads with the profile as it stands. The dialog asks once per run per visit. It never blocks viewing the report, only the first download. A re-sync is rate-limited per site; if the cooldown is active, the error names the wait.

The Research History screen also has a Pitch report button on each completed run, so an older run's report is a click away.

## The same thing over MCP

| On the screen          | MCP tool                    |
| ---------------------- | --------------------------- |
| Starting-point report  | `get_starting_point_report` |
| SEO Opportunity Report | `get_pitch_report_payload`  |
| Re-sync profile first  | `resync_asset_profile`      |

The screen and the tools read the same data. `get_starting_point_report` takes a `projectId` and returns `markdown` plus structured fields and `lockedSections`. `get_pitch_report_payload` takes a `runId` and returns the data, with a `renderGuide` your agent renders in your own template. The stale-profile check over MCP is `assetProfile.syncedBeforeRun`. The screen renders its markdown and PDF in your browser, under the VarynForge layout. To send a report under your own name, have your agent render the payload instead.
