Enrichment Configuration
Fine-tune every aspect of the enrichment pipeline. Configure data sources, AI models, confidence thresholds, and processing behavior.
Configuration Options
Pass these options in your enrichment request to customize behavior:
| Option | Type | Default | Description |
|---|---|---|---|
sources | string[] | ["linkedin", "hunter", "perplexity", "tavily"] | Which data sources to query during enrichment |
require_linkedin | boolean | false | Fail enrichment if LinkedIn data is unavailable |
enable_auditor | boolean | true | Enable AI auditor to verify enrichment quality |
min_confidence_to_proceed | number | 0.5 | Minimum confidence score (0-1) to continue enrichment |
auto_proceed | boolean | true | Push enriched data to HubSpot immediately — skip manual approval of draft results |
preflight_only | boolean | false | Only run preflight checks, don't execute enrichment |
enable_hubspot_writeback | boolean | true | Update HubSpot contact and company records with enriched data |
Full Configuration Example
// Full configuration for enrichment request
const result = await abmdev.enrich({
// Input data
email: "[email protected]",
linkedin_url: "linkedin.com/in/janesmith",
// Source configuration
sources: ["linkedin", "hunter", "perplexity"],
require_linkedin: true,
// AI configuration
enable_auditor: true,
models: {
writer: {
provider: "anthropic",
model: "claude-sonnet-4-20250514"
},
auditor: {
provider: "anthropic",
model: "claude-3-5-haiku-20241022"
}
},
// Per-request instructions (optional) — a free-text brief that
// supersedes your standing brief for this one job
instructions: `You are enriching a B2B contact.
Focus on professional background, decision-making authority,
and technology interests. Be concise.`,
// Quality controls
min_confidence_to_proceed: 0.7,
auto_proceed: false, // Review before CRM writeback
// CRM integration
enable_hubspot_writeback: true,
hubspot_contact_id: "12345" // Optional: update specific contact
});AI Model Configuration
ABM.dev uses AI models for two key tasks during enrichment:
Writer Model
Synthesizes evidence from multiple sources into narrative fields like summaries, highlights, and outreach angles.
Auditor Model
Reviews synthesized output for accuracy, consistency, and quality. Catches hallucinations and improves reliability.
Available Models
Claude Sonnet 4
claude-sonnet-4-20250514Fast, high-quality synthesis for generating narrative fields and summaries
Claude Opus 4
claude-opus-4-20250514Highest quality output for complex synthesis tasks
Claude Haiku 3.5
claude-3-5-haiku-20241022Fast, efficient verification and quality checks
Model Selection Guidance
- High volume: Sonnet writer + Haiku auditor (default)
- Premium quality: Opus writer + Sonnet auditor
- Cost optimization: Haiku writer + no auditor
Source Configuration
Control which data sources are queried during enrichment:
// Use only specific sources
const result = await abmdev.enrich({
email: "[email protected]",
sources: ["linkedin", "hunter"] // Skip Perplexity and Tavily
});
// Require LinkedIn (fail if unavailable)
const result = await abmdev.enrich({
email: "[email protected]",
require_linkedin: true // Returns error if LinkedIn fails
});
// Company enrichment with web sources only
const result = await abmdev.enrich({
domain: "acme.com",
entity_type: "company",
sources: ["perplexity", "tavily"] // Skip LinkedIn for companies
});| Source | Best For | Notes |
|---|---|---|
| Person enrichment | Highest accuracy for job titles, history. Requires a connected LinkedIn account. | |
| hunter | Email verification | Email deliverability, domain patterns. Included in all plans. |
| perplexity | Company research | AI-powered research for company intel, news, funding. |
| tavily | Web presence | Web search aggregation, social profiles, press mentions. |
Confidence Thresholds
Use confidence thresholds to control enrichment quality gates:
// Conservative: high confidence required
const result = await abmdev.enrich({
email: "[email protected]",
min_confidence_to_proceed: 0.85, // Only proceed if 85%+ confident
auto_proceed: true // Auto-write to CRM
});
// Review workflow: medium threshold, manual approval
const result = await abmdev.enrich({
email: "[email protected]",
min_confidence_to_proceed: 0.5, // Accept moderate confidence
auto_proceed: false // Require manual review
});
// Check result confidence
if (result.metadata.confidence_score >= 0.9) {
console.log("High confidence - safe for automation");
} else if (result.metadata.confidence_score >= 0.7) {
console.log("Good confidence - review recommended");
} else {
console.log("Low confidence - manual verification needed");
}Threshold Recommendations
- 0.85+: Safe for automated CRM updates
- 0.70+: Good for enrichment, consider review for critical fields
- 0.50+: Display only, human verification required
- <0.50: May indicate insufficient data sources
Standing Briefs
Set a standing brief per entity type — your org's persistent instructions (who you sell to, what signals matter, what to emphasise) that feed research, scoring and every written field on every enrichment. For one job that needs a different brief, pass options.instructions on the request instead — it supersedes the standing brief for that single enrichment.
// Standing brief — set once, feeds every enrichment
await fetch("https://api.abm.dev/v2/config", {
method: "PATCH",
headers: { "X-API-Key": ABM_API_KEY, "Content-Type": "application/json" },
body: JSON.stringify({
enrichment: {
person_brief: `We sell post-deal integration tooling to UK
accountancy firms. Surface M&A, PE-backing and succession signals.
Keep summaries action-oriented for sales reps.`,
company_brief: `We target mid-market UK accountancy firms.
Surface growth trajectory, advisory service mix and PE involvement.`
}
})
});
// One job, different brief — per-request override
const result = await abmdev.enrich({
domain: "acme.com",
entity_type: "company",
instructions: `Research this company for marketing segmentation:
industry vertical, company size, content channels they engage with,
competitive position. Output should support campaign targeting.`
});Brief Best Practices
- Be specific about the use case and audience
- List the key attributes you want emphasized
- Specify output format preferences (concise, detailed, bullet points)
- Include any domain-specific terminology to use or avoid
Preflight Mode
Test enrichment configuration without consuming credits:
// Run preflight checks only
const preflight = await abmdev.enrich({
email: "[email protected]",
preflight_only: true // Don't execute, just validate
});
// Preflight returns:
// - Source availability (which sources can provide data)
// - Portfolio score (predicted enrichment quality)
// - Estimated fields (what data will be populated)
// - Configuration validation (any issues with your config)
console.log(preflight.preflight);
// {
// portfolio_score: 0.85,
// available_sources: ["linkedin", "hunter", "perplexity"],
// estimated_fields: 34,
// warnings: [],
// ready: true
// }
// If ready, proceed with actual enrichment
if (preflight.preflight.ready) {
const result = await abmdev.enrich({
email: "[email protected]",
preflight_only: false
});
}