Website Contact Extractor: Emails, Phones, Socials avatar

Website Contact Extractor: Emails, Phones, Socials

Pricing

from $2.00 / 1,000 website scanneds

Go to Apify Store
Website Contact Extractor: Emails, Phones, Socials

Website Contact Extractor: Emails, Phones, Socials

Extract emails, phone numbers (E.164), social profiles, contact page and address from company websites. Crawls homepage plus contact, about, team and imprint pages, obeys robots.txt. One row per website.

Pricing

from $2.00 / 1,000 website scanneds

Rating

0.0

(0)

Developer

Ailu Studio

Ailu Studio

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Security

Limited permissions

Share

Website Contact Extractor: Emails, Phone Numbers, Social Links and Addresses from Company Websites

Give it a list of company websites and get one clean row per website: email addresses, phone numbers normalised to E.164, LinkedIn / X (Twitter) / Facebook / Instagram / YouTube / TikTok / GitHub profiles, the contact page URL, the company name and the postal address from schema.org JSON-LD. The Actor fetches the homepage and up to 8 contact-like pages on the same domain (contact, imprint/Impressum, about, team, support, legal, privacy), reads robots.txt first and never submits forms or logs in. Unlike per-page priced contact scrapers, you pay once per website, whatever number of pages was scanned, and every item comes with the pages it was found on (foundOn). No browser and no proxy are needed, so runs are fast and cheap.

Use cases

  • B2B lead research: turn a list of company domains into generic contact emails (info@, sales@, support@) and phone numbers.
  • CRM enrichment: add LinkedIn company pages, X handles and headquarters addresses to existing accounts.
  • Supplier and partner directories: collect imprint (Impressum) contact data of European companies.
  • Data quality: check which websites still publish a contact page, an email or a phone number.
  • AI agents: a single call returns structured contact data instead of raw HTML.

Input

FieldDefaultMeaning
websites["https://apify.com", "https://www.python.org"]Company websites, one per line. Bare domains are accepted (acme.com). Duplicates by host are removed.
maxPagesPerSite8Contact-like pages fetched per website in addition to the homepage (0 to 19), best candidates first.
includePhonestrueExtract phone numbers (tel: links, JSON-LD, text next to a phone keyword).
includeSocialLinkstrueExtract social profile links.
sameDomainEmailsOnlyfalseKeep only emails on the website's own domain in emails.
timeoutSecs20Timeout per page.
maxConcurrency3Websites crawled in parallel (pages of one site are fetched one by one).
maxItems100Maximum charged rows (websites whose homepage loaded).

Example: { "websites": ["stripe.com", "https://www.hetzner.com"], "maxPagesPerSite": 5, "sameDomainEmailsOnly": true }

Output

One row per website. Fields:

FieldMeaning
idsite:<host>
inputUrl, domain, finalUrlInput, registrable domain, homepage after redirects
companyNameog:site_name, JSON-LD Organization name or page title
emails, emailsSameDomainUnique emails (same-domain first) and the same-domain subset
phones, phonesE164Numbers as written, and valid numbers in E.164
socialLinks{ linkedin, twitter, facebook, instagram, youtube, tiktok, github }, arrays of profile URLs
contactPageUrlContact page that was found, if any
addressesschema.org PostalAddress objects (street, locality, region, postal code, country, formatted)
countryHintCountry used to read national phone numbers
pagesCrawled, crawledUrlsPages scanned
robotsBlockedPages skipped because robots.txt disallows them
foundOnMap item -> page URLs where it appeared
error, fetchedAtError reason (free rows) and run time

Sample row (trimmed):

{
"id": "site:apify.com", "inputUrl": "https://apify.com", "domain": "apify.com", "finalUrl": "https://apify.com/",
"companyName": "Apify",
"emails": ["support@apify.com", "hello@apify.com", "legal@apify.com", "privacy@apify.com"],
"emailsSameDomain": ["support@apify.com", "hello@apify.com", "legal@apify.com", "privacy@apify.com"],
"phones": [], "phonesE164": [],
"socialLinks": { "linkedin": ["https://www.linkedin.com/company/apify"], "twitter": ["https://x.com/apify"], "facebook": [], "instagram": [],
"youtube": ["https://www.youtube.com/apify"], "tiktok": ["https://www.tiktok.com/@apifytech"], "github": ["https://github.com/apify"] },
"contactPageUrl": "https://apify.com/contact",
"addresses": [{ "streetAddress": "Na Příkopě 959/27", "addressLocality": "Prague", "addressRegion": null, "postalCode": "11000",
"addressCountry": "CZ", "postOfficeBoxNumber": null, "formatted": "Na Příkopě 959/27, 11000 Prague, CZ" }],
"countryHint": "CZ", "pagesCrawled": 8, "robotsBlocked": 0,
"foundOn": { "hello@apify.com": ["https://apify.com/contact"] },
"error": null, "fetchedAt": "2026-11-04T11:30:02.588Z"
}

How it works and limits

  • robots.txt is read for every host before any page is fetched (rules for User-agent: * or apify-actor-website-contact-extractor). If robots.txt answers 5xx or cannot be reached, the host is not crawled. Disallowed pages are counted in robotsBlocked.
  • Pages are found from homepage links (URL or link text matching contact, kontakt, impressum, imprint, about, team, support, legal, privacy and a few translations), then from sitemap.xml when the homepage has too few such links. Only the website's own domain and its sub-domains are visited, at most 20 pages per website, at most 2 requests per second per host.
  • Emails: mailto links, visible text, JSON-LD, Cloudflare email protection and simple obfuscation such as name [at] domain [dot] com. Image names like logo@2x.png, placeholder domains and error-tracking addresses are removed.
  • Phones: tel: links and JSON-LD always; numbers in text only when they are valid (libphonenumber) and international, or national with a phone keyword nearby and a known country.
  • Plain HTML only: content that appears only after JavaScript runs, contact forms and pages behind logins or bot challenges are not covered. A website whose homepage fails (HTTP error, timeout, non-HTML, robots.txt) gets a free row with error.

Pricing

Pay per result: $2.00 per 1,000 rows (result event). Platform usage is billed separately by Apify. Removed/free rows are not charged.

One row is one website whose homepage loaded, however many pages were scanned. Error rows are free.

Not affiliated with any of the scanned websites or social networks. Uses only publicly accessible web pages and obeys robots.txt. Data licence/terms: each website's own terms of use apply. This Actor is meant for B2B lead research on public company websites. It does not scrape personal social media profiles; it only lists links that a company publishes on its own site. You are responsible for complying with GDPR, CAN-SPAM, ePrivacy and other laws when you store or contact the addresses you collect, and with each website's terms of use.

FAQ

Why did a website return no emails? Many companies only offer a contact form or load contact details with JavaScript. Check crawledUrls, robotsBlocked and error.

Why are some numbers in phones but not in phonesE164? A national number such as (415) 555-2671 can only be converted when the country is known. Numbers with a + prefix are always converted.

Does it verify the emails? No. Use an email validation Actor (syntax, MX, disposable checks) on the results.

Can I crawl more pages per site? Yes, up to 19 extra pages with maxPagesPerSite; the price per website stays the same.