<< All versions
Skill v1.0.0
currentLLM-judged scan90/100bcharleson/clay-gtm-cli/clay-suppression-check
──Details
PublishedOctober 24, 2026 at 01:35 AM
Content Hashsha256:cca0f5ddf080f90a...
Git SHA9bd9d41ad036
──Files
Files (1 file, 4.1 KB)
SKILL.md4.1 KBactive
SKILL.md · 131 lines · 4.1 KB
version: "1.0.0"
clay-suppression-check — Opt-Out and DNC Validation
Check a contact or list against opt-out, unsubscribe, and do-not-contact lists before any outreach. Prevents compliance violations, protects sender reputation, and ensures you never email someone who has asked to be removed. Always run this before adding a lead to a sequence.
install
bash
npm install -g clay-gtm-clibrew install cloudflaredclay tables add \--name suppression-check \--webhook-url https://app.clay.com/webhook/YOUR_WEBHOOK_ID \--description "Suppression/DNC check — validate before any outreach"clay listen start
commands
bash
# Check a single contactclay fire suppression-check \--data '{"email": "john@acme.com"}' \--wait# Check with domain-level suppression (e.g. entire company opted out)clay fire suppression-check \--data '{"email": "john@acme.com","company_domain": "acme.com","linkedin_url": "https://linkedin.com/in/jdoe"}' \--wait# Batch check before a campaign launchcat campaign_leads.json | jq -c '.[] | {email: .email, company_domain: .domain}' \| while read lead; doclay fire suppression-check --data "$lead" --wait \| jq 'select(.data.suppressed == true) | {email: .data.email, reason: .data.suppression_reason}'done
output
json
{"success": true,"table": "suppression-check","data": {"email": "john@acme.com","suppressed": false,"domain_suppressed": false,"checks_run": [{"list": "internal_unsubscribe", "result": "clear"},{"list": "global_opt_out", "result": "clear"},{"list": "competitor_employees", "result": "clear"},{"list": "existing_customers", "result": "clear"},{"list": "open_opportunities", "result": "clear"}],"safe_to_contact": true,"suppression_reason": null}}
Suppression reasons (when suppressed: true):
unsubscribed— Explicitly opted outhard_bounced— Email previously hard-bouncedcompetitor_employee— Works at a competitorexisting_customer— Already a customeropen_opportunity— Active deal in pipeline — do not cold outreachdomain_suppressed— Entire company domain on DNC listglobal_opt_out— On third-party opt-out registry (e.g. One Unsubscribe)do_not_contact— Manually flagged by a rep
clay table setup
- Trigger: Webhook
- Steps:
- Internal Unsubscribe check (HTTP lookup against your CRM/ESP unsubscribe list)
- Global opt-out registry check
- Competitor domain check (formula: email domain in competitor list)
- Existing customer check (HTTP lookup against CRM)
- Open opportunity check (HTTP lookup against CRM pipeline)
- Manual DNC list check
- Final step: HTTP API → POST to
{{_callback_url}}
common patterns
bash
# Always run before adding to any sequenceEMAIL="john@acme.com"SUPPRESSED=$(clay fire suppression-check \--data "{\"email\":\"$EMAIL\"}" \--wait | jq -r '.data.suppressed')if [ "$SUPPRESSED" = "false" ]; thenecho "Clear to contact: $EMAIL"# Proceed with outbound-prep or sequence enrollmentelseREASON=$(clay fire suppression-check --data "{\"email\":\"$EMAIL\"}" --wait | jq -r '.data.suppression_reason')echo "SUPPRESSED ($REASON): $EMAIL — skip"fi# Pre-campaign validation — flag all suppressed leadscat campaign_list.json | jq -c '.[]' | while read lead; doRESULT=$(clay fire suppression-check --data "$lead" --wait)SUPPRESSED=$(echo $RESULT | jq -r '.data.suppressed')if [ "$SUPPRESSED" = "true" ]; thenecho $RESULT | jq '{email: .data.email, reason: .data.suppression_reason}'fidone# Get clean count before campaign launchTOTAL=$(wc -l < campaign_list.json)SUPPRESSED_COUNT=$(cat campaign_list.json | jq -c '.[]' | while read lead; doclay fire suppression-check --data "$lead" --wait \| jq 'select(.data.suppressed == true)'done | wc -l)echo "Campaign: $TOTAL total, $SUPPRESSED_COUNT suppressed, $((TOTAL - SUPPRESSED_COUNT)) safe to send"
row limit
bash
clay usage show suppression-checkclay tables reset suppression-check --webhook-url https://app.clay.com/webhook/NEW_ID