Website Contact Details Scraper: Emails, Phones & Socials avatar

Website Contact Details Scraper: Emails, Phones & Socials

Pricing

$3.00 / 1,000 website with contacts

Go to Apify Store
Website Contact Details Scraper: Emails, Phones & Socials

Website Contact Details Scraper: Emails, Phones & Socials

Get the emails, phone numbers and company social links that businesses publish on their own websites. Checks the pages that matter (contact, impressum, about, footer), decodes hidden and obfuscated emails, and charges only for websites where contacts were found.

Pricing

$3.00 / 1,000 website with contacts

Rating

0.0

(0)

Developer

Michael Shanker

Michael Shanker

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

14 hours ago

Last modified

Share

Give it a list of company websites and get back the business contact details each company publishes on its own site: email addresses, phone numbers and the company's social media pages. One clean row per website, ready for a CRM, a spreadsheet or an outreach tool.

You pay only for websites where at least one contact was found. Websites with nothing on them, websites that are down, and websites whose robots.txt asks tools to stay away still get a row so you know what happened, but they cost nothing.

Why this one

  • Finds what's really there. It reads mailto: and tel: links, footer text, schema.org data (JSON-LD and microdata), and the JSON that modern JavaScript sites render from. It decodes Cloudflare email protection (the [email protected] placeholders) and obfuscated forms like info [at] acme [dot] com, info(at)acme.de and info AT acme DOT com.
  • Checks the pages that matter instead of crawling blindly. The home page first, then the pages the site itself links to that usually hold contact details: contact, impressum or imprint, about, locations, support, team and legal, best first. If no contact page is linked, it tries the usual addresses like /contact once. Most websites are done in 2 to 6 pages.
  • Clean output, junk filtered out. Image file names like logo@2x.png, placeholder addresses like user@example.com, error-tracking addresses, noreply@ addresses, dates, years and order numbers posing as phones are all dropped. Everything is deduplicated per website.
  • Phone numbers you can dial. Numbers come in international E.164 format (+442079460958) when the country is certain, from the number itself, the website's country domain, or your country hint. Fax numbers are left out. Only numbers from tel: links, schema.org data, text right after a phone label, or clearly international numbers are taken, because a wrong number is worse than none.
  • Company social pages only. LinkedIn company pages, Facebook pages, X, Instagram, YouTube, TikTok, GitHub, Crunchbase, Pinterest, Xing and Threads. Personal profiles like linkedin.com/in/..., share buttons, posts and videos are dropped.
  • Role or named inbox on every email. Each email has type: role for shared inboxes like info@, sales@, support@, hello@, press@ or careers@, and named when it looks like a person's own address. Turn on Only shared inboxes to drop named ones. Free-mail addresses (Gmail, Outlook and the like) are kept when the site lists them, flagged with freeMail: true. sameDomain says whether the address is on the website's own domain, so you can drop addresses of partners or agencies the site mentions.

Input

FieldWhat it does
Company websitesOne per line: acme.com, www.acme.co.uk or https://acme.de/en/. Bare domains try https, then www, then http. Request-list style objects ({"url": "..."}) work too.
Max pages per websiteHome page plus the best contact-type pages, up to this many (default 8, max 30).
Only shared inboxesDrop emails that look like a person's own address.
Phone numbers / Company social linksTurn either off if you don't need it.
Country for local phone numbersTwo-letter code (US, GB, DE...) for numbers written without a country code on websites with a generic domain like .com. Country domains use their own country.
Websites at onceParallel websites (default 10). Each website still gets at most one request per second.

Example input:

{
"startUrls": ["acme-law.com", "https://www.brightsmile-dental.co.uk", "nordwerk-maschinen.de"],
"maxPagesPerSite": 8,
"onlyRoleEmails": false,
"phoneCountryHint": "US"
}

Output

One row per website (values illustrative):

{
"inputUrl": "acme-law.com",
"domain": "acme-law.com",
"websiteUrl": "https://www.acme-law.com/",
"status": "contacts_found",
"emails": [
{"email": "info@acme-law.com", "type": "role", "sameDomain": true, "freeMail": false, "foundOn": "https://www.acme-law.com/"},
{"email": "intake@acme-law.com", "type": "role", "sameDomain": true, "freeMail": false, "foundOn": "https://www.acme-law.com/contact-us"}
],
"phones": [
{"phone": "+12125550142", "raw": "+1-212-555-0142", "foundOn": "https://www.acme-law.com/"},
{"phone": "+12125550199", "raw": "(212) 555-0199", "foundOn": "https://www.acme-law.com/contact-us"}
],
"socials": {
"linkedin": "https://www.linkedin.com/company/acme-law",
"facebook": "https://www.facebook.com/acmelaw",
"x": "https://x.com/acmelaw",
"instagram": null, "youtube": null, "tiktok": null, "github": null,
"crunchbase": null, "pinterest": null, "xing": null, "threads": null
},
"contactPageUrl": "https://www.acme-law.com/contact-us",
"pagesChecked": 3,
"error": null,
"scrapedAt": "2026-11-02T18:02:11.000000+00:00"
}

status is one of:

  • contacts_found: at least one email, phone or social link (of the kinds you asked for). This is the only charged status.
  • no_contacts_found: the site was read and nothing was published.
  • blocked_by_robots: the site's robots.txt asks tools like this one not to read the home page, so it wasn't read.
  • unreachable: the site is down, refused the request, or isn't a web page (error says which).
  • invalid_url: the input wasn't a usable website address.

Download results as JSON, CSV or Excel, or send them to Google Sheets, Zapier, Make or n8n. The run also saves a SUMMARY record with how many websites were checked, had contacts and were charged.

Pricing

Pay per event: $0.003 per website with contacts ($3 per 1,000). No start fee and no charge per page crawled, so a website that needs 8 pages costs the same as one that needs 1, and a website with nothing on it costs nothing. Set a maximum charge per run in the run options and the Actor stops cleanly when it's reached.

Tips

  • Feed it the company's main domain. It finds the contact and impressum pages by itself.
  • For a list of mostly US or UK companies on .com domains, set the country so local numbers come back in international format.
  • Filter on emails.type = role for outreach that goes to shared inboxes, which is usually the safer choice under privacy rules.

Responsible use

  • It collects only business contact details a company publishes on its own website. It never leaves the website's own domain (its subdomains like www. or shop. are fine), never uses search engines or third-party lookups, and never guesses, generates or verifies email addresses.
  • It respects robots.txt for every request, waits at least a second between requests to the same website (longer if robots.txt asks), and names itself in its User-Agent (WebsiteContactsBot).
  • It doesn't collect people's names, job titles or personal social profiles.
  • You are responsible for how you use the data. Contact details of businesses can still be personal data (for example a named employee's work email), so follow the laws that apply to you, such as GDPR in the EU and UK and CAN-SPAM in the US: have a lawful basis, honor opt-outs, and don't send spam.

This Actor isn't affiliated with or endorsed by any of the websites it reads or the social networks it links to.