Clay Hello World

VerifiedCaution

Send your first record to Clay and get enriched data back. Use when starting a new Clay integration, testing webhook setup, or verifying that enrichment columns are working.

Sby Skills Guide Bot
DevelopmentBeginner
7/23/2026
Claude CodeCodex
#clay#webhooks#data-enrichment#api-integration#quickstart

Recommended for

Automated summary

A minimal end-to-end example that pushes records into a Clay table through a webhook and verifies that the enrichment columns return company data.

Strengths

  • Provides copy-paste snippets in curl, Node.js and Python for sending leads
  • Covers both a single record and a loop-based batch send across several domains
  • Ships an error table for common webhook failures (404, 422, missing enrichment) with fixes

Limitations

  • Workbook, webhook source and enrichment column creation stay manual in the Clay UI and are not scripted
  • Does not show how to read enriched data back via API — verification happens in the Clay interface
  • Assumes the clay-install-auth setup is already completed
When to use it

Use it when starting a new Clay integration or quickly checking that a webhook and an enrichment column work end to end.

When not to use it

Avoid it for large-scale production pipelines or for reading enriched results programmatically, since it stops at the first test record.

Security analysis

Caution
Quality score88/100

The skill is benign and clearly scoped to sending test records to a Clay webhook. It does not include destructive commands, obfuscation, credential exfiltration, or safety-disabling instructions. The main risk is expected third-party data transfer and network use, so it warrants caution rather than safe.

Findings
  • •Sends user-supplied lead data (email, name, domain) to an external Clay webhook; users should avoid real PII/secrets unless intended and compliant.
  • •Uses network-capable tools (curl/node) and a configurable webhook URL via CLAY_WEBHOOK_URL; if that variable is compromised, data could be sent to an unintended endpoint.
  • •Bash examples include a hard-coded placeholder webhook URL, which may encourage users to paste real webhook URLs into scripts/files.
How this analysis is made

Examples

First enrichment test
Set up the Clay hello world: POST {"domain": "openai.com"} to my Clay webhook URL and tell me whether the company_name, employee_count and industry columns fill in.
Batch send a few domains
Send stripe.com, notion.so, figma.com and linear.app to my Clay webhook in a loop and report any non-2xx responses.
Node test script
Write a Node.js script that sends a test lead (jane@stripe.com, domain stripe.com) to my Clay webhook and throws a clear error if the request fails.

name: clay-hello-world description: 'Send your first record to Clay and get enriched data back.

Use when starting a new Clay integration, testing webhook setup,

or verifying that enrichment columns are working.

Trigger with phrases like "clay hello world", "clay example",

"clay quick start", "first clay enrichment", "test clay webhook".

' allowed-tools: Read, Write, Edit, Bash(curl:), Bash(node:) version: 1.14.0 license: MIT author: Jeremy Longshore jeremy@intentsolutions.io tags:

  • saas
  • clay
  • api
  • testing compatibility: Designed for Claude Code, also compatible with Codex and OpenClaw

Clay Hello World

Overview

Minimal working example: send a company domain to a Clay table via webhook, let Clay's enrichment columns fill in company data, and retrieve the enriched result. Clay does not have a traditional SDK — you interact with it via webhooks (data in), HTTP API columns (data out), and the web UI.

Prerequisites

  • Completed clay-install-auth setup
  • Clay workbook with a webhook source configured
  • At least one enrichment column added to the table

Instructions

Step 1: Create a Clay Table with Enrichment

In the Clay web UI:

  1. Create a new workbook
  2. Add columns: domain, company_name, employee_count, industry
  3. Click + Add at bottom, select Webhooks > Monitor webhook
  4. Copy the webhook URL
  5. Add an enrichment column: + Add Column > Enrich Company (uses the domain column as input)

Step 2: Send Your First Record via Webhook

# Send a single company domain to your Clay table
curl -X POST "https://app.clay.com/api/v1/webhooks/YOUR_WEBHOOK_ID" \
  -H "Content-Type: application/json" \
  -d '{"domain": "openai.com"}'

Within seconds, Clay creates a new row and auto-runs the enrichment column. The company_name, employee_count, and industry columns fill in automatically.

Step 3: Send Multiple Records

# Batch send — each object becomes a row
for domain in stripe.com notion.so figma.com linear.app; do
  curl -s -X POST "https://app.clay.com/api/v1/webhooks/YOUR_WEBHOOK_ID" \
    -H "Content-Type: application/json" \
    -d "{\"domain\": \"$domain\"}"
  echo " -> Sent $domain"
done

Step 4: Send from Node.js

// hello-clay.ts — send records to Clay via webhook
const CLAY_WEBHOOK_URL = process.env.CLAY_WEBHOOK_URL!;

interface LeadInput {
  email?: string;
  domain?: string;
  first_name?: string;
  last_name?: string;
  linkedin_url?: string;
}

async function sendToClay(lead: LeadInput): Promise<Response> {
  const response = await fetch(CLAY_WEBHOOK_URL, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify(lead),
  });

  if (!response.ok) {
    throw new Error(`Clay webhook failed: ${response.status} ${response.statusText}`);
  }
  return response;
}

// Send a test lead
await sendToClay({
  email: 'jane@stripe.com',
  first_name: 'Jane',
  last_name: 'Doe',
  domain: 'stripe.com',
});
console.log('Record sent to Clay — check your table for enriched data.');

