From clay-pack
Executes production checklist for Clay enrichment pipelines: table config, data validation, credits, CRM sync, monitoring. For launches, go-live prep, audits.
npx claudepluginhub jeremylongshore/claude-code-plugins-plus-skills --plugin clay-packThis skill is limited to using the following tools:
Complete checklist for launching Clay enrichment pipelines in production. Covers table configuration, credit budgeting, webhook reliability, CRM sync validation, and monitoring setup.
Sets up per-environment Clay tables, webhook URLs, and TypeScript configs for dev, staging, and prod isolation in a single Clay workspace.
Guides Next.js Cache Components and Partial Prerendering (PPR): 'use cache' directives, cacheLife(), cacheTag(), revalidateTag() for caching, invalidation, static/dynamic optimization. Auto-activates on cacheComponents: true.
Guides building MCP servers enabling LLMs to interact with external services via tools. Covers best practices, TypeScript/Node (MCP SDK), Python (FastMCP).
Share bugs, ideas, or general feedback.
Complete checklist for launching Clay enrichment pipelines in production. Covers table configuration, credit budgeting, webhook reliability, CRM sync validation, and monitoring setup.
// 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 |
# 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.