clay-known-pitfalls

Identify and avoid the top Clay anti-patterns, gotchas, and integration mistakes. Use when reviewing Clay integrations for issues, onboarding new team members, or auditing existing Clay table configurations. Trigger with phrases like "clay mistakes", "clay anti-patterns", "clay pitfalls", "clay what not to do", "clay gotchas", "clay code review".

1,868 stars

Best use case

clay-known-pitfalls is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Identify and avoid the top Clay anti-patterns, gotchas, and integration mistakes. Use when reviewing Clay integrations for issues, onboarding new team members, or auditing existing Clay table configurations. Trigger with phrases like "clay mistakes", "clay anti-patterns", "clay pitfalls", "clay what not to do", "clay gotchas", "clay code review".

Teams using clay-known-pitfalls should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/clay-known-pitfalls/SKILL.md --create-dirs "https://raw.githubusercontent.com/jeremylongshore/claude-code-plugins-plus-skills/main/plugins/saas-packs/clay-pack/skills/clay-known-pitfalls/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/clay-known-pitfalls/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How clay-known-pitfalls Compares

Feature / Agentclay-known-pitfallsStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Identify and avoid the top Clay anti-patterns, gotchas, and integration mistakes. Use when reviewing Clay integrations for issues, onboarding new team members, or auditing existing Clay table configurations. Trigger with phrases like "clay mistakes", "clay anti-patterns", "clay pitfalls", "clay what not to do", "clay gotchas", "clay code review".

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

Related Guides

SKILL.md Source

# Clay Known Pitfalls

## Overview

Real gotchas when using Clay's data enrichment platform. These are the mistakes that cost credits, waste time, or break integrations -- learned from production experience. Each pitfall includes the exact symptom, root cause, and fix.

## Prerequisites

- Active Clay account with tables configured
- Understanding of Clay's credit and enrichment model
- Experience with at least one Clay enrichment workflow

## Instructions

### Pitfall 1: Webhook 50K Limit Surprise

**Symptom:** Webhook silently stops accepting new data. No error, no notification. New rows simply don't appear.

**Root cause:** Each Clay webhook has a hard 50,000 submission lifetime limit. This limit persists even after deleting rows from the table.

**Fix:**
- Monitor webhook submission count in your application
- Create a new webhook on the same table when approaching 45K
- Use the `WebhookRotator` pattern from `clay-load-scale`
- Set up an alert at 40K submissions

---

### Pitfall 2: Waterfall Burns Credits Without "Stop on First Result"

**Symptom:** Credits consumed at 3-5x the expected rate on waterfall enrichment columns.

**Root cause:** By default, waterfall enrichment may query ALL providers even after the first one finds data. You must explicitly enable "stop on first result."

**Fix:** In each waterfall column's settings, ensure the stop condition is configured. Without it, a 5-provider email waterfall costs 10-15 credits per row instead of 2-3.

---

### Pitfall 3: Personal Email Domains Waste Credits

**Symptom:** Company enrichment returns empty for 30-50% of rows.

**Root cause:** Rows contain gmail.com, yahoo.com, hotmail.com domains. Clay's company enrichment can't match personal email domains to companies.

**Fix:**
```typescript
const PERSONAL_DOMAINS = new Set([
  'gmail.com', 'yahoo.com', 'hotmail.com', 'outlook.com',
  'icloud.com', 'aol.com', 'protonmail.com', 'mail.com',
]);

function filterBeforeEnrichment(rows: any[]) {
  return rows.filter(r => {
    const domain = r.domain?.toLowerCase();
    if (PERSONAL_DOMAINS.has(domain)) {
      console.log(`Filtered: ${domain} (personal email domain)`);
      return false;
    }
    return true;
  });
}
// Apply BEFORE sending to Clay. Typical savings: 20-40% of credits.
```

---

### Pitfall 4: Auto-Update Re-Enriches Entire Table

**Symptom:** Thousands of credits consumed overnight. Enrichment columns re-ran on rows that were already enriched.

**Root cause:** Table-level auto-update was ON, and a column edit or provider reconnection triggered re-enrichment of all existing rows.

**Fix:**
- Turn off table-level auto-update before editing column configuration
- Use conditional run rules: `ISEMPTY(Work Email)` to skip already-enriched rows
- Only enable auto-update for tables with active webhook inflow

---

### Pitfall 5: CSV Header Case Sensitivity

**Symptom:** Imported CSV data appears in wrong columns or creates new columns instead of mapping to existing ones.

**Root cause:** Clay maps CSV columns by exact header name. "Company Name" does not match "company_name" or "company name."

