К основному содержанию
скилл CX Codex

cleanup-lead-owners — скилл для Claude Code

Убирает из HubSpot уволенных сотрудников и переназначает их контакты, компании и сделки. Нужен, когда человек уходит, а его записи остаются висеть.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add TomGranot/hubspot-admin-skills --skill cleanup-lead-owners -a claude-code
Открыть на GitHub

Что делает cleanup-lead-owners

Скилл проходит CRM по Owners API: тянет активных и деактивированных владельцев, сверяет их с вашим списком текущих сотрудников и помечает тех, кто записями владеть не должен. Отдельно считает, сколько контактов, компаний и сделок висит на каждом таком владельце.

Дальше записи переназначаются через batch update — на одного владельца или по правилам территории и round-robin. Компании и сделки переезжают вместе с контактами. После этого скилл советует прогнать /assign-unowned-contacts, чтобы поймать записи, оставшиеся без владельца, и проверить, что ни на одном деактивированном ID не висит ни одного контакта.

Заранее понадобится сервисный ключ HubSpot в HUBSPOT_ACCESS_TOKEN внутри .env со скоупами crm.objects.owners.read и правами на запись контактов, компаний и сделок, Python 3.10+ с uv, список действующих сотрудников и правило, кому отдавать осиротевшие записи. Деактивация пользователей требует прав Super Admin в настройках HubSpot. Без списка сотрудников сверять владельцев не с чем, так что скилл просто не сможет отделить уволенных от работающих. Перед изменениями сохраните лог исходных назначений: откат делается batch-обновлением hubspot_owner_id обратно.

Какие задачи решает

  • убрать уволенных сотрудников из списка владельцев HubSpot
  • переназначить контакты, компании и сделки departed-владельцев
  • найти активных пользователей, которые больше не работают в компании
  • посчитать, сколько записей висит на каждом неактуальном владельце
  • проверить, что после переназначения не осталось записей без владельца

Примеры запросов агенту

  • Пройди по владельцам HubSpot и покажи, кто из них уже не сотрудник
  • Переназначь контакты и сделки уволенных на нового владельца по территории
  • Проверь, что ни на одном деактивированном владельце не осталось контактов

Как установить cleanup-lead-owners

1Через Skills CLI (Vercel)

npx skills add TomGranot/hubspot-admin-skills --skill cleanup-lead-owners -a claude-code

2Вручную: положить файлы

~/.claude/skills/cleanup-lead-owners/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/cleanup-lead-owners/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о cleanup-lead-owners

Как установить cleanup-lead-owners в Claude Code?

Выполните npx skills add TomGranot/hubspot-admin-skills --skill cleanup-lead-owners -a claude-code. Скилл встанет в ~/.claude/skills/cleanup-lead-owners/SKILL.md.

Что делает cleanup-lead-owners?

Находит в HubSpot владельцев, которые больше не сотрудники, переназначает их контакты, компании и сделки и подсказывает, кого деактивировать.

Что нужно для работы скилла?

Сервисный ключ HubSpot в HUBSPOT_ACCESS_TOKEN со скоупами crm.objects.owners.read и записью по контактам, компаниям и сделкам, Python 3.10+ с uv, список текущих сотрудников и правило переназначения. Деактивация пользователей требует прав Super Admin.

Исходный текст

SKILL.md · MIT
---
name: cleanup-lead-owners
description: "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."
license: MIT
metadata:
  author: tomgranot
  version: "1.1"
  category: ongoing-maintenance
---

# Cleanup Lead Owners

Remove departed employees from HubSpot and reassign their CRM records. Orphaned records with no active owner fall through the cracks.

## Prerequisites

