review-bounced-contacts — скилл для Claude Code
Еженедельный ручной разбор контактов с 3+ отскоками: удалить или попробовать восстановить. Помогает не переусердствовать с подавлением и убрать мусор.
npx skills add TomGranot/hubspot-admin-skills --skill review-bounced-contacts -a claude-codeЧто делает review-bounced-contacts
Скилл описывает недельный процесс для контактов, помеченных email_health_flag. Автоматический мониторинг отскоков такие адреса уже подавляет, но решение удалить навсегда или попытаться восстановить остаётся за человеком. Скрипт на Python через CRM Search API выгружает помеченные контакты в CSV — с email, именем, компанией, причиной отскока, стадией жизненного цикла и владельцем.
Дальше по каждому контакту проверяют три вещи: жив ли домен (MX-запись), известный ли это клиент, и какой был отскок — жёсткий или мягкий. По таблице решений домен без записей уходит в удаление, а живой домен с мягким отскоком остаётся подавленным до следующей проверки. В конце удалённые контакты чистят через UI или batch delete, флаг email_health_flag снимают со всех просмотренных, а результаты пишут в отчёт за квартал.
Перед запуском нужен активный workflow мониторинга отскоков и свойство email_health_flag на контактах. Для скриптовой выгрузки понадобится ключ HubSpot в HUBSPOT_ACCESS_TOKEN в .env; подойдёт и старый токен приватного приложения. Удалённые контакты лежат в корзине HubSpot 90 дней — восстановить можно, но только в этот срок.
Какие задачи решает
- разобрать контакты с тремя и более отскоками за неделю
- отличить жёсткий отскок от мягкого и не удалить живого клиента
- выгрузить помеченные контакты в CSV для ручной проверки
- снять флаг
email_health_flagпосле разбора - посчитать удалённые и оставленные контакты для квартального отчёта
Примеры запросов агенту
- Выгрузи контакты с
email_health_flagчерез CRM Search API и сохрани в CSV - Проверь домен и историю сделок по каждому помеченному контакту, скажи, что делать — удалять или восстанавливать
- Сними
email_health_flagсо всех просмотренных контактов и посчитай, сколько удалили
Как установить review-bounced-contacts
1Через Skills CLI (Vercel)
npx skills add TomGranot/hubspot-admin-skills --skill review-bounced-contacts -a claude-code2Вручную: положить файлы
~/.claude/skills/review-bounced-contacts/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/review-bounced-contacts/
1Через Skills CLI (Vercel)
npx skills add TomGranot/hubspot-admin-skills --skill review-bounced-contacts -a codex2Вручную: положить файлы
.agents/skills/review-bounced-contacts/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add TomGranot/hubspot-admin-skills --skill review-bounced-contacts -a cursor2Вручную: положить файлы
.cursor/skills/review-bounced-contacts/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install TomGranot/hubspot-admin-skills review-bounced-contacts2Вручную: положить файлы
.github/skills/review-bounced-contacts/SKILL.md1Через Skills CLI (Vercel)
npx skills add TomGranot/hubspot-admin-skills --skill review-bounced-contacts -a gemini-cli2Командой платформы
gemini skills install https://github.com/TomGranot/hubspot-admin-skills --path skills/review-bounced-contactsВручную: положить файлы
.devin/skills/review-bounced-contacts/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add TomGranot/hubspot-admin-skills --skill review-bounced-contacts -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Вопросы о review-bounced-contacts
Как установить review-bounced-contacts в Claude Code?
Выполните npx skills add TomGranot/hubspot-admin-skills --skill review-bounced-contacts -a claude-code. Скилл появится в ~/.claude/skills/review-bounced-contacts/SKILL.md.
Что делает review-bounced-contacts?
Описывает недельный разбор контактов с 3+ отскоками: выгрузка через CRM Search API, проверка домена и типа отскока, решение удалить или восстановить, снятие флага и логирование.
Что нужно для работы скилла?
Активный workflow мониторинга отскоков, свойство email_health_flag на контактах и ключ HubSpot в HUBSPOT_ACCESS_TOKEN в .env для скриптовой выгрузки.
Исходный текст
SKILL.md · MIT
---
name: review-bounced-contacts
description: "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."
license: MIT
metadata:
author: tomgranot
version: "1.1"
category: ongoing-maintenance
---
# Review Bounced Contacts
A weekly manual review process for contacts flagged with 3+ bounces. The bounce monitoring workflow auto-suppresses these contacts, but a human should decide whether to permanently delete or attempt recovery.
## Prerequisites
- Bounce monitoring workflow active (run `/bounce-monitoring-workflow` first)
- `email_health_flag` custom property exists on contacts
- A HubSpot service key (`HUBSPOT_ACCESS_TOKEN` in `.env`; an existing legacy private app token also works) for scripted pre-filtering
## Step-by-Step Instructions
### Stage 1: Before
Use the CRM Search API to pull contacts where `email_health_flag` is set:
```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"}
resp = requests.post(f"{BASE}/crm/v3/objects/contacts/search", headers=HEADERS, json={
"filterGroups": [{"filters": [
{"propertyName": "email_health_flag", "operator": "EQ", "value": "true"},
]}],
"properties": ["email", "firstname", "lastname", "company",
"hs_email_bounce", "hs_email_hard_bounce_reason_enum",
"lifecyclestage", "hubspot_owner_id"],
"limit": 100,
})
resp.raise_for_status()
results = resp.json()["results"]
```
Export results to a CSV for review.
### Stage 2: Execute — Review Each Contact
For each flagged contact, check:
1. **Is the email domain active?** Run a quick MX record lookup or visit the domain.
2. **Is this a known customer or high-value contact?** Check lifecycle stage and deal history.
3. **What is the bounce reason?** Hard bounce (invalid mailbox) vs. soft bounce (mailbox full, temporary error).
**Decision matrix:**
| Domain active? | High value? | Bounce type | Action |
|---------------|-------------|-------------|--------|
| No | Any | Any | Delete |
| Yes | No | Hard | Delete |
| Yes | No | Soft | Keep suppressed, recheck next quarter |
| Yes | Yes | Hard | Attempt to find updated email |
| Yes | Yes | Soft | Keep suppressed, monitor |
### Stage 3: After — Apply Decisions and Log
1. **Delete** contacts marked for deletion via the HubSpot UI or API batch delete.
2. **Clear** the `email_health_flag` on all reviewed contacts.
3. Log the review results (deleted count, kept count, recovery attempts) for the quarterly report.
## Rollback
- Deleted contacts can be restored from HubSpot's recycling bin within 90 days.
- Contacts kept as suppressed can be restored to marketing status via a workflow or manual update in the UI.
## MCP Note
This weekly triage is exactly the interactive, judgment-heavy work HubSpot's MCP server is good at (see `/connect-hubspot-mcp`): ask Claude to pull each flagged contact's details, deal history, and bounce reason conversationally while you decide delete-vs-recover.
## Frequency
Run weekly, ideally Monday morning. Should take 5-15 minutes depending on volume. If volume exceeds 50 contacts per week, investigate the root cause (bad list source, form spam, etc.).
© tomgranot · MIT · TomGranot/hubspot-admin-skills