# Nero Labs Website Contact Finder

> Nero Labs Website Contact Finder is a paid API for AI agents from x402-agent-tools.nerolabs.workers.dev, paid per call via x402, $0.01/call, status unknown (last checked 2026-10-24).

Scrapes up to 10 business websites (home and contact pages) and returns published contact emails, phone numbers, and social media profiles for each domain.

## Facts

- Endpoint: POST https://x402-agent-tools.nerolabs.workers.dev/contact-finder?utm_source=zero.xyz
- Price: $0.01/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-24
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/nero-labs-website-contact-finder-135b9e60
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_DNzrBOeOeV-q0LZ1uKDSh

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability nero-labs-website-contact-finder-135b9e60 -d '<json body>'
```

Example prompt: Can you find the contact emails, phone numbers, and social media profiles published on these company websites: acme.com, globex.com, and initech.com? Only keep results that actually have contacts, and assume any unformatted phone numbers are US numbers.

## When to prefer this

Use this endpoint when you need to programmatically discover publicly published contact information (emails, phones, socials) from business websites in bulk, especially when quality filtering matters (own-domain emails only, no noreply addresses, normalized E.164 phones). Prefer it over manual lookup or generic web search when you have a list of domains and need structured, clean output ready for a CRM, dialler, or outreach tool. It respects robots.txt, making it suitable for compliant lead enrichment workflows.

## Known failure modes

- Website blocks crawlers or returns 4xx/5xx — contactStatus reflects the error, no contacts returned for that site
- robots.txt disallows scraping — endpoint honours it and returns no data for that domain
- No contact information published on the site — returns empty arrays with contactStatus indicating no contacts found
- Phone number cannot be parsed to E.164 — returned as raw published text instead
- Domain resolves but has no readable content (e.g. parked domain) — contactStatus reflects the issue
- Invalid URL or domain format in input — may error or return a problem row for that entry

## How this service works

Pay-per-call tools for AI agents, 31 in all: read web pages and RSS feeds, OCR, PDF text, transcription; email, phone and domain checks; UK, Irish and Polish company lookups and UK risk reports; website contacts, tech stack and SEO audits; PageSpeed; AI review, job post and row enrichment; data cleaning, joins, dedupe and diffs; US and EU compliance rules. No account or API key: pay each call in USDC on Base over x402.

## Output

A JSON array of rows, one per submitted website, each containing: primary email and phone, all discovered contact emails with classification (role/personal) and source, phone numbers in E.164 format with country, contact page URL, social profile links (LinkedIn, X, Facebook, Instagram, YouTube, TikTok), contact status ('ok' or error), and counts of excluded addresses by category.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "keep": {
   "enum": [
    "all",
    "with_contacts",
    "with_email",
    "problems"
   ],
   "type": "string",
   "default": "all",
   "description": "Filters the output. Charging is unaffected: it follows what was actually found, not what you keep."
  },
  "websites": {
   "type": "array",
   "items": {
    "type": "string"
   },
   "description": "Websites or bare domains to check, for example [\"acme.com\", \"https://www.example.org\"]."
  },
  "phoneRegion": {
   "type": "string",
   "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."
  },
  "extractPhones": {
   "type": "boolean",
   "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."
  },
  "onlyOwnDomain": {
   "type": "boolean",
   "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"
  },
  "extractSocials": {
   "type": "boolean",
   "default": true,
   "description": "Collects the company's own LinkedIn, X, Facebook, Instagram, YouTube and TikTok profile links. Share buttons are ignored."
  },
  "includeNoReply": {
   "type": "boolean",
   "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."
  },
  "maxPagesPerSite": {
   "type": "integer",
   "default": 4,
   "maximum": 10,
   "minimum": 1,
   "description": "Including the homepage. Four is enough for almost every business site and keeps the run polite and quick."
  },
  "followContactPages": {
   "type": "boolean",
   "default": true,
   "description": "After the homepage, follow same-site links that look like a contact, about or imprint page, most contact-like first."
  },
  "includePersonalEmails": {
   "type": "boolean",
   "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 perso
… (truncated)
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "rows": [
   {
    "website": "eff.org",
    "emailClasses": [
     {
      "class": "role",
      "source": "mailto",
      "address": "info@eff.org",
      "ownDomain": true
     },
     {
      "class": "role",
      "source": "mailto",
      "address": "press@eff.org",
      "ownDomain": true
     }
    ],
    "phoneDetails": [
     {
      "raw": "+1-510-243-8020",
      "e164": "+15102438020",
      "page": "https://www.eff.org/about/contact",
      "source": "text",
      "country": "US"
     },
     {
      "raw": "+1 (415) 436-9333",
      "e164": "+14154369333",
      "page": "https://www.eff.org/about/contact",
      "source": "text",
      "country": "US"
     }
    ],
    "primaryEmail": "info@eff.org",
    "primaryPhone": "+15102438020",
    "contactEmails": [
     "info@eff.org",
     "press@eff.org"
    ],
    "contactPhones": [
     "+15102438020",
     "+14154369333"
    ],
    "contactStatus": "ok",
    "websiteDomain": "eff.org",
    "contactPageUrl": "https://www.eff.org/about/contact",
    "socialProfiles": [
     "https://www.facebook.com/eff",
     "https://www.instagram.com/efforg"
    ],
    "websiteResolved": "https://eff.org/",
    "contactStatusDetail": null,
    "excludedEmailCounts": {
     "unknown": 3,
     "personal": 1,
     "other_domain": 1
    }
   }
  ],
  "count": 1,
  "_example_note": "Real output, trimmed: long lists cut to their first items, fields and text shortened."
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/nero-labs-website-contact-finder-135b9e60/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from x402-agent-tools.nerolabs.workers.dev](https://www.zero.xyz/host/x402-agent-tools.nerolabs.workers.dev/llms.txt)
