Website Contact Scraper: Emails, Phones & Socials avatar

Website Contact Scraper: Emails, Phones & Socials

Pricing

from $10.00 / 1,000 website with results

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

Website Contact Scraper: Emails, Phones & Socials

Paste company websites, get one row per site: emails checked in DNS, phones, social profiles, company name, address, key people with their roles (from the legal notice), careers page and the job board it uses. Respects robots.txt. Pay only for sites with results.

Pricing

from $10.00 / 1,000 website with results

Rating

0.0

(0)

Developer

Bruno Petrelli

Bruno Petrelli

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

12 hours ago

Last modified

Share

Paste a list of company websites and get one clean row per website: emails, phone numbers, social profiles, company name and address, the people who run the company (managing directors, board members, founders) with their roles, the careers page, and the job board the company uses (Greenhouse, Lever, Workday, Ashby, BambooHR and more). Every email is checked in DNS, so addresses on domains that cannot receive mail are left out.

You pay only for websites where something was found. Sites with no contact data, sites that can't be reached and sites whose robots.txt says no are still listed, for free.

Why this one

  • One row per website, not one per page. Everything found on the homepage, contact, imprint/Impressum, about and careers pages is merged and deduplicated.
  • Fast and cheap. No browser, no proxies: plain HTTP requests, about 1 to 2 seconds per site. Stripe, Userpilot, ottonova, Basecamp and one made-up domain took 9 seconds in our test, 5 pages each.
  • Emails other scrapers miss: Cloudflare "email protection" ([email protected]) is decoded, as are \u0040/@ escapes and info [at] company [dot] com.
  • Less junk: image names like logo@2x.png, form placeholders (your.email@company.com, beispiel@email.de, nombre@ejemplo.com), example.com and tracking IDs are dropped.
  • Best emails first: the site's own domain, then shared inboxes (info@, sales@, support@), then linked addresses before names that only appear in text. Each email says where it came from.
  • Decision makers, from sources meant to name them. In Germany, Austria and Switzerland the legal notice (Impressum) must name the managing directors, and many sites mark up their founders and team as schema.org Person. The Actor reads both: Geschäftsführer, Vorstand, Vertreten durch, Management board, Directors, Gérant, Directeur de la publication, Administrador único and more, each with the role in English. No guessing from running text. On n26.com it finds the management and supervisory boards; on userpilot.com the CEO and CTO.
  • Emails that can receive mail. Each email domain is looked up in DNS (MX records, RFC 5321 and RFC 7505). Typos, placeholders and dead domains are dropped from the list. No test email is sent and no mail server is contacted.
  • Hiring signal included: the careers page and the job board URL, ready to paste into our ATS Jobs Scraper to get the open jobs.
  • Polite by default: robots.txt is respected, pages of one site are read one at a time, and the crawler names itself (website-contacts).

Use it for

  • Lead generation: turn a list of domains (from a CRM, a directory or Google Maps) into emails, phones and LinkedIn pages.
  • CRM enrichment: fill in missing social profiles, phone numbers and addresses.
  • Sales intelligence: see which companies are hiring and on which applicant tracking system.
  • AI agents: plain JSON, one object per company, easy for an LLM to read. Agents can call it through the Apify MCP server.

Input

FieldWhat it does
Websites (required)One per line: stripe.com, www.example.de, or any URL of the site.
Max pages per websiteHomepage included, default 5. The Actor picks contact, imprint, about, careers and team pages.
Max emails per websiteDefault 20, best first. emailsTotal tells you how many were found.
Only emails on the site's own domainDrops regulators, agencies and personal addresses the site mentions.
Drop emails whose domain cannot receive mailOn by default. DNS check of every email domain.
People and their rolesOn by default. Managing directors, board members, owners and founders the site names.
Respect robots.txtOn by default.
Websites in parallelDefault 5.
{
"websites": ["stripe.com", "userpilot.com", "https://www.ottonova.de"],
"maxPagesPerSite": 5
}

Output

One item per website:

