Skip to main content

Enrichfold

Provider-neutral, provenance-first entity enrichment for people and companies.

enrichfold is an offline-first core, not a scraping product: applications supply their own discovery providers and credentials. Every accepted attribute retains its source URL, observation time, and confidence, so downstream systems can decide whether a result is suitable for an automated action or requires review.

from enrichfold import Entity, EnrichmentPipeline, Evidence

class CompanyProvider:
    def discover(self, entity):
        return [Evidence(
            source_url="https://example.com/team",
            observed_at="2026-08-20T12:00:00Z",
            confidence=0.94,
            attributes={"industry": "software", "company_size": "51-200"},
        )]

company = Entity.company(domain="example.com")
result = EnrichmentPipeline([CompanyProvider()]).enrich(company)
print(result.attributes["industry"].value)  # software

Evidence, conflicts, and review gates

enrichfold keeps provider I/O outside the library. Its core turns supplied evidence into deterministic decisions while retaining disagreements for a human approval flow. A conflicting value is never silently accepted:

from enrichfold import Claim, Evidence, reconcile_claims

result = reconcile_claims([
    Claim(
        field="industry",
        value="software",
        evidence=Evidence(
            source_url="https://acme.example/about",
            observed_at="2026-08-20T12:00:00Z",
            confidence=0.91,
        ),
    ),
    Claim(
        field="industry",
        value="retail",
        evidence=Evidence(
            source_url="https://directory.example/acme",
            observed_at="2026-08-20T12:00:00Z",
            confidence=0.88,
        ),
    ),
])

industry = result.fields["industry"]
assert industry.value == "software"          # stable suggested value
assert industry.status == "needs_review"     # do not automate an action
assert result.requires_review is True

Claim(kind="inferred", ...) also requires review even with no competing claim. This distinction makes it possible to keep model-produced hypotheses without presenting them as observed facts.

Company identity gate

Before a caller enriches or acts on a company, use the offline identity gate. It is deliberately conservative: free mailboxes, invalid sites, domain conflicts, and corporate domains that do not exactly match the name receive a review status. Applications can pass separately verified site metadata when they have it.

from enrichfold import derive_company_identity

identity = derive_company_identity(
    email="hello@acme.example",
    company_name="Acme",
    website="https://www.acme.example/about",
)

assert identity.status == "verified"
assert identity.canonical_domain == "acme.example"

Design boundaries

  • No network calls, scraping, credential handling, contact exporting, or outreach.
  • No inferred facts: a field is returned only when a provider supplies evidence.
  • Conflicts have a deterministic suggested value but are marked needs_review.
  • Inferred claims are always marked needs_review.
  • Company identity is verified only through an exact name/domain match or caller-supplied, independently verified same-domain site metadata.
  • Bring your own providers for search engines, public data APIs, browser tools, or internal approved sources.

The package intentionally does not decide whether a review is approved or run an action after one; persistence, permissions, UI, and provider adapters stay with the host application.

Installation

pip install enrichfold

Development

uv run --with pytest pytest -q
python -m build

License

MIT.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

enrichfold-0.2.0.tar.gz (8.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

enrichfold-0.2.0-py3-none-any.whl (9.1 kB view details)

Uploaded Python 3

File details

Details for the file enrichfold-0.2.0.tar.gz.

File metadata

  • Download URL: enrichfold-0.2.0.tar.gz
  • Upload date:
  • Size: 8.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for enrichfold-0.2.0.tar.gz
Algorithm Hash digest
SHA256 c809ac4b65c64772b59c26bc772bfbd9ea7fcf6b2c8f0b5490d283deb2360708
MD5 3ab1034f103194339d8f16cd15f518c4
BLAKE2b-256 b0cededffd792dc9597b3288a4a1bc9a7a9beb9b3013dc784298170562e31aa2

See more details on using hashes here.

Provenance

The following attestation bundles were made for enrichfold-0.2.0.tar.gz:

Publisher: publish.yml on Mihailorama/enrichfold

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file enrichfold-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: enrichfold-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 9.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for enrichfold-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 9a844db016e342ec7f271cabf8625bd706feac5737ea312f4cb8fddd5e572f1b
MD5 c665dad74eee5ea9a5f44280d0299109
BLAKE2b-256 a695097c0e10f5412f7e466037e8ae756b0522f347e53b79801e2c2bfada5f80

See more details on using hashes here.

Provenance

The following attestation bundles were made for enrichfold-0.2.0-py3-none-any.whl:

Publisher: publish.yml on Mihailorama/enrichfold

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.4.0

2 files

0.3.0

2 files

This release

0.2.0 This release

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page