Solution Page
Profile two companies in parallel, synthesize a competitive battle card, and enrich the comparison with recent news.
Overview
For Strategy, Product marketing, Founders
Integrations: Company profiles, Battle card, Recent news
• Head-to-head comparison
• Battle card
• Recent news context
• Improves consistency in competitive positioning.
• Speeds up preparation for strategy and sales conversations.
• Keeps comparisons grounded in up-to-date research inputs.
What It Solves
Head-to-head company comparisons are usually assembled manually and lose freshness as soon as the market moves.
Workflow
Profile both companies in parallel.
Pull recent external context and compare the two across common themes.
Publish a battle card the team can reuse in strategy and field settings.
Implementation
Review the underlying plan definition, inspect the template when available, and see how the workflow is encoded for repeatable execution.
Plan Code
Markdown Report
head_to_head.yaml
238 lines
## HEAD TO HEAD - COMPETITIVE BATTLE CARD
## Takes two companies and produces a full competitive analysis:
## parallel profiles → head-to-head synthesis → recent news enrichment
parameters:
- name: company_one
schema:
type: string
description: "The primary company — the one we are positioning to win"
- name: company_two
schema:
type: string
description: "The competitor company — the one we are positioning against"
components:
schemas:
news_item:
type: object
properties:
title: { type: string, description: "Headline of the news item" }
url: { type: string, description: "URL of the news item" }
source: { type: string, description: "Publication or outlet name" }
date: { type: string, description: "Publication date" }
summary: { type: string, description: "One sentence takeaway and why it matters competitively" }
company_profile:
type: object
required: [name]
properties:
name: { type: string, description: "Name of the company" }
website_url: { type: string, description: "Official website URL" }
general_information: { type: string, description: "Short overview of what the company does" }
founded_year: { type: integer, description: "Year the company was founded" }
hq_location: { type: string, description: "Headquarters location" }
stage: { type: string, description: "Company stage: seed, Series A, growth, or public" }
headcount: { type: string, description: "Approximate employee count or range" }
category: { type: string, description: "Primary market category or business type" }
business_model:
type: string
enum: [b2b, b2c, b2b2c, marketplace, enterprise, smb, developer, hybrid, unknown]
target_customer: { type: string, description: "Core buyer or customer segment" }
tam_estimate: { type: string, description: "Estimated total addressable market" }
funding: { type: string, description: "Known funding status, rounds, or investors" }
key_investors:
type: array
items: { type: string }
revenue_signals:
type: array
description: "Observable signals related to monetization, pricing, or revenue scale"
items: { type: string }
growth_signals:
type: array
description: "Observable signals of momentum: hiring, launches, partnerships, expansion"
items: { type: string }
moat: { type: string, description: "Potential competitive advantage or defensibility" }
risk_flags:
type: array
description: "Material concerns, execution risks, or competitive weaknesses"
items: { type: string }
dimension_comparison:
type: object
description: "A single dimension compared across both companies"
properties:
dimension: { type: string, description: "The dimension being compared (e.g. Pricing Model, GTM Motion)" }
company_one_position: { type: string, description: "How company one stands on this dimension" }
company_two_position: { type: string, description: "How company two stands on this dimension" }
advantage: { type: string, enum: [company_one, company_two, neutral], description: "Which company has the edge here" }
notes: { type: string, description: "Context or nuance on this dimension" }
positioning_move:
type: object
description: "A concrete action company one should take to win against company two"
properties:
move: { type: string, description: "Short label for the strategic move" }
rationale: { type: string, description: "Why this move wins given the competitive landscape" }
target_segment: { type: string, description: "Which customer segment this move targets" }
urgency: { type: string, enum: [immediate, near-term, long-term], description: "When to execute this move" }
battle_card:
type: object
description: "Full head-to-head competitive synthesis"
properties:
summary: { type: string, description: "2-3 sentence executive summary of how these two companies stack up" }
overlap:
type: array
description: "Specific areas where both companies compete directly for the same customer or use case"
items: { type: string }
commonalities:
type: array
description: "Shared characteristics — similar business model, tech approach, go-to-market, etc."
items: { type: string }
company_one_strengths:
type: array
description: "Where company one meaningfully outperforms or differentiates from company two"
items: { type: string }
company_one_weaknesses:
type: array
description: "Where company one lags, is exposed, or is vulnerable relative to company two"
items: { type: string }
company_two_strengths:
type: array
description: "Where company two meaningfully outperforms or differentiates from company one"
items: { type: string }
company_two_weaknesses:
type: array
description: "Where company two lags, is exposed, or is vulnerable relative to company one"
items: { type: string }
key_differentiators:
type: array
description: "The most decisive points of differentiation that will determine who wins"
items: { type: string }
dimension_comparisons:
type: array
description: "Structured dimension-by-dimension breakdown across key competitive vectors"
items:
$ref: "#/components/schemas/dimension_comparison"
positioning_playbook:
type: array
description: "Concrete moves company one should make to beat company two"
items:
$ref: "#/components/schemas/positioning_move"
win_themes:
type: array
description: "The 3 most compelling narratives company one should lead with when competing against company two"
items: { type: string }
risk_of_inaction: { type: string, description: "What happens if company one does nothing differently — what does company two's trajectory suggest?" }
sessions:
# Run both company profiles in parallel — no dependsOn
profile-company-one:
prePrompt: |-
Research {{ .params.company_one }} thoroughly.
Find the official website, what the company does, its market category, recent funding,
and all standard VC diligence fields: founded year, HQ location, stage, headcount,
business model, target customer, TAM estimate, key investors, revenue signals,
growth signals, moat, and risk flags.
prompt: |-
Return a company_profile JSON object for {{ .params.company_one }}.
tools:
- type: internet_search
profile-company-two:
prePrompt: |-
Research {{ .params.company_two }} thoroughly.
Find the official website, what the company does, its market category, recent funding,
and all standard VC diligence fields: founded year, HQ location, stage, headcount,
business model, target customer, TAM estimate, key investors, revenue signals,
growth signals, moat, and risk flags.
prompt: |-
Return a company_profile JSON object for {{ .params.company_two }}.
tools:
- type: internet_search
# Synthesis session — depends on both profiles
synthesize-battle-card:
dependsOn:
- session: profile-company-one
- session: profile-company-two
context: true
prePrompt: |-
Using the profiles for {{ .params.company_one }} and {{ .params.company_two }} already in context,
do additional research to fill any gaps and sharpen the competitive picture:
- Look for head-to-head comparisons, analyst takes, customer reviews, or G2/Capterra pages
- Identify which customer segments each company is winning and losing
- Find any public evidence of the two companies competing for the same deals or customers
- Look for pricing pages, case studies, or partnership announcements that reveal GTM strategy
prompt: |-
Using both company profiles in context plus the additional research above,
produce a battle_card JSON object comparing {{ .params.company_one }} vs {{ .params.company_two }}.
The positioning_playbook must be written from the perspective of {{ .params.company_one }} —
concrete, actionable moves to beat {{ .params.company_two }}.
Cover at least 6 dimension_comparisons across: product, pricing, GTM, target customer,
technology/moat, and brand/market presence.
tools:
- type: internet_search
# News enrichment — runs in parallel for both companies after profiles exist
fetch-news-company-one:
dependsOn:
- session: profile-company-one
context: "{{ .context.company_one_profile }}"
prePrompt: |-
Find the 4 most recent material news updates for {{ .params.company_one }}.
Focus on: product launches, funding rounds, partnerships, acquisitions, executive changes,
customer wins, or major strategy shifts. Prioritize news from the last 90 days.
prompt: |-
Return an array of news_item objects for {{ .params.company_one }}.
Each summary should note why the news item is competitively relevant.
tools:
- type: internet_search
fetch-news-company-two:
dependsOn:
- session: profile-company-two
context: "{{ .context.company_two_profile }}"
prePrompt: |-
Find the 4 most recent material news updates for {{ .params.company_two }}.
Focus on: product launches, funding rounds, partnerships, acquisitions, executive changes,
customer wins, or major strategy shifts. Prioritize news from the last 90 days.
prompt: |-
Return an array of news_item objects for {{ .params.company_two }}.
Each summary should note why the news item is competitively relevant.
tools:
- type: internet_search
schema:
type: object
required:
- company_one_profile
- company_two_profile
- battle_card
- company_one_news
- company_two_news
properties:
company_one_profile:
x-session: profile-company-one
$ref: "#/components/schemas/company_profile"
company_two_profile:
x-session: profile-company-two
$ref: "#/components/schemas/company_profile"
battle_card:
x-session: synthesize-battle-card
$ref: "#/components/schemas/battle_card"
company_one_news:
x-session: fetch-news-company-one
type: array
items:
$ref: "#/components/schemas/news_item"
company_two_news:
x-session: fetch-news-company-two
type: array
items:
$ref: "#/components/schemas/news_item"