Agent Skill · Landbase

contact-enrich

Async batch email and phone enrichment for individual leads via workflow contact-enrich — not the same as workflow enrich which adds company/person attributes.

Provider: Landbase Path in repo: tools/contact-enrich/SKILL.md

Skill body

Contact Enrich

Async batch email and phone enrichment: takes people, finds their contact details.

This is different from workflow enrich — that command adds company/person attributes (industry, size, description) from the Landbase graph.

Enrich a dataset (workflow contact-enrich)

The current path is dataset-in / dataset-out; contact-enrich submit|get is deprecated (below).

# From a file: upload → onboard → contact-enrich. Each step emits a NEW
# dataset id — enrich the onboarded child, not the uploaded id.
landbase-cli upload ./leads.csv                    # → { "id": "ds-UPLOADED" }
landbase-cli workflow onboard ds-UPLOADED --wait
landbase-cli datasets lineage ds-UPLOADED --direction=children --workflow=onboard
landbase-cli workflow contact-enrich ds-ONBOARDED --wait   # email + phone (default)
landbase-cli workflow contact-enrich ds-ONBOARDED --enrich-phone --wait   # phone ONLY

A positive --enrich-email/--enrich-phone switches to opt-in: the named one runs and the other does not. Both run when neither is passed. --overwrite-existing replaces existing contact_email_address/contact_phone_number values with only this run’s results; the default preserves an existing value when this run finds nothing, so re-running never wipes data.

Two children are registered: the enriched dataset (with a per-row contact_enrichment_status of enriched / not_enriched / failed / skipped) and a 1-row contact_enrich_report.

This output does not download directly (PUBLISH_REQUIRED). Run workflow publish <ds-id> --wait, then download that run’s output_dataset_id.

Slice a large input (--row-slice)

A run that does not finish enriching in time FAILS with no partial output. Above 500 rows, tile the input into 500-row windows. If a slice still FAILS on the time limit, narrow the window and re-run just that slice.

landbase-cli datasets show ds-XXXX reports row_count. At 500 rows or fewer, run one pass and skip this step.

# 1500 rows → three tiles, run one at a time.
for s in 0:500 500:1000 1000:1500; do
  landbase-cli workflow contact-enrich ds-XXXX --row-slice=$s --wait
done

# Collect the child dataset ids (one per slice, named "... rows 0-499" etc.)
landbase-cli datasets lineage ds-XXXX --direction=children --workflow=contact_enrich

# Recombine. No --dedupe-keys: the tiles are disjoint, so a union keeps every row.
landbase-cli workflow union ds-SLICE0 ds-SLICE1 ds-SLICE2 --wait

Rules:

Required signals per person

Each person needs linkedin_url OR (first_name + last_name + company/company_domain) — as columns in the dataset, or as fields in a submitted lead. Providing both name signals AND LinkedIn URL improves match rate materially.

Deprecated: contact-enrich submit|get

Predates the dataset flow. Prefer workflow contact-enrich above; use this only to poll a request_id from an older submission.

landbase-cli contact-enrich submit ./leads.jsonl --wait

# Also enrich phone numbers (costs more per lead)
landbase-cli contact-enrich submit ./leads.jsonl --wait --enrich-phone

Or pipe from stdin:

echo '{"first_name":"Jane","last_name":"Smith","linkedin_url":"https://www.linkedin.com/in/janesmith","company_domain":"example.com"}' \
  | landbase-cli contact-enrich submit - --wait --enrich-phone

Field mapping from match output

If feeding output from match person into contact-enrich, rename fields:

match output contact-enrich input
member_websites_linkedin linkedin_url
member_name_first first_name
member_name_last last_name
(not in candidate — carry from your input) company_domain

The candidate exposes company_id but not company_domain — always carry company_domain from your original match input.

Input formats

Auto-detected by file extension:

Source Format
.json Strict JSON — array or single object
.jsonl / .ndjson Line-by-line JSONL
- (stdin) or no extension Tries JSON first, falls back to JSONL

Check status

landbase-cli contact-enrich get <request-id>
Poll until status is: COMPLETED FAILED CANCELLED PARTIAL_SUCCESS

Resuming after timeout

If --wait times out, the error.meta.request_id field lets you resume:

landbase-cli contact-enrich get <request-id-from-error-meta>

Rate limits

Skill frontmatter

when_to_use: when the user needs email addresses or phone numbers for a list of people, enriching a dataset of contacts, checking the status of a contact enrichment run, or resuming a timed-out enrichment request version: 1.1.0 user-invocable: true allowed-tools: BashAskUserQuestion model: sonnet

Work with this as data

Every skill here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for agent skills

4 MCP tools reach this
  • find_skillsBrowse and filter every skill in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This skill
curl "https://apis.io/api/v1/skills/contact-enrich"
All agent skills
curl "https://apis.io/api/v1/skills?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.