From gtm-skills
Validates email addresses in a contact CSV using a verification provider API, removes invalid/do_not_mail/abuse/unknown ones, and outputs a cleaned CSV for campaign sending.
npx claudepluginhub extruct-ai/gtm-skills --plugin gtm-skillsThis skill uses the workspace's default tool permissions.
Validate emails before sending. Sits between `email-generation` and `campaign-sending`:
Uploads finalized email CSVs to sequencing providers, mapping fields to lead schema, creating/finding campaigns, deduping leads, and providing pre-send checklists.
Verifies cold emails and guesses addresses from CSV leads (first name, last name, company) using Clearbit domains and ValidEmail.co or Reacher validation.
Manages Instantly.ai v2 leads: CRUD ops, list creation/deletion, bulk imports with validation, block lists, unsubscribes, GDPR/CAN-SPAM compliance.
Share bugs, ideas, or general feedback.
Validate emails before sending. Sits between email-generation and campaign-sending:
email-generation → email-verification → campaign-sending
Provider selection and credentials are handled in Step 0 of the workflow.
| Input | Required | Source |
|---|---|---|
| Contact CSV with email column | yes | From email-generation output or any CSV |
| Sequencer campaign IDs | no | From campaign-sending — only if cleaning uploaded leads |
email, Email, email_address){N} unique emails to validate, {M} rows without email skippedFor each unique email, call the provider's validation endpoint:
{email: {status, sub_status}}unknownGroup results by the provider's status values. Use the status mapping identified in Step 0 to determine which emails to keep and which to remove.
General guidance (confirm against provider docs):
| Action | Typical statuses |
|---|---|
| Keep | valid, catch-all (flag in report) |
| Remove | invalid, do_not_mail, abuse, unknown, spamtrap |
Present summary table with counts per status, then list all emails to remove with their status and sub_status.
{original_name}_verified.csv{original_name}_verification_results.json for reference{kept} emails kept, {removed} removed, {catch_all} catch-all (flagged)If the user provides sequencer campaign IDs:
skills/campaign-sending/references/{N} leads removed from sequencerIf no campaigns are provided, skip this step and note that the user should remove bad emails manually or re-upload with the cleaned CSV.
| File | Contents |
|---|---|
*_verified.csv | Cleaned CSV with only valid emails |
*_verification_results.json | Full validation results for all emails |
| Console report | Summary table + list of removed emails |
Provider API docs are fetched or read during Step 0. No pre-configured provider docs are bundled — add them to references/ as needed.