Competitor Intel
Composite and reusable primitive: deterministic scripts collect public signal per competitor across three layers (data collection, content tracking, optional monitoring); you, the agent, write each profile, synthesize the landscape, and recommend actions.
When to use
- "Research [competitor]." / "Build a competitor profile for [company]."
- "What are our competitors doing?" / "Competitive landscape analysis."
- Baseline engine invoked per-competitor by
competitor-monitoring-system; shares its review/social/pricing legs withbattlecard-generatorandcompany-current-gtm-analysis.
How to run
Loop per competitor (2–5). Pick quick (website + serp + one review pass) or deep
(adds social + full review/ad mining) depth.
1. Company / product / positioning pages
python3 ${SKILL_DIR}/scripts/fetch_pages.py \
--url https://competitor.com https://competitor.com/about \
https://competitor.com/pricing https://competitor.com/product \
https://competitor.com/integrations https://competitor.com/customers \
--output ${WORKSPACE}/acme_pages.json
Use your own web search for [company] funding, [company] founders, [company] launch 2026,
and [company] vs / alternatives pages. Re-fetch JS-rendered pages with
node ${SKILL_DIR}/scripts/render_page.mjs --url <u> --output ....
2. Content & marketing
python3 ${SKILL_DIR}/scripts/fetch_feed.py --url https://competitor.com/blog \
--output ${WORKSPACE}/acme_blog.json # cadence, authors, recent topics
Find social handles via web search. For founder/company LinkedIn activity use
render_page.mjs (one-off) or PHANTOMBUSTER_API_KEY (scale).
3. Customer evidence (reviews)
Render the G2/Capterra review page (anti-bot, JS):
npx playwright install chromium # first run only
node ${SKILL_DIR}/scripts/render_page.mjs \
--url "https://www.g2.com/products/<acme>/reviews" \
--selector "[itemprop='review']" --output ${WORKSPACE}/acme_g2.json
Pull rating + praise/complaint themes. Apify fallback on hard block (see Notes).
4. Optional social depth (deep only)
Reddit/X/LinkedIn at depth → APIFY_API_TOKEN actors or PHANTOMBUSTER_API_KEY
(LinkedIn). Without keys, your own web search covers the basics.
5. Profile + synthesize (you, the agent — no script)
Per competitor write: overview, positioning, product, content/marketing, customer evidence, signals, strengths/weaknesses-vs-you, your opportunity. Then synthesize a landscape summary (positioning map, content comparison, feature comparison, key takeaways) and recommended actions — ground every recommendation in a collected signal. Dedup across sources; an item on both Reddit and X is higher signal — flag it.
6. Optional ongoing monitoring
Write the fields to track as flat JSON, then diff + save across runs:
python3 ${SKILL_DIR}/scripts/snapshot_store.py diff --entity acme \
--input ${WORKSPACE}/acme_track.json --store ${WORKSPACE}/supabase/competitor_history.csv
python3 ${SKILL_DIR}/scripts/snapshot_store.py save --entity acme \
--input ${WORKSPACE}/acme_track.json --store ${WORKSPACE}/supabase/competitor_history.csv
Outputs
${WORKSPACE}/*_pages.json,*_blog.json,*_g2.json— collected signal per competitor.${WORKSPACE}/competitor-profiles-[date].md— profiles + landscape + actions (your synthesis).${WORKSPACE}/supabase/competitor_history.csv— monitoring history (if step 6 used).
Credentials / env
- Required: none — baseline research (fetch / feed / render) is free; synthesis is the agent.
- Optional:
APIFY_API_TOKEN(Reddit/X/LinkedIn/review depth);PHANTOMBUSTER_API_KEY- LinkedIn cookie (LinkedIn at scale);
SUPABASE_URL/SUPABASE_KEYorAIRTABLE_API_KEY(durable profile history for monitoring);DATAFORSEO_LOGIN/DATAFORSEO_PASSWORDorSERPER_API_KEYfor the funding/founders/alternatives searches (if set -> paid SERP; if not -> the agent's own web search, the default).
- LinkedIn cookie (LinkedIn at scale);
Notes & edge cases
- Default to the free backbone; reach for Apify/Phantombuster only for social depth or hostile review sites.
quick= website + serp + a single review pass;deepadds social + full review/ad mining.- Ground every recommendation in a collected signal — no generic advice.
- Apify degrade (when set):
curl -s "https://api.apify.com/v2/acts/<actor>/run-sync-get-dataset-items?token=$APIFY_API_TOKEN" -d '{...}'.