Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.minerva.io/llms.txt

Use this file to discover all available pages before exploring further.

resp = mc.api.enrich(
    [{"record_id": "1", "linkedin_url": "https://www.linkedin.com/in/example"}],
    match_condition_fields=["linkedin_url"],
    return_fields=["full_name", "professional_emails", "phones"],
)

for r in resp.results:
    print(r.record_id, r.is_match, r.minerva_pid, r.match_score)
    print(r.personal_information)     # full_name, gender, dob, age, ...
    print(r.professional_emails)      # [{email_rank, email_address}, ...]

resp.to_df()                          # one row per record, nested fields flattened

Parameters

records
list[dict]
required
Up to 500 per call. Each must have record_id + at least one matching field (LinkedIn URL, emails, name, etc.).
version
str
default:"\"v2\""
API version.
match_condition_fields
list[str]
Quality gate (up to 3). A record only counts as a match if the resolved person actually has these fields. Useful when you need contact info you can act on (e.g. require a phone). Omit to match on resolution alone.
return_fields
list[str]
Narrow the response payload to just these fields. Reduces wire size; doesn’t affect billing.
dry_run
bool
default:"False"
Validate input locally without sending. Returns the EnrichRequest that would be sent. See Validation.

Response shape

Each result includes:
FieldWhat
personal_informationfull_name, gender, dob, age, …
household_informationHousehold composition + income range
financial_informationEstimated income, net worth, etc.
social_mediaPublic profile URLs
personal_emails, professional_emailsRanked email arrays
phonesVerified phone numbers
address_historyPast + current addresses
work_experienceEmployment history
education_experienceSchools + degrees
relativesLinked household members
match_condition_fields is a quality gate — a record only counts as a match if the resolved person actually has those fields (e.g. require a phone you can dial). Omit it to match on resolution alone.

Tabular output

resp.to_dicts()        # list[dict]
resp.to_df()           # pandas DataFrame   (needs [pandas])
resp.to_csv("out.csv")
resp.to_table()        # pretty terminal table   (needs [table])
Nested fields (e.g. personal_information.full_name) flatten into top-level columns in the DataFrame. See Output formats.

Map onto your own schema

Project any result onto your pydantic model — missing fields become None (with a one-time warning), so it never breaks:
from pydantic import BaseModel

class Lead(BaseModel):
    record_id: str
    full_name: str | None = None
    estimated_income_range: str | None = None
    crm_id: str | None = None          # not a Minerva field → stays None, warns once

leads = mc.api.enrich(records).map_to(Lead)      # -> list[Lead]
# pass strict=True to validate instead (raises on mismatch)

Limits

  • Records per call: 500
  • Validation enforced locally before the call — over-limit records raise MinervaValidationError without a round-trip
  • Billing: credits consumed per matched record — see your plan