import { getClayClient } from '../clay/instance';
interface LeadInput {
domain: string;
first_name: string;
last_name: string;
source?: string;
}
async function enrichLeadList(leads: LeadInput[]): Promise<void> {
const clay = getClayClient();
const cleaned = leads
.filter(l => l.domain?.includes('.') && l.first_name && l.last_name)
.filter((l, i, arr) =>
arr.findIndex(x => x.domain === l.domain && x.first_name === l.first_name) === i
);
console.log(`Sending ${cleaned.length} leads to Clay (filtered ${leads.length - cleaned.length} invalid/dupes)`);
const result = await clay.sendBatch(cleaned, 200);
console.log(`Sent: ${result.sent}, Failed: ${result.failed}`);
if (result.errors.length > 0) {
console.error('Failed rows:', result.errors);
}
}
// Clay formula syntax (similar to spreadsheet formulas)
// Score 0-100 based on company fit
LET(
size_score, IF(Employee Count > 500, 30, IF(Employee Count > 100, 20, IF(Employee Count > 20, 10, 0))),
industry_score, IF(OR(Industry = "Software", Industry = "Technology", Industry = "SaaS"), 30, IF(Industry = "Financial Services", 20, 10)),
title_score, IF(OR(CONTAINS(Job Title, "VP"), CONTAINS(Job Title, "Director"), CONTAINS(Job Title, "Head")), 25, IF(CONTAINS(Job Title, "Manager"), 15, 5)),
email_score, IF(ISNOTEMPTY(Work Email), 15, 0),
size_score + industry_score + title_score + email_score
)
{
"method": "POST",
"url": "https://api.hubapi.com/crm/v3/objects/contacts",
"headers": {
"Authorization": "Bearer {{HubSpot API Key}}",
"Content-Type": "application/json"
},
"body": {
"properties": {
"email": "{{Work Email}}",
"firstname": "{{first_name}}",
"lastname": "{{last_name}}",
"company": "{{Company Name}}",
"jobtitle": "{{Job Title}}"
}
}
}