Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Execute production readiness checklist for Clay integrations. Use when launching Clay-powered enrichment pipelines, preparing for go-live, or auditing production Clay configurations. Trigger with phrases like "clay production", "clay go-live", "clay launch checklist", "clay production readiness", "deploy clay pipeline".
.claude/skills/jeremylongshore-clay-prod-checklist/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 43% | 0% |
| case-06 | ✗→✓ | ▲ Improved | -2% | 0% |
| case-07 | ✗→✓ | ▲ Improved | -1% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 120% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 39% | 0% |
Complete checklist for launching Clay enrichment pipelines in production. Covers table configuration, credit budgeting, webhook reliability, CRM sync validation, and monitoring setup.
typescript// Pre-submission validation (run before pushing to Clay) function validateForProduction(rows: any[]): { valid: any[]; rejected: any[] } { const personalDomains = ['gmail.com', 'yahoo.com', 'hotmail.com', 'outlook.com', 'icloud.com']; const seen = new Set<string>(); const valid: any[] = []; const rejected: any[] = []; for (const row of rows) { const key = `${row.domain}:${row.first_name}:${row.last_name}`.toLowerCase(); if (!row.domain?.includes('.')) rejected.push({ row, reason: 'invalid domain' }); else if (personalDomains.some(d => row.domain.endsWith(d))) rejected.push({ row, reason: 'personal email domain' }); else if (seen.has(key)) rejected.push({ row, reason: 'duplicate' }); else { seen.add(key); valid.push(row); } } console.log(`Validation: ${valid.length} valid, ${rejected.length} rejected (${(rejected.length / rows.length * 100).toFixed(1)}% filtered)`); return { valid, rejected }; }
| Plan | Monthly Credits | Actions | HTTP API | Webhook Limit | |------|----------------|---------|----------|---------------| | Launch | 2,500 | 15,000 | No | 50K/webhook | | Growth | 6,000 | 40,000 | Yes | 50K/webhook | | Enterprise | Custom | Custom | Yes | 50K/webhook |
bash# Pre-flight connectivity checks echo "=== Clay Production Pre-flight ===" # 1. Webhook reachable curl -s -o /dev/null -w "Webhook: HTTP %{http_code}\n" \ -X POST "$CLAY_WEBHOOK_URL" \ -H "Content-Type: application/json" \ -d '{"_preflight": true}' # 2. Enterprise API (if applicable) if [ -n "${CLAY_API_KEY:-}" ]; then curl -s -o /dev/null -w "Enterprise API: HTTP %{http_code}\n" \ -X POST "https://api.clay.com/v1/people/enrich" \ -H "Authorization: Bearer $CLAY_API_KEY" \ -H "Content-Type: application/json" \ -d '{"email": "test@example.com"}' fi # 3. Callback endpoint reachable curl -s -o /dev/null -w "Callback endpoint: HTTP %{http_code}\n" \ "https://your-app.com/api/health"
| Alert | Condition | Action | |-------|-----------|--------| | Credit balance low | < 500 credits remaining | Pause enrichments, add credits or connect own keys | | Email find rate drop | < 40% for 2+ hours | Check input data quality, review provider status | | Webhook 429s | > 5 per hour | Reduce submission rate, check plan limits | | CRM sync failures | > 10 per batch | Check CRM field mapping, verify API key |
For version upgrades, see clay-upgrade-migration.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-02 | fail→fail | 22,859 | 13,296 | -42% | 1 | 1 | 0% | 4,423 | 4,386 | -1% | 0 | 0 | — |
case-03 | fail→fail | 39,735 | 18,082 | -54% | 1 | 1 | 0% | 3,866 | 5,049 | +31% | 0 | 0 | — |
case-04 | pass→pass | 13,162 | 9,334 | -29% | 1 | 1 | 0% | 2,049 | 2,985 | +46% | 0 | 0 | — |
case-01 | fail→pass | 21,224 | 18,605 | -12% | 1 | 1 | 0% | 3,486 | 4,985 | +43% | 0 | 0 | — |
case-15 | pass→pass | 16,163 | 11,599 | -28% | 1 | 1 | 0% | 2,454 | 3,584 | +46% | 0 | 0 | — |
case-05 | pass→pass | 25,297 | 5,393 | -79% | 1 | 1 | 0% | 2,300 | 2,471 | +7% | 0 | 0 | — |
case-06 | fail→pass | 18,429 | 4,029 | -78% | 1 | 1 | 0% | 2,252 | 2,213 | -2% | 0 | 0 | — |
case-07 | fail→pass | 14,090 | 2,733 | -81% | 1 | 1 | 0% | 2,063 | 2,037 | -1% | 0 | 0 | — |
case-08 | fail→pass | 23,593 | 3,719 | -84% | 1 | 1 | 0% | 963 | 2,117 | +120% | 0 | 0 | — |
case-09 | pass→pass | 30,897 | 8,936 | -71% | 1 | 1 | 0% | 2,778 | 3,277 | +18% | 0 | 0 | — |
case-10 | fail→pass | 16,822 | 15,014 | -11% | 1 | 1 | 0% | 2,996 | 4,162 | +39% | 0 | 0 | — |
case-11 | fail→fail | 16,240 | 10,093 | -38% | 1 | 1 | 0% | 2,632 | 3,247 | +23% | 0 | 0 | — |
case-12 | fail→pass | 9,636 | 2,771 | -71% | 1 | 1 | 0% | 1,584 | 2,082 | +31% | 0 | 0 | — |
case-13 | fail→pass | 13,167 | 4,344 | -67% | 1 | 1 | 0% | 2,158 | 2,401 | +11% | 0 | 0 | — |
case-14 | fail→pass | 14,983 | 2,463 | -84% | 1 | 1 | 0% | 2,369 | 1,919 | -19% | 0 | 0 | — |
case-16 | fail→pass | 10,328 | 3,611 | -65% | 1 | 1 | 0% | 2,021 | 2,291 | +13% | 0 | 0 | — |
case-17 | fail→pass | 16,091 | 2,247 | -86% | 1 | 1 | 0% | 2,991 | 2,008 | -33% | 0 | 0 | — |
case-18 | fail→pass | 16,255 | 13,952 | -14% | 1 | 1 | 0% | 2,629 | 3,925 | +49% | 0 | 0 | — |
case-19 | fail→pass | 14,569 | 3,386 | -77% | 1 | 1 | 0% | 2,068 | 2,110 | +2% | 0 | 0 | — |
case-20 | pass→pass | 16,984 | 16,643 | -2% | 1 | 1 | 0% | 2,104 | 4,424 | +110% | 0 | 0 | — |
case-21 | pass→pass | 13,648 | 14,116 | +3% | 1 | 1 | 0% | 2,271 | 4,287 | +89% | 0 | 0 | — |
case-22 | pass→pass | 15,237 | 12,969 | -15% | 1 | 1 | 0% | 2,494 | 3,648 | +46% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 21 counted toward the lift figure. The other 1 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +55 percentage points is the difference between those two pass rates over the 21 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.