cleanup-lists — скилл для Claude Code: аудит списков HubSpot
Скилл проверяет списки HubSpot на пустые, неиспользуемые и похожие друг на друга записи. Помогает подготовить список кандидатов на удаление и перепроверить его перед очисткой.
npx skills add TomGranot/hubspot-admin-skills --skill cleanup-lists -a claude-codeЧто делает cleanup-lists
Скилл собирает сведения о списках HubSpot через Lists API: ID, название, тип, число участников и даты создания и обновления. Он предлагает выгрузить инвентаризацию в CSV, а затем найти пустые, неиспользуемые, тестовые и похожие списки, а также давно не обновлявшиеся статические списки. Кандидатов нужно сверить с рабочими процессами, письмами и рекламными аудиториями: даже список без участников может служить триггером.
Для доступа нужен токен HubSpot в HUBSPOT_ACCESS_TOKEN с разрешениями crm.lists.read и crm.lists.write, Python 3.10+ и uv. Перед удалением скилл требует показать список кандидатов и получить явное подтверждение. Удалённые списки нельзя восстановить через корзину HubSpot, поэтому заранее экспортируйте их критерии; для статических списков также можно сохранить ID участников.
Если Lists API возвращает 403 на вашем тарифе, аудит придётся провести вручную в интерфейсе HubSpot. Скилл также предлагает повторно проверить инвентаризацию после удаления и записать результат в журнал очистки.
Какие задачи решает
- найти списки HubSpot без участников и давние статические списки
- проверить, какие списки не используются в рабочих процессах и письмах
- выявить списки с дублирующими названиями или похожими фильтрами
- подготовить кандидатов на удаление и зафиксировать результат очистки
Примеры запросов агенту
- Проведи аудит списков HubSpot и сохрани инвентаризацию в CSV.
- Найди списки, которые не используются в рабочих процессах, письмах или рекламных аудиториях.
- Покажи кандидатов на удаление и дождись моего подтверждения; ничего не удаляй заранее.
Как установить cleanup-lists
1Через Skills CLI (Vercel)
npx skills add TomGranot/hubspot-admin-skills --skill cleanup-lists -a claude-code2Вручную: положить файлы
~/.claude/skills/cleanup-lists/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/cleanup-lists/
1Через Skills CLI (Vercel)
npx skills add TomGranot/hubspot-admin-skills --skill cleanup-lists -a codex2Вручную: положить файлы
.agents/skills/cleanup-lists/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add TomGranot/hubspot-admin-skills --skill cleanup-lists -a cursor2Вручную: положить файлы
.cursor/skills/cleanup-lists/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install TomGranot/hubspot-admin-skills cleanup-lists2Вручную: положить файлы
.github/skills/cleanup-lists/SKILL.md1Через Skills CLI (Vercel)
npx skills add TomGranot/hubspot-admin-skills --skill cleanup-lists -a gemini-cli2Командой платформы
gemini skills install https://github.com/TomGranot/hubspot-admin-skills --path skills/cleanup-listsВручную: положить файлы
.devin/skills/cleanup-lists/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add TomGranot/hubspot-admin-skills --skill cleanup-lists -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Вопросы о cleanup-lists
Как установить cleanup-lists в Claude Code?
Выполните npx skills add TomGranot/hubspot-admin-skills --skill cleanup-lists -a claude-code. Файл скилла появится по пути ~/.claude/skills/cleanup-lists/SKILL.md.
Что делает cleanup-lists?
Он собирает инвентаризацию списков HubSpot, находит возможные дубликаты и неиспользуемые записи, а затем готовит кандидатов на удаление. Перед удалением требуется подтверждение пользователя.
Что нужно для работы cleanup-lists?
Нужен токен HubSpot в HUBSPOT_ACCESS_TOKEN с разрешениями crm.lists.read и crm.lists.write, а также Python 3.10+ и uv. Если Lists API возвращает 403 на вашем тарифе, аудит проводят вручную в интерфейсе.
Исходный текст
SKILL.md · MIT
---
name: cleanup-lists
description: "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."
license: MIT
metadata:
author: tomgranot
version: "1.1"
category: ongoing-maintenance
---
# Cleanup Lists
Audit HubSpot lists to remove clutter. Unused lists slow down the UI, confuse team members, and can mask the lists that actually matter.
## Prerequisites
- A HubSpot service key (`HUBSPOT_ACCESS_TOKEN` in `.env`; an existing legacy private app token also works) with `crm.lists.read` (and `crm.lists.write` for deletion)
- Python 3.10+ with [`uv`](https://github.com/astral-sh/uv)
- Note: Lists API access may return 403 on some plan tiers. If so, perform the audit manually in the UI.
## Step-by-Step Instructions
### Stage 1: Plan
Confirm with the user before starting:
1. Delete outright, or prefix with "[ARCHIVE]" first and delete next quarter?
2. Any lists that must never be touched (suppression lists, compliance segments, active campaign audiences)?
### Stage 2: Before
Inventory all lists via the Lists API (v3):
```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"}
lists, offset = [], 0
while True:
resp = requests.post(f"{BASE}/crm/v3/lists/search", headers=HEADERS,
json={"offset": offset, "count": 100})
resp.raise_for_status()
data = resp.json()
lists.extend(data.get("lists", []))
if not data.get("hasMore"):
break
offset = data.get("offset", offset + 100)
```
For each list, record: list ID, name, processing type (DYNAMIC/MANUAL), member count (`additionalProperties`), created date, last updated date.
Export to CSV for review.
### Stage 3: Execute
Flag lists matching any of these criteria:
1. **Zero members** and created more than 30 days ago
2. **Not referenced** by any workflow, email, or ad audience
3. **Duplicate names** or nearly identical filter criteria
4. **Test/temp lists** (names containing "test", "temp", "copy of", "old")
5. **Static lists** that have not been updated in 6+ months
Cross-reference with workflows and email campaigns before deleting — a list with zero members might still be used as an enrollment trigger.
Present the candidate list to the user and wait for explicit confirmation, then delete via `DELETE /crm/v3/lists/{listId}` or the UI.
### Stage 4: After
1. Re-run the inventory and confirm the deleted lists are gone.
2. Document what was deleted (list name, ID, reason) in a cleanup log.
3. Inform team members if any lists they created were removed.
## Rollback
- HubSpot does not have a list recycle bin. Deleted lists cannot be restored.
- Before deleting, export the list definition (filters/criteria) so it can be recreated if needed.
- Static lists: export member IDs before deletion if the membership data matters.
## Tips
- Run this quarterly as part of the database cleanup routine.
- Establish a naming convention going forward (e.g., prefix with team name or purpose).
- Archive lists by prefixing with "[ARCHIVE]" instead of deleting if you are unsure.
© tomgranot · MIT · TomGranot/hubspot-admin-skills