Email & Phone Extractor – Scrape Contacts from Websites
DeprecatedPricing
from $10.00 / 1,000 results
Email & Phone Extractor – Scrape Contacts from Websites
DeprecatedPaste 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.
Maintained by CommunityActor 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_type | What it matches |
|---|---|
email | Email addresses published as mailto: links. |
phone_no | tel: links; on a page with no tel: link, phone numbers detected in the page text using the phone_country you set. |
linkedin_url | LinkedIn personal (/in/…) and company (/company/…) profile URLs. |
x_url | X / Twitter profile URLs. twitter.com links are normalised to x.com. |
instagram_url | Instagram profile URLs. |
facebook_url | Facebook page and profile URLs on www.facebook.com. |
github_url | GitHub user and organisation URLs (the profile root, not repositories). |
discord_url | Discord 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?
- Put your URLs into Start URLs — paste them one per line, or link a file or Google Sheet of URLs.
- Leave Max Crawl Depth at
0to look only at the pages you listed, or raise it to also follow links found on those pages. - Set Phone country to the country whose phone-number format you expect (e.g.
US,GB,DE). - Click Start, then download the dataset as JSON, CSV or Excel — or fetch it through the Apify API.
What input does it take?
| Field | Type | Default | Description |
|---|---|---|---|
start_urls | array of {url} | – | Required. The pages to extract contacts from. |
max_depth | integer | 0 | 0 = only the pages you listed. Higher values also follow links found on those pages, up to this depth, staying on the same hostname. |
phone_country | string | US | Two-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.
| contact | contact_type | url | |
|---|---|---|---|
| 0 | https://x.com/whitehouse | x_url | https://www.whitehouse.gov |
| 1 | https://www.instagram.com/whitehouse/ | instagram_url | https://www.whitehouse.gov |
| 2 | (202) 225-1904 | phone_no | https://www.whitehouse.gov/visit/ |
| 3 | (202) 456-7041 | phone_no | https://www.whitehouse.gov/visit/ |
| 4 | (202) 224-3121 | phone_no | https://www.whitehouse.gov/visit/ |
| 5 | https://instagram.com/whitehouse/ | instagram_url | https://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.