**Fix:**
```typescript
// Normalize CSV headers before import
function normalizeCSVHeaders(headers: string[]): string[] {
  return headers.map(h => h.trim()); // Only trim whitespace
  // Do NOT lowercase or change case — match the exact Clay column name
}

// Better: rename your Clay columns to match your CSV format
// Or: use Clay's column mapping UI during CSV import to manually map
```

---

### Pitfall 6: Reading Data Immediately After Webhook Write

**Symptom:** Checking the table via API or UI shows the row but enrichment columns are empty.

**Root cause:** Enrichment runs asynchronously after the row is created. Depending on provider speed and table queue, enrichment can take 5-60 seconds.

**Fix:** Use HTTP API columns to push enriched data back to your application rather than polling. If you must poll, wait at least 30 seconds and check for populated enrichment columns before reading.

---

### Pitfall 7: Claygent Prompts That Are Too Vague

**Symptom:** Claygent returns "Could not find information" or generic/wrong data.

**Root cause:** Prompt says "Research this company" instead of specific, directed questions.

**Bad prompt:** "Research {{Company Name}}"
**Good prompt:** "Go to {{domain}}/about and find the CEO's name. Then check {{domain}}/pricing for the starting price. Return: CEO Name, Starting Price."

**Fix:**
- Be specific about what page to check
- Ask for specific data points, not general research
- Add fallback instructions: "If not on website, check LinkedIn"
- Use Navigator mode for JavaScript-heavy sites

---

### Pitfall 8: Not Connecting Your Own API Keys

**Symptom:** Monthly Clay bill much higher than expected. Credits consumed at 2-13 per enrichment.

**Root cause:** Using Clay's managed provider accounts instead of your own API keys. Every provider lookup costs Clay credits when using managed accounts.

**Fix:** Go to **Settings > Connections** and add your own API keys for Apollo, Clearbit, Hunter, etc. Result: 0 Clay data credits consumed per enrichment (only 1 Action consumed).

**Savings comparison for 10K enrichments/month:**

| Setup | Credits Used | Approximate Cost Impact |
|-------|-------------|----------------------|
| All managed | ~60K credits | Full credit consumption |
| Own API keys | 0 data credits + 10K actions | 70-80% savings |

---

### Pitfall 9: No Conditional Run on Expensive Columns

**Symptom:** Claygent and AI columns run on every row including low-quality leads, burning expensive credits.

**Root cause:** Claygent and AI columns are set to auto-run on all new rows without qualification criteria.

**Fix:** Add "Only run if" conditions:
- Claygent: `ICP Score >= 60 AND ISNOTEMPTY(Company Name)`
- AI personalization: `ICP Score >= 70 AND ISNOTEMPTY(Work Email)`
- Phone lookup: `ICP Score >= 80 AND ISNOTEMPTY(Work Email)`

This ensures expensive operations only run on qualified prospects.

---

### Pitfall 10: Formula Column References Break on Rename

**Symptom:** Formula column shows `#ERROR` or `#REF` after renaming another column.

**Root cause:** Clay formulas reference columns by display name (case-sensitive). Renaming a referenced column breaks the formula.

**Fix:** After renaming any column, review all formula columns and update their references. Consider establishing a column naming convention and documenting it so names don't change unexpectedly.

## Quick Reference Anti-Pattern Checklist

| Anti-Pattern | Cost Impact | Fix Difficulty |
|-------------|-------------|----------------|
| No "stop on first result" | 3-5x credit waste | Easy (toggle) |
| Personal domains not filtered | 20-40% credit waste | Easy (pre-filter) |
| No own API keys | 70-80% higher cost | Easy (paste keys) |
| Auto-update re-enrichment | Thousands of credits | Medium (conditions) |
| Vague Claygent prompts | Low hit rate, wasted credits | Medium (rewrite) |
| No conditional run rules | Expensive columns run on all | Easy (add conditions) |
| Webhook 50K limit hit | Data loss | Medium (rotation) |

## Resources

