Install
$ agentstack add skill-hugrowth98-superfounder-os-dedoublonner-liste ✓ 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 No
- ✓ 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.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Deux sources sur la même cible se recouvrent à 30 ou 60 % : sans dédoublonnage, la même personne reçoit deux séquences, chaque doublon coûte un enrichissement, et un client en cours reçoit un message froid. On dédoublonne avant d'enrichir, après avoir fusionné, et avant d'envoyer.
Ressources
{SKILL_BASE}/ressources/regles-dedup.md: clés et normalisation, priorité des sources par colonne, croisement CRM, fichiers de référence (--contre), plafond par entreprise, journal des doublons.{SKILL_BASE}/ressources/hygiene-liste.md: la normalisation des colonnes qui rend les clés comparables.
Méthode
- Lisez chaque fichier, mappez ses colonnes vers
docs/conventions-gtm.mdsection 8, comptez les lignes par fichier et parsource. - Normalisez les clés :
linkedin_urlenhttps://www.linkedin.com/in/(minuscules, avecwww., sans paramètres ni barre finale),emailen minuscules,domainenu,prenometnomsans accent ni majuscule,entreprisesans suffixe juridique. - Dédoublonnez les personnes :
linkedin_urld'abord, puisemail, puisdomaine+prenom+nom. Les entreprises :domaine, puislinkedin_entreprise_url, puisentreprisenormalisée. Un match surtelephoneou sur nom + titre + ville se montre à l'utilisateur avant de fusionner. - Fusionnez les colonnes des lignes en doublon : la valeur vérifiée la plus récente gagne, une cellule vide ne gagne jamais, LinkedIn gagne sur
titreetentreprise, l'email_statutFullEnrich le plus fiable (DELIVERABLE, puisHIGH_PROBABILITY, puisCATCH_ALL) gagne sur tout autre email,sourceconcatène avec+. Si les lignes portent unscore_icp, la plus haute reste et le fichier se rescore ensuite. - Croisez avec HubSpot si branché (
--hubspot, paremail, puis pardomaineau niveau entreprise) : chaque ligne reçoitdans_crm,hubspot_contact_id,hubspot_entreprise_idethubspot_lifecycle;--exclure-crmmetexclu = ouisur ce qui est déjà dans HubSpot. Le script ne calcule aucune catégorie (client, affaire ouverte, churné, perdu) : les clients et les perdus s'exportent aveccrm lire --statut gagnesetcrm lire --statut perdus(les perdus de moins de 3 mois se filtrent surdate_cloture), et ces fichiers se passent en--contre. "Client" se définit par une affaire gagnée dans cet export, jamais parhubspot_lifecycle, qui s'affiche sans décider. - Croisez avec les fichiers de référence en
--contre: le fichierne_plus_contacter(bounces durs, désabonnés, "pas intéressé",ne_plus_contacter = ouiécrit parverifier-reponses) et les dernières listes envoyées. Il n'y a pas de fenêtre de 90 jours automatique : la règle "pas recontacté avant 90 jours" se tient à la main, en passant les listes envoyées sur la période en--contre. - Appliquez le plafond par entreprise :
--max-par-entreprise 5(valeur par défaut) garde 5 personnes au plus pardomaine, meilleurscore_icppuis ligne la plus remplie, et marque les autresexclu = oui,raison_exclusion = plafond 5 par entreprise, journalisées. - Écrivez le fichier fusionné et le journal des doublons, puis rendez le rapport : lignes par source, doublons par clé, lignes dans HubSpot, lignes dans les fichiers de référence, plafond, lignes gardées, points d'hygiène vus (emails de test, entreprises "Test", libellés en double par casse). Posez la question des lignes
dans_crm = ouisans affaire : on les exclut (--exclure-crm) ou on les garde annotées ? Next step :qualifier-comptessi le fichier n'a pas detier, sinontrouver-emailsur les lignes sans adresse, puisnettoyer-verifier.
Exécution
| Étape | Verbe | Skill d'exécution | Entrée | Sortie | |---|---|---|---|---| | 1 à 4 et 7 | dedoublonner (dans la liste, --max-par-entreprise 5) | dedoublonner | un ou plusieurs CSV avec linkedin_url, email, domaine, prenom, nom, entreprise, source, date_extraction | un CSV fusionné (les doublons fusionnent, une ligne par fusion dans le journal), exclu, raison_exclusion = plafond 5 par entreprise, source concaténée | | 5 | dedoublonner --hubspot (--exclure-crm pour exclure) et lire_crm | dedoublonner, crm (lire --statut gagnes, puis perdus) | email, domaine des lignes gardées ; les exports CRM en --contre | dans_crm, hubspot_contact_id, hubspot_entreprise_id, hubspot_lifecycle ; exclu, raison_exclusion = deja dans HubSpot (contact) ou (entreprise), = deja dans crm_clients-gagnes_.csv | | 6 | dedoublonner --contre | dedoublonner | linkedin_url, email, domaine + nom | exclu, raison_exclusion = deja dans |
Sortie : dedoublonner__.csv et dedoublonner___doublons.csv (journal). Si HubSpot n'est pas branché, l'étape 5 se limite aux fichiers de référence et le rapport le dit ; rien n'est deviné.
Repères
| Repère | Valeur | |---|---| | Doublons attendus entre deux sources | 30 à 60 % | | Clés personnes, dans l'ordre | linkedin_url, email, domaine + prenom + nom | | Clés entreprises, dans l'ordre | domaine, linkedin_entreprise_url, entreprise normalisée | | Perdu récent | moins de 3 mois depuis date_cloture de l'export crm lire --statut perdus, à passer en --contre | | Fermé-perdu réapprochable | après 3 mois, signalé ; recommandé après 6 mois | | Fenêtre "déjà contacté" | 90 jours, tenue à la main : les listes envoyées sur la période passent en --contre | | Plafond par entreprise | 5 (--max-par-entreprise), dont 2 à 4 sur un tier A, 1 à 2 sur un B, 1 sur un C | | Lots de recherche HubSpot | 100 emails par appel, 90 domaines |
Template
Dédoublonnage : ,
Entrée : ( , ) = lignes
Doublons : linkedin_url , email , domaine + nom = fusionnés ->
HubSpot (--hubspot) : dans_crm ()
Référence (--contre) : clients gagnés , perdus , ne_plus_contacter , listes envoyées = exclus
Plafond 5 par entreprise : exclus
Gardées : sur Journal : dedoublonner___doublons.csv
Hygiène : , ,
Question : les dans_crm = oui sans affaire, on exclut ou on garde annotés ?
Règles
- Le dédoublonnage passe avant tout enrichissement et avant tout envoi.
- Aucune ligne perdue sans trace : un doublon fusionne et laisse une ligne dans le journal, une exclusion porte
exclu = ouiet sa raison. - Jamais de fusion sur le nom seul sans domaine, ni sur le titre.
- "Client" = une affaire gagnée dans l'export
crm lire --statut gagnes.hubspot_lifecycles'affiche, il ne décide pas. - Une cellule remplie n'est écrasée que par une valeur plus récente et vérifiée.
- Les identifiants de pipelines et d'étapes HubSpot se relisent à chaque run : ils changent.
- Le garde-fou "ne pas recontacter" de l'outil d'envoi est un filet, jamais la méthode.
- Aucune écriture dans HubSpot pendant un dédoublonnage : on lit, on ne modifie pas.
Exemples
- "J'ai trois exports, fusionne-les" : mapping des colonnes, normalisation, dédoublonnage par les trois clés, fusion des colonnes par priorité ; réponse attendue : un CSV, le décompte par source et par clé, le journal.
- "Qui dans cette liste est déjà dans mon CRM ?" :
--hubspotpar email et domaine,crm lirepour les gagnés et les perdus en--contre; réponse attendue : le nombre dedans_crm, les clients et perdus exclus, la liste prospectable, la question sur lesdans_crmsans affaire. - "Enlève les gens que j'ai déjà contactés" :
--contreavec les listes envoyées des 90 derniers jours et le fichierne_plus_contacter; réponse attendue : les lignes marquéesdeja dans, le reste prêt pourtrouver-emailpuisnettoyer-verifier.
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: hugrowth98
- Source: hugrowth98/superfounder-os
- License: MIT
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.