{
"input": "userpilot.com",
"domain": "userpilot.com",
"url": "https://userpilot.com/",
"status": "ok",
"error": null,
"companyName": "Userpilot",
"description": "Userpilot is the AI-powered, no-code product growth platform...",
"emails": ["sales@userpilot.com", "accounting@userpilot.com", "support@userpilot.com"],
"emailsTotal": 3,
"phones": ["(702) 830-7422", "+17373452881", "+17028190599", "+1-702-839-7422"],
"linkedin": ["https://www.linkedin.com/company/teamuserpilot"],
"linkedinPeople": [],
"twitter": ["https://x.com/teamuserpilot"],
"facebook": ["https://www.facebook.com/userpilot"],
"instagram": [],
"youtube": ["https://www.youtube.com/@userpilot"],
"tiktok": [],
"github": [],
"pinterest": [],
"threads": [],
"careersPage": "https://userpilot.bamboohr.com/careers",
"jobBoards": [{ "platform": "bamboohr", "url": "https://userpilot.bamboohr.com/careers" }],
"address": "7200 N Mopac Expy, Suite 300, 78731 Austin, TX, US",
"logo": "https://userpilot.com/wp-content/uploads/2026/04/userpilot-logo-2026-dark.svg",
"language": "en-us",
"people": [
{ "name": "Yazan Sehwail", "role": "Co-Founder & CEO", "roleAsWritten": "Co-Founder & CEO", "source": "schema.org", "page": "https://userpilot.com/" },
{ "name": "Thabet Gharabah", "role": "Co-Founder & CTO", "roleAsWritten": "Co-Founder & CTO", "source": "schema.org", "page": "https://userpilot.com/" }
],
"emailDetails": [
{ "email": "sales@userpilot.com", "type": "role", "source": "cloudflare", "page": "https://userpilot.com/contact-us/", "ownDomain": true, "mailServer": true }
],
"pagesVisited": ["https://userpilot.com/", "https://userpilot.com/contact-us/"],
"scrapedAt": "2026-09-24T19:00:00.000Z"
}

Field notes:

  • status: ok (something found, charged), no_data (nothing found, free), blocked_by_robots (free), unreachable or http_error (free, with the reason in error).
  • emailDetails[].source: mailto link, cloudflare (decoded), schema.org data, obfuscated ("[at]"), or text. type is role for shared inboxes and personal otherwise.
  • phones come only from tel: links and schema.org data, which the site itself marks as phone numbers. Digits in running text are too often prices or IDs.
  • people[]: name as the site writes it (academic titles kept), role in English (Managing director, Executive board, Supervisory board, Legal representative, Owner, Founder, or the job title from schema.org; a note like (Chair) is kept), roleAsWritten in the site's language, source (legal notice or schema.org) and the page. One entry per person: roles found on several pages are joined with ; . At most 25 per site.
  • emailDetails[].mailServer: true when the domain can receive mail, false when it cannot (no such domain, or a "null MX"), null when DNS did not answer. Addresses with false are not in emails.
  • linkedin holds company pages; linkedinPeople holds personal profiles linked from the site.
  • Social lists put handles that contain the site's name first (stripe, stripehq) before other accounts the site links to.
  • jobBoards lists the job boards the pages link to. Each URL can be pasted as is into the ATS Jobs Scraper.
  • The run's OUTPUT record in the key-value store has the status of every input, including invalid and duplicate ones.

Pricing

Pay per event: one event per website with results (status: ok). People and the email check are included in that price. A site where nothing was found, or that could not be read, costs nothing. The number of pages read does not change the price. Set a maximum cost for the run and the Actor stops cleanly when it is reached.

Good to know

  • Static HTML only. Contact data that a site loads with JavaScript after the page opens (some contact widgets, some careers pages) is not visible without a browser. In our tests most sites put emails, phones and social links in the HTML, but not all.
  • The job board is found when a page links to it. Careers pages that load their jobs with JavaScript show the careers page but may not show the board.
  • robots.txt is read for the site and for any domain it redirects to. A server error on robots.txt means "do not crawl" (RFC 9309), so such sites come back as blocked_by_robots.
  • Pages are read on the host the homepage lands on (for example www.example.com), not on other subdomains like blog. or press.
  • Personal data: names, emails and phone numbers of people are personal data under the GDPR and similar laws. Use the results only for purposes you have a lawful basis for, such as B2B outreach with a legitimate interest, and honor opt-out requests. onlyOwnDomainEmails and the email type help you keep to company inboxes.

Support

A site that should have data but came back empty, or an email that looks wrong? Open an issue on the Actor's Issues tab with the website. Issues get an answer within a few days.