Competitor Intel
End-to-end competitor research and monitoring. Define the set, pull from every public surface that matters, diff against last run (or your own), and produce a brief that's actually useful — battle card, weekly digest, board update, or comparison-page input.
Out of scope — defer to other skills
| Request | Send them to |
|---|---|
| Competitor paid ads (Facebook / Instagram active ads) | meta-ads-library |
| Pure SEO / keyword research with HyperSEO as the primary surface | seo-research — uses the same HyperSEO toolkit but goes much deeper on keyword work |
| Generating creative (images / copy) for a comparison campaign once the intel is in | ad-creative-generation |
| Pulling data from competitor email programs | Not feasible — opt-in only. Use firecrawl_scrape_url on their landing pages instead. |
competitor-intel is the integration layer — it pulls from every source and synthesizes. It uses HyperSEO for the rank/backlink/intersection slice but isn't the SEO research skill itself.
Requirements
- Hyper MCP installed and connected. https://app.hyperfx.ai/mcp
- At least one of these toolkits connected at https://app.hyperfx.ai/integrations:
- Firecrawl (highly recommended — backbone for any site/blog/pricing-page work)
- HyperSEO (needed for rank, backlink, domain-overlap analysis)
- Apify scrapers — Instagram, TikTok, LinkedIn, Twitter, Reddit, Google search, Google Trends
- Image generation (optional — only if the brief feeds a comparison-page or battle-card asset downstream)
If none of those tool prefixes appear in the agent's tool list (firecrawl_*, hyperseo_*, scrape_instagram*, scrape_tiktok*, search_tweets, scrape_reddit*, search_google_results, scrape_google_trends, web_scrape_page), stop and tell the user to enable the Hyper MCP and connect at least Firecrawl + one social scraper. The LinkedIn scraper (scrape_linkedin_profiles) is only present when that specific integration is enabled — gracefully skip the LinkedIn slice if it's missing rather than failing the whole brief.
Tool surface
| Phase | Tools |
|---|---|
| Site & web content | firecrawl_scrape_url, firecrawl_batch_scrape, firecrawl_crawl_website, firecrawl_screenshot, firecrawl_extract_branding, web_scrape_page (JS-rendering fallback, supports ai_query for targeted extraction), web_fetch_page, web_loader |
| Search rankings & backlinks | hyperseo_competitors, hyperseo_competitors_domain, hyperseo_domain_overview, hyperseo_domain_keywords, hyperseo_domain_intersection, hyperseo_keywords_for_site, hyperseo_backlinks_history, hyperseo_historical_rank, hyperseo_track_mentions |
| Brand mentions in AI search & SERPs | hyperseo_ai_overview, hyperseo_ai_search_volume, hyperseo_track_mentions, search_google_results, web_search |
| Organic social — Instagram | scrape_instagram, scrape_instagram_posts, scrape_instagram_followers_count |
| Organic social — TikTok | scrape_tiktok_videos, scrape_tiktok_comments |
| Organic social — LinkedIn | scrape_linkedin_profiles (conditional — only available when the LinkedIn-scraper integration is enabled in your Hyper workspace) |
| Organic social — Twitter / X | search_tweets |
| Community / sentiment — Reddit | scrape_reddit, scrape_reddit_leads |
| Ecommerce competitor specifics | scrape_ecommerce_products, scrape_ecommerce_reviews |
| Demand / trend signals | scrape_google_trends, hyperseo_search_volume, hyperseo_search_intent |
| Optional: comparison-page assets | openai_image_generation, nano_banana_image_generation, seedream_image_generation, nano_banana_multi_turn |
Critical rules
- Public-only data. Never scrape behind login walls or paywalls. If a target is gated, stop and surface that — don't try to bypass.
- Pick the competitor set before scraping. 3–5 competitors is the sweet spot. 10+ produces an unreadable brief and burns scraper credits. If the user doesn't have a list, run
hyperseo_competitors(domain=<their_domain>)first to surface the top organic competitors, then confirm the set with them. - Snapshot, then diff. First run is just a baseline — there's nothing to compare against. The value compounds on the second and third runs (what changed in pricing, what new posts went up, who lost rank). Make this expectation clear when the user runs it for the first time.
- HyperSEO is credit-metered. Be intentional. Don't loop
hyperseo_domain_overviewover 12 competitors when you only need 4. Each call has cost — batch and cache. - Apify scrapers can be slow and rate-limited. Don't kick off 8 scrapes in parallel. Sequence them, and surface partial results to the user as they arrive instead of waiting for the full run.
- Snapshot what you scraped, not just the analysis. Always include the source URL, scrape timestamp, and a short excerpt for any claim in the brief — otherwise next week's diff has nothing to compare against and the brief becomes unfalsifiable.
- Don't over-interpret single data points. "Competitor X dropped a Reel that got 12K likes" is noise. "Competitor X has averaged 8K likes/post for the last 30 days, up from 2K" is signal. Build comparisons on aggregates, not anecdotes.
- Stay clearly factual. Use neutral language ("Competitor X published Y on date Z, copy reads as…") not value judgments ("Competitor X's strategy is broken…"). The brief is intel, not opinion.
- Disambiguate brand-name SERPs. A search for
<competitor>alone often returns unrelated results that share the brand name (e.g. a search for "hyperfx" returns mostly HyperX headphones, not hyperfx.ai). Always pair the brand with a category modifier —<competitor> alternative,<competitor> reviews,<competitor> pricing,<competitor> vs <us>— to get clean SERPs. - Apify-backed scrapers fail intermittently. Expect occasional
"fetch failed"or empty-result responses fromscrape_instagram*,scrape_tiktok*,scrape_reddit*,scrape_google_trends,search_tweets, andsearch_google_results. Retry once after a short delay before reporting the source as missing — and surface partial results to the user rather than failing the whole brief if a scraper stays down.
Workflow
Phase 1 — Define the competitor set
Ask the user (or infer):
- Their domain — needed to ground all relative comparisons.
- Their competitor set — 3–5 names + domains. If unclear, surface the top organic competitors.
hyperseo_competitorstakes the keywords the user wants to win, not their domain — so first agree on 3–5 high-intent keywords for the user's category, then run:
hyperseo_competitors(
keywords=["<category keyword 1>", "<category keyword 2>", "<category keyword 3>"],
location_code=2840, # 2840=US, 2826=UK, 2124=CA, 2036=AU
limit=10
)
Then confirm the surfaced set with the user before continuing — never guess and proceed.
- The job — what is this brief for? The shape changes by job:
- Battle card for sales → focus on positioning, pricing, "what to say when…" objection lines.
- Weekly digest for marketing/exec team → focus on what changed this week.
- Comparison-page input for marketing → focus on objective, comparable feature/pricing data.
- Board / board-prep update → focus on aggregate position (share of voice, rank deltas, growth).
- The cadence — one-shot or recurring? Recurring scopes the source matrix tighter so each run completes in reasonable time.
If the user can't answer #3, stop and ask. Building intel without knowing the artifact is a guaranteed waste.
Phase 2 — Build the source matrix
Not every source matters for every competitor or every job. Per-competitor, decide which surfaces to p