Email & Phone Extractor – Scrape Contacts from Websites avatar

Email & Phone Extractor – Scrape Contacts from Websites

Deprecated

Pricing

from $10.00 / 1,000 results

Go to Apify Store
Email & Phone Extractor – Scrape Contacts from Websites

Email & Phone Extractor – Scrape Contacts from Websites

Deprecated

Paste a list of website URLs and get the contacts published on those pages: email addresses, phone numbers and LinkedIn, X, Instagram, Facebook, GitHub and Discord links. One row per contact, de-duplicated and stamped with the page it came from. Pages are rendered in a real browser. No API key.

Pricing

from $10.00 / 1,000 results

Rating

0.0

(0)

Developer

R.L.

R.L.

Maintained by Community

Actor stats

0

Bookmarked

22

Total users

0

Monthly active users

8 days ago

Last modified

Categories

Share

Give this Actor a list of website URLs and it returns the contact details published on those pages: email addresses, phone numbers, and LinkedIn, X (Twitter), Instagram, Facebook, GitHub and Discord links — one row per contact, de-duplicated across the run, each stamped with the page it came from.

It loads every page in a real browser (Camoufox, a stealth Firefox build), so contact details that only appear after the page's JavaScript runs are still seen. It is site-agnostic: company homepages, "contact us" and "about" pages, directory pages, personal sites, conference pages — anything reachable without a login.

What does it extract?

contact_typeWhat it matches
emailEmail addresses published as mailto: links.
phone_notel: links; on a page with no tel: link, phone numbers detected in the page text using the phone_country you set.
linkedin_urlLinkedIn personal (/in/…) and company (/company/…) profile URLs.
x_urlX / Twitter profile URLs. twitter.com links are normalised to x.com.
instagram_urlInstagram profile URLs.
facebook_urlFacebook page and profile URLs on www.facebook.com.
github_urlGitHub user and organisation URLs (the profile root, not repositories).
discord_urlDiscord links (discordapp.com).

Deep links, tracking-parameter URLs and post/status URLs are filtered out, so you get the profile itself rather than every share button on the page.

How do I extract emails from a list of websites?

  1. Put your URLs into Start URLs — paste them one per line, or link a file or Google Sheet of URLs.
  2. Leave Max Crawl Depth at 0 to look only at the pages you listed, or raise it to also follow links found on those pages.
  3. Set Phone country to the country whose phone-number format you expect (e.g. US, GB, DE).
  4. Click Start, then download the dataset as JSON, CSV or Excel — or fetch it through the Apify API.

What input does it take?

FieldTypeDefaultDescription
start_urlsarray of {url}–Required. The pages to extract contacts from.
max_depthinteger00 = only the pages you listed. Higher values also follow links found on those pages, up to this depth, staying on the same hostname.
phone_countrystringUSTwo-letter country code used to recognise phone numbers written in page text.
{
"start_urls": [
{ "url": "https://www.whitehouse.gov/" }
],
"phone_country": "US",
"max_depth": 1
}

What does each row contain?

Three fields: the kind of contact, the contact itself, and the page it was found on.

contactcontact_typeurl
0https://x.com/whitehousex_urlhttps://www.whitehouse.gov
1https://www.instagram.com/whitehouse/instagram_urlhttps://www.whitehouse.gov
2(202) 225-1904phone_nohttps://www.whitehouse.gov/visit/
3(202) 456-7041phone_nohttps://www.whitehouse.gov/visit/
4(202) 224-3121phone_nohttps://www.whitehouse.gov/visit/
5https://instagram.com/whitehouse/instagram_urlhttps://www.whitehouse.gov/wire/

Each contact is emitted once per run, even if it appears on many pages; url is the first page it was seen on. One row is one billable result.

How much does it cost?

$0.01 per contact row returned, plus Apify platform usage (the browser is the main cost driver). A page with an email, a phone number and three social links is five rows. To put a ceiling on a run, set its maximum cost per run in the run options and keep max_depth at 0 — raising the depth multiplies the number of pages visited.

FAQ

Do I need an API key, an account or a proxy? No. The Actor fetches the pages itself with a built-in browser. It can only read what a visitor can read without logging in.

Can I feed it a list of hundreds of websites? Yes — that is the normal use. Put every URL into start_urls (paste them, or link a file or Google Sheet of URLs) and run it once.

Where do the email addresses come from? From mailto: links on the page. A page that publishes its address only as an image, or hides it behind a contact form, produces no email row — check such sites manually or crawl deeper with max_depth.

How are phone numbers found? tel: links are preferred. If a page has none, the page text is scanned for numbers in the format of the phone_country you set, so set it to the country you are prospecting in — a US setting will miss most German numbers.

Will it crawl the whole website? Only if you ask it to. max_depth 0 (the default) visits exactly the URLs you supplied; a higher value follows links found on those pages, up to that depth, and stays on the same hostname rather than wandering onto other sites.

Are duplicate contacts removed? Yes. The same email, phone number or profile URL is returned once per run, no matter how many pages carry it, so you are not billed twice for the same contact.

Can it pull contacts out of the LinkedIn or Instagram profiles it finds? No. It collects the profile links published on the pages you give it; it never logs into those platforms. Use a dedicated social-profile Actor for what is behind those links.

Did you find this useful?

Rate this Actor on Apify — your feedback helps other people find it and helps us keep improving it.