Website Contact Extractor — AI Contacts, Emails, Phones
Pricing
from $5.00 / 1,000 contact extracteds
Website Contact Extractor — AI Contacts, Emails, Phones
Extract structured contacts (name, position, email, phone, LinkedIn) plus emails, phones, socials and address from any company website. AI-powered — Gemini / Groq / OpenRouter (bring your own key). Pay-per-result.
Pricing
from $5.00 / 1,000 contact extracteds
Rating
0.0
(0)
Developer
NanoScrape
Maintained by CommunityActor stats
2
Bookmarked
95
Total users
2
Monthly active users
7 days ago
Last modified
Categories
Share
Website Contact Extractor
Extract contact information from any website — emails, phone numbers, social media links, and company address — in a single run. Give it a list of URLs and get back one consolidated contact record per site. No API keys needed.
How It Works
For each URL you provide, the scraper:
- Visits the homepage and captures the page title and meta description
- Parses schema.org JSON-LD structured data to extract the company address
- Discovers internal links — contact, about, impressum, team, and privacy pages are always crawled first
- Extracts email addresses from page text and
mailto:links - Extracts phone numbers from
tel:links and international-format (+XX) text - Finds social media profile links (LinkedIn, Twitter/X, Facebook, Instagram, YouTube, Xing)
- Returns one record per website with all contact details consolidated
Challenge pages (bot-protection walls) are skipped automatically so the run keeps going.
Use with AI Agents (MCP)
Connect this actor to any MCP-compatible AI client — Claude Desktop, Claude.ai, Cursor, VS Code, LangChain, LlamaIndex, or custom agents.
Apify MCP server URL:
https://mcp.apify.com?tools=nanoscrape/website-contact-extractor
Example prompt once connected:
"Use
website-contact-extractorto extract the contact email, phone number, and LinkedIn page for acme-corp.com."
Clients that support dynamic tool discovery (Claude.ai, VS Code) will receive the full input schema automatically via add-actor.
Input Example
{"urls": ["acme-corp.com","https://www.another-company.de","https://startup.io/contact"],"maxPagesPerUrl": 15}
Bare domains (acme-corp.com) and full URLs are both accepted.
Output Example
[{"url": "https://acme-corp.com","domain": "acme-corp.com","title": "Acme Corp — Business Solutions","description": "We help businesses automate their operations worldwide.","emails": ["info@acme-corp.com", "sales@acme-corp.com"],"phones": ["+1 555 123 4567"],"address": "123 Main St, San Francisco, CA 94105, US","social_links": {"linkedin": "https://linkedin.com/company/acme-corp","twitter": "https://twitter.com/acmecorp","facebook": "https://facebook.com/acmecorp"},"pages_crawled": 9,"scraped_at": "2026-05-06T10:00:00Z"}]
Pricing
Pay per event. No monthly fees, no minimum spend.
| Event | Price | When it is charged |
|---|---|---|
| Actor start | $0.00005 per GB of memory | Once per run |
| Company processed | $0.01 | Per website where at least one email, phone or contact was found. Websites with no contacts are still returned (status no_contacts) but not charged. |
| Contact extracted | $0.005 | Per structured contact (name, position, email, phone) extracted with an LLM key |
Example: 100 websites, 70 with contacts, no LLM key: 70 x $0.01 = about $0.70.
Changelog
2.3
- Websites where no email, phone or contact was found are no longer charged the "Company processed" fee.
- Better results without an LLM key: contact, imprint and "Kontakt" pages are checked first, the sitemap is used as a fallback, and emails are found in page data and obfuscated forms (
[at],@). Broken addresses such asname@site.com%20are cleaned up. - Gemini requests use header authentication; the default Gemini model is
gemini-flash-lite-latest. - Running with empty input now uses a default URL instead of failing.
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
urls | string[] | ["https://example.com"] | Website URLs or bare domains to scrape |
maxPagesPerUrl | integer | 15 | Max pages to crawl per site (1–50) |
Output Fields
| Field | Type | Description |
|---|---|---|
url | string | Input URL that was scraped |
domain | string | Normalized domain name |
title | string | Page title from the homepage |
description | string | Meta description from the homepage |
emails | string[] | All unique email addresses found (lowercase) |
phones | string[] | Phone numbers from tel: links and international-format text |
address | string | Company address from schema.org JSON-LD structured data |
social_links | object | Social profiles found (linkedin, twitter, facebook, instagram, youtube, xing) |
pages_crawled | integer | Number of pages visited |
scraped_at | string | ISO timestamp of when the record was produced |
Tips
- Contact and impressum pages are checked first — the scraper prioritizes
/contact,/kontakt,/impressum,/about,/team, and similar paths - 15 pages covers most SMB and mid-market sites — most businesses expose all contact info within the first 15 pages
- Increase to 30–50 pages for large corporate sites or to find role-specific emails (hr@, press@)
- One record per website — all emails, phones, and social links from a site are consolidated into a single row, making it easy to use in spreadsheets or CRMs
- Address from structured data — address is only populated when the site includes schema.org JSON-LD markup (common on SMB and local business sites)
Related Actors
Enrich with more data
- Contact Details Scraper — same core extraction, alternative entry point
- Google Maps Email Scraper — find businesses via Maps then extract emails
Lead generation sources
- B2B Leads Scraper — Clutch and G2 company directories
- Yellow Pages Scraper — US local business listings
- Y Combinator Scraper — startup company leads
Issues & Feature Requests
If something is not working or you're missing a feature, please open an issue and we'll look into it.