Systems Lab

Agent skill

gtm-email-list-hygiene

Clean an email list before a campaign so it does not bounce.

activeReaches the webInstructions only517 words

Filed under CRM and RevOps.

From loootai/gtm-skills · 15 skill entries · 0 · pushed 2026-10-08

What it does when it runs

Clean an email list before a campaign so it does not bounce. Use when the user says "clean this email list", "verify these 2,000 emails before I send", "remove bad emails from my CSV", "check bounce risk", "email list hygiene" or "dedupe and verify my leads". Dedupes and checks syntax locally for free, drops disposable domains, then verifies each address through looot from $0.00145 each.

Automated analysis of the skill and the 0 files bundled beside it. A skill’s own description is written to be selected by an agent, so it describes the job and not the dependencies.

Keys and connectors you must supply
None found.
Hosts it reaches
  • api.looot.ai
Tool permissions it declares
No allowed-tools in the frontmatter. It only issues instructions, so there is nothing to bound.
Actions present in the files
None. Instructions only.

Ask about gtm-email-list-hygiene

Opens your assistant with this page's verified links already in the prompt.

Is this safe to install?ClaudeChatGPT
Adapt it to my stackClaudeChatGPT
What else do I need for it to workClaudeChatGPT
Rather ask a human? Talk to Cheetah
git clone --depth 1 --filter=blob:none --sparse https://github.com/loootai/gtm-skills.git /tmp/gtm-skills
git -C /tmp/gtm-skills sparse-checkout set "skills/gtm-email-list-hygiene"
mkdir -p ~/.claude/skills/gtm-email-list-hygiene
cp -R "/tmp/gtm-skills/skills/gtm-email-list-hygiene/." ~/.claude/skills/gtm-email-list-hygiene/

Picked up without a restart. A project skill of the same name is shadowed by your personal one. For one repository only, swap ~/.claude/skills for .claude/skills. Claude Code docs ↗

The folder is the same in every client that implements the format — 46 of them — so if yours is not above, only the destination changes.

Reproduced in full from loootai/gtm-skills/blob/1cb22eede6829b8f9fa87a78e6957a97e4032bd5/skills/gtm-email-list-hygiene/SKILL.md, which is licensed MIT (repository). 517 words, 8 headings.

Email list hygiene

A bounce rate above 2 to 3 percent hurts a sending domain. This skill takes a list, removes what can be removed for free (duplicates, bad syntax, role and disposable addresses if the user wants), verifies the rest, and returns the list split into send, review and drop.

Needs looot connected (MCP server https://api.looot.ai/mcp, or the looot skill from npx skills add loootai/looot-skills). Searching and inspecting are free; runs are paid from the prepaid balance.

Ask for these inputs

  • The list: a CSV with an email column (keep every other column as is).
  • Whether to drop role addresses (info@, sales@, support@), default: keep but flag.
  • What to do with catch-all domains, default: put them in review.

Steps and prices

Prices are the cheapest live provider in the public looot catalog on 2026-10-08. inspect shows the live price.

#Job idInputPrice on 2026-10-08
0none, locallowercase, trim, dedupe, syntax check (one @, a dot in the domain, no spaces)free
1people.email.disposable-checkemail (one per domain is enough)$0 per call
2people.email.verifyemailfrom $0.00145 per call
2 (bulk)people.email.verify.batcha list of emailsfrom $0.004 per result; use for 1,000+ rows only after comparing prices

Expected total: 1,000 unique valid-syntax addresses × $0.00145 ≈ $1.45.

Quote before you run

  1. Do step 0 first and report what it removed. Count what is left: that is the number of paid verifications.
  2. Remaining × $0.00145 (or costPerSuccessUsd from search_catalog). Tell the user the total and the balance; wait for a yes. This skill almost always crosses 100 runs, so the yes must be explicit.
  3. Cap each run with fallback.maxCostUsd (0.01).

Run it

run {"endpointId": "job:people.email.verify", "input": {"email": "[email protected]"}, "idempotencyKey": "hyg-<list>[email protected]", "fallback": {"maxAttempts": 2, "maxCostUsd": 0.01}}

Run 5 to 10 at a time. Read normalized when present (status, deliverable), else the provider's result. Map every answer to one of: valid, catch_all, risky, invalid, unknown.

Output format

Three CSVs with the user's original columns plus email_status and reason:

  • send.csv: valid
  • review.csv: catch_all, risky, unknown, role addresses
  • drop.csv: invalid, bad syntax, duplicates, disposable

Summary table:

| Step | Rows | Note |
|---|---|---|
| Input | 2,140 | |
| Duplicates removed | 96 | free |
| Bad syntax | 12 | free |
| Disposable | 18 | free |
| Verified | 2,014 | $2.92 |
| Send | 1,702 | 84.5% |
| Review | 241 | catch-all 198, risky 31, unknown 12 |
| Drop | 71 | invalid |

Cost and stop rules

  • Never verify the same address twice in a session.
  • An unknown answer is not a reason to retry on another provider more than once.
  • Two failures in a row with different addresses: pause and report.

When not to use this skill

  • One address: looot-email-verification in loootai/looot-skills.

Other skills for the same job

Different authors, same problem. Matched on the words in the skill name, across every library in the catalogue except this one.

Need help setting it up?

This page tells you what gtm-email-list-hygiene does and what it needs. Cheetah builds the agent setup it runs inside: data, CRM, sequencing and the guardrails.

Book a call →

The directory stays free. There is nothing gated behind this.