Step 5: Send from Python

import requests
import os

CLAY_WEBHOOK_URL = os.environ["CLAY_WEBHOOK_URL"]

def send_to_clay(lead: dict) -> requests.Response:
    """Send a lead record to a Clay table via webhook."""
    response = requests.post(
        CLAY_WEBHOOK_URL,
        json=lead,
        headers={"Content-Type": "application/json"},
    )
    response.raise_for_status()
    return response

# Test it
send_to_clay({
    "email": "jane@stripe.com",
    "first_name": "Jane",
    "last_name": "Doe",
    "domain": "stripe.com",
})
print("Record sent to Clay — check your table for enriched data.")

Error Handling

| Error | Cause | Solution | |-------|-------|----------| | 404 Not Found | Invalid webhook URL | Re-copy URL from Clay table settings | | 422 Unprocessable | Invalid JSON payload | Validate JSON structure before sending | | Row appears but no enrichment | Enrichment column not configured | Add enrichment column in Clay UI, enable auto-run | | 429 Too Many Requests | Exceeded webhook rate limit | Add 100ms delay between requests | | Webhook limit reached (50K) | Webhook exhausted | Create a new webhook source on the table |

Output

  • New row(s) visible in your Clay table
  • Enrichment columns auto-populated with company/person data
  • Console confirmation of successful webhook delivery

Resources

Next Steps

Proceed to clay-local-dev-loop for iterating on enrichment workflows locally.

From the file to a first result

The download contains exactly the content displayed on this page. This copy may differ from the latest version in the source repository.

View the source and supporting files

This download contains SKILL.md only. Any scripts, references, templates and dependencies are not included. Get the required files from the source, preserving their directory structure, before continuing.

1. Download the file

Download SKILL.md

From the root of a test project, save the file as .skill-downloads/clay-hello-world-mrx3xzb1/SKILL.md, or use the command below. This folder is for inspecting the skill before installation.

Command for macOS/Linux or WSL: requires a POSIX shell and curl. On Windows without WSL, use the download button and create the folder manually.

mkdir -p '.skill-downloads/clay-hello-world-mrx3xzb1' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/clay-hello-world-mrx3xzb1/download' --output '.skill-downloads/clay-hello-world-mrx3xzb1/SKILL.md.part' && mv '.skill-downloads/clay-hello-world-mrx3xzb1/SKILL.md.part' '.skill-downloads/clay-hello-world-mrx3xzb1/SKILL.md'

2. Check prerequisites

Read SKILL.md before using it. If it references scripts or external services, inspect them and prepare the required access in your test environment.

Environment declared by the author: Designed for Claude Code, also compatible with Codex and OpenClaw

Tools declared by the author (check availability in your agent): Read, Write, Edit, Bash(curl:*), Bash(node:*)

Original excerpt: Prerequisites
  • Completed clay-install-auth setup
  • Clay workbook with a webhook source configured
  • At least one enrichment column added to the table

The platforms on this page are catalog indications. The paths below follow tool documentation; they do not prove this skill has been run in those tools. No minimum tool version is confirmed for this listing.

3. Load the skill

After inspection, copy the complete folder into your project using one of the commands below, then open a new tool session. The command stops if a folder with the same name already exists: compare the files before replacing it.

Claude Code
test -f '.skill-downloads/clay-hello-world-mrx3xzb1/SKILL.md' && test -s '.skill-downloads/clay-hello-world-mrx3xzb1/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/clay-hello-world' && cp -R '.skill-downloads/clay-hello-world-mrx3xzb1' '.claude/skills/clay-hello-world'

Codex
test -f '.skill-downloads/clay-hello-world-mrx3xzb1/SKILL.md' && test -s '.skill-downloads/clay-hello-world-mrx3xzb1/SKILL.md' && mkdir -p '.agents/skills' && test ! -e '.agents/skills/clay-hello-world' && cp -R '.skill-downloads/clay-hello-world-mrx3xzb1' '.agents/skills/clay-hello-world'

OpenSkills

OpenSkills must already be installed. The local install/read procedure is checked with OpenSkills 1.5.0, which requires Node.js ≥ 20.6.0. Catalog slugs are not resolved automatically.

Official OpenSkills installation
openskills install './.skill-downloads/clay-hello-world-mrx3xzb1'

openskills read 'clay-hello-world-mrx3xzb1'

Reading should display the installed file content and its base directory. It does not run the skill or install its dependencies.

For an agent that reads AGENTS.md, then sync the index. This command changes AGENTS.md: review the diff before using it.

openskills sync

Manual method or another tool: attach SKILL.md to a conversation, or open it in an agent that can read files. Include any required supporting resources. No universal folder is recognized by every tool.

4. Try a first task

Use a short, synthetic input: an API endpoint, a small document or an interface brief. In a new conversation, attach the file or give the agent its path, then adapt this request:

Read .skill-downloads/clay-hello-world-mrx3xzb1/SKILL.md and apply its instructions to this example: [describe a test input]. Identify any missing files, dependencies or access. Produce the result requested by the skill without inventing data or running unreviewed scripts.

Expected result: output matching the skill instructions, or a precise list of missing prerequisites. A read confirmation alone does not validate a first use. If an external resource is unavailable, that path remains untested.

Related skills