Skip to main content
12 min readAdvanced

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:

OptionTypeDefaultDescription
sourcesstring[]["linkedin", "hunter", "perplexity", "tavily"]Which data sources to query during enrichment
require_linkedinbooleanfalseFail enrichment if LinkedIn data is unavailable
enable_auditorbooleantrueEnable AI auditor to verify enrichment quality
min_confidence_to_proceednumber0.5Minimum confidence score (0-1) to continue enrichment
auto_proceedbooleantrueAutomatically proceed with CRM writeback after enrichment
preflight_onlybooleanfalseOnly run preflight checks, don't execute enrichment
enable_hubspot_writebackbooleantrueWrite enriched data back to HubSpot automatically

Full Configuration Example

Complete enrichment configuration
// 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"
    }
  },

  // Custom prompts (optional)
  person_system_prompt: `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-20250514
Writer (default)$$

Fast, high-quality synthesis for generating narrative fields and summaries

Claude Opus 4

claude-opus-4-20250514
Writer (premium)$$$

Highest quality output for complex synthesis tasks

Claude Haiku 3.5

claude-3-5-haiku-20241022
Auditor (default)$

Fast, 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:

Source selection examples
// 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
});
SourceBest ForNotes
linkedinPerson enrichmentHighest accuracy for job titles, history. Requires Browserbase.
hunterEmail verificationEmail deliverability, domain patterns. Included in all plans.
perplexityCompany researchAI-powered research for company intel, news, funding.
tavilyWeb presenceWeb search aggregation, social profiles, press mentions.

Confidence Thresholds

Use confidence thresholds to control enrichment quality gates:

Confidence-based automation
// 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

Custom System Prompts

Customize the AI synthesis behavior with custom system prompts:

Custom prompts for different use cases
// Sales-focused enrichment
const salesResult = await abmdev.enrich({
  email: "[email protected]",
  person_system_prompt: `You are enriching a B2B prospect for sales outreach.
Focus on:
- Buying signals and authority level
- Technology stack and current solutions
- Pain points relevant to our product
- Recent company changes or initiatives
Keep summaries action-oriented for sales reps.`
});

// Marketing-focused enrichment
const marketingResult = await abmdev.enrich({
  domain: "acme.com",
  entity_type: "company",
  company_system_prompt: `You are researching a company for marketing segmentation.
Focus on:
- Industry vertical and company size
- Growth trajectory and funding status
- Content topics and channels they engage with
- Competitive landscape position
Output should support personalized campaign targeting.`
});

Prompt 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:

Preflight check
// 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
  });
}

Related Guides