understand · market research
Competitor profiles
Four kinds of competition, eleven fields each.
In Market research
One profile per competitor, eleven fields each, every field dated and sourced. With no paying customers yet, competitors' customers are the best evidence of who buys, and their complaints are the best opening lines.
Four kinds, not one.
Direct competitors are usually the smallest threat. Alternatives, doing it yourself and doing nothing are what buyers actually do today.
Dated or it didn't happen.
Every field stores when it was checked. A price from three months ago is a guess.
Say what they do better.
The honest 'they win here' line is what makes the rest believable, and tells you where not to fight.
what it is
Competitive analysis, as structured profiles
Industry names: competitive analysis, competitor teardown, battlecards (the sales-team version). The difference here: each profile is data the pipeline uses, not a slide. Complaints become detector phrases, review pages become sources, and positioning gaps become offers.
Four kinds of competition count. Direct: same job, same buyer, similar product. Alternative: a different kind of product used for the same job. Do it yourself: spreadsheets, a VA, an agency, a script. Do nothing: living with the problem, often the biggest competitor.
Direct — same job, same buyer · VibeDraft: OpenTweet, PumpGTM.
Alternative — different product, same job · VibeDraft: X schedulers like Typefully, Hypefury, Tweet Hunter.
Do it yourself — the manual route · VibeDraft: posting by hand, DMing from a Google Sheet.
Do nothing — the status quo · VibeDraft: launching and hoping.
Battlecard — sales term · a one-page summary a rep uses mid-conversation; here the profile is the source a battlecard is built from.
how it works
Building a profile
One competitor at a time, public sources only, every field dated. A profile is never 'done'; it has a last-checked date and triggers that force a re-check.
- List all four kinds — direct, alternative, do it yourself, do nothing
- Read their site — positioning, price, who they target
- Map their channels — the 12-channel check (see channel analysis)
- Read low-star reviews — top complaints, in customers' words
- Find where customers talk — review sites, subreddits, their community
- Check launch history — Product Hunt, Uneed, PeerPush, Show HN
- Write the honest line — what they do better, from reviews or a trial
- Date and source it — checked_at and URL on every field
- List all four kinds — direct, alternative, do it yourself, do nothing
- Read their site — positioning, price, who they target
- Map their channels — the 12-channel check (see channel analysis)
- Read low-star reviews — top complaints, in customers' words
- Find where customers talk — review sites, subreddits, their community
- Check launch history — Product Hunt, Uneed, PeerPush, Show HN
- Write the honest line — what they do better, from reviews or a trial
- Date and source it — checked_at and URL on every field
the object
A competitor profile
Eleven fields plus kind and dates. Each field is a sourced fact, so the profile can be partly filled and still useful.
competitor
| field | type | what it holds |
|---|---|---|
name / domain | text | the product and its site |
kind | enum | direct, alternative, diy, nothing |
positioning | fact | headline, quoted |
price | fact | plans and prices, with the page and date |
targets | fact | who they say it's for |
channels | map | the 12 channels, each heavy, present, absent or unchecked |
ranks_for | list | their comparison and alternative pages |
communities | list | Discord, Slack, sponsored newsletters and podcasts |
launches | list | launch sites and dates |
complaints | list of quotes | low-star review lines, verbatim, with source |
customer_spaces | list | where their customers talk: detector sources |
switching_cost | fact | imports, contracts, lock-in |
does_better | fact | the honest line |
checked_at | timestamp | per field and for the profile |
sample
{
"name": "OpenTweet",
"domain": "opentweet.io",
"kind": "direct",
"positioning": "The posting layer for X. For your agents, your code, and you.",
"price": "$11.99 to $19.99 a month on different pages, 7-day free trial",
"targets": "founders, developers, SaaS marketers, content creators, agencies, AI agent builders",
"channels": {
"seo_content": "heavy",
"free_tools": "heavy",
"comparison_pages": "heavy",
"integrations": "heavy",
"community": "present",
"own_social": "present",
"referral": "present"
},
"complaints": [],
"checked_at": "2026-10-13"
}The sample uses the one row filled from OpenTweet's public site on Oct 13, 2026. Complaints, launch history and ads were not checked, so they are empty, not guessed.
field catalog
The eleven fields, where to find them, what they feed
Every field has a place to look and a stage it feeds. If a field feeds nothing you'd act on, skip it.
| field | where to find it | feeds |
|---|---|---|
| One-line positioning | their homepage headline | positioning; how buyers compare you |
| Price and plans | their pricing page | your price band; the 'too expensive' complaint |
| Who they target | homepage, 'for X' pages, case studies | the ICP when you have no payers |
| Channels they distribute through | the channel map | open lanes; where to compete |
| What they rank for | comparison, alternative and free-tool pages | which comparison pages you need |
| Communities they run or sponsor | their Discord or Slack, sponsored newsletters and podcasts | where their customers gather |
| Launch history | Product Hunt and other launch sites | how they got their first users |
| Top complaints | low-star reviews, 'leaving X' threads | opening lines; the unhappy-with-tool trigger |
| Where their customers talk | review sites, subreddits, their community | detector sources |
| Switching cost | import tools, contracts, data lock-in | what your offer has to remove |
| What they do better | reviews, your own trial of their product | honest comparison pages; what not to compete on |
direct
OpenTweet
Wins on volume: a template library, 20+ free tools, comparison pages against every scheduler, and agent integrations (an MCP server, a Claude Desktop extension, an API).
- checked
- public site, Oct 13, 2026
- lesson
- copying that is a content arms race
direct
PumpGTM
The closest in shape to the engine these pages describe.
- checked
- not researched yet
- next
- fill all eleven fields
alternative
Typefully, Hypefury, Tweet Hunter
X schedulers buyers already pay for. Unhappy-with-tool is the trigger they create.
- checked
- not researched yet
- first field
- top complaints from low-star reviews
diy
Posting by hand, DMing from a sheet
The manual route. Free, slow, and the founder's time is the cost.
- evidence
- posts like 'I'm a builder, not a marketer'
- offer
- remove the hours, keep the founder sending
nothing
Launching and hoping
The biggest competitor: no distribution at all after launch.
- evidence
- the day 3 to 45 window posts
- offer
- a first step that takes minutes
failure modes
How it goes wrong, and how to catch it
Only direct competitors — The profile set misses what buyers actually do, which is usually nothing. · Catch it: require at least one profile per kind before the ICP is drawn.
Undated prices — A comparison page quotes last quarter's price. · Catch it: checked_at on every field; comparison pages show the date.
Complaints paraphrased — 'Too expensive' loses the buyer's real phrase. · Catch it: store complaints verbatim with the source URL.
Terms violations — A review site's terms forbid automated collection. · Catch it: check each review site's terms before collecting; ad libraries are public by design.
Copying their strengths — Building 20 free tools because they did. · Catch it: the does_better field is there to say where not to fight.
data to capture
Record it so a model can learn from it later
Every decision on this page is training data if it is recorded in the guide's shape from day one.
1 · log the decision · 2 · version whatever decided · 3 · freeze the inputs · 4 · keep the negatives · 5 · log the odds · 6 · every human touch is a label · 7 · one chain of ids · 8 · keep the raw
record
- each profile field with value, source URL and checked_at
- every re-check and what changed (price, positioning, launch)
- complaints verbatim, with source and date
- which complaints later appeared as detector matches or reply hooks
label
per complaint phrase: did it match real signals; per competitor event (price change, shutdown): did it produce leads
trains
a shake-up detector (which competitor changes produce switching leads) and a ranking of complaint phrases by signal yield
test
- knob: which competitors' review pages are detector sources
- mode: shadow: run the new source beside live for two weeks
- win rule: real signals per week per source, at or above the current sources' precision