Website Contact Extractor - Emails, Phones & Socials
Pricing
$20.00 / 1,000 website processeds
Website Contact Extractor - Emails, Phones & Socials
Give it a list of websites, get back the emails, phone numbers and social profiles published on each one. Built to run straight after a Google Maps or directory scrape.
Pricing
$20.00 / 1,000 website processeds
Rating
0.0
(0)
Developer
Project Desk
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 hours ago
Last modified
Categories
Share
Website Contact Extractor — emails, phone numbers and social profiles
Give it a list of websites. Get back the email addresses, phone numbers and social profiles each one publishes — as a clean table you can export to CSV, Excel, JSON, or push straight into your CRM.
It is built to run immediately after a Google Maps, directory or search scrape. Those give you a company name and a website. They do not give you a way to reach anyone. This closes that gap.
What it does
For every website you give it, this Actor:
- Fetches the homepage.
- Finds the pages most likely to carry contact details — contact, about, impressum, team, support — and fetches those too.
- Pulls out every email address, phone number and social profile it can find.
- Cleans the result: no image filenames mistaken for emails, no Sentry or Wix tracker
addresses, no
noreply@, no share-button links pretending to be the company's Facebook page.
Things most extractors miss, and this one handles
- Cloudflare-obfuscated emails (
data-cfemail) — decoded, not skipped. These are addresses a human sees in the browser and a naive scraper never returns. - Written-out addresses —
sid [at] example [dot] com,sid(at)example(dot)com. - Phone numbers in E.164 —
+442079460958, not020 7946 0958 (opt 2). Validated with Google'slibphonenumber, so years, VAT numbers and prices do not come back as phones. - Role vs personal emails —
info@andsales@are separated fromfirstname.lastname@, in their own output columns, so you can route them differently. - Expired SSL certificates — small-business sites are full of them. Handled by default instead of failing the row.
Input
| Field | Type | Default | What it does |
|---|---|---|---|
startUrls | array | — | The websites. Paste them, upload a CSV, or link the dataset from another Actor. Bare domains (example.com) are fine. |
followContactPages | boolean | true | Also check the contact/about pages. Leaving this on roughly triples the hit rate. |
maxPagesPerSite | integer | 3 | Homepage plus this many contact-ish pages. |
defaultPhoneRegion | string | — | Two-letter code (US, GB, IN, DE) for reading local numbers written without a country code. |
maxConcurrency | integer | 10 | Websites handled at once. |
respectRobotsTxt | boolean | true | Skip pages the site asks crawlers not to fetch. |
ignoreSslErrors | boolean | true | Keep going on expired or mismatched certificates. |
proxyConfiguration | object | off | Optional. Most sites do not need one; switch it on if you hit blocks at volume. |
Minimal input:
{"startUrls": [{ "url": "https://www.apify.com" },{ "url": "hubspot.com" }]}
Output
One row per website.
{"website": "https://decathlon.in/","domain": "decathlon.in","status": "ok","totalContacts": 5,"title": "Buy Sporting Goods, Sportswear and Equipments | Download App","emails": ["care.india@decathlon.com"],"emailsRole": ["care.india@decathlon.com"],"emailsPersonal": [],"phones": [],"socials": {"twitter": ["https://x.com/Decathlon_ind"],"facebook": ["https://www.facebook.com/decathlonindia"],"instagram": ["https://www.instagram.com/decathlonsportsindia"],"youtube": ["https://www.youtube.com/@decathlon_india"]},"pagesCrawled": ["https://decathlon.in/","https://decathlon.in/support/hc"],"error": null}
status is one of:
| Status | Meaning |
|---|---|
ok | At least one contact was found. |
no-contacts-found | The site was read fine and publishes nothing reachable. |
failed | The site could not be read — see error (http-403, timeout, ...). |
skipped-by-robots | The site's robots.txt asks crawlers not to fetch that page. |
Pricing
Pay per website processed. One charge per website you hand in, whatever comes back — the fetching happens either way, and a site that publishes nothing costs the same work as one that publishes ten addresses. No subscription, no minimum, no charge for a run you cancel.
If a website you care about returns failed, re-run just that one with the proxy switched on.
Honest limits
- Only what is published. This reads the public website. It does not guess addresses, buy them from a database, or verify that an inbox accepts mail.
- No JavaScript rendering. Contact details behind a JS-only widget or a "reveal email" button will not be found. The vast majority of business sites put them in the HTML.
- Hard-blocked sites. A few sites return 403 to anything that is not a browser. Turn the proxy on for those.
- Social links are read off the site's own pages. No request is ever made to LinkedIn, Instagram or any other platform, and nothing behind a login is touched.
Common pairings
- Google Maps Scraper → this — turn a list of local businesses into a contactable list.
- Any directory or search scrape → this — the same last mile.
- Your own customer list → this — refresh contact details that have gone stale.
Compliance note
Scraping publicly published business contact details is legal in most jurisdictions, but
what you do next is regulated — GDPR, CAN-SPAM, CASL and India's DPDP all govern
unsolicited outreach. Personal addresses (firstname.lastname@) carry more obligations than
role addresses (info@), which is exactly why this Actor separates them for you. Check your
own obligations before you send.