- [Clay University -- Table Management Settings](https://university.clay.com/docs/table-management-settings)
- [Clay University -- Actions & Data Credits](https://university.clay.com/docs/actions-data-credits)
- [Clay Community](https://community.clay.com)

## Next Steps

For comprehensive debugging when things go wrong, see `clay-advanced-troubleshooting`.

Related Skills

windsurf-known-pitfalls

1868
from jeremylongshore/claude-code-plugins-plus-skills

Identify and avoid Windsurf anti-patterns and common mistakes. Use when onboarding new developers to Windsurf, reviewing AI workflow practices, or auditing Windsurf configuration for issues. Trigger with phrases like "windsurf mistakes", "windsurf anti-patterns", "windsurf pitfalls", "windsurf what not to do", "windsurf gotchas".

vercel-known-pitfalls

1868
from jeremylongshore/claude-code-plugins-plus-skills

Identify and avoid Vercel anti-patterns and common integration mistakes. Use when reviewing Vercel code for issues, onboarding new developers, or auditing existing Vercel deployments for best practice violations. Trigger with phrases like "vercel mistakes", "vercel anti-patterns", "vercel pitfalls", "vercel what not to do", "vercel code review".

supabase-known-pitfalls

1868
from jeremylongshore/claude-code-plugins-plus-skills

Avoid and fix the most common Supabase mistakes: exposing service_role key in client bundles, forgetting to enable RLS, not using connection pooling in serverless, .single() throwing on empty results, missing .select() after insert/update, not destructuring { data, error }, creating multiple client instances, and not using generated types. Use when reviewing Supabase code, onboarding developers, auditing an existing project, or debugging unexpected behavior. Trigger with phrases like "supabase mistakes", "supabase anti-patterns", "supabase pitfalls", "supabase code review", "supabase gotchas", "supabase debugging", "what not to do supabase", "supabase common errors".

snowflake-known-pitfalls

1868
from jeremylongshore/claude-code-plugins-plus-skills

Identify and avoid Snowflake anti-patterns and common mistakes in SQL, warehouse management, data loading, and access control. Use when reviewing Snowflake configurations, onboarding new users, or auditing existing Snowflake deployments for best practices. Trigger with phrases like "snowflake mistakes", "snowflake anti-patterns", "snowflake pitfalls", "snowflake what not to do", "snowflake code review".

shopify-known-pitfalls

1868
from jeremylongshore/claude-code-plugins-plus-skills

Identify and avoid Shopify API anti-patterns: ignoring userErrors, wrong API version, REST instead of GraphQL, missing GDPR webhooks, and webhook timeout issues. Trigger with phrases like "shopify mistakes", "shopify anti-patterns", "shopify pitfalls", "shopify what not to do", "shopify code review".

sentry-known-pitfalls

1868
from jeremylongshore/claude-code-plugins-plus-skills

Identify and fix common Sentry SDK pitfalls that cause silent data loss, cost overruns, and missed alerts. Covers 10 anti-patterns with fix code. Use when auditing Sentry config, debugging missing events, or reviewing SDK setup. Trigger: "sentry pitfalls", "sentry anti-patterns", "sentry mistakes", "why are sentry events missing".

salesforce-known-pitfalls

1868
from jeremylongshore/claude-code-plugins-plus-skills

Identify and avoid Salesforce anti-patterns including SOQL N+1, governor limit violations, and API waste. Use when reviewing Salesforce code for issues, onboarding new developers, or auditing existing Salesforce integrations for best practices violations. Trigger with phrases like "salesforce mistakes", "salesforce anti-patterns", "salesforce pitfalls", "salesforce what not to do", "salesforce code review".

retellai-known-pitfalls

1868
from jeremylongshore/claude-code-plugins-plus-skills

Retell AI known pitfalls — AI voice agent and phone call automation. Use when working with Retell AI for voice agents, phone calls, or telephony. Trigger with phrases like "retell known pitfalls", "retellai-known-pitfalls", "voice agent".

replit-known-pitfalls

1868
from jeremylongshore/claude-code-plugins-plus-skills

Avoid the top Replit anti-patterns: ephemeral filesystem, public secrets, port binding, Nix gotchas, and database limits. Use when reviewing Replit code, onboarding developers, or auditing existing Replit apps for common mistakes. Trigger with phrases like "replit mistakes", "replit anti-patterns", "replit pitfalls", "replit what not to do", "replit code review".

perplexity-known-pitfalls

1868
from jeremylongshore/claude-code-plugins-plus-skills

Identify and avoid Perplexity anti-patterns and common integration mistakes. Use when reviewing Perplexity code, onboarding new developers, or auditing existing integrations for best practices violations. Trigger with phrases like "perplexity mistakes", "perplexity anti-patterns", "perplexity pitfalls", "perplexity code review", "perplexity gotchas".

openrouter-known-pitfalls

1868
from jeremylongshore/claude-code-plugins-plus-skills

Avoid common OpenRouter integration mistakes and gotchas. Use proactively when starting a new integration or reviewing existing code. Triggers: 'openrouter pitfalls', 'openrouter gotchas', 'openrouter mistakes', 'openrouter best practices'.

notion-known-pitfalls

1868
from jeremylongshore/claude-code-plugins-plus-skills

Common Notion API mistakes: wrong page ID format (dashes), rich text array structure, block children not returned with page, pagination required for all lists, 3 req/sec shared across endpoints, not sharing pages with integration. Use when debugging or reviewing Notion code. Trigger with phrases like "notion mistakes", "notion pitfalls", "notion common errors", "notion gotchas", "notion debugging".