Visits up to 10 business websites (home and contact pages) and returns the publi
Visits up to 10 business websites (home and contact pages) and returns the published contact emails (role inboxes such as info@ by default), phone numbers and social profiles for each. Honours robots.txt; nothing is guessed. $0.01 per website. Runs nerolabs/website-contact-finder; takes up to a minute.
Answeringour last check, 2026-10-21
1 of 1checks answered this week
38 msmedian answer time
$0.01listed price per call
$0.01price it asked us
Paid test badge: not yet. The checks above are free: we call the tool without paying and read the payment request it sends back. The Verified badge needs paid calls whose answers match the promised output, and nobody can buy a badge.
Endpoint
POST https://x402-agent-tools.nerolabs.workers.dev/contact-finder
| Category | Everything else |
|---|---|
| Provider host | x402-agent-tools.nerolabs.workers.dev |
| Networks | eip155:8453 |
| Payment schemes | exact |
| Self-reported calls, 30 days | 0 from 0 payers (the provider's figure, not ours) |
Our checks, last 30 days
| Day | Result | HTTP | Asked | Time |
|---|---|---|---|---|
| 2026-10-21 | valid payment request | 402 | $0.01 | 38 ms |
Example input (from the provider)
{
"body": {
"websites": [
"eff.org"
]
},
"bodyType": "json",
"method": "POST",
"type": "http"
}
Promised output schema (from the provider)
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"input": {
"additionalProperties": false,
"properties": {
"body": {
"additionalProperties": false,
"properties": {
"extractPhones": {
"default": true,
"description": "Reads published tel: links and normalises them to E.164 using Google's libphonenumber, so they are ready for a dialler. A number that cannot be parsed is returned exactly as published rather than guessed at.",
"type": "boolean"
},
"extractSocials": {
"default": true,
"description": "Collects the company's own LinkedIn, X, Facebook, Instagram, YouTube and TikTok profile links. Share buttons are ignored.",
"type": "boolean"
},
"followContactPages": {
"default": true,
"description": "After the homepage, follow same-site links that look like a contact, about or imprint page, most contact-like first.",
"type": "boolean"
},
"includeNoReply": {
"default": false,
"description": "OFF by default. noreply@ and do-not-reply@ are real addresses that nobody reads, so they are withheld unless you actually want them.",
"type": "boolean"
},
"includePersonalEmails": {
"default": false,
"description": "OFF by default, deliberately. When off you get role inboxes only (info@, sales@, enquiries@ and similar), which identify a function rather than a person. Turning this on also returns addresses like firstname.lastname@, which are personal data under UK and EU rules and bring obligations with them: yo",
"type": "boolean"
},
"keep": {
"default": "all",
"description": "Filters the output. Charging is unaffected: it follows what was actually found, not what you keep.",
"enum": [
"all",
"with_contacts",
"with_email",
"problems"
],
"type": "string"
},
"maxPagesPerSite": {
"default": 4,
"description": "Including the homepage. Four is enough for almost every business site and keeps the run polite and quick.",
"maximum": 10,
"minimum": 1,
"type": "integer"
},
"onlyOwnDomain": {
"default": true,
"description": "ON by default, and it is the single biggest quality filter. A business website is full of other people's addresses: the website builder's support inbox, an analytics vendor, a partner. Keeping only addresses at the site's own registrable domain removes almost all of that. Turn it off to also see off",
"type": "boolean"
},
"phoneRegion": {
"description": "The country to assume for phone numbers published without a country code, such as GB or US. Numbers that already start with + are unaffected.",
"type": "string"
},
"websites": {
"description": "Websites or bare domains to check, for example [\"acme.com\", \"https://www.example.org\"].",
"items": {
"type": "string"
},
"type": "array"
}
},
"required": [
"websites"
],
"type": "object"
},
"bodyType": {
"enum": [
"json",
"form-data",
"text"
],
"type": "string"
},
"method": {
"enum": [
"POST"
],
"type": "string"
},
"type": {
"const": "http",
"type": "string"
}
},
"required": [
"type",
"method",
"bodyType",
"body"
],
"type": "object"
},
"output": {
"properties": {
"example": {
"type": "object"
},
"type": {
"type": "string"
}
},
"required": [
"type"
],
"type": "object"
}
},
"required": [
"input"
],
"type": "object"
}