Website Contact Scraper: Emails, Phones & Socials
Pricing
from $10.00 / 1,000 website with results
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
12 hours ago
Last modified
Categories
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 andinfo [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.comand 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 únicoand 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
| Field | What it does |
|---|---|
| Websites (required) | One per line: stripe.com, www.example.de, or any URL of the site. |
| Max pages per website | Homepage included, default 5. The Actor picks contact, imprint, about, careers and team pages. |
| Max emails per website | Default 20, best first. emailsTotal tells you how many were found. |
| Only emails on the site's own domain | Drops regulators, agencies and personal addresses the site mentions. |
| Drop emails whose domain cannot receive mail | On by default. DNS check of every email domain. |
| People and their roles | On by default. Managing directors, board members, owners and founders the site names. |
| Respect robots.txt | On by default. |
| Websites in parallel | Default 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),unreachableorhttp_error(free, with the reason inerror).emailDetails[].source:mailtolink,cloudflare(decoded),schema.orgdata,obfuscated("[at]"), ortext.typeisrolefor shared inboxes andpersonalotherwise.phonescome only fromtel:links and schema.org data, which the site itself marks as phone numbers. Digits in running text are too often prices or IDs.people[]:nameas the site writes it (academic titles kept),rolein English (Managing director,Executive board,Supervisory board,Legal representative,Owner,Founder, or the job title from schema.org; a note like(Chair)is kept),roleAsWrittenin the site's language,source(legal noticeorschema.org) and thepage. One entry per person: roles found on several pages are joined with;. At most 25 per site.emailDetails[].mailServer:truewhen the domain can receive mail,falsewhen it cannot (no such domain, or a "null MX"),nullwhen DNS did not answer. Addresses withfalseare not inemails.linkedinholds company pages;linkedinPeopleholds 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. jobBoardslists 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.
onlyOwnDomainEmailsand 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.