[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"extension-skill-TomGranot-delete-no-email-contacts-zh-CN":3,"guides-for-TomGranot-delete-no-email-contacts":701,"similar-k174p9a47572wf9wcfggbjyrm586m3rq-zh-CN":702},{"_creationTime":4,"_id":5,"children":6,"community":7,"display":9,"evaluation":15,"identity":243,"isFallback":248,"parentExtension":249,"providers":304,"relations":308,"repo":309,"tags":699,"workflow":700},1778698144006.2224,"k174p9a47572wf9wcfggbjyrm586m3rq",[],{"reviewCount":8},0,{"description":10,"installMethods":11,"name":13,"sourceUrl":14},"Delete contacts with no email address from a HubSpot CRM instance. These contacts cannot receive any communication and inflate billing. Fully automated via the HubSpot CRM Search and Batch Archive APIs.\n",{"claudeCode":12},"TomGranot/hubspot-admin-skills","delete-no-email-contacts","https://github.com/TomGranot/hubspot-admin-skills",{"_creationTime":16,"_id":17,"extensionId":5,"locale":18,"result":19,"trustSignals":225,"workflow":241},1778698421190.5774,"kn79rk8wdjn2nrq8de9zr6q9dn86m7qx","en",{"checks":20,"evaluatedAt":193,"extensionSummary":194,"features":195,"nonGoals":201,"promptVersionExtension":206,"promptVersionScoring":207,"purpose":208,"rationale":209,"score":210,"summary":211,"tags":212,"targetMarket":218,"tier":219,"useCases":220},[21,26,29,32,36,39,43,47,50,53,57,61,65,69,72,75,78,81,84,87,91,95,99,103,107,110,113,116,120,123,126,129,132,135,138,142,146,151,154,158,161,164,167,170,174,177,180,183,186,190],{"category":22,"check":23,"severity":24,"summary":25},"Practical Utility","Problem relevance","pass","The description clearly states the problem of deleting contacts with no email address from HubSpot CRM to reduce billing and improve communication effectiveness.",{"category":22,"check":27,"severity":24,"summary":28},"Unique selling proposition","The skill automates a tedious manual process using specific HubSpot APIs (Search and Batch Archive), offering significant value over direct API interaction for most users.",{"category":22,"check":30,"severity":24,"summary":31},"Production readiness","The skill covers the complete lifecycle for deleting contacts with no email, including planning, state auditing, execution, and verification, making it suitable for production use.",{"category":33,"check":34,"severity":24,"summary":35},"Scope","Single responsibility principle","The skill has a single, well-defined responsibility: deleting contacts without email addresses from HubSpot CRM.",{"category":33,"check":37,"severity":24,"summary":38},"Description quality","The displayed description accurately and concisely reflects the skill's functionality.",{"category":40,"check":41,"severity":24,"summary":42},"Invocation","Scoped tools","The skill utilizes specific API calls like `crm.objects.contacts.search` and `crm.objects.contacts.batch.archive`, which are narrow and well-scoped.",{"category":44,"check":45,"severity":24,"summary":46},"Documentation","Configuration & parameter reference","All necessary prerequisites, including the HubSpot token, Python version, and .env file format, are clearly documented.",{"category":33,"check":48,"severity":24,"summary":49},"Tool naming","The skill name and its internal script names (before.py, execute.py, after.py) are descriptive and easy to understand.",{"category":33,"check":51,"severity":24,"summary":52},"Minimal I/O surface","The Python scripts request only the necessary data (contact IDs) and produce focused outputs (counts, audit logs, success/failure messages).",{"category":54,"check":55,"severity":24,"summary":56},"License","License usability","The extension is licensed under the MIT license, which is permissive and allows for broad usability.",{"category":58,"check":59,"severity":24,"summary":60},"Maintenance","Commit recency","The last commit was on March 26, 2026, which is within the last 3 months.",{"category":58,"check":62,"severity":63,"summary":64},"Dependency Management","not_applicable","No third-party dependencies are used beyond standard Python libraries like 'requests' and 'python-dotenv', which are managed via uv. No lockfile is explicitly provided but the uv setup implies dependency resolution.",{"category":66,"check":67,"severity":24,"summary":68},"Security","Secret Management","The HubSpot Access Token is loaded from an environment variable (`.env` file) and is not hardcoded or echoed in the output.",{"category":66,"check":70,"severity":24,"summary":71},"Injection","The scripts interact with the HubSpot API using structured payloads and do not execute arbitrary code from external sources.",{"category":66,"check":73,"severity":24,"summary":74},"Transitive Supply-Chain Grenades","The skill only uses committed Python scripts and does not fetch remote code or data at runtime.",{"category":66,"check":76,"severity":24,"summary":77},"Sandbox Isolation","The Python scripts operate within the scope of the HubSpot API and do not attempt to modify files outside the project directory.",{"category":66,"check":79,"severity":24,"summary":80},"Sandbox escape primitives","The Python scripts do not use any detached process spawns or retry loops around denied tool calls.",{"category":66,"check":82,"severity":24,"summary":83},"Data Exfiltration","The script only reads the HubSpot Access Token from the environment and does not exfiltrate any other data.",{"category":66,"check":85,"severity":24,"summary":86},"Hidden Text Tricks","The bundled content is free of hidden-steering tricks and uses clean, printable ASCII and expected Unicode.",{"category":88,"check":89,"severity":24,"summary":90},"Hooks","Opaque code execution","The Python scripts are plain, readable source code and do not use obfuscation techniques like base64 encoding or eval.",{"category":92,"check":93,"severity":24,"summary":94},"Portability","Structural Assumption","The script assumes the presence of a `.env` file with the HubSpot token, which is clearly documented as a prerequisite. It uses relative paths for output files.",{"category":96,"check":97,"severity":24,"summary":98},"Trust","Issues Attention","There is 0 issues opened and 1 closed in the last 90 days, indicating active maintenance and a high closure rate.",{"category":100,"check":101,"severity":24,"summary":102},"Versioning","Release Management","A meaningful version '1.0' is declared in the SKILL.md frontmatter.",{"category":104,"check":105,"severity":24,"summary":106},"Code Execution","Validation","The script uses the HubSpot API, which inherently performs validation. Input parameters for the script itself (like the access token) are read from environment variables and checked for existence implicitly by script execution.",{"category":66,"check":108,"severity":24,"summary":109},"Unguarded Destructive Operations","The destructive operation (contact deletion) is guarded by a user confirmation prompt and a configurable safety threshold.",{"category":104,"check":111,"severity":24,"summary":112},"Error Handling","The Python scripts use `response.raise_for_status()` and `try/except` blocks to catch API errors and provide informative messages. The script exits non-zero on failure.",{"category":104,"check":114,"severity":24,"summary":115},"Logging","The script logs its progress, including counts, CSV export, and batch deletion status, to stdout and saves an audit log to a CSV file.",{"category":117,"check":118,"severity":24,"summary":119},"Compliance","GDPR","The skill operates on contact data but does not submit it to a third party. The data is processed locally and deleted from HubSpot, not exfiltrated.",{"category":117,"check":121,"severity":24,"summary":122},"Target market","The extension interacts with the HubSpot API, which is global in nature, and the skill's logic is not region-specific. `targetMarket` defaults to global.",{"category":92,"check":124,"severity":24,"summary":125},"Runtime stability","The skill requires Python 3.10+ and standard libraries, making it portable across POSIX-compliant systems.",{"category":44,"check":127,"severity":24,"summary":128},"README","The README provides a comprehensive overview of the skill set, including installation, usage, and contributing guidelines.",{"category":33,"check":130,"severity":63,"summary":131},"Tool surface size","This is a single-purpose skill, not a collection of multiple tools.",{"category":40,"check":133,"severity":63,"summary":134},"Overlapping near-synonym tools","This skill does not expose multiple tools with overlapping functionality.",{"category":44,"check":136,"severity":24,"summary":137},"Phantom features","All advertised features (deleting contacts with no email) are implemented and verifiable through the provided scripts.",{"category":139,"check":140,"severity":24,"summary":141},"Install","Installation instruction","Installation instructions for both marketplace and direct clone are provided, along with clear setup for authentication and package management.",{"category":143,"check":144,"severity":24,"summary":145},"Errors","Actionable error messages","Error messages from API calls and script execution are informative and include context, aiding in remediation.",{"category":147,"check":148,"severity":149,"summary":150},"Execution","Pinned dependencies","info","Dependencies are managed using uv, but a lockfile is not explicitly present. The Python version requirement (>=3.10) is declared.",{"category":33,"check":152,"severity":24,"summary":153},"Dry-run preview","The 'Before State' script effectively acts as a dry-run, providing a count and audit log before execution.",{"category":155,"check":156,"severity":24,"summary":157},"Protocol","Idempotent retry & timeouts","While not strictly idempotent (deleting contacts is a one-way operation), the script includes delays and handles API errors, and the deletion itself is a single operation per batch.",{"category":117,"check":159,"severity":24,"summary":160},"Telemetry opt-in","The skill does not emit any telemetry. All operations are local or via direct API calls to HubSpot.",{"category":40,"check":162,"severity":24,"summary":163},"Precise Purpose","The purpose clearly states it deletes contacts with no email from HubSpot, detailing the problem and the automation via specific APIs.",{"category":40,"check":165,"severity":24,"summary":166},"Concise Frontmatter","The frontmatter in SKILL.md is dense, self-contained, and effectively summarizes the core capability and its purpose.",{"category":44,"check":168,"severity":24,"summary":169},"Concise Body","The SKILL.md is concise and delegates detailed script logic to separate Python files.",{"category":171,"check":172,"severity":24,"summary":173},"Context","Progressive Disclosure","Detailed script logic is provided in separate Python files (`before.py`, `execute.py`, `after.py`), adhering to progressive disclosure.",{"category":171,"check":175,"severity":63,"summary":176},"Forked exploration","This skill is a direct action skill and does not involve deep exploration or code review that would necessitate forked context.",{"category":22,"check":178,"severity":24,"summary":179},"Usage examples","The README provides clear installation and usage examples, including the direct invocation of the `delete-no-email-contacts` skill.",{"category":22,"check":181,"severity":24,"summary":182},"Edge cases","The skill documents several failure modes (API errors, rate limits, threshold breaches) and recovery steps (review CSV, adjust threshold).",{"category":104,"check":184,"severity":63,"summary":185},"Tool Fallback","The skill uses direct API calls and does not rely on an external MCP server, thus no fallback is needed.",{"category":187,"check":188,"severity":24,"summary":189},"Safety","Halt on unexpected state","The script checks the count against a threshold and requires user confirmation before executing deletions, halting on unexpected states.",{"category":92,"check":191,"severity":24,"summary":192},"Cross-skill coupling","The skill is self-contained and does not rely on other skills being loaded in the same session.",1778698421084,"This extension provides a Python script to automatically identify and delete contacts from a HubSpot CRM instance that do not have an email address associated with them. It leverages HubSpot's Search and Batch Archive APIs and includes comprehensive safety measures and audit logging.",[196,197,198,199,200],"Deletes contacts with no email address from HubSpot.","Automates data cleanup using HubSpot CRM Search and Batch Archive APIs.","Includes safety threshold and user confirmation before deletion.","Generates a CSV audit trail of deleted contacts.","Verifies deletion success with a post-execution check.",[202,203,204,205],"Deleting contacts that have an email address, even if it's invalid or bounced.","Validating or cleaning email addresses that are present.","Interacting with any HubSpot data other than contacts.","Performing deletions without explicit user confirmation and a safety threshold.","3.0.0","4.4.0","To efficiently clean up HubSpot CRM databases by removing non-communicable contacts that inflate billing and serve no functional purpose, thereby improving data quality and reducing costs.","The extension is highly polished with excellent documentation, robust error handling, and clear safety mechanisms. The single point of potential improvement relates to dependency management (explicit lockfile).",98,"A robust and safe Python script for automated deletion of contacts lacking email addresses from HubSpot CRM.",[213,214,215,216,217],"hubspot","crm","data-hygiene","automation","python","global","verified",[221,222,223,224],"When contacts are being created without email addresses due to integration issues or manual imports.","To reduce HubSpot billing costs by removing non-communicable contacts.","As part of a regular database hygiene routine to maintain data quality.","To prepare the CRM for better deliverability and marketing effectiveness.",{"codeQuality":226,"collectedAt":228,"documentation":229,"maintenance":232,"security":238,"testCoverage":240},{"hasLockfile":227},false,1778698406615,{"descriptionLength":230,"readmeSize":231},203,10597,{"closedIssues90d":233,"forks":234,"hasChangelog":227,"manifestVersion":235,"openIssues90d":8,"pushedAt":236,"stars":237},1,4,"1.0",1774540543000,21,{"hasNpmPackage":227,"license":239,"smitheryVerified":227},"MIT",{"hasCi":227,"hasTests":227},{"updatedAt":242},1778698421190,{"basePath":244,"githubOwner":245,"githubRepo":246,"locale":18,"slug":13,"type":247},"skills/delete-no-email-contacts","TomGranot","hubspot-admin-skills","skill",true,{"_creationTime":250,"_id":251,"community":252,"display":253,"identity":258,"parentExtension":261,"providers":290,"relations":300,"tags":301,"workflow":302},1778698144006.2188,"k17c3p8t0thc73pbc8egtz31y986mwr0",{"reviewCount":8},{"description":254,"installMethods":255,"name":257,"sourceUrl":14},"Complete HubSpot CRM administration toolkit — audit, clean, enrich, segment, automate, and maintain your database",{"claudeCode":256},"hubspot-admin","HubSpot Admin Skills",{"basePath":259,"githubOwner":245,"githubRepo":246,"locale":18,"slug":246,"type":260},"","plugin",{"_creationTime":262,"_id":263,"community":264,"display":265,"identity":268,"providers":270,"relations":284,"tags":286,"workflow":287},1778698144006.2185,"k17dn1yxv80dbqc9xbkwfp9t6186nkhk",{"reviewCount":8},{"description":266,"installMethods":267,"name":246,"sourceUrl":14},"30+ Claude Code skills for auditing, cleaning, enriching, and automating HubSpot CRM",{"claudeCode":12},{"basePath":259,"githubOwner":245,"githubRepo":246,"locale":18,"slug":246,"type":269},"marketplace",{"evaluate":271,"extract":279},{"promptVersionExtension":272,"promptVersionScoring":207,"score":273,"tags":274,"targetMarket":218,"tier":278},"3.1.0",79,[213,214,216,275,276,277],"data-cleaning","auditing","administration","community",{"commitSha":280,"marketplace":281,"plugin":282},"HEAD",{"name":246,"pluginCount":233},{"mcpCount":8,"provider":283,"skillCount":8},"classify",{"repoId":285},"kd75kpec7arn6z2wz641vfaj8n86nab6",[277,276,216,214,275,213],{"evaluatedAt":288,"extractAt":289,"updatedAt":288},1778698158552,1778698144006,{"evaluate":291,"extract":297},{"promptVersionExtension":206,"promptVersionScoring":207,"score":292,"tags":293,"targetMarket":218,"tier":219},99,[213,214,277,294,216,295,276,296],"data-quality","cleanup","marketing-automation",{"commitSha":280,"license":239,"plugin":298},{"mcpCount":8,"provider":283,"skillCount":299},32,{"parentExtensionId":263,"repoId":285},[277,276,216,295,214,294,213,296],{"evaluatedAt":303,"extractAt":289,"updatedAt":303},1778698168554,{"evaluate":305,"extract":307},{"promptVersionExtension":206,"promptVersionScoring":207,"score":210,"tags":306,"targetMarket":218,"tier":219},[213,214,215,216,217],{"commitSha":280},{"parentExtensionId":251,"repoId":285},{"_creationTime":310,"_id":285,"identity":311,"providers":312,"workflow":695},1778698139523.511,{"githubOwner":245,"githubRepo":246,"sourceUrl":14},{"classify":313,"discover":689,"github":692},{"commitSha":280,"extensions":314},[315,328,401,417,425,433,441,450,458,466,474,482,490,498,506,517,525,533,541,551,561,572,580,588,596,605,613,621,632,640,651,661,671,681],{"basePath":259,"description":266,"displayName":246,"installMethods":316,"rationale":317,"selectedPaths":318,"source":327,"sourceLanguage":18,"type":269},{"claudeCode":12},"marketplace.json at .claude-plugin/marketplace.json",[319,322,324],{"path":320,"priority":321},".claude-plugin/marketplace.json","mandatory",{"path":323,"priority":321},"README.md",{"path":325,"priority":326},"LICENSE","high","rule",{"basePath":259,"description":254,"displayName":256,"installMethods":329,"rationale":330,"selectedPaths":331,"source":327,"sourceLanguage":18,"type":260},{"claudeCode":256},"plugin manifest at .claude-plugin/plugin.json",[332,334,335,336,339,341,343,345,347,349,351,353,355,357,359,361,363,365,367,369,371,373,375,377,379,381,383,385,387,389,391,393,395,397,399],{"path":333,"priority":321},".claude-plugin/plugin.json",{"path":323,"priority":321},{"path":325,"priority":326},{"path":337,"priority":338},"skills/assign-unowned-contacts/SKILL.md","medium",{"path":340,"priority":338},"skills/backfill-geo-data/SKILL.md",{"path":342,"priority":338},"skills/bounce-monitoring-workflow/SKILL.md",{"path":344,"priority":338},"skills/build-lead-scoring/SKILL.md",{"path":346,"priority":338},"skills/build-smart-lists/SKILL.md",{"path":348,"priority":338},"skills/cleanup-dashboards/SKILL.md",{"path":350,"priority":338},"skills/cleanup-deals/SKILL.md",{"path":352,"priority":338},"skills/cleanup-forms/SKILL.md",{"path":354,"priority":338},"skills/cleanup-lead-owners/SKILL.md",{"path":356,"priority":338},"skills/cleanup-lists/SKILL.md",{"path":358,"priority":338},"skills/cleanup-properties/SKILL.md",{"path":360,"priority":338},"skills/cleanup-workflows/SKILL.md",{"path":362,"priority":338},"skills/create-icp-tiers/SKILL.md",{"path":364,"priority":338},"skills/create-segment-lists/SKILL.md",{"path":366,"priority":338},"skills/delete-no-email-contacts/SKILL.md",{"path":368,"priority":338},"skills/engagement-suppression-workflow/SKILL.md",{"path":370,"priority":338},"skills/enrich-company-name/SKILL.md",{"path":372,"priority":338},"skills/enrich-industry/SKILL.md",{"path":374,"priority":338},"skills/fix-lifecycle-stages/SKILL.md",{"path":376,"priority":338},"skills/hubspot-audit/SKILL.md",{"path":378,"priority":338},"skills/hubspot-implementation-plan/SKILL.md",{"path":380,"priority":338},"skills/lifecycle-progression-workflow/SKILL.md",{"path":382,"priority":338},"skills/merge-duplicate-companies/SKILL.md",{"path":384,"priority":338},"skills/new-contact-hygiene-workflow/SKILL.md",{"path":386,"priority":338},"skills/quarterly-database-cleanup/SKILL.md",{"path":388,"priority":338},"skills/reassign-deactivated-owners/SKILL.md",{"path":390,"priority":338},"skills/review-bounced-contacts/SKILL.md",{"path":392,"priority":338},"skills/standardize-geo-values/SKILL.md",{"path":394,"priority":338},"skills/suppress-ghost-contacts/SKILL.md",{"path":396,"priority":338},"skills/suppress-global-unsubscribes/SKILL.md",{"path":398,"priority":338},"skills/suppress-hard-bounced/SKILL.md",{"path":400,"priority":338},"skills/weekly-cleanup-routine/SKILL.md",{"basePath":402,"description":403,"displayName":404,"installMethods":405,"rationale":406,"selectedPaths":407,"source":327,"sourceLanguage":18,"type":247},"skills/assign-unowned-contacts","Assign an owner to marketing contacts that have no owner. Ensures every marketable contact has accountability for follow-up, proper lead routing, and accurate owner-based reporting.","assign-unowned-contacts",{"claudeCode":12},"SKILL.md frontmatter at skills/assign-unowned-contacts/SKILL.md",[408,410,413,415],{"path":409,"priority":321},"SKILL.md",{"path":411,"priority":412},"scripts/after.py","low",{"path":414,"priority":412},"scripts/before.py",{"path":416,"priority":412},"scripts/execute.py",{"basePath":418,"description":419,"displayName":420,"installMethods":421,"rationale":422,"selectedPaths":423,"source":327,"sourceLanguage":18,"type":247},"skills/backfill-geo-data","Enrich missing geographic data (country, state, city) on contacts and companies using HubSpot workflows, external data providers, or IP-based geolocation.","backfill-geo-data",{"claudeCode":12},"SKILL.md frontmatter at skills/backfill-geo-data/SKILL.md",[424],{"path":409,"priority":321},{"basePath":426,"description":427,"displayName":428,"installMethods":429,"rationale":430,"selectedPaths":431,"source":327,"sourceLanguage":18,"type":247},"skills/bounce-monitoring-workflow","Build a workflow to protect sender reputation through automated bounce monitoring. Auto-suppresses contacts above a configurable bounce threshold, alerts on hard bounces, and flags high-bounce contacts for weekly manual review.","bounce-monitoring-workflow",{"claudeCode":12},"SKILL.md frontmatter at skills/bounce-monitoring-workflow/SKILL.md",[432],{"path":409,"priority":321},{"basePath":434,"description":435,"displayName":436,"installMethods":437,"rationale":438,"selectedPaths":439,"source":327,"sourceLanguage":18,"type":247},"skills/build-lead-scoring","Create a comprehensive lead scoring model with separate Fit and Engagement scores using HubSpot's new Lead Scoring tool. Replaces the deprecated HubSpot Score property.","build-lead-scoring",{"claudeCode":12},"SKILL.md frontmatter at skills/build-lead-scoring/SKILL.md",[440],{"path":409,"priority":321},{"basePath":442,"description":443,"displayName":444,"installMethods":445,"rationale":446,"selectedPaths":447,"source":327,"sourceLanguage":18,"type":247},"skills/build-smart-lists","Create foundational segmented lists for marketing and sales operations. Includes a master sendable list, ICP-based lists, persona lists, engagement lists, and behavioral lists. All active (dynamic) lists.","build-smart-lists",{"claudeCode":12},"SKILL.md frontmatter at skills/build-smart-lists/SKILL.md",[448,449],{"path":409,"priority":321},{"path":416,"priority":412},{"basePath":451,"description":452,"displayName":453,"installMethods":454,"rationale":455,"selectedPaths":456,"source":327,"sourceLanguage":18,"type":247},"skills/cleanup-dashboards","Audit and consolidate HubSpot reporting dashboards. Identifies unused, duplicate, or outdated dashboards. Must be performed manually — no dashboard API is available.","cleanup-dashboards",{"claudeCode":12},"SKILL.md frontmatter at skills/cleanup-dashboards/SKILL.md",[457],{"path":409,"priority":321},{"basePath":459,"description":460,"displayName":461,"installMethods":462,"rationale":463,"selectedPaths":464,"source":327,"sourceLanguage":18,"type":247},"skills/cleanup-deals","Standardize deal pipelines, remove test deals, and address deals with missing amounts or close dates. Coordinates with Salesforce sync if applicable.","cleanup-deals",{"claudeCode":12},"SKILL.md frontmatter at skills/cleanup-deals/SKILL.md",[465],{"path":409,"priority":321},{"basePath":467,"description":468,"displayName":469,"installMethods":470,"rationale":471,"selectedPaths":472,"source":327,"sourceLanguage":18,"type":247},"skills/cleanup-forms","Audit and remove unused, test, or deprecated forms from HubSpot. Identifies forms with zero submissions, forms not embedded on any page, and test forms left over from development.","cleanup-forms",{"claudeCode":12},"SKILL.md frontmatter at skills/cleanup-forms/SKILL.md",[473],{"path":409,"priority":321},{"basePath":475,"description":476,"displayName":477,"installMethods":478,"rationale":479,"selectedPaths":480,"source":327,"sourceLanguage":18,"type":247},"skills/cleanup-lead-owners","Remove non-employee users from HubSpot and reassign their orphaned contacts, companies, and deals. Pairs with the assign-unowned-contacts skill for comprehensive ownership cleanup.","cleanup-lead-owners",{"claudeCode":12},"SKILL.md frontmatter at skills/cleanup-lead-owners/SKILL.md",[481],{"path":409,"priority":321},{"basePath":483,"description":484,"displayName":485,"installMethods":486,"rationale":487,"selectedPaths":488,"source":327,"sourceLanguage":18,"type":247},"skills/cleanup-lists","Audit and remove unused, empty, or duplicate list definitions from HubSpot. Identifies lists with zero members, lists not used by any workflow or email, and overlapping list criteria.","cleanup-lists",{"claudeCode":12},"SKILL.md frontmatter at skills/cleanup-lists/SKILL.md",[489],{"path":409,"priority":321},{"basePath":491,"description":492,"displayName":493,"installMethods":494,"rationale":495,"selectedPaths":496,"source":327,"sourceLanguage":18,"type":247},"skills/cleanup-properties","Archive or delete unused custom properties across all HubSpot object types (contacts, companies, deals). Identifies Salesforce sync properties, test/temp properties, and obsolete form fields.","cleanup-properties",{"claudeCode":12},"SKILL.md frontmatter at skills/cleanup-properties/SKILL.md",[497],{"path":409,"priority":321},{"basePath":499,"description":500,"displayName":501,"installMethods":502,"rationale":503,"selectedPaths":504,"source":327,"sourceLanguage":18,"type":247},"skills/cleanup-workflows","Audit and remove inactive, test, or deprecated workflows from HubSpot. Identifies workflows that have never enrolled contacts, workflows turned off for 90+ days, and test workflows.","cleanup-workflows",{"claudeCode":12},"SKILL.md frontmatter at skills/cleanup-workflows/SKILL.md",[505],{"path":409,"priority":321},{"basePath":507,"description":508,"displayName":509,"installMethods":510,"rationale":511,"selectedPaths":512,"source":327,"sourceLanguage":18,"type":247},"skills/create-icp-tiers","Classify companies into Ideal Customer Profile (ICP) tiers based on firmographic data (industry + employee count). Creates a custom property via API and 4 classification workflows in HubSpot UI.","create-icp-tiers",{"claudeCode":12},"SKILL.md frontmatter at skills/create-icp-tiers/SKILL.md",[513,514,515,516],{"path":409,"priority":321},{"path":411,"priority":412},{"path":414,"priority":412},{"path":416,"priority":412},{"basePath":518,"description":519,"displayName":520,"installMethods":521,"rationale":522,"selectedPaths":523,"source":327,"sourceLanguage":18,"type":247},"skills/create-segment-lists","Create business segment lists in HubSpot for customers, partners, competitors, employees, ICP tiers, and industries. Enables segment-based targeting, suppression, and analytics.","create-segment-lists",{"claudeCode":12},"SKILL.md frontmatter at skills/create-segment-lists/SKILL.md",[524],{"path":409,"priority":321},{"basePath":244,"description":10,"displayName":13,"installMethods":526,"rationale":527,"selectedPaths":528,"source":327,"sourceLanguage":18,"type":247},{"claudeCode":12},"SKILL.md frontmatter at skills/delete-no-email-contacts/SKILL.md",[529,530,531,532],{"path":409,"priority":321},{"path":411,"priority":412},{"path":414,"priority":412},{"path":416,"priority":412},{"basePath":534,"description":535,"displayName":536,"installMethods":537,"rationale":538,"selectedPaths":539,"source":327,"sourceLanguage":18,"type":247},"skills/engagement-suppression-workflow","Build a two-tier sunset workflow that re-engages dormant contacts before suppressing them. Tier 1 triggers a re-engagement campaign after a configurable inactivity window. Tier 2 suppresses contacts that fail to re-engage within a configurable re-engagement window.","engagement-suppression-workflow",{"claudeCode":12},"SKILL.md frontmatter at skills/engagement-suppression-workflow/SKILL.md",[540],{"path":409,"priority":321},{"basePath":542,"description":543,"displayName":544,"installMethods":545,"rationale":546,"selectedPaths":547,"source":327,"sourceLanguage":18,"type":247},"skills/enrich-company-name","Populate missing contact company name fields from associated company records using a HubSpot workflow with optional API backfill. Ensures contacts inherit their company name for segmentation, personalization, and ICP classification.","enrich-company-name",{"claudeCode":12},"SKILL.md frontmatter at skills/enrich-company-name/SKILL.md",[548,549,550],{"path":409,"priority":321},{"path":411,"priority":412},{"path":414,"priority":412},{"basePath":552,"description":553,"displayName":554,"installMethods":555,"rationale":556,"selectedPaths":557,"source":327,"sourceLanguage":18,"type":247},"skills/enrich-industry","Backfill contact-level industry from associated company records using a HubSpot workflow. Enables industry-based segmentation for targeted campaigns aligned with ICP verticals.","enrich-industry",{"claudeCode":12},"SKILL.md frontmatter at skills/enrich-industry/SKILL.md",[558,559,560],{"path":409,"priority":321},{"path":411,"priority":412},{"path":414,"priority":412},{"basePath":562,"description":563,"displayName":564,"installMethods":565,"rationale":566,"selectedPaths":567,"source":327,"sourceLanguage":18,"type":247},"skills/fix-lifecycle-stages","Ensure all contacts and companies have appropriate lifecycle stages. Backfills missing stages via API, fixes records stuck at disallowed stages, and creates prevention workflows to stop future gaps.","fix-lifecycle-stages",{"claudeCode":12},"SKILL.md frontmatter at skills/fix-lifecycle-stages/SKILL.md",[568,569,570,571],{"path":409,"priority":321},{"path":411,"priority":412},{"path":414,"priority":412},{"path":416,"priority":412},{"basePath":573,"description":574,"displayName":575,"installMethods":576,"rationale":577,"selectedPaths":578,"source":327,"sourceLanguage":18,"type":247},"skills/hubspot-audit","Run a comprehensive HubSpot CRM database audit. Analyzes contacts, companies, deals, engagement, data quality, and deliverability. Use when starting a CRM cleanup, onboarding a new client, or performing quarterly health checks.","hubspot-audit",{"claudeCode":12},"SKILL.md frontmatter at skills/hubspot-audit/SKILL.md",[579],{"path":409,"priority":321},{"basePath":581,"description":582,"displayName":583,"installMethods":584,"rationale":585,"selectedPaths":586,"source":327,"sourceLanguage":18,"type":247},"skills/hubspot-implementation-plan","Generate a phased implementation plan from a HubSpot audit report. Creates prioritized, sequenced cleanup processes with effort estimates, dependencies, and automation feasibility. Use after running /hubspot-audit.","hubspot-implementation-plan",{"claudeCode":12},"SKILL.md frontmatter at skills/hubspot-implementation-plan/SKILL.md",[587],{"path":409,"priority":321},{"basePath":589,"description":590,"displayName":591,"installMethods":592,"rationale":593,"selectedPaths":594,"source":327,"sourceLanguage":18,"type":247},"skills/lifecycle-progression-workflow","Build workflows to automate contact progression through the sales funnel: Lead to MQL to SQL to Opportunity to Customer. Each transition is triggered by a specific event (score threshold, meeting booked, deal created, deal won).","lifecycle-progression-workflow",{"claudeCode":12},"SKILL.md frontmatter at skills/lifecycle-progression-workflow/SKILL.md",[595],{"path":409,"priority":321},{"basePath":597,"description":598,"displayName":599,"installMethods":600,"rationale":601,"selectedPaths":602,"source":327,"sourceLanguage":18,"type":247},"skills/merge-duplicate-companies","Identify duplicate company records by domain and name, export audit CSVs for review, and guide merging. API for discovery, third-party tools or manual UI for merging (HubSpot has no bulk merge API).\n","merge-duplicate-companies",{"claudeCode":12},"SKILL.md frontmatter at skills/merge-duplicate-companies/SKILL.md",[603,604],{"path":409,"priority":321},{"path":414,"priority":412},{"basePath":606,"description":607,"displayName":608,"installMethods":609,"rationale":610,"selectedPaths":611,"source":327,"sourceLanguage":18,"type":247},"skills/new-contact-hygiene-workflow","Build a HubSpot workflow that auto-enriches and stages new contacts upon creation. Sets lifecycle stage, copies company name and industry from associated company, and branches on completeness. Must be built manually in the HubSpot UI due to API limitations.","new-contact-hygiene-workflow",{"claudeCode":12},"SKILL.md frontmatter at skills/new-contact-hygiene-workflow/SKILL.md",[612],{"path":409,"priority":321},{"basePath":614,"description":615,"displayName":616,"installMethods":617,"rationale":618,"selectedPaths":619,"source":327,"sourceLanguage":18,"type":247},"skills/quarterly-database-cleanup","Run a comprehensive quarterly CRM audit covering list health, bounce monitoring, data quality, scoring calibration, engagement metrics, and property cleanup. Produces a health report with quarter-over-quarter trend comparison.","quarterly-database-cleanup",{"claudeCode":12},"SKILL.md frontmatter at skills/quarterly-database-cleanup/SKILL.md",[620],{"path":409,"priority":321},{"basePath":622,"description":623,"displayName":624,"installMethods":625,"rationale":626,"selectedPaths":627,"source":327,"sourceLanguage":18,"type":247},"skills/reassign-deactivated-owners","Reassign contacts and companies from deactivated team members to active owners. Fully automated via the HubSpot Owners API and Batch Update API. Includes territory analysis for informed reassignment decisions.\n","reassign-deactivated-owners",{"claudeCode":12},"SKILL.md frontmatter at skills/reassign-deactivated-owners/SKILL.md",[628,629,630,631],{"path":409,"priority":321},{"path":411,"priority":412},{"path":414,"priority":412},{"path":416,"priority":412},{"basePath":633,"description":634,"displayName":635,"installMethods":636,"rationale":637,"selectedPaths":638,"source":327,"sourceLanguage":18,"type":247},"skills/review-bounced-contacts","Weekly manual review of contacts with 3+ bounce events. Decide whether to delete or attempt recovery for each flagged contact. Prevents over-suppression while removing truly bad data.","review-bounced-contacts",{"claudeCode":12},"SKILL.md frontmatter at skills/review-bounced-contacts/SKILL.md",[639],{"path":409,"priority":321},{"basePath":641,"description":642,"displayName":643,"installMethods":644,"rationale":645,"selectedPaths":646,"source":327,"sourceLanguage":18,"type":247},"skills/standardize-geo-values","Convert inconsistent country and state/region formats to standardized values across contacts and companies. Ensures geographic segmentation works reliably.","standardize-geo-values",{"claudeCode":12},"SKILL.md frontmatter at skills/standardize-geo-values/SKILL.md",[647,648,649,650],{"path":409,"priority":321},{"path":411,"priority":412},{"path":414,"priority":412},{"path":416,"priority":412},{"basePath":652,"description":653,"displayName":654,"installMethods":655,"rationale":656,"selectedPaths":657,"source":327,"sourceLanguage":18,"type":247},"skills/suppress-ghost-contacts","Identify and suppress ghost contacts who received marketing emails but never opened any. These contacts destroy sender reputation and deliverability. Hybrid approach: API for discovery, manual UI for suppression.\n","suppress-ghost-contacts",{"claudeCode":12},"SKILL.md frontmatter at skills/suppress-ghost-contacts/SKILL.md",[658,659,660],{"path":409,"priority":321},{"path":411,"priority":412},{"path":414,"priority":412},{"basePath":662,"description":663,"displayName":664,"installMethods":665,"rationale":666,"selectedPaths":667,"source":327,"sourceLanguage":18,"type":247},"skills/suppress-global-unsubscribes","Identify and suppress globally unsubscribed contacts to ensure legal compliance and reduce billing. Hybrid approach: API for discovery and audit, manual UI for suppression (hs_marketable_status is read-only).\n","suppress-global-unsubscribes",{"claudeCode":12},"SKILL.md frontmatter at skills/suppress-global-unsubscribes/SKILL.md",[668,669,670],{"path":409,"priority":321},{"path":411,"priority":412},{"path":414,"priority":412},{"basePath":672,"description":673,"displayName":674,"installMethods":675,"rationale":676,"selectedPaths":677,"source":327,"sourceLanguage":18,"type":247},"skills/suppress-hard-bounced","Identify and suppress hard-bounced contacts to protect email sender reputation. Hybrid approach: API for discovery and audit, manual UI for suppression (hs_marketable_status is read-only via API).\n","suppress-hard-bounced",{"claudeCode":12},"SKILL.md frontmatter at skills/suppress-hard-bounced/SKILL.md",[678,679,680],{"path":409,"priority":321},{"path":411,"priority":412},{"path":414,"priority":412},{"basePath":682,"description":683,"displayName":684,"installMethods":685,"rationale":686,"selectedPaths":687,"source":327,"sourceLanguage":18,"type":247},"skills/weekly-cleanup-routine","A lightweight 5-minute weekly health check covering bounce monitoring, new contact quality, workflow health, list growth trends, and data quality sampling. Quick early warning system, not a comprehensive audit.","weekly-cleanup-routine",{"claudeCode":12},"SKILL.md frontmatter at skills/weekly-cleanup-routine/SKILL.md",[688],{"path":409,"priority":321},{"sources":690},[691],"manual",{"closedIssues90d":233,"description":693,"forks":234,"license":239,"openIssues90d":8,"pushedAt":236,"readmeSize":231,"stars":237,"topics":694},"32 Claude Code skills for auditing, cleaning, enriching, and automating your HubSpot CRM",[],{"classifiedAt":696,"discoverAt":697,"extractAt":698,"githubAt":698,"updatedAt":696},1778698143787,1778698139523,1778698141911,[216,214,215,213,217],{"evaluatedAt":242,"extractAt":289,"updatedAt":242},[],[703,721,737,754,770,788],{"_creationTime":704,"_id":705,"community":706,"display":707,"identity":709,"providers":710,"relations":717,"tags":718,"workflow":719},1778698144006.224,"k17agbyx7wnnh9238dqj641dns86nf82",{"reviewCount":8},{"description":590,"installMethods":708,"name":591,"sourceUrl":14},{"claudeCode":12},{"basePath":589,"githubOwner":245,"githubRepo":246,"locale":18,"slug":591,"type":247},{"evaluate":711,"extract":716},{"promptVersionExtension":206,"promptVersionScoring":207,"score":712,"tags":713,"targetMarket":218,"tier":219},100,[216,714,214,715,213],"sales","workflows",{"commitSha":280},{"parentExtensionId":251,"repoId":285},[216,214,213,714,715],{"evaluatedAt":720,"extractAt":289,"updatedAt":720},1778698526315,{"_creationTime":722,"_id":723,"community":724,"display":725,"identity":727,"providers":728,"relations":733,"tags":734,"workflow":735},1778698144006.2253,"k175q9vhdtjhmdnj5sfg0js0y186m41d",{"reviewCount":8},{"description":634,"installMethods":726,"name":635,"sourceUrl":14},{"claudeCode":12},{"basePath":633,"githubOwner":245,"githubRepo":246,"locale":18,"slug":635,"type":247},{"evaluate":729,"extract":732},{"promptVersionExtension":206,"promptVersionScoring":207,"score":210,"tags":730,"targetMarket":218,"tier":219},[213,214,215,731,216],"contact-management",{"commitSha":280},{"parentExtensionId":251,"repoId":285},[216,731,214,215,213],{"evaluatedAt":736,"extractAt":289,"updatedAt":736},1778698625452,{"_creationTime":738,"_id":739,"community":740,"display":741,"identity":743,"providers":744,"relations":750,"tags":751,"workflow":752},1778698144006.2202,"k172517ana4f5vj79mb22xzwsx86mksv",{"reviewCount":8},{"description":452,"installMethods":742,"name":453,"sourceUrl":14},{"claudeCode":12},{"basePath":451,"githubOwner":245,"githubRepo":246,"locale":18,"slug":453,"type":247},{"evaluate":745,"extract":749},{"promptVersionExtension":206,"promptVersionScoring":207,"score":712,"tags":746,"targetMarket":218,"tier":219},[213,214,747,748,295],"maintenance","reporting",{"commitSha":280},{"parentExtensionId":251,"repoId":285},[295,214,213,747,748],{"evaluatedAt":753,"extractAt":289,"updatedAt":753},1778698268281,{"_creationTime":755,"_id":756,"community":757,"display":758,"identity":760,"providers":761,"relations":766,"tags":767,"workflow":768},1778698144006.225,"k17bfemb4zmcjh67bsamr26c0x86mpbn",{"reviewCount":8},{"description":623,"installMethods":759,"name":624,"sourceUrl":14},{"claudeCode":12},{"basePath":622,"githubOwner":245,"githubRepo":246,"locale":18,"slug":624,"type":247},{"evaluate":762,"extract":765},{"promptVersionExtension":206,"promptVersionScoring":207,"score":292,"tags":763,"targetMarket":218,"tier":219},[213,214,216,764,277],"data-management",{"commitSha":280},{"parentExtensionId":251,"repoId":285},[277,216,214,764,213],{"evaluatedAt":769,"extractAt":289,"updatedAt":769},1778698590503,{"_creationTime":771,"_id":772,"community":773,"display":774,"identity":777,"providers":778,"relations":784,"tags":785,"workflow":786},1778698144006.2231,"k172hgm2mhketjz0tmptf85ms986nx8p",{"reviewCount":8},{"description":553,"installMethods":775,"name":776,"sourceUrl":14},{"claudeCode":12},"Enrich Contact Industry",{"basePath":552,"githubOwner":245,"githubRepo":246,"locale":18,"slug":554,"type":247},{"evaluate":779,"extract":783},{"promptVersionExtension":206,"promptVersionScoring":207,"score":292,"tags":780,"targetMarket":218,"tier":219},[213,214,781,216,731,782],"data-enrichment","segmentation",{"commitSha":280,"license":239},{"parentExtensionId":251,"repoId":285},[216,731,214,781,213,782],{"evaluatedAt":787,"extractAt":289,"updatedAt":787},1778698467653,{"_creationTime":789,"_id":790,"community":791,"display":792,"identity":794,"providers":795,"relations":799,"tags":800,"workflow":801},1778698144006.2266,"k178ar72y21gtdvpcbmcmd227s86mq2d",{"reviewCount":8},{"description":683,"installMethods":793,"name":684,"sourceUrl":14},{"claudeCode":12},{"basePath":682,"githubOwner":245,"githubRepo":246,"locale":18,"slug":684,"type":247},{"evaluate":796,"extract":798},{"promptVersionExtension":206,"promptVersionScoring":207,"score":210,"tags":797,"targetMarket":218,"tier":219},[213,214,747,216,748],{"commitSha":280},{"parentExtensionId":251,"repoId":285},[216,214,213,747,748],{"evaluatedAt":802,"extractAt":289,"updatedAt":802},1778698703534]