Website Contact Extractor - Emails, Phones & Socials avatar

Website Contact Extractor - Emails, Phones & Socials

Pricing

from $1.00 / 1,000 website pages

Go to Apify Store
Website Contact Extractor - Emails, Phones & Socials

Website Contact Extractor - Emails, Phones & Socials

Turn a list of up to 1,000 organization websites into contact records: published emails and phone numbers with their source page, company social links and postal address. Reads up to 20 pages per site and respects robots.txt. $1 per 1,000 pages read.

Pricing

from $1.00 / 1,000 website pages

Rating

0.0

(0)

Developer

Philip Kirkbride

Philip Kirkbride

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

15 hours ago

Last modified

Features

Limited permissions

Share

Website Contact Extractor

Turn a list of organization websites into source-linked contact records. Collect every email address and phone number the website publishes, including staff and team contacts, company social links, and postal addresses in structured website data. Useful for supplier research, business directories and checking your own organization's contact information.

What you get

One row per input domain, with domain, inputUrl, emails, phones, socials, address, pagesVisited, status, and error. Emails include their published value, first source URL and all sourceUrls. Phones and emails are deduplicated across pages. Phones preserve their published value and include e164 when the country is clear. Social fields are facebook, instagram, x, linkedinCompany, youtube, and tiktok; absent values are null. Addresses include their source URL.

Statuses are ok (email or phone found), no-contacts (accessible pages checked and absence confirmed), blocked (access or robots restrictions), unreachable (request failure or incomplete empty result), and refused (social or link-in-bio platform host such as linkedin.com or linktr.ee; no requests or page charges). A row can contain contacts and an error when another page could not be checked. pagesVisited counts successful HTML fetches, including an empty-result confirmation; it excludes robots, redirects and failed requests.

Input

{
"startUrls": ["https://plausible.io/", "https://www.monmouthcoffee.co.uk/"],
"maxPagesPerDomain": 5,
"countryCode": "GB"
}

startUrls accepts 1–1,000 domains or website URLs; repeated domains are merged (a domain listed with and without www, or twice, is read once) and every organization becomes exactly one row. maxPagesPerDomain defaults to 5 (maximum 20) unique pages per organization. The first page and linked contact, about and imprint pages are prioritized. An additional request confirms an empty result. countryCode is optional: supply a two-letter ISO country code to normalize local phone numbers. Validation checks only the two-letter alphabetic shape, not whether the code is assigned; unknown codes may leave e164 null. Certain unambiguous country domains also provide a region hint; ambiguous numbers retain a null e164.

Paste a list of any size, one domain or URL per line: example.org, https://example.org/contact and www.example.org are all accepted and count as one target. An empty input reads the ten sample organizations above, one row each, so a first run always shows you what a row looks like.

Reading many domains cheaply

Page reads are what you pay for, so set maxPagesPerDomain to what your list needs:

maxPagesPerDomainReads per organizationCost per organizationBest for
1the homepage$0.001large lists where the homepage email is enough
2–3homepage plus its contact page$0.002–0.003most lists: the contact page usually carries email and phone
5 (default)homepage, contact, about and imprint pagesup to $0.005small lists where you want everything published

At 1 page each, 1,000 domains cost about $1.00 plus the run start; at 3 pages each, about $3.00.

Output example

{
"domain": "plausible.io",
"inputUrl": "https://plausible.io/",
"emails": [
{
"value": "hello@plausible.io",
"sourceUrl": "https://plausible.io/contact",
"sourceUrls": [
"https://plausible.io/contact"
]
}
],
"phones": [],
"socials": {
"facebook": null,
"instagram": null,
"x": "https://x.com/PlausibleHQ",
"linkedinCompany": "https://www.linkedin.com/company/plausible-analytics",
"youtube": null,
"tiktok": null
},
"address": {
"value": {
"@type": "PostalAddress",
"streetAddress": "Västriku tn 2",
"postalCode": "50403",
"addressLocality": "Tartu",
"addressCountry": "EE"
},
"sourceUrl": "https://plausible.io/"
},
"pagesVisited": 5,
"status": "ok",
"error": null
}

Scope and limits

Only information published on the supplied organization website is collected. There are no guessed email patterns, mail-server checks, third-party lookups or logins. Supported email obfuscations are [at]/(at) and [dot]/(dot) (case-insensitive), URL percent encoding, and encoded email protection. JavaScript mailto links are not executed. Company social URLs are recorded as linked by the website; those platforms are never visited. Review linked accounts before use: website authors can mislabel a personal account as a company account. Article-author social links are not treated as company accounts. Emails and phones are returned whether they belong to a general mailbox, a named person, a team page or a structured Person record. Structured addresses retain only postal fields (streetAddress, addressLocality, addressRegion, postalCode, addressCountry, postOfficeBoxNumber, and an optional PostalAddress type); emails embedded in an address are returned in emails.

Social and link-in-bio platforms (LinkedIn, Facebook, Instagram, X, YouTube, TikTok, Threads, Pinterest, about.me, Linktree), including their subdomains, are refused before any requests or page charges. Sites on shared hosting such as wixsite.com or github.io are crawled like any other website.

Robots restrictions are respected. Downloads are capped at 2 MB per response and 6 MB per domain (including robots and retries). Pages requiring JavaScript may return no contacts. Contact forms are not email addresses. Results reflect a bounded crawl, not every page on a website. Use collected data in accordance with applicable privacy and communication rules.

Rows are saved as each organization finishes. The run stops early to preserve time to save results; the run status names failed or incomplete domains. A successful run can include refused, blocked or unreachable rows; if every target is refused or failed, the run fails unless it stopped at its maximum charge. A run that reaches its maximum charge returns normally even when no target succeeded. The ten-organization example input is bounded to a five-minute run.

Download results from the default dataset in JSON, CSV, Excel or other supported formats.

Billing

$0.005 per run start + $0.001 per website page fetched (up to maxPagesPerDomain per domain)

An empty-result confirmation may fetch the last page once more without a page charge. The run stops fetching when its maximum charge is reached and saves collected rows. Robots, redirects, failed requests and oversized pages are not charged. Dataset rows carry no charge. Charged page events equal pagesVisited minus free empty-result confirmations only when the maximum charge is not reached. At the charge limit, a fetched and saved page may not generate a charged page event, so that equality does not hold.

The platform run-start event is accounted per GB of memory, with a minimum of one: a default 512 MB run is one start event.