Construisez une liste de prospects scorée en quelques minutes — déposez 50 comptes, récupérez recherche + CSV — Claude Skill
Une compétence Claude pour Claude Code par Browserbase — exécuter /company-research dans Claude·Mis à jour le 6 juin 2026·v1.1.0
Liste de prospects scorée avec recherche et adéquation ICP, prête en CSV pour Apollo.
- CSV scoré — adéquation ICP de 1 à 10 par compte avec les preuves, prêt à trier et importer
- Boucle Plan → Recherche → Synthèse — le même schéma qu'un SDR senior, mais à l'échelle
- Trois modes de profondeur — Quick (~100 comptes), Deep (~50), Deeper (~25 avec intelligence complète)
- Garde-fous anti-hallucination — refuse d'inventer des descriptions produit à partir des polices d'une entreprise (un vrai mode d'échec des outils de recherche de comptes)
- Sortie sur votre Desktop — CSV scoré + vue HTML, ouverte dans le navigateur à la fin
Vous ouvrez LinkedIn, Crunchbase, Google. Pour chaque compte, vous vérifiez la date de financement, le nombre d'employés, la outils tech, les posts récents. Vous saisissez les résultats dans un doc Notion. Vous répétez pour 50 comptes. 90+ minutes par lot — avant d'avoir envoyé un seul email. La qualité baisse au compte 20 parce que vous êtes fatigué.
“J'ai passé la moitié de mon lundi à construire la liste cible. Quand j'ai commencé à envoyer, la moitié de la matinée était partie.”
— SDR dans un SaaS Series A
Un prompt avec votre ICP. Le skill exécute la même boucle de recherche que vous — mais en parallèle sur 50 comptes. Vous obtenez un CSV scoré et une vue HTML sur votre Desktop en ~6 minutes. Vous passez le reste du lundi sur la prospection sortante, pas sur la recherche.
Pour qui
Déposez 50 comptes SaaS de votre ICP dans un prompt. Récupérez un CSV scoré avec signaux de financement, recrutement et outils utilisés. La construction de liste du lundi passe de 90 minutes à 6.
Voir les compétences de ce rôleRecherche pré-call sans jungle d'onglets. Lancez le mode Deeper sur un compte avant discovery — financement, recrutements, succès clients, tout sourcé.
Voir les compétences de ce rôleRecherche ICP en masse pour la planification de territoire — obtenez 100 comptes scorés contre un ICP fraîchement défini avant attribution aux commerciaux.
Voir les compétences de ce rôleRelancez les anciens comptes de territoire seulement quand quelque chose a vraiment changé — nouvelle levée, nouveaux recrutements, nouveau produit. Ignorez le reste.
Voir les compétences de ce rôleCe qu'il fait
Définissez votre ICP une fois. Chaque matin, demandez 50 nouveaux comptes correspondants. Obtenez un CSV scoré avant le standup et travaillez la liste pendant la journée.
Le sales lead dit 'testons les fintech US Series B'. Lancez un passage en mode Deeper pour obtenir 25 comptes entièrement recherchés avec signaux de recrutement, outils déjà utilisés et financement récent — assez pour rédiger vos 10 premiers emails l'après-midi même.
Un gros prospect vient de réserver un discovery call. Lancez une recherche Deeper sur un seul compte pour obtenir chaque signal public (actualités récentes, gains clients, pics de recrutement) avant l'appel — au lieu d'ouvrir 15 onglets vous-même.
Un AE demande 'qu'est-ce qui a changé dans mon territoire depuis le dernier trimestre ?'. Lancez un passage Quick sur 100 comptes existants — signalez ceux avec nouvelles levées, nouvelles embauches ou lancements produit qui justifient une relance.
Fonctionnement
Indiquez votre entreprise et les segments ciblés (par exemple 'e-commerce mid-market, Series A+, US').
Il recherche d'abord votre propre ICP — ce que vous vendez, à qui vous vendez, à quoi ressemblent les concurrents — et confirme avec vous avant d'élargir.
Il découvre les comptes cibles via des requêtes adaptées à vos segments (industrie + stade, outils déjà utilisés, proximités concurrentielles).
Il recherche chaque compte avec une profondeur alignée sur votre budget — homepage, financement, recrutement, clients — et score l'adéquation ICP de 1 à 10 avec preuves.
Il produit un CSV scoré + une vue HTML sur votre Desktop — ouverte dans le navigateur, prête à déposer dans Apollo ou votre CRM.
Options d'entrée
Homepage + 1-2 recherches complémentaires par compte. Idéal pour les scans larges quand le volume prime sur la profondeur.
Exemple
Trouvez 50 entreprises SaaS e-commerce mid-market (Series A+, basées aux États-Unis) qui pourraient avoir besoin d'automatisation d'inventaire par IA. Scorez par adéquation ICP et donnez-moi un CSV.
Acme Inc — score 9/10 — SaaS e-commerce Series A, utilise Selenium pour le scraping, expansion vers l'UE Bolt Commerce — score 9/10 — vient de lever 14 M$ en Series A, recrute 3 data engineers Flux Inventory — score 8/10 — orienté DTC, la page de prix mentionne des problèmes de coordination multi-entrepôts GridShop — score 8/10 — roadmap publique mentionnant l'automatisation d'inventaire comme priorité T2 Helio Brands — score 7/10 — vertical adjacent (DTC abonnement), quelques signaux communs
~/Desktop/yourco_research_2026-05-21/ ├ index.html ← s'ouvre automatiquement : tableau récapitulatif scoré ├ results.csv ← à déposer dans Apollo / ZoomInfo / Sheets ├ companies/acme-inc.html ← page approfondie par compte └ companies/... .md par entreprise avec : résumé produit, raisonnement d'adéquation ICP, preuves avec niveaux de confiance et URLs source
Plan : 4 sous-questions par compte (produit, outils déjà utilisés, signaux de croissance, adéquation au problème) Recherche : 5-8 recherches web + récupérations de pages par compte en mode Deep Synthèse : score ICP avec preuves citées — refuse de scorer au-dessus de 3 si la homepage est illisible (pas d'hallucination sur signal faible)
Métriques améliorées
Compatible avec
Envie d'utiliser Recherche d'entreprises ?
Choisissez comment commencer.
Installez et exécutez cette compétence localement sur votre ordinateur.
Ouvrez un terminal sur votre ordinateur et collez cette commande :
Cela télécharge la compétence avec tous ses fichiers sur votre ordinateur :
Ajoutez -g à la fin pour le rendre disponible dans tous vos projets.
Démarrez Claude Code, puis tapez la commande :
Recherche d'entreprises
Découvrez et recherchez en profondeur des entreprises à qui vendre. Utilise la Browserbase Search API pour la découverte et un pattern Plan→Research→Synthesize pour l'enrichissement approfondi — avec en sortie un rapport de recherche scoré et un CSV.
Requis : variable d'environnement BROWSERBASE_API_KEY et CLI browse installé.
Configuration au premier lancement : au premier lancement, vous devrez approuver browse cloud fetch, browse cloud search, cat, mkdir, sed, etc. Sélectionnez "Yes, and don't ask again for: browse cloud fetch:*" (ou équivalent) pour chacun afin d'approuver automatiquement pendant la session. Pour approuver définitivement, ajoutez ces entrées à ~/.claude/settings.json sous permissions.allow :
"Bash(browse:*)", "Bash(bunx:*)", "Bash(bun:*)", "Bash(node:*)",
"Bash(cat:*)", "Bash(mkdir:*)", "Bash(sed:*)", "Bash(head:*)", "Bash(tr:*)", "Bash(rm:*)"
Règles de chemin : utilisez toujours le chemin littéral complet dans toutes les commandes Bash — PAS ~ ni $HOME (les deux déclenchent des demandes d'autorisation "shell expansion syntax"). Résolvez le répertoire home une fois et réutilisez-le partout. Quand vous construisez des prompts de sous-agent, remplacez {SKILL_DIR} par le chemin littéral complet.
Répertoire de sortie : toute la sortie de recherche va dans ~/Desktop/{company_slug}_research_{YYYY-MM-DD}/. Ce répertoire contient un fichier .md par entreprise recherchée plus un .csv final. L'utilisateur obtient à la fois le tableur scoré et les fichiers de recherche complets sur son Desktop.
CRITIQUE — restrictions d'outils (s'applique à l'agent principal ET à tous les sous-agents) :
- Toutes les recherches web : utiliser
browse cloud search. NE JAMAIS utiliser WebSearch. - Toute extraction de contenu de page : utiliser
node {SKILL_DIR}/scripts/extract_page.mjs "<url>". Ce script récupère viabrowse cloud fetch --output, parse le titre + les meta tags + le texte visible du body, et bascule automatiquement versbrowse get markdownquand le fetch échoue ou renvoie un contenu mince rendu en JS. NE JAMAIS bricoler un portefeuille commercialbrowse cloud fetch | sed— il supprime les meta tags et ne parse pas l'enveloppe JSON stdout. NE JAMAIS utiliser WebFetch. - Toute sortie de recherche : les sous-agents écrivent un fichier markdown par entreprise dans
{OUTPUT_DIR}/{company-slug}.mdavec un heredoc bash. NE JAMAIS utiliser l'outil Write nipython3 -c. Voirreferences/example-research.mdpour le format de fichier. - Compilation rapport + CSV : utiliser
node {SKILL_DIR}/scripts/compile_report.mjs {OUTPUT_DIR} --open— génère le rapport HTML et le CSV en une étape, ouvre l'overview dans le navigateur. - Déduplication d'URL : utiliser
node {SKILL_DIR}/scripts/list_urls.mjs /tmpaprès la découverte. - Les sous-agents doivent utiliser UNIQUEMENT l'outil Bash. Aucun autre outil autorisé.
- L'agent principal ne lit JAMAIS les fichiers JSON bruts de discovery batch. Utiliser
list_urls.mjspour dédupliquer.
CRITIQUE — règles anti-hallucination (s'applique à l'agent principal ET à tous les sous-agents) :
- NE JAMAIS inférer
product_description,industryoutarget_audienceà partir des polices, du framework (Framer/Next.js/React), du design system ou de la typographie d'un site. Ce sont des éléments cosmétiques qui ne disent rien sur ce que l'entreprise vend. - NE JAMAIS laisser l'ICP de l'utilisateur contaminer la description d'une cible. Si vous ne savez pas ce que fait la cible, écrivez
Unknown— ne la forcez pas dans le pattern de l'ICP. product_descriptionDOIT citer ou paraphraser une phrase spécifique issue de la sortieextract_page.mjs(TITLE, META_DESCRIPTION, OG_DESCRIPTION, HEADINGS ou BODY). Si aucun de ces champs ne donne une phrase produit reconnaissable, écrivezUnknown — homepage content not accessible.- Si
product_descriptionvautUnknown, plafonnezicp_fit_scoreà 3 et mettezicp_fit_reasoningàInsufficient evidence — homepage returned no readable content.
CRITIQUE — minimiser les demandes d'autorisation :
- Les sous-agents DOIVENT regrouper TOUTES les écritures de fichiers dans UN SEUL appel Bash avec des heredocs chaînés. Un appel Bash = une demande d'autorisation.
- Regrouper TOUTES les recherches et TOUS les fetches dans des appels Bash uniques avec chaînage
&&.
Vue d'ensemble du portefeuille commercial
Suivez ces 5 étapes dans l'ordre. Ne sautez aucune étape et ne les réordonnez pas.
- Recherche sur l'entreprise — Comprendre en profondeur l'entreprise de l'utilisateur, son produit et à qui elle vend
- Choix du mode de profondeur — Choisir la profondeur de recherche selon le nombre de cibles demandées
- Découverte — Trouver des entreprises cibles avec des requêtes de recherche variées
- Recherche approfondie & scoring — Rechercher chaque entreprise, scorer l'adéquation ICP
- Rapport & CSV — Présenter les résultats, compiler le CSV scoré
Étape 0 : Configurer le répertoire de sortie
Avant de commencer, créez le répertoire de sortie sur le Desktop de l'utilisateur :
OUTPUT_DIR=~/Desktop/{company_slug}_research_{YYYY-MM-DD}
mkdir -p "$OUTPUT_DIR"
Remplacez {company_slug} par le nom de l'entreprise de l'utilisateur (minuscules, avec traits d'union) et {YYYY-MM-DD} par la date du jour. Transmettez {OUTPUT_DIR} (comme chemin littéral complet, pas avec ~) à tous les prompts de sous-agent afin qu'ils y écrivent les fichiers de recherche.
Nettoyez aussi les fichiers de batch discovery des exécutions précédentes :
rm -f /tmp/company_discovery_batch_*.json
Étape 1 : Recherche approfondie sur l'entreprise
C'est l'étape la plus importante. La qualité de tout ce qui suit dépend de la compréhension approfondie de l'entreprise de l'utilisateur.
-
Demandez à l'utilisateur le nom ou l'URL de son entreprise
-
Vérifier l'existence d'un profil :
- Listez les fichiers dans
{SKILL_DIR}/profiles/(ignorerexample.json) - Si un profil correspondant existe → chargez-le, présentez-le à l'utilisateur : "J'ai votre profil datant de {researched_at}. Est-il toujours exact ?" Si oui → passer à l'Étape 2.
- Si aucun profil n'existe → poursuivre avec la recherche approfondie ci-dessous.
- Listez les fichiers dans
-
Lancer une recherche approfondie complète sur l'entreprise de l'utilisateur avec le pattern Plan→Research→Synthesize. Voir
references/research-patterns.mdpour les templates de sous-questions et la méthodologie de recherche.Étapes clés de recherche :
- Recherche :
browse cloud search "{company name}" --num-results 10 - Fetch de la homepage :
node {SKILL_DIR}/scripts/extract_page.mjs "{company website}" - Découvrir les pages du site via sitemap (ne PAS coder en dur des chemins comme
/aboutou/customers) :browse cloud fetch --allow-redirects "{company website}/sitemap.xml"— le sitemap est petit, unbrowse cloud fetchbrut convient- Scanner les URL avec mots-clés :
customer,case-stud,pricing,about,use-case,industry,solution - Optionnellement, récupérer aussi
/llms.txtpour les descriptions de pages - Choisir les 3 à 5 URL les plus pertinentes et les extraire avec
extract_page.mjs(PAS avecbrowse cloud fetchbrut)
- Rechercher du contexte externe et les concurrents
- Accumuler les observations avec niveaux de confiance
Synthétiser en profil : Entreprise, Produit, Clients existants, Concurrents, Cas d'usage. Ne PAS inclure l'ICP ni les sous-verticales — ce sont des décisions propres à chaque exécution.
- Recherche :
-
Présentez le profil à l'utilisateur pour confirmation. Ne poursuivez pas tant qu'il n'est pas confirmé.
-
Enregistrer le profil confirmé dans
{SKILL_DIR}/profiles/{company-slug}.json -
Poser des questions de clarification avec
AskUserQuestionet des cases à cocher :- "Quels segments ciblez-vous ?" avec des options dérivées de la recherche entreprise
- "Stade d'entreprise ?" — Startups, Mid-market, Enterprise, All
- "Combien d'entreprises / quelle profondeur ?" — Quick (~100), Deep (~50), Deeper (~25)
- C'est la SEULE interaction utilisateur. Ensuite, exécuter silencieusement jusqu'à ce que les résultats soient prêts.
Étape 2 : Choix du mode de profondeur
| Mode | Recherche par entreprise | Idéal pour |
|---|---|---|
quick | Homepage + 1-2 recherches | ~100 entreprises, scan large |
deep | 2-3 sous-questions, 5-8 appels outil | ~50 entreprises, recherche solide |
deeper | 4-5 sous-questions, 10-15 appels outil | ~25 entreprises, intelligence complète |
Étape 3 : Découverte
Formule : ceil(requested_companies / 35) requêtes de recherche nécessaires. Sur-découvrir environ 2 à 3x, car le filtrage élimine généralement 50 à 70%.
Générez des requêtes de recherche avec ces patterns :
- Industrie + stade d'entreprise + géographie ("fintech startups series A Bay Area")
- outils technologique + cas d'usage ("companies using Selenium for web scraping")
- Proximité concurrentielle ("alternatives to {known company in ICP}")
- Persona acheteur + point de douleur ("engineering teams struggling with browser automation")
Processus :
- Lancez TOUS les sous-agents de découverte en même temps (jusqu'à ~6 par message). Chacun exécute ses requêtes dans UN SEUL appel Bash :
browse cloud search "{query}" --num-results 25 --output /tmp/company_discovery_batch_{N}.json - Une fois toutes les vagues terminées, dédupliquez :
node {SKILL_DIR}/scripts/list_urls.mjs /tmp - Filtrer la liste d'URL — retirer :
- Articles de blog, actualités (globenewswire.com, techcrunch.com, etc.)
- Annuaires/agrégateurs (tracxn.com, crunchbase.com, g2.com)
- Les concurrents et clients existants de l'utilisateur (depuis le profil) Garder uniquement les homepages d'entreprises.
Voir references/workflow.md pour les templates de prompts de sous-agent et la gestion des vagues.
Étape 4 : Recherche approfondie & scoring
Lancez des sous-agents pour rechercher les entreprises en parallèle. Voir references/workflow.md pour le template de prompt de sous-agent d'enrichissement. Voir references/research-patterns.md pour la méthodologie complète.
Processus :
-
Diviser les URL filtrées en groupes par sous-agent (quick : ~10, deep : ~5, deeper : ~2-3)
-
Lancer TOUS les sous-agents d'enrichissement en même temps (jusqu'à ~6 par message)
-
Chaque sous-agent utilise UNIQUEMENT Bash — pour chaque entreprise :
Phase A — Plan (sauter en mode quick) : Décomposer en 2 à 5 sous-questions selon l'ICP et les champs d'enrichissement.
Phase B — Boucle de recherche : Rechercher et fetcher des pages, extraire les observations. Respecter le budget d'étapes (quick : 2-3, deep : 5-8, deeper : 10-15).
Phase C — Synthèse : Scorer l'adéquation ICP de 1 à 10 avec preuves. Remplir les champs d'enrichissement à partir des observations.
-
Les sous-agents écrivent TOUS les fichiers markdown dans UN SEUL appel Bash avec des heredocs chaînés vers
{OUTPUT_DIR}/ -
Une fois TOUS les sous-agents terminés, passer à l'Étape 5
Critique : inclure la description ICP confirmée mot pour mot dans chaque prompt de sous-agent. Transmettre le chemin littéral complet {OUTPUT_DIR} à chaque sous-agent.
Étape 5 : Rapport & CSV
-
Générer le rapport HTML + CSV (ouvre automatiquement l'overview dans le navigateur) :
node {SKILL_DIR}/scripts/compile_report.mjs {OUTPUT_DIR} --openCela génère :
{OUTPUT_DIR}/index.html— page d'overview avec tableau scoré (ouverte dans le navigateur){OUTPUT_DIR}/companies/*.html— pages individuelles d'entreprises (liées depuis l'overview){OUTPUT_DIR}/results.csv— tableur scoré pour import dans sheets/CRM
-
Présenter aussi un résumé dans le chat :
## Recherche d'entreprises terminée
- **Total d'entreprises recherchées** : {count}
- **Mode de profondeur** : {mode}
- **Distribution des scores** :
- Fort fit (8-10) : {count}
- Fit partiel (5-7) : {count}
- Fit faible (1-4) : {count}
- **Rapport ouvert dans le navigateur** : ~/Desktop/{company_slug}_research_{date}/index.html
- Afficher les meilleures entreprises triées par score ICP dans un tableau :
| Entreprise | Score | Produit | Industrie | Raisonnement du fit |
|------------|-------|---------|-----------|---------------------|
| Acme | 9 | Gestion d'inventaire IA | SaaS e-commerce | Series A, utilise Selenium, expansion vers l'UE |
- Pour les 3 à 5 meilleures entreprises, afficher un bref résumé de recherche — observations clés, pourquoi elles sont un bon fit et quel angle spécifique utiliser pour les approcher.
Proposer d'approfondir des entreprises spécifiques, d'ajuster les critères de scoring ou de relancer la découverte avec d'autres requêtes.
Documents de référence
Exemple de fichier de recherche entreprise
Chaque sous-agent de recherche écrit un fichier markdown par entreprise dans {OUTPUT_DIR}/{company-slug}.md, où {OUTPUT_DIR} est le répertoire Desktop propre à l'exécution, configuré par l'agent principal à l'Étape 0 (par exemple ~/Desktop/acme_research_2026-04-23/). Le frontmatter YAML contient les champs structurés pour la compilation du rapport + CSV. Le corps contient la recherche lisible par un humain.
Template
---
company_name: Acme Inc
website: https://acme.com
product_description: Gestion d'inventaire propulsée par l'IA pour marques e-commerce
industry: E-commerce / SaaS
target_audience: Marques e-commerce mid-market
key_features: prévision de demande | réapprovisionnement automatisé | synchronisation multi-entrepôts
icp_fit_score: 8
icp_fit_reasoning: SaaS e-commerce Series A, utilise Selenium pour le scraping, expansion vers l'UE — fort fit
employee_estimate: 50-100
funding_info: Series A, $12M
headquarters: San Francisco, CA
---
## Produit
Gestion d'inventaire propulsée par l'IA pour marques e-commerce. Aide les marques DTC
à automatiser le réapprovisionnement et à synchroniser plusieurs entrepôts.
## Observations de recherche
- **[high]** Optimisation checkout pour boutiques Shopify, au service de marques DTC mid-market avec $5M-$50M de revenu (source : acme.com/about)
- **[high]** Series A, $12M levés au T3 2025 auprès de Sequoia (source : TechCrunch)
- **[medium]** A récemment recruté 3 data engineers, expansion de l'équipe plateforme (source : offres d'emploi LinkedIn)
- **[medium]** Utilise Selenium pour le web scraping dans son pipeline de données (source : page carrières)
Règles des champs
- Frontmatter YAML : tous les champs structurés vont ici. Ils sont extraits pour la compilation CSV.
key_features: liste séparée par des pipes (|) dans le YAML, pas un tableau JSON.icp_fit_score: entier de 1 à 10.icp_fit_reasoning: une ligne, référence des observations spécifiques.- Sections du corps :
## Product,## Research Findings. - Format des observations :
- **[confidence]** fact (source: url or description) - Nom de fichier :
{OUTPUT_DIR}/{company-slug}.md, avec un slug en minuscules et traits d'union (par exempleacme-inc.md). - Déduplication : un fichier par entreprise. Si un sous-agent rencontre une entreprise qui a déjà un fichier, écraser avec des données plus riches.
Écriture via heredoc Bash
Les sous-agents écrivent ces fichiers avec un heredoc bash pour éviter les prompts de sécurité. Utilisez le chemin littéral complet {OUTPUT_DIR} — pas ~ ni $HOME :
cat << 'COMPANY_MD' > {OUTPUT_DIR}/acme-inc.md
---
company_name: Acme Inc
website: https://acme.com
...
---
## Product
...
## Research Findings
...
COMPANY_MD
Utilisez 'COMPANY_MD' (avec guillemets) comme délimiteur pour empêcher l'expansion des variables shell.
IMPORTANT : écrire TOUS les fichiers entreprise dans UN SEUL appel Bash avec des heredocs chaînés pour minimiser les prompts d'autorisation.
Recherche d'entreprises — patterns de recherche approfondie
Vue d'ensemble
Cette référence définit deux contextes de recherche :
- Self-Research (Étape 1) — recherche approfondie sur l'entreprise de l'utilisateur pour construire une base ICP solide
- Target Research (Étape 6) — recherche sur chaque entreprise découverte avec Plan→Research→Synthesize
Les deux utilisent le même pattern en 3 phases, mais avec des sous-questions et objectifs différents.
Self-Research (entreprise de l'utilisateur)
C'est la recherche la plus importante du portefeuille commercial. Toutes les décisions aval en dépendent.
Sous-questions
- "Que vend {company} et quel problème spécifique résout-elle ?"
- "Qui sont les clients existants de {company} ? Quelles industries, tailles d'entreprise et cas d'usage ?"
- "Qui sont les concurrents de {company} et qu'est-ce qui les différencie ?"
- "Quel modèle de pricing {company} utilise-t-elle et quel est le persona acheteur typique ?"
- "Quels cas d'usage et points de douleur le marketing de {company} met-il en avant ?"
Découverte de pages
Découvrez les pages du site dynamiquement — ne PAS coder en dur des chemins comme /about ou /customers :
- Fetch
browse cloud fetch --allow-redirects "{company website}/sitemap.xml"— source principale, contient TOUTES les pages - Scanner les URL du sitemap avec les mots-clés :
customer,case-stud,pricing,about,use-case,blog,docs,industry,solution - Optionnellement fetcher
browse cloud fetch --allow-redirects "{company website}/llms.txt"pour les descriptions de pages - Choisir les 3 à 5 URL les plus pertinentes dans le sitemap et les fetcher
- Le sitemap est la source de vérité. llms.txt est un contexte bonus, mais souvent incomplet.
Recherche externe
- Recherche :
"{company} customers use cases reviews" - Recherche :
"{company} alternatives competitors vs" - Fetcher 1 à 2 résultats tiers parmi les plus informatifs (G2, articles de blog, comparaisons)
Sortie de synthèse
À partir de toutes les observations, produire un profil d'entreprise :
- Entreprise : nom
- Produit : ce qu'elle vend, comment cela fonctionne, capacités clés (2 à 3 phrases, spécifiques)
- Clients existants : clients nommés ou types de clients trouvés
- Concurrents : avec qui elle est en concurrence, différenciateurs clés
- Cas d'usage : large liste de cas d'usage servis par le produit (PAS attachée à une seule verticale)
Ne PAS inclure l'ICP, l'angle de pitch ni les sous-verticales dans le profil. Ce sont des décisions de ciblage propres à chaque exécution, prises à l'Étape 2 après confirmation du profil. Le profil est une fiche factuelle générale réutilisable, quelle que soit la verticale ciblée ensuite.
Pourquoi c'est important
Un profil superficiel produit des requêtes génériques, un scoring de leads faible et des emails standardisés. Un profil riche avec clients, concurrents et cas d'usage spécifiques produit des requêtes ciblées, un scoring précis et des emails qui référencent de vrais points de douleur.
Recherche sur une entreprise cible (Étape 6)
Templates de sous-questions
Générez les sous-questions depuis ces catégories selon l'ICP et les champs d'enrichissement demandés. Toutes les catégories ne s'appliquent pas à chaque entreprise — choisissez les plus pertinentes.
Priorité 1 (toujours demander)
- Produit/Marché : "Que vend {company} et qui sont ses clients ?"
- Fit ICP : "Comment le produit/marché de {company} se rapporte-t-il à {sender's ICP description} ?"
Priorité 2 (demander en deep/deeper)
- pile technique : "Quelles technologies, frameworks ou infrastructures {company} utilise-t-elle ?"
- Signaux de croissance : "{company} a-t-elle levé des fonds, lancé des produits ou récemment étendu son activité ?"
- Points de douleur : "Quels défis {company} peut-elle rencontrer que {sender's product} adresse ?"
Priorité 3 (demander seulement en deeper)
- Décideurs : "Qui dirige l'ingénierie, le produit ou la croissance chez {company} ?"
- Paysage concurrentiel : "Qui sont les concurrents de {company} et comment se différencient-ils ?"
- Clients/Case studies : "Qui sont les clients notables de {company} et quels résultats met-elle en avant ?"
Patterns de requêtes de recherche
Pour chaque sous-question, générer 2 à 3 variantes de requête :
# Product/Market
"{company name} what they do"
"{company name} product features customers"
# Tech outils
"{company name} tech outils engineering blog"
"{company name} careers software engineer" (les offres d'emploi révèlent la outils)
# Growth Signals
"{company name} financement round 2025 2026"
"{company name} launch announcement"
"{company name} hiring"
# Pain Points
"{company name} challenges {relevant domain}"
"{company name} {problem sender solves}"
# Decision Makers
"{company name} VP engineering CTO LinkedIn"
"{company name} head of growth product"
Format des observations
Chaque observation est une déclaration factuelle autonome liée à une source :
{
"subQuestion": "What does Acme sell and who are their customers?",
"fact": "Acme fournit de l'optimisation checkout pour boutiques Shopify, au service de marques DTC mid-market avec $5M-$50M de revenu",
"sourceUrl": "https://acme.com/about",
"sourceTitle": "About Acme - Checkout Optimization",
"confidence": "high"
}
Niveaux de confiance :
high: indiqué directement sur le site de l'entreprise ou dans une communication officiellemedium: inféré depuis des offres d'emploi, articles tiers ou signaux indirectslow: spéculatif selon l'industrie/catégorie, ou provenant de sources obsolètes
Règles de boucle de recherche
- Traiter les sous-questions par priorité — Priorité 1 d'abord, puis 2, puis 3
- 3 à 5 observations par sous-question, puis passer à la suite — ne pas épuiser un sujet
- Utiliser des appels outil parallèles — rechercher plusieurs requêtes simultanément quand c'est possible
- Reformuler, ne pas réessayer à l'identique — si une recherche renvoie de mauvais résultats, essayer d'autres mots-clés
- Fetcher sélectivement — ne pas fetcher chaque URL des résultats. Choisir les 1 à 2 plus pertinentes selon le titre et l'URL
- S'arrêter à la limite d'étapes — respecter le budget d'étapes du mode de profondeur par entreprise
- Homepage d'abord — toujours fetcher la homepage de l'entreprise avant de passer à d'autres pages
- Dédupliquer les observations — ne pas enregistrer deux fois le même fait depuis des sources différentes
Comportement par mode de profondeur
Mode Quick (100+ leads)
- Sauter la Phase A — pas de décomposition en sous-questions
- Phase B : fetcher la homepage de l'entreprise. Lancer 1 à 2 recherches complémentaires si les données homepage sont minces.
- Phase C : extraire les données disponibles, scorer l'ICP, rédiger l'email à partir de ce qui est disponible
- Budget : 2 à 3 appels outil au total par entreprise
- Trade-off : rapide et peu coûteux, mais les emails peuvent être moins personnalisés
Mode Deep (25-50 leads)
- Phase A : décomposer en 2 à 3 sous-questions (Priorité 1 + Priorité 2 sélectionnée)
- Phase B : pour chaque sous-question, lancer 2 à 3 recherches + fetcher 1 à 2 URL. Viser 3 à 5 observations par sous-question.
- Phase C : synthétiser depuis toutes les observations. Le raisonnement ICP référence des preuves spécifiques. L'email utilise l'observation la plus spécifique/convaincante.
- Budget : 5 à 8 appels outil au total par entreprise
- Trade-off : bon équilibre entre profondeur et volume
Mode Deeper (10-25 leads)
- Phase A : décomposer en 4 à 5 sous-questions (Priorité 1 + 2 + Priorité 3 sélectionnée)
- Phase B : rechercher exhaustivement. Fetcher plusieurs pages par entreprise (homepage, about, blog, careers, pages produit). Viser 3 à 5 observations par sous-question.
- Phase C : synthétiser avec preuves citées. Le raisonnement ICP est détaillé. L'email référence plusieurs signaux spécifiques.
- Budget : 10 à 15 appels outil au total par entreprise
- Trade-off : intelligence de haute qualité, mais lente et coûteuse
Instructions de synthèse
Après la boucle de recherche pour une entreprise, synthétiser les observations dans l'enregistrement de sortie :
Scoring ICP
Scorer de 1 à 10 avec TOUTES les observations accumulées comme preuves :
- 8-10 : forte correspondance. Plusieurs observations à haute confiance confirment la bonne industrie, le bon stade d'entreprise et un alignement clair avec le point de douleur. L'angle de pitch répond directement à un besoin visible étayé par des preuves.
- 5-7 : correspondance partielle. Certaines observations suggèrent une pertinence, mais des signaux clés manquent ou sont à faible confiance. Industrie adjacente ou point de douleur peu clair.
- 1-4 : faible correspondance. Les observations indiquent un mauvais segment, une taille trop grande/petite ou aucun lien apparent avec le produit de l'expéditeur.
Rédiger icp_fit_reasoning en référençant des observations spécifiques : "Series A fintech (depuis Crunchbase), utilise Selenium pour le scraping (depuis une offre d'emploi), expansion vers le marché UE (depuis le blog) — fort fit pour l'infrastructure navigateur."
Personnalisation d'email
Utiliser les observations les plus riches et spécifiques pour le contexte email :
- Ouverture : utiliser l'observation la plus concrète (fonctionnalité produit spécifique, lancement récent, offre d'emploi)
- Pont : connecter une observation sur leurs défis/outils à l'angle de pitch de l'expéditeur
- Si seules des observations à faible confiance existent, garder l'email plus court et plus général — ne pas inventer de spécificité
Champs d'enrichissement
Mapper les observations vers les champs d'enrichissement :
product_description→ depuis les observations Produit/Marchéindustry→ inféré depuis Produit/Marchéemployee_estimate→ depuis la recherche LinkedIn ou les observations de page carrièresfunding_info→ depuis les observations Signaux de croissanceheadquarters→ depuis la homepage ou la page about de l'entreprisetarget_audience→ depuis les observations Produit/Marchékey_features→ depuis les observations de page produit
Si un champ n'a pas d'observation de support, le laisser vide plutôt que deviner.
Règles anti-hallucination
Appliquer ces règles au moment de la synthèse. Elles existent parce que le mode d'échec — surtout sur les landing pages Framer/Next.js avec peu de texte rendu serveur — consiste pour le sous-agent à calquer des indices visuels sur l'ICP de l'expéditeur et fabriquer une description plausible :
- La typographie n'est pas un produit. Ne jamais inférer
product_description,industryoutarget_audiencedepuis les polices, le design system, le choix de framework (Framer, Next.js, React) ou le niveau de finition du site. "Construit avec Framer" et "utilise Geist Mono" sont des observations d'outillage, pas des signaux de ce que l'entreprise vend. - Pas de fuite d'ICP. Si la homepage est mince et que la recherche externe ne donne rien, NE PAS orienter par défaut la description de la cible vers l'ICP de l'expéditeur. Manufacturing AI ≠ browser automation simplement parce que les deux utilisent l'IA.
- Citer, pas paraphraser de mémoire.
product_descriptiondoit citer ou paraphraser de près une phrase spécifique issue de la sortieextract_page.mjs(TITLE / META_DESCRIPTION / OG_DESCRIPTION / HEADINGS / BODY) ou d'un résultat de recherche externe. Si aucune phrase de ce type n'existe, écrireUnknown — homepage content not accessible. - Plafonner les scores sur preuve mince. Si
product_descriptionvautUnknown, fixericp_fit_score≤ 3 eticp_fit_reasoning: Insufficient evidence — homepage returned no readable content. Ne pas justifier un score plus élevé uniquement avec des signaux inférés.
Recherche d'entreprises — référence de workflow
Schéma JSON des batchs de découverte
Fichier : /tmp/company_discovery_batch_{N}.json
browse cloud search --output écrit un objet JSON (PAS un tableau plat) :
{
"requestId": "abc123",
"query": "AI data extraction startups",
"results": [
{ "url": "https://example.com", "title": "Example Corp", "author": null, "publishedDate": null },
...
]
}
Le script list_urls.mjs gère les deux formats (tableau plat et { results: [...] }).
Format markdown de recherche entreprise
Fichier : {OUTPUT_DIR}/{company-slug}.md
Où {OUTPUT_DIR} est le répertoire propre à l'exécution sur le Desktop de l'utilisateur (par exemple ~/Desktop/acme_research_2026-04-23/). L'agent principal le configure à l'Étape 0 et transmet le chemin littéral complet à chaque sous-agent.
Chaque sous-agent de recherche écrit un fichier markdown par entreprise. Voir references/example-research.md pour le template complet.
Champs du frontmatter YAML (utilisés pour la compilation rapport + CSV) :
company_name(requis)website(requis)product_descriptionindustrytarget_audiencekey_features(séparé par pipes :feature1 | feature2 | feature3)icp_fit_score(entier 1-10, requis)icp_fit_reasoningemployee_estimatefunding_infoheadquarters
Sections du corps :
## Product— ce que l'entreprise fait## Research Findings— preuves avec niveaux de confiance et sources
CRITIQUE : utilisez des noms de champs cohérents dans tous les fichiers. Le script compile_report.mjs lit ces champs.
Extraction du contenu de page
Utilisez extract_page.mjs pour toute extraction de contenu homepage/page produit. Il fetch via browse cloud fetch --output, parse titre + meta + texte visible du body, et bascule automatiquement vers browse get markdown quand le fetch échoue ou renvoie un contenu mince rendu en JS :
node {SKILL_DIR}/scripts/extract_page.mjs "https://example.com" --max-chars 3000
La sortie est un bloc structuré :
URL: https://example.com
FETCH_OK: true|false
FALLBACK_TO_BROWSE: true|false
TITLE: ...
META_DESCRIPTION: ...
OG_TITLE: ...
OG_DESCRIPTION: ...
HEADINGS: h1/h2/h3 joined by " | "
BODY_CHARS: N
BODY:
<cleaned visible text, max N chars>
Pourquoi pas un portefeuille commercial brut browse cloud fetch | sed ? Sans --output, browse cloud fetch renvoie une enveloppe JSON avec le HTML intégré comme chaîne échappée. Un portefeuille commercial sed naïf supprime les <> du wrapper et du contenu, ainsi que les balises <meta>, qui sur les SPA Framer/Next.js sont souvent le seul contenu lisible. extract_page.mjs utilise --output pour parser directement le HTML brut.
Quand utiliser browse cloud fetch brut : seulement pour les petits fichiers structurés où vous voulez garder l'enveloppe JSON intacte — par exemple sitemap.xml, robots.txt, llms.txt. Pour toute page HTML destinée à un modèle, utilisez extract_page.mjs.
Vérifier que le contenu est réel (pas halluciné)
Avant d'écrire product_description, industry ou target_audience dans un fichier entreprise, confirmez que l'assertion est fondée sur la sortie extract_page.mjs. Citez ou paraphrasez de près TITLE, META_DESCRIPTION, OG_DESCRIPTION, HEADINGS ou BODY.
Si extract_page.mjs renvoie FETCH_OK: false ET FALLBACK_TO_BROWSE: false (ou BODY_CHARS < 50), la homepage est inaccessible. N'inventez pas. Écrivez :
product_description: Unknown — homepage content not accessibleicp_fit_score: 3(ou moins)icp_fit_reasoning: Insufficient evidence — homepage returned no readable content
Mode d'échec classique évité : une landing page Framer/Next.js sans texte rendu serveur, où le sous-agent projette des indices visuels ("design-forward", "Geist Mono", "Framer-built") sur l'ICP de l'utilisateur. La typographie n'est pas un produit.
Template de prompt pour sous-agent de découverte
You are a company discovery subagent. Run search queries and save results.
TOOL RULES — CRITICAL, FOLLOW EXACTLY:
1. You may ONLY use the Bash tool. No exceptions.
2. Run ALL searches in a SINGLE Bash call using && chaining.
3. BANNED TOOLS: WebFetch, WebSearch, Write, Read, Glob, Grep — ALL BANNED.
If you use ANY banned tool, the entire run fails. Use ONLY Bash.
4. NEVER use ~ or $HOME in paths — use full literal paths.
TASK:
Run ALL of the following searches in ONE Bash command:
browse cloud search "{query1}" --num-results 25 --output /tmp/company_discovery_batch_{N1}.json && \
browse cloud search "{query2}" --num-results 25 --output /tmp/company_discovery_batch_{N2}.json && \
browse cloud search "{query3}" --num-results 25 --output /tmp/company_discovery_batch_{N3}.json && \
echo "Discovery complete"
After the command completes, report back ONLY the count of results found per batch.
Do NOT analyze, summarize, or return the actual results.
Template de prompt pour sous-agent de recherche
You are a company research subagent. For each company URL, research the company and score ICP fit.
CONTEXT:
- User's company: {user_company}
- User's product: {user_product}
- ICP description: {icp_description}
- Depth mode: {depth_mode}
- Output directory: {OUTPUT_DIR} ← write research files HERE, as a full literal path
URLS TO PROCESS:
{url_list}
TOOL RULES — CRITICAL, FOLLOW EXACTLY:
1. You may ONLY use the Bash tool. No exceptions.
2. All searches: Bash → browse cloud search "..." --num-results 10
3. All homepage/product-page content extraction:
Bash → node {SKILL_DIR}/scripts/extract_page.mjs "URL" --max-chars 3000
This returns structured TITLE / META_DESCRIPTION / OG_DESCRIPTION / HEADINGS / BODY and auto-falls back to browse get markdown when fetch fails or returns thin JS-rendered content.
DO NOT hand-roll a `browse cloud fetch | sed` pipeline — it strips meta tags and doesn't parse the stdout JSON envelope. Use `browse cloud fetch` raw only for sitemap.xml, robots.txt, llms.txt.
4. BATCH all file writes: Write ALL markdown files in a SINGLE Bash call using chained heredocs (one permission prompt, not one per file).
5. BANNED TOOLS: WebFetch, WebSearch, Write, Read, Glob, Grep — ALL BANNED.
If you use ANY banned tool, the entire run fails. Use ONLY Bash.
6. NEVER use ~ or $HOME in paths — use full literal paths.
ANTI-HALLUCINATION RULES — CRITICAL:
- NEVER infer product_description, industry, or target_audience from fonts, framework (Framer/Next.js/React), design system, or visual style. Typography is not a product.
- NEVER let the sender's ICP leak into a target's description. If you don't know what the target does, write "Unknown" — do not pattern-match them onto the ICP.
- product_description MUST quote or closely paraphrase a phrase from extract_page.mjs output. If none of TITLE/META/OG/HEADINGS/BODY yield a recognizable product statement, write "Unknown — homepage content not accessible" and cap icp_fit_score at 3.
RESEARCH PATTERN (per company):
Phase A — Plan (skip in quick mode):
Decompose what you need to know into sub-questions based on ICP and enrichment fields.
Phase B — Research Loop:
For each sub-question (or just the homepage in quick mode):
1. Run browse cloud search with relevant query
2. Pick 1-2 most relevant URLs from results
3. Extract page content: node {SKILL_DIR}/scripts/extract_page.mjs "URL" --max-chars 3000
(uses `--output` to avoid the stdout JSON envelope, preserves meta tags, and falls back to browse get markdown when needed)
4. Smart page discovery: use `browse cloud fetch --allow-redirects` on /sitemap.xml or /llms.txt to find relevant URLs — these are small XML/text files where the raw JSON envelope is fine. For the actual HTML pages you discover, use extract_page.mjs.
5. Extract findings: factual statements with source, confidence level
6. Accumulate findings, move to next sub-question
7. Respect step budget: quick=2-3 calls, deep=5-8, deeper=10-15
Phase C — Synthesize:
From accumulated findings:
1. Score ICP fit 1-10 (see rubric below)
2. Fill enrichment fields from findings
3. Reference specific findings in icp_fit_reasoning
ICP SCORING RUBRIC:
- 8-10: Strong match. Multiple high-confidence findings confirm fit.
- 5-7: Partial match. Some findings suggest relevance but key signals missing.
- 1-4: Weak match. Wrong segment or no apparent connection.
OUTPUT — write ALL company files in a SINGLE Bash call using chained heredocs directly to {OUTPUT_DIR}:
cat << 'COMPANY_MD' > {OUTPUT_DIR}/{slug1}.md
---
company_name: {name}
website: {url}
product_description: {description}
industry: {industry}
target_audience: {audience}
key_features: {feature1} | {feature2} | {feature3}
icp_fit_score: {score}
icp_fit_reasoning: {reasoning}
employee_estimate: {estimate}
funding_info: {financement}
headquarters: {location}
---
## Product
{product description paragraph}
## Research Findings
- **[{confidence}]** {finding} (source: {url})
COMPANY_MD
cat << 'COMPANY_MD' > {OUTPUT_DIR}/{slug2}.md
---
...
---
...
COMPANY_MD
Use 'COMPANY_MD' (quoted) as the heredoc delimiter to prevent shell variable expansion.
Report back ONLY: "Batch {batch_id}: {succeeded}/{total} researched, {findings_count} total findings."
Do NOT return raw data to the main conversation.
Gestion des vagues
Principe clé : maximiser le parallélisme, minimiser les prompts
Lancez autant de sous-agents que possible dans un seul message (jusqu'à ~6 appels Agent par message). Chaque sous-agent DOIT regrouper toutes ses opérations Bash pour minimiser les prompts d'autorisation.
Phase de découverte
- Lancer jusqu'à 6 sous-agents de découverte dans un seul message
- Chaque sous-agent exécute TOUTES ses requêtes dans un SEUL appel Bash avec chaînage
&& - Une fois toutes les vagues terminées, lancer
node {SKILL_DIR}/scripts/list_urls.mjs /tmp - Filtrer les URL : retirer articles de blog, actualités, annuaires, concurrents et clients existants. Garder uniquement les homepages d'entreprises.
Phase de recherche
- Le nombre d'entreprises par sous-agent varie selon la profondeur :
quick: ~10 entreprises par sous-agentdeep: ~5 entreprises par sous-agentdeeper: ~2-3 entreprises par sous-agent
- Chaque sous-agent écrit TOUS ses fichiers markdown dans UN SEUL appel Bash (heredocs chaînés) directement dans
{OUTPUT_DIR}
Formule de dimensionnement
search_queries = ceil(requested_companies / 35)
discovery_subagents = search_queries
expected_urls = search_queries * 20
quick: research_subagents = ceil(expected_urls / 10)
deep: research_subagents = ceil(expected_urls / 5)
deeper: research_subagents = ceil(expected_urls / 3)
Gestion des erreurs
- Si un sous-agent échoue, journaliser l'erreur et continuer avec les batchs restants
- Si >50% des sous-agents échouent dans une vague, faire une pause et informer l'utilisateur
extract_page.mjsgère déjà en interne le fallback browse cloud fetch → browse get markdown. S'il renvoie malgré tout FETCH_OK: false avec BODY vide, sauter l'entreprise et marquer product_description comme Unknown (ne pas deviner).
Compilation rapport + CSV
Une fois tous les sous-agents de recherche terminés, compiler le rapport HTML et le CSV en une commande :
node {SKILL_DIR}/scripts/compile_report.mjs {OUTPUT_DIR} --open
Le script :
- Lit tous les fichiers
.mddans{OUTPUT_DIR} - Parse le frontmatter YAML + les sections du corps
- Déduplique par nom d'entreprise normalisé (garde le score ICP le plus élevé)
- Génère
{OUTPUT_DIR}/index.html— page d'overview scorée - Génère
{OUTPUT_DIR}/companies/{slug}.html— une page par entreprise - Génère
{OUTPUT_DIR}/results.csv— tableur pour sheets/CRM - Ouvre
index.htmldans le navigateur par défaut (flag--open) - Imprime un résumé JSON sur stderr