hyreflow
Integrations

FullEnrich

High-quality email/phone waterfall enrichment over 20+ sources, plus synchronous people/company search. Key gotcha: enrichment is async (submit + poll).

Reach for FullEnrich when you need deep waterfall email/phone enrichment with broad provider coverage, reverse-email lookups, or synchronous prospecting by title/company/location. Best for quality over single-provider speed.

Managed credits or BYOK: each field has its own method and its own price, billed once on result retrieval when the result carries data: work email 1.3 credits, personal email 3.8, mobile 12.6. search_company = 0.4 / result; retrieval is free. get_credits reads your own account and needs your own FullEnrich key.

Capabilities

ToolDoesCost
start_work_email_enrichmentSubmit a bulk work-email job → enrichment_id (async)Deferred, 1.3 / result on retrieval
start_personal_email_enrichmentSubmit a bulk personal-email job (async)Deferred, 3.8 / result on retrieval
start_mobile_enrichmentSubmit a bulk mobile-phone job (async)Deferred, 12.6 / result on retrieval
get_bulk_enrichmentFetch terminal results for an enrichment jobFree
start_reverse_emailSubmit a reverse-email (identify contact from email) job (async)Deferred (billed on retrieval)
get_reverse_emailFetch reverse-email resultsFree
search_companySynchronous company prospecting0.4 / result
get_creditsBalance / usage on your own accountBYOK only

Guidance

  • Async submit + async fetch: every start_* returns an enrichment_id; poll the matching get_* for terminal data. Pass forceResults=true to get partials while still running.
  • Batch at the provider, not the row: one start_* call takes up to 100 contacts and returns one enrichment_id, so one job and one poll loop cover all of them. A job takes roughly the same time whether it holds 1 or 100 contacts, so never loop start_* over rows one at a time. Inside the email_enrichment / personal_email waterfalls (hyreflow tools execute <waterfall> --rows …) the engine does this for you: every row still pending at the FullEnrich step rides one job, results are matched back per row via a custom echo on each contact, and billing stays per row (hits only).
  • A stalled job keeps its identity, and ends the chain right there: when the poll budget runs out first, the step reports still_enriching with job_id and resume, and no further provider runs for that row — the job settles on its own server-side and bills once when it finishes. Poll sooner with hyreflow tools execute fullenrich get_bulk_enrichment --payload '{"enrichment_id": "<job_id>"}'. Polling is free; once the job finishes, that poll charges one unit per revealed contact (each once, keyed on the job + contact, so re-polling is free). Do not resend the contacts, that starts and bills a second job.
  • Pick the method for the field you want: a mobile costs ten times a work email, so start_mobile_enrichment is the expensive channel and the email methods stay cheap. The job asks for exactly the field its method names, and the retrieval bills that field's price.
  • Supply a LinkedIn URL: it lifts email accuracy 5–20% and phone accuracy 10–60%.
  • Email-status hierarchy: DELIVERABLE > HIGH_PROBABILITY > CATCH_ALL > INVALID; prefer the most_probable_work_email field.
  • Don't use FullEnrich for validation-only (use a dedicated validator) or for quick single-provider lookups (Prospeo/LeadMagic are faster/cheaper).
hyreflow tools execute fullenrich start_work_email_enrichment \
  --payload '{"datas":[{"first_name":"Ada","last_name":"Lovelace","company_name":"Example","linkedin_url":"https://linkedin.com/in/example"}]}'

In a waterfall: member of the email_enrichment and personal_email chains (see Integrations Overview). Note: its async methods need the job wrapper to participate in the sync runner.

On this page