Website Email Extractor - Emails, Phones, Social Links avatar

Website Email Extractor - Emails, Phones, Social Links

Pricing

from $2.10 / 1,000 websites

Go to Apify Store
Website Email Extractor - Emails, Phones, Social Links

Website Email Extractor - Emails, Phones, Social Links

Extract emails, phone numbers and social media profiles from a list of websites or domains. Checks each homepage plus its contact, about and team pages. Flat $3 per 1,000 websites, however many pages are checked.

Pricing

from $2.10 / 1,000 websites

Rating

0.0

(0)

Developer

Solar G

Solar G

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

12 days ago

Last modified

Security

Limited permissions

Share

Finds contact details for a list of websites: email addresses, phone numbers and social media profiles. For each site it loads the homepage and then the pages most likely to have contact details (contact, about, team, imprint, support).

For a quick one-off check without an Apify account, a free web version with a small daily limit is available at purfled.com/website-email-finder.

Input

FieldDescription
websitesDomains or URLs, e.g. example.com or https://www.example.com/contact. When a URL has a path, that page is checked first, then the homepage. An email address such as info@example.com is read as its domain. Entries may also be objects with a url field, e.g. {"url": "https://example.com"}.
maxPagesPerWebsitePages to check per site (start page first, then likely contact pages). Default 8, max 30.
proxyConfigurationOptional, for sites that block cloud servers.
{
"websites": ["wholelattelove.com", "basecamp.com", "https://www.bbc.co.uk/contact"],
"maxPagesPerWebsite": 8
}

Output

One record per website:

{
"input": "wholelattelove.com",
"website": "https://wholelattelove.com",
"domain": "wholelattelove.com",
"finalUrl": "https://www.wholelattelove.com/",
"title": "Whole Latte Love - Espresso Machines, Coffee Makers & Coffee",
"description": "We are coffee experts...",
"emails": ["customerservice@wholelattelove.com", "support@wholelattelove.com"],
"phones": ["+1-585-924-7170", "+1-888-411-5282", "585-404-9303"],
"phonesUncertain": [],
"socials": {
"youtube": ["https://www.youtube.com/user/wholelattelovetv"],
"facebook": ["https://www.facebook.com/WholeLatteLoveOnline"],
"instagram": ["https://www.instagram.com/wholelattelove"]
},
"contactPages": ["https://www.wholelattelove.com/pages/contact-us"],
"pagesScraped": 6
}
FieldMeaning
inputThe entry as given in the input.
websiteOrigin of the input, e.g. https://example.com.
domainDomain of the site that was crawled, after redirects (for example basecamphq.com redirects to basecamp.com).
finalUrlThe first page's URL after redirects.
emailsAddresses on the site's own domain first.
phonesNumbers from tel: links and schema.org data. The same number in different formats is listed once.
phonesUncertainPhone-like numbers found in the page text, next to a word such as "phone" or "call", or in a common national format. Check these before use.
socialsProfile URLs by network. Share buttons, login and help pages, and links to the site itself are left out.
contactPagesPages, other than the first, where new contact details were found.
pagesScrapedPages requested for this site.

Supported social networks: Facebook, Instagram, LinkedIn, X/Twitter, YouTube, TikTok, Pinterest, GitHub, Telegram, WhatsApp (normalised to https://wa.me/<number>), Threads, Bluesky, Discord, Reddit and Snapchat.

How emails are found:

  • mailto: links, visible text, schema.org data, and Cloudflare-protected addresses ([email protected]), which are decoded.
  • Common obfuscations: name [at] domain [dot] com, name(at)domain(dot)com, HTML entities. The plain-word form name at domain dot com is kept only when it is on the site's own domain.
  • Addresses elsewhere in the page source (scripts, attributes) are kept only when they are on the site's own domain. Form placeholders and percent-encoded fragments are ignored.

Errors

A website that cannot be processed returns an item with input, error and blocked, and is not charged:

{ "input": "shop.example-store.com", "website": "https://shop.example-store.com", "domain": "shop.example-store.com", "error": "Could not load https://shop.example-store.com: the site refused the request (HTTP 403), probably bot protection", "blocked": true }
  • blocked is true when the site refused the request (HTTP 403, 429 and similar) or showed a bot-protection page. Try again with proxyConfiguration set to Apify Proxy.
  • Other errors give the reason: the domain does not exist (DNS lookup failed), the site did not respond in time, the page was not found, or it is not an HTML page.
  • Entries that are not websites (for example not a website) return {"input": "...", "error": "Not a website URL or domain: ..."}.
  • Duplicate entries are checked once and charged once. example.com, www.example.com, http://example.com and EXAMPLE.com count as the same website.

API usage

curl -X POST "https://api.apify.com/v2/acts/solarg~website-contact-extractor/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"websites": ["wholelattelove.com", "basecamp.com"]}'
from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("solarg/website-contact-extractor").call(run_input={"websites": ["wholelattelove.com"]})
items = client.dataset(run["defaultDatasetId"]).list_items().items

Pricing

$3.00 per 1,000 websites (event "Website"). That is a flat price per site, however many pages are checked, and platform usage is included. Error items are not charged.

Limitations

  • Pages are fetched without a browser, so details that only appear after JavaScript runs may be missed.
  • Phone numbers in plain text are reported separately in phonesUncertain, because numbers in text can also be order numbers or IDs.
  • Only publicly visible contact details are collected. Use them in line with applicable law (for example UK GDPR, PECR, CAN-SPAM).

Report problems in the Issues tab.