- A HubSpot service key (`HUBSPOT_ACCESS_TOKEN` in `.env`; an existing legacy private app token also works) with `crm.objects.owners.read` and contact/company/deal write scopes
- Python 3.10+ with [`uv`](https://github.com/astral-sh/uv)
- A list of current employees (to compare against HubSpot users)
- A default owner or round-robin assignment rule for orphaned records

## Step-by-Step Instructions

### Stage 1: Plan

Confirm with the user before starting:

1. Who receives reassigned records — a single default owner, or territory/round-robin rules?
2. Which flagged users should be deactivated vs merely stripped of records?

### Stage 2: Before

Identify non-employee owners via the Owners API:

```python
import os, requests
from dotenv import load_dotenv

load_dotenv()
TOKEN = os.environ["HUBSPOT_ACCESS_TOKEN"]
BASE = "https://api.hubapi.com"
HEADERS = {"Authorization": f"Bearer {TOKEN}", "Content-Type": "application/json"}

active = requests.get(f"{BASE}/crm/v3/owners", headers=HEADERS,
                      params={"limit": 100, "archived": "false"}).json()["results"]
deactivated = requests.get(f"{BASE}/crm/v3/owners", headers=HEADERS,
                           params={"limit": 100, "archived": "true"}).json()["results"]
```

Cross-reference with your current employee list. Flag:
- Deactivated HubSpot users who still own records
- Active HubSpot users who are no longer employees
- Contractors or vendors who should not own records

For each flagged owner, count how many contacts, companies, and deals they own.

### Stage 3: Execute

1. **Reassign records** owned by non-employees:
   - Use the batch update API to reassign contacts to the appropriate active owner
   - Apply round-robin or territory-based rules if no specific owner is obvious
   - Reassign companies and deals associated with the same contacts

2. **Deactivate users** who are no longer employees (requires Super Admin in HubSpot Settings > Users & Teams).

3. **Run `/assign-unowned-contacts`** after reassignment to catch any records that ended up without an owner.

### Stage 4: After

1. Search for contacts where `hubspot_owner_id` matches any deactivated owner ID — count should be zero.
2. Confirm all reassigned contacts have an active owner.
3. Check that no workflows broke due to owner changes (some workflows may filter by specific owners).

## Rollback

- Owner reassignments can be reversed by batch-updating the `hubspot_owner_id` back to the original value.
- Keep a log of original owner assignments before making changes.
- Deactivated users can be reactivated in HubSpot Settings if needed.

## Tips

- Run this whenever an employee leaves the company — do not wait for quarterly cleanup.
- Set up an offboarding checklist that includes HubSpot record reassignment.
- Pairs with `/assign-unowned-contacts` for comprehensive ownership hygiene.

© tomgranot · MIT · TomGranot/hubspot-admin-skills

Похожие скиллы

Все скиллы по теме «Автоматизация и no-code: n8n, Zapier, Make» →
bulk-operations HubSpot Скилл задаёт базовые приёмы работы с CLI hubspot: пакетное чтение, пагинация, JSONL-конвейеры и безопасные массовые записи. CX Codex +1 1 800установок hubspot membrane Скилл подключает агента к HubSpot: контакты, компании, сделки, тикеты, задачи и заметки. Пригодится, когда нужно читать и создавать записи в CRM прямо из чата. CX Codex +1 858установок closed-lost-revival Cogny AI Разбирает проигранные сделки в CRM, записывает настоящую причину отказа и условие для возврата, а потом следит за этим условием. CX Codex +1 ★ 111звёзд репо ticket-resolution HubSpot Скилл ведёт тикеты HubSpot из терминала: создаёт, сортирует по приоритету, двигает по стадиям и закрывает с записью решения. CX Codex +1 2 000установок call-list официальный anthropics Собирает список лидов на сегодня, ранжирует их по срочности, готовит тезисы для разговора и черновики писем. Полезен, если продажи идут через звонки. CX Codex +1 1 600установок crm-icp-analysis Cogny AI Скилл разбирает закрытые сделки, контакты и компании в HubSpot, Pipedrive или Upsales и собирает из них профиль идеального клиента. CX Codex +1 ★ 111звёзд репо

Из того же набора11

review-bounced-contacts Еженедельный ручной разбор контактов с 3+ отскоками: удалить или попробовать восстановить. Помогает не переусердствовать с подавлением и убрать мусор. CX Codex +1 ★ 78звёзд репо new-contact-hygiene-workflow Создаёт в HubSpot воркфлоу, который при появлении контакта ставит стадию жизненного цикла и подтягивает компанию с отраслью. CX Codex +1 ★ 78звёзд репо enrich-company-name Копирует название компании из связанной записи в пустое поле контакта HubSpot. Пригодится, если сегментация и токены персонализации ломаются из-за пустых значений. CX Codex +1 ★ 78звёзд репо create-segment-lists Собирает в HubSpot библиотеку списков сегментов: клиенты, партнёры, конкуренты, сотрудники, уровни ICP и отрасли. Нужна для таргетинга, подавления рассылок и отчётности. CX Codex +1 ★ 78звёзд репо cleanup-workflows Находит в HubSpot воркфлоу, которые никогда не запускались, отключены больше 90 дней или остались от тестов, и помогает их удалить. CX Codex +1 ★ 78звёзд репо cleanup-dashboards Наводит порядок в дашбордах HubSpot: находит заброшенные, дубли и тестовые, помогает свести отчёты к нескольким рабочим экранам. CX Codex +1 ★ 78звёзд репо bounce-monitoring-workflow Скилл собирает в HubSpot три воркфлоу для контроля отскоков: подавляет контакты после нескольких bounce, шлёт алерты и помечает адреса на ручную проверку. CX Codex +1 ★ 78звёзд репо assign-unowned-contacts Проставляет владельца маркетинговым контактам HubSpot, у которых его нет. Пригодится, когда отчёты по владельцам не сходятся с реальной базой. CX Codex +1 ★ 78звёзд репо

Спонсоры проекта

Компании, которые помогают держать аналитику открытой