Enrich people, companies, jobs and schools: profile lookups, dataset search, work and personal emails and phones, reverse email and phone lookup, and the credit balance.
Enrich Layer ships in the w6w first-party pack. It declares 25 actions, 3 health checks, and the host runs its code in a sandbox that never sees the credential.
io.w6w.enrichlayerEnrich Layer is a B2B data enrichment API with structured data on over a billion people, tens of millions of companies and hundreds of millions of jobs. This app covers the v2 API: get a person, company, school or job profile from a public profile URL; look people up by name and company, by role at a company, or by email or phone number; search the people and company datasets by criteria; list a company’s employees or a school’s students; count employees and open jobs; find personal emails and phone numbers, request a work email, and check whether an address is disposable.
Every call spends credits, and each action’s description states its cost (profile lookups 1 to 3 credits; employee and student listings per result; search 3 credits per result). The credit balance, the profile pictures and the ID and disposable-email lookups are free.
Health checks verify the API key, whether the API is answering, Enrich Layer’s per-endpoint status page, and the remaining credit balance.
Three routes to the same 25 actions. The Workflow tab is generated from Enrich Layer's own manifest and carries its real ids, so it is copy-pasteable; the Code and CLI examples are the same call for any action on any app, so every app-specific value in them is a blank you fill in.
company-employee-count Return employee counts for a company from several sources (1 credit; historical dates and fresh counts cost extra).
company-employee-search Search a company's employees by job title keywords (10 credits plus per-result charges).
company-employees-list List a company's employees (3 credits per employee returned). Filters, sorting, enrichment and freshness add credits; see each field.
company-id-lookup Return the vanity ID of a company from its internal numeric ID (free).
company-lookup Find a company's profile URL from its name and/or domain (2 credits, charged on any 200 response including no match).
company-profile-get Return the structured profile of a company from its profile URL (1 credit). Categories, funding, exits, acquisitions and extras cost 1 extra credit each.
company-profile-picture-get Return a temporary URL for a company's logo, from a cached profile (free).
company-search Search the company dataset by criteria (3 credits per company URL returned). Expressions use boolean search syntax and are limited to 255 characters each.
disposable-email-check Check whether an email address belongs to a disposable or free email service (free).
job-profile-get Return the structured data of a job posting from its URL (2 credits). Job Search returns job URLs.
job-search List jobs posted by a company (2 credits). Use the company's `search_id` from its profile.
person-lookup Find a person's profile URL from a first name and a company name or domain (2 credits). Credits are charged even on a null result unless similarity checks are skipped.
person-profile-get Return the structured profile of a person from their public profile, Twitter/X or Facebook URL (1 credit). Optional enrichments (personal email, personal phone, extra details, social IDs) cost extra credits each.
person-profile-picture-get Return a temporary URL for a person's profile picture, from a cached profile (free).
person-role-lookup Return the person who most closely matches a role at a company, for example the CTO of Apple (3 credits, charged on any 200 response).
person-search Search the people dataset by criteria (3 credits per profile URL returned). Expressions use boolean search syntax and are limited to 255 characters each.
personal-contact-number-lookup Find personal phone numbers for a social profile (1 credit per number returned).
personal-email-lookup Find personal email addresses for a social profile (1 credit per email returned; precise validation costs 1 more per email).
reverse-email-lookup Resolve a person profile from a personal or work email address (3 credits; superficial depth is free on no match).
school-profile-get Return the structured profile of a school from its profile URL (1 credit).
school-students-list List the students of a school (3 credits per student returned). Filters, sorting and enrichment add credits; see each field.
work-email-lookup Queue a work-email lookup for a person profile (3 credits). The lookup may not finish immediately: pass a callback URL and Enrich Layer calls it once with the result. Only the queue length comes back synchronously.
A workflow step names the app and the action, and the editor fills in the
connection when you pick one. This is the Step shape from the
workflow spec, carrying Enrich Layer's real ids.
{
"manifestVersion": "2",
"name": "enrichlayer-example",
"steps": [
{
"id": "company-employee-count",
"uses": {
"app": "io.w6w.enrichlayer",
"action": "company-employee-count",
"connection": "conn_YOUR_CONNECTION_ID"
},
"with": {
"url": "<url>"
}
}
]
}company-employee-count company-employee-search company-employees-list company-id-lookup company-lookup +20 more actions available
Every app-specific value here is a blank you have to fill in. An
app action is reached through the connection that authenticates it, so the
address is a connection id, not the app id — and connections belong to your account,
so a public page cannot know yours. Create one for Enrich Layer, then fill in
the three blanks: conn_YOUR_CONNECTION_ID, the action key, and the
parameters that action declares. The call itself is real — the shape is transcribed
from the studio's own snippet builder, which prints the same kind of blanks — but
nothing in it is specific to Enrich Layer. The Workflow tab is where this app's
real ids are.
npm install @w6w/sdkyarn add @w6w/sdkpnpm add @w6w/sdkdeno add npm:@w6w/sdkimport { W6wClient, isActionRun } from "@w6w/sdk";
// Reads W6W_BASE_URL and W6W_TOKEN from the environment when omitted.
const client = new W6wClient();
const envelope = await client.run({
urn: "conn_YOUR_CONNECTION_ID",
action: "company-employee-count",
payload: {
url: "<value>",
// coyNameMatch: "<value>",
// atDate: "<value>",
// useCache: "<value>",
// estimatedEmployeeCount: "<value>",
// employmentStatus: "<value>",
},
});
if (isActionRun(envelope)) console.log(envelope.value); npm install -g @w6w/cli w6w run conn_YOUR_CONNECTION_ID --action company-employee-count --payload '{"url":"<value>"}' Give an AI agent Enrich Layer — without giving it Enrich Layer's credentials. One MCP endpoint exposes every app, function and workflow the caller is entitled to, as tools it can discover and run. Access is granted per team while we onboard.
One tool call{
"name": "w6w_invoke",
"arguments": {
"ref": "app:io.w6w.enrichlayer#company-employee-count",
"input": {
"url": "<url>"
}
}
}
Every tool names its target with a single ref. The
app: form above doesn't name a connection at all — the
host resolves which of the caller's Enrich Layer connections to sign
with, and refuses rather than guesses when the answer is ambiguous.
The token is attached host-side, at the moment of the call. It is never a tool argument, never in the model's context, and never in a transcript — so a prompt injection has nothing to exfiltrate.
Tools are derived per end user from what that person has actually connected and is entitled to — not one shared bot identity carrying the union of everyone's access.
Multi-step work runs on the workflow engine and returns a run handle the agent can poll — retries, branching and state survive the conversation that started them.
Enrich Layer's declared health checks are on the surface too, so an agent can tell "the vendor is down" from "your credential expired" before it burns a retry on either.
The MCP surface is part of the hosted platform. Enrich Layer itself is MIT, and the runtime that executes it is source-available (FSL).
Enrich Layer declares its own checks, so its health is a property of the app rather than something the host guesses at.
status.enrichlayer.com (Cachet /api/v1/components): one component per API endpoint. Any impaired endpoint is degraded; down only if every endpoint reports a major outage.
Unauthenticated GET of /credit-balance. Enrich Layer's documented 401 `{code, description, name}` envelope is the expected healthy answer; credential validity is the `auth:api-key` check's job.
Credits this account can still spend, from a signed `GET /credit-balance`.