An agentic AI workflow that autonomously researches a company or product and generates a structured competitive brief β the kind a PM would spend 3β4 hours assembling manually, done in under 2 minutes.
Competitive research is one of the highest-leverage activities a PM can do β and one of the most time-consuming to do well. A proper competitive brief requires:
- Tracking down recent pricing changes
- Reading through product announcements and release notes
- Synthesizing customer reviews and analyst takes
- Framing it all in terms of strategic implications, not just feature lists
I built this agent to automate the research and synthesis layer, so I can spend my time on the part that actually requires product judgment: deciding what it means for roadmap, positioning, and customer conversations.
This is also a working prototype of a broader pattern I care about: agentic workflows that augment PM decision-making, not just generate text.
| Module | What it does |
|---|---|
agent.py |
Core research agent β autonomously searches and generates a competitive brief |
scorer.py |
Scores a brief across 5 strategic dimensions and outputs a threat level |
batch.py |
Researches and scores multiple competitors in one run, outputs a ranked landscape |
diff.py |
Compares two briefs over time, surfaces strategic changes and threat trajectory |
outputs/slack_output.py |
Pushes briefs and scorecards to a Slack channel via webhook |
outputs/notion_output.py |
Creates a Notion database page for each brief with scorecard properties |
Runs an autonomous multi-step research loop using Claude + web search:
User Input (target company/product)
β
βΌ
βββββββββββββββββββββββββββββββββββ
β Research Agent Loop β
β 1. Decide what to search for β
β 2. Run web search β
β 3. Evaluate results β
β 4. Decide: search more or stop β
β 5. Repeat up to 10x β
βββββββββββββββββββββββββββββββββββ
β
βΌ
Structured Competitive Brief (Markdown)
The agent decides its own search strategy. It doesn't follow a fixed script β it reads intermediate results and determines what gaps remain before synthesizing.
Takes a brief and scores the competitor across five strategic dimensions:
| Dimension | What it measures |
|---|---|
| Market Overlap | How directly do they compete for the same customers and budget? |
| AI Maturity | How deeply is AI integrated β native or bolted on? |
| Execution Velocity | How fast are they shipping meaningful product changes? |
| Distribution Strength | Brand, channels, partnerships, existing contracts |
| Resource Depth | Funding, headcount β how long can they sustain a fight? |
Output: a composite score (1β10) + overall threat level: π΄ Critical / π High / π‘ Medium / π’ Low
Research and score an entire competitive landscape in one command. Outputs:
- Individual brief files per competitor
landscape.mdβ a ranked summary table sorted by threat level
Compare two briefs for the same competitor across time. Surfaces:
- Threat trajectory (β Escalating / β Stable / β De-escalating)
- New features and strategic moves
- ICP drift β are they moving toward your customers?
- AI maturity delta
- Strategic implications for a competing PM
Push briefs and scorecards directly to your workspace:
- Slack: Formatted Block Kit message to any channel via webhook
- Notion: New database page with scorecard properties, filterable by threat level
git clone https://github.com/dvmukul/pm-research-agent.git
cd pm-research-agent
pip install -r requirements.txt
export ANTHROPIC_API_KEY=your_key_herepython agent.py --target "Salesforce Einstein"
python agent.py --target "Intercom Fin AI" --output briefs/intercom.mdpython scorer.py --brief briefs/intercom.md
python scorer.py --brief briefs/intercom.md --json # structured JSON outputpython agent.py --target "Notion AI" --output briefs/notion.md && \
python scorer.py --brief briefs/notion.md# Comma-separated
python batch.py --targets "Notion AI, Coda, Confluence AI, ClickUp AI" --output-dir briefs/
# From a file
python batch.py --targets-file competitors.txt --output-dir briefs/ --context "Q2 2025 review"python diff.py --before briefs/notion-jan.md --after briefs/notion-apr.md --target "Notion AI"
python diff.py --before briefs/notion-jan.md --after briefs/notion-apr.md --output diffs/notion-delta.mdexport SLACK_WEBHOOK_URL=https://hooks.slack.com/...
python outputs/slack_output.py --brief briefs/notion.md --target "Notion AI"
python outputs/slack_output.py --brief briefs/notion.md --dry-run # preview without sendingexport NOTION_API_KEY=secret_xxx
export NOTION_DATABASE_ID=your-database-id
python outputs/notion_output.py --brief briefs/notion.md --target "Notion AI" --category "AI"π Batch run: 3 competitor(s)
Targets: Notion AI, Coda, Confluence AI
Output: briefs/
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
[1/3] Notion AI
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
π Search [1]: Notion AI features pricing 2025
π Search [2]: Notion AI vs Microsoft Copilot
π Search [3]: Notion enterprise announcements 2025
π― Scoring threat level for: Notion AI
π High threat | Composite: 7.4/10
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
[2/3] Coda
...
β
Batch complete
3 brief(s) saved to briefs/
Landscape summary: briefs/landscape.md
## Threat Scorecard: Notion AI
**Overall Threat Level:** π High
**Composite Score:** 7.4 / 10
| Dimension | Score | Visual | Rationale |
|--------------------|--------|--------------|----------------------------------------------------|
| Market Overlap | 8/10 | ββββββββββ | Direct overlap on knowledge management and docs |
| AI Maturity | 7/10 | ββββββββββ | Native AI on structured data is a real moat |
| Execution Velocity | 8/10 | ββββββββββ | Notion Mail + Calendar in one quarter signals pace |
| Distribution | 7/10 | ββββββββββ | Strong SMB brand but enterprise flank exposed |
| Resource Depth | 7/10 | ββββββββββ | $10B valuation, well-capitalized |
Full example brief: sample_output/notion-ai-brief.md
Why Claude? Claude's extended context window and strong instruction-following made it the right choice for a task that requires reading multiple search results and synthesizing them coherently β not just summarizing the top result.
Why agentic (not a fixed pipeline)? Fixed pipelines break when the target is unusual or when the first search returns stale results. The agent adapts β if it can't find pricing, it searches differently. If a product was acquired recently, it notices and adjusts the framing.
Why five scoring dimensions? They were chosen to map directly to the questions a PM asks in a real competitive review β not generic "strengths/weaknesses." Each dimension is specific enough to score from a brief, and together they produce a threat profile, not just a threat number.
Why a diff mode? A one-time brief is a snapshot. What matters to a PM is momentum β is this competitor accelerating or stalling? The diff mode is what turns this from a research tool into an ongoing intelligence system.
Why Markdown output? Briefs need to be shareable. Markdown renders cleanly in Notion, Confluence, GitHub, and Linear β everywhere a PM actually works.
Built by Mukul Dewangan β Senior PM specializing in AI and data products. This repo is part of a broader exploration of how agentic AI can augment product management workflows.
If you're building in this space, let's connect.