Install
$ agentstack add skill-khalilbenaz-claude-skills-collection-sales-agent-builder ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ● Network access Used
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
Sales Agent Builder
Quand utiliser ce skill
Conçois un agent commercial automatisant tout ou partie du cycle outbound : enrichissement de leads, qualification structurée (BANT/MEDDIC), rédaction d'emails personnalisés, séquences multi-touch, mise à jour CRM, prise de rendez-vous. S'applique aux équipes SDR/BDR, startups B2B en croissance et toute équipe cherchant à industrialiser les tâches répétitives sans sacrifier la personnalisation.
Workflow en étapes
1. Choix du mode d'autonomie
Avant de coder : décide du niveau d'autonomie selon la maturité de l'équipe.
| Mode | Comportement | Quand l'utiliser | |---|---|---| | Human-in-the-loop | Propose les emails, attend validation avant envoi | Phase initiale ( 10% confirmé | | Fully autonomous | Gère l'intégralité du cycle sans intervention | Après 3+ mois de données, superviseur actif |
Toujours démarrer en human-in-the-loop. Passer en semi-autonome uniquement après validation de 100 emails minimum et taux de réponse > 10%.
2. Architecture des cinq modules
┌─────────────────────────────────────────────────────┐
│ Lead entrant (CSV / webhook CRM / formulaire) │
└────────────────────┬────────────────────────────────┘
▼
┌─────────────────────┐
│ A. Enrichissement │ Apollo, Clay, Hunter.io
└──────────┬──────────┘
▼
┌─────────────────────┐
│ B. Qualification │ BANT / MEDDIC → score 0-100
└──────────┬──────────┘
▼
┌─────────────────────┐
│ C. Génération │ Email + variantes A/B
│ d'outreach │
└──────────┬──────────┘
▼
┌─────────────────────┐
│ D. Séquences │ Multi-touch J0/J3/J5/J8/J10/J15
│ & follow-ups │
└──────────┬──────────┘
▼
┌─────────────────────┐
│ E. CRM + Reporting │ HubSpot / Salesforce / Pipedrive
└─────────────────────┘
3. Enrichissement automatique des leads
Pour chaque lead entrant, collecter : taille/secteur/financement (Crunchbase, Apollo), profil LinkedIn, actualités récentes (levées, recrutements, partenariats), stack technique (BuiltWith), et score ICP.
# Enrichissement via Apollo API
import requests
def enrich_lead(lead: dict, api_key: str) -> dict:
resp = requests.post(
"https://api.apollo.io/v1/people/match",
json={
"first_name": lead["first_name"],
"last_name": lead["last_name"],
"organization_name": lead["company"],
"api_key": api_key,
},
timeout=10,
)
resp.raise_for_status()
person = resp.json().get("person", {})
return {
"title": person.get("title"),
"linkedin_url": person.get("linkedin_url"),
"seniority": person.get("seniority"),
"company_size": person.get("employment_history", [{}])[0].get("organization", {}).get("estimated_num_employees"),
"technologies": person.get("organization", {}).get("current_technologies", []),
}
Critère de décision : si l'enrichissement retourne dict: score = 0 reasons = []
# Budget (0-25) if lead.get("companysize", 0) > 200: score += 25; reasons.append("Budget probable (>200 employés)") elif lead.get("companysize", 0) > 50: score += 15; reasons.append("Budget estimé moyen")
# Authority (0-25) seniortitles = ["VP", "Director", "Head", "Chief", "CXO", "Founder"] if any(t in (lead.get("title") or "") for t in seniortitles): score += 25; reasons.append("Décisionnaire identifié")
# Need (0-25) — basé sur stack / industrie painindustries = ["fintech", "ecommerce", "saas"] if lead.get("industry", "").lower() in painindustries: score += 20; reasons.append("Industrie cible prioritaire")
# Timeline (0-25) — basé sur signaux (recrutement SDR, levée récente) if lead.get("recentfunding") or lead.get("hiringsales"): score += 25; reasons.append("Signal de croissance détecté")
tier = "Hot" if score >= 70 else "Warm" if score >= 40 else "Cold" return {"score": score, "tier": tier, "reasons": reasons}
**Règle :** ne faire entrer dans les séquences automatiques que les leads `Warm` (≥ 40) et `Hot` (≥ 70). Les `Cold` vont dans une nurture séparée.
---
### 5. Génération d'emails d'outreach personnalisés
Contraintes non négociables : 3 mois)
- NOT_RELEVANT : hors cible, mauvaise personne
- OBJECTION_PRICE : problème de budget
- OBJECTION_TOOL : déjà un outil concurrent
- NEGATIVE : refus définitif
- QUESTION : demande d'information
Réponse : {email_body}
Réponds avec le code catégorie uniquement."""
Pour OBJECTION_PRICE et OBJECTION_TOOL : utilise une bibliothèque d'objections validée par l'équipe commerciale. Pour INTERESTED : escalade immédiate vers un humain avec contexte complet du lead.
8. Intégration CRM
# Mise à jour HubSpot après qualification (SDK officiel)
from hubspot import HubSpot
client = HubSpot(access_token=HUBSPOT_TOKEN)
def update_lead_hubspot(contact_id: str, score: int, summary: str):
client.crm.contacts.basic_api.update(
contact_id=contact_id,
simple_public_object_input={
"properties": {
"hs_lead_status": "QUALIFIED" if score >= 70 else "IN_PROGRESS",
"qualification_score": str(score),
"qualification_notes": summary,
"lifecyclestage": "salesqualifiedlead" if score >= 70 else "lead",
}
},
)
Actions minimales à logger dans le CRM pour chaque lead : email envoyé, email ouvert, réponse reçue, classification de la réponse, score de qualification, meeting booké.
9. Métriques à monitorer
| Métrique | Cible | Alarme si | |---|---|---| | Taux d'ouverture emails | > 40% | 15% | 5% | 3% | | Spam rate | 0.08% | | Pipeline généré (€) | Dépend du deal size | — |
Génère un rapport hebdomadaire automatique (Slack/email) pour le manager avec ces indicateurs et les top 3 emails par taux de réponse.
Garde-fous et conformité
- RGPD / CAN-SPAM : lien de désinscription fonctionnel dans chaque email. Respecter les opt-outs sous 48h. Ne jamais prospecter sur des listes achetées sans consentement documenté.
- Délivrabilité : maximum 100-200 emails/jour par domaine. Réchauffage progressif sur 4 semaines (10 → 30 → 80 → 150/jour). Surveiller bounce (< 2%) et spam (< 0.1%) en continu.
- Escalade humaine obligatoire : toute réponse
INTERESTEDou réponse ambiguë → transfer immédiat à un commercial avec contexte complet. L'agent ne négocie jamais seul. - Audit trail : chaque email envoyé par l'agent doit être loggé avec timestamp, version du template, données d'enrichissement utilisées. Conserve 12 mois minimum pour conformité.
Anti-patterns à éviter
- Générer des emails sans accroche contextualisée : "J'espère que vous allez bien" = taux de réponse < 3%. L'accroche doit citer une donnée concrète.
- Lancer la séquence complète avant validation : envoyer J0 à J15 sans analyser les réponses intermédiaires brûle les leads et risque le blacklistage.
- Score de qualification sans justification : un score sans
reasonsest inexploitable par le commercial. Toujours fournir les critères. - Pas de limite de volume au démarrage : un nouveau domaine qui envoie 500 emails J1 sera blacklisté sous 48h. Respecter le réchauffage.
- CRM non synchronisé : un agent qui envoie des emails sans logger dans le CRM crée des doublons de prospection et détruit la relation client.
- Objections gérées par l'agent sans validation humaine : les réponses aux objections complexes doivent être validées par l'équipe commerciale avant d'être intégrées à la bibliothèque.
Stack recommandée (2026)
| Besoin | Outils | |---|---| | Enrichissement | Apollo.io, Clay, Hunter.io, LinkedIn Sales Navigator | | Séquences email | Instantly.ai, Lemlist, Outreach | | Orchestration agent | LangChain, LangGraph, Anthropic SDK | | CRM | HubSpot API, Salesforce API, Pipedrive API | | Booking | Calendly API, Cal.com (open source) | | Monitoring | Datadog, Grafana, PostHog | | Modèle LLM | Claude Sonnet (rédaction), Claude Haiku (classification) |
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: khalilbenaz
- Source: khalilbenaz/claude-skills-collection
- License: MIT
- Homepage: https://khalilbenaz.github.io/claude-skills-collection/
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.