Find and verify work emails, find phone numbers and companies, run Intellimatch searches, manage lists and exclusion lists, monitor buying signals and read credit usage on Findymail.
Findymail ships in the w6w first-party pack. It declares 35 actions, 3 health checks, and the host runs its code in a sandbox that never sees the credential.
io.w6w.findymailFindymail is an email finder and verifier for outbound prospecting. This app finds a verified work email from a name and company or from a LinkedIn profile, verifies an address, reverse-looks-up a profile from an email, finds a phone number, finds employees by job title, and looks up company data and technology stacks.
It runs Intellimatch (plain-language company search with optional contact enrichment, polled by hash), finds lookalike companies, manages contact lists and Intellimatch exclusion lists and their domains, manages signal monitors and reads the signals they raise, and reads credit balances and usage.
Health checks verify the API key, whether app.findymail.com is answering, and the credit balance. Findymail publishes no status page.
Three routes to the same 35 actions. The Workflow tab is generated from Findymail'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.
add-excluded-domains Add up to 10,000 domains to an exclusion list (or to the global list when no list ID is given). Past 50 domains the first 50 are processed immediately and the rest are queued.
create-exclusion-list Create an Intellimatch exclusion list. The name must be unique per user.
create-monitor Create a signal monitor. The signal type cannot be changed afterwards.
delete-exclusion-list Delete an exclusion list and all its domains. Only the owner may delete it.
find-email-by-linkedin Find someone's verified email from their business profile (LinkedIn) URL. Uses one finder credit only if a verified email is found. Spends credits only on a hit; a 402 means the balance is empty and a 423 that the subscription is paused.
find-email-by-name Find someone's verified email from their full name and company. Uses one finder credit only if a verified email is found. Spends credits only on a hit; a 402 means the balance is empty and a 423 that the subscription is paused.
find-employees Find employees at a company website by job title. Costs 1 credit per contact found and returns NO email (use Find Email from LinkedIn Profile on the result). Findymail's response is a bare array, returned here as `employees`. Spends credits only on a hit; a 402 means the balance is empty and a 423 that the subscription is paused.
find-phone Find someone's phone number from their LinkedIn URL. Costs 10 finder credits if a phone is found; requests for EU citizens return nothing for legal reasons. The 200 body is not shown in Findymail's reference, so it is returned verbatim as `result`. Spends credits only on a hit; a 402 means the balance is empty and a 423 that the subscription is paused.
get-company Retrieve company data from a LinkedIn company URL, a domain or a name — at least one is required. Costs 1 finder credit per hit; a miss answers 404.
get-exclusion-list Get one exclusion list's details (without its domains — use List Excluded Domains for those).
get-team-usage Credit usage per team member over a date range. Team owners only (403 otherwise). Defaults to the last 30 days.
get-usage Daily (periods under 2 months) or monthly credit usage of the authenticated user. Defaults to the last 30 days.
intellimatch-results Fetch the paginated company and contact results of a completed Intellimatch task. A 404 means the export is not ready yet or has expired.
intellimatch-search Start an Intellimatch task: plain-language company search with optional contact, email and phone enrichment. Returns a `hash`; poll Intellimatch Status, then fetch Intellimatch Results. Email costs 1 credit per email found and phone 10 credits per phone found.
intellimatch-status Poll an Intellimatch task. `status` is `success`, `processing`, `pending`, `failed` or `not_found`; processing carries progress counts.
list-contacts Get the contacts saved in a contact list. The response is a DataTables-style envelope (`draw`, `recordsTotal`, `recordsFiltered`, `data`).
list-excluded-domains List excluded domains (paginated), optionally filtered to one exclusion list or a search string. Without a list ID it returns the global exclusion list.
list-exclusion-lists List every Intellimatch exclusion list the user owns or that is shared with their team.
list-monitors List signal monitors the user owns or shares with the team, newest first, each with a `match_count`. Findymail's response is a bare array, returned here as `monitors`.
list-signals List signals raised by the monitors the user owns or shares with the team, filterable by type, monitor and date. A 404 with an empty body means the Signals feature is disabled on the account.
lookalike-search Find companies similar to a seed domain. Costs 1 finder credit per 10 results returned (rounded up). The 200 body is not shown in Findymail's reference, so it is returned verbatim as `result`. Spends credits only on a hit; a 402 means the balance is empty and a 423 that the subscription is paused.
lookup-technologies Get a company's technology stack by domain, optionally filtered to named technologies. Costs 1 finder credit when technologies are found, free otherwise. The 200 body is not shown in Findymail's reference, so it is returned verbatim as `result`. Spends credits only on a hit; a 402 means the balance is empty and a 423 that the subscription is paused.
remove-excluded-domains Remove excluded domains by their domain IDs (from List Excluded Domains). Only domains the caller may delete are removed.
reverse-email-lookup Find a business profile from an email address (work or personal). Costs 1 finder credit on a hit, 2 with full profile data. The 200 body is not shown in Findymail's reference, so it is returned verbatim as `result`. Spends credits only on a hit; a 402 means the balance is empty and a 423 that the subscription is paused.
search-technologies Search Findymail's technology catalog by name (min 2 characters, up to 25 results). Free, rate-limited to 10 requests per minute.
update-exclusion-list Rename an exclusion list and/or change its sharing. Only the owner may update it; sharing needs a team.
update-list Rename a contact list and set whether it is shared with the team. Both fields are required by the API.
update-monitor Update a signal monitor. The name is required by the API; the signal type cannot change.
verify-email Verify that an email address is deliverable. Uses one verifier credit on every attempted verification. Spends credits only on a hit; a 402 means the balance is empty and a 423 that the subscription is paused.
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 Findymail's real ids.
{
"manifestVersion": "2",
"name": "findymail-example",
"steps": [
{
"id": "add-excluded-domains",
"uses": {
"app": "io.w6w.findymail",
"action": "add-excluded-domains",
"connection": "conn_YOUR_CONNECTION_ID"
},
"with": {
"domains": "<domains>"
}
}
]
}add-excluded-domains create-exclusion-list create-list create-monitor find-email-by-linkedin +30 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 Findymail, 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 Findymail. 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: "add-excluded-domains",
payload: {
domains: "<value>",
// list_id: "<value>",
},
});
if (isActionRun(envelope)) console.log(envelope.value); npm install -g @w6w/cli w6w run conn_YOUR_CONNECTION_ID --action add-excluded-domains --payload '{"domains":"<value>"}' Give an AI agent Findymail — without giving it Findymail'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.findymail#add-excluded-domains",
"input": {
"domains": "<domains>"
}
}
}
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 Findymail 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.
Findymail'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. Findymail itself is MIT, and the runtime that executes it is source-available (FSL).
Findymail declares its own checks, so its health is a property of the app rather than something the host guesses at.
Unauthenticated GET of app.findymail.com/api/credits. The documented 401 `Unauthenticated.` envelope is the expected healthy answer; credential validity is the `auth:api-key` check's job.
Finder and verifier credits left, read from the free `GET /api/credits`. `degraded` when either balance is 0.