Turn a plain list of websites into a clean contact database. Website Contact Scraper extracts emails, phone numbers, and social media links (LinkedIn, Instagram, X/Twitter, Facebook, YouTube) from any list of domains — scanning both the homepage and the Contact/About pages where companies actually publish their contact details. Feed it one URL or thousands; each run returns structured rows you can push straight into your CRM, outreach sequencer, or spreadsheet.
No API key. No login. No account with the target sites. Just paste domains (or leave the input empty for a quick demo crawl) and get back deduped emails, phone numbers, five social profiles per site, plus page title and meta description for lead qualification. It's bulk-ready and built to produce thousands of results per run — ideal for B2B lead generation, cold outreach list building, CRM enrichment, and market research. Every result is exportable to JSON, CSV, JSONL, Excel, or XML in one click.
Each row is a single crawled page (a homepage or a Contact/About page) with the contact data found on it.
📧 Emails
emails— All email addresses discovered on the page, deduplicated per page. Your primary outreach signal — feed straight into a sequencer or verifier.
📞 Phone numbers
phones— Phone numbers collected fromtel:links and page text. Great for sales calling lists and multi-channel outreach.
🔗 Social media links (5 platforms)
socials.linkedin— LinkedIn company or profile URL. The single most valuable B2B enrichment field for prospecting.socials.twitter— X/Twitter profile URL for social listening and outreach.socials.instagram— Instagram profile URL — essential for DTC, retail, hospitality, and creator markets.socials.facebook— Facebook page URL for local-business and community outreach.socials.youtube— YouTube channel URL for content and partnership research.
🏷️ Page metadata (lead qualification)
pageTitle— The page's meta title. Use it to qualify and label leads at a glance.metaDescription— The page's meta description — quick context on what the company does.rootDomain— The normalized root domain, so you can cluster and dedupe multiple pages back to one company.pageType— Page classification such asHomeorContact, so you know where each contact came from.url— The exact page URL where the data was found, for auditing and traceability.
- B2B lead generation. Turn a list of company domains into a ready-to-use lead sheet of emails, phone numbers, and social profiles — the fastest way to go from "list of websites" to "list of contacts."
- Cold outreach list building. Build outreach-ready lists and import them directly into your email sequencer or dialer, with the
pageTitlefield on hand to personalize the first line. - CRM enrichment. Append company emails, phone numbers, and LinkedIn/Instagram/Facebook links onto existing accounts, keyed by
rootDomainso every record maps back to the right company. - Directory enrichment. Already have a directory or marketplace of businesses? Run their domains through and enrich each listing with live contact and social data.
- Market research. Map a market's contact footprint and brand channels — see which competitors publish emails, run active Instagram or LinkedIn presences, or list phone numbers.
- Sales prospecting. Cluster results by
rootDomain, keep only domains that have an email or a LinkedIn URL, and qualify each one usingpageTitleandmetaDescriptionbefore it ever reaches a rep. - Recruiting & partnership outreach. Extract contact and social channels for target companies to reach hiring managers, founders, or partnership teams.
- Event & sponsor research. Collect organizer emails and social handles from exhibitor or sponsor website lists for follow-up.
You can run Website Contact Scraper four ways. All of them are client-side — you never host or manage anything; the Actor runs on the Apify platform.
- Open the Actor: apify.com/logiover/website-contact-scraper.
- Click Try for free.
- Leave the input empty to run a small demo crawl and preview the output format, or paste your list of websites into Start URLs.
- Optionally set Max depth to
1so it also scans Contact/About pages (recommended), then click Start. - When the run finishes, open the Dataset tab and export to CSV, JSON, or Excel — or grab thousands of results at once.
Install the CLI, log in, and call the Actor:
npm i -g apify-cli
apify login
apify call logiover/website-contact-scraperPass your own input with real fields (here we scan two sites plus their Contact/About pages):
echo '{
"startUrls": [
{ "url": "https://apify.com" },
{ "url": "https://www.stripe.com" }
],
"maxDepth": 1,
"maxRequestsPerCrawl": 40
}' | apify call logiover/website-contact-scraper --input-stdinSee examples/cli.md for input files and how to export the dataset from the terminal.
POST your input to the run-sync-get-dataset-items endpoint to run the Actor and get dataset items back in the same response:
curl -X POST "https://api.apify.com/v2/acts/logiover~website-contact-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"startUrls": [
{ "url": "https://apify.com" },
{ "url": "https://www.stripe.com" }
],
"maxDepth": 1
}'The response body is the array of dataset items (one per page) directly — no extra fetch needed. See examples/api-curl.md for async runs, polling, and CSV downloads.
Call the Actor from your own app and read the results, client-side only.
JavaScript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const input = {
startUrls: [{ url: 'https://apify.com' }, { url: 'https://www.stripe.com' }],
maxDepth: 1,
};
const run = await client.actor('logiover/website-contact-scraper').call(input);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const item of items) {
console.log(item.rootDomain, item.emails, item.socials?.linkedin);
}Python
from apify_client import ApifyClient
client = ApifyClient("YOUR_TOKEN")
run_input = {
"startUrls": [{"url": "https://apify.com"}, {"url": "https://www.stripe.com"}],
"maxDepth": 1,
}
run = client.actor("logiover/website-contact-scraper").call(run_input=run_input)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["rootDomain"], item.get("emails"), item.get("socials", {}).get("linkedin"))Full versions: examples/javascript.md and examples/python.md.
Every field is optional. Run the Actor with an empty input and it performs a small demo crawl of well-known sites so you can preview the output before committing your own list.
| Field | Type | Default | Description |
|---|---|---|---|
startUrls |
array of { url } |
(demo crawl) | List of websites to scrape. Leave empty to run a small demo crawl of well-known sites and preview the output. |
maxDepth |
integer (min 0, max 1) |
1 |
Crawl depth. 0 = homepage only. 1 = also scan Contact/About pages (recommended) where contact details usually live. |
maxRequestsPerCrawl |
integer | 200 (prefill 40) |
Safety limit on the total number of pages crawled per run. Raise it for large lists, lower it to cap cost. |
useJsBrowser |
boolean (toggle) | false |
Turn on for JavaScript-rendered sites where the fast mode returns empty pages. Slower and more expensive — leave off for most sites. |
proxyConfiguration |
object (proxy editor) | { "useApifyProxy": true } |
Apify Proxy settings. Datacenter proxy is sufficient for most sites. |
Tips
- Start with
maxDepth: 1— most companies publish emails and phone numbers on a Contact or About page, not the homepage. - Keep
useJsBrowseroff first. Only enable this toggle if a site returns empty results, since browser mode is slower and costs more. - Use
maxRequestsPerCrawlas a budget dial: a small number for quick previews, a larger number for full campaigns.
One row is produced per crawled page (a homepage or a Contact/About page).
| Field | Type | Description |
|---|---|---|
url |
string | Page URL where the data was found. |
rootDomain |
string | Root domain of the website (use it to cluster/dedupe pages to one company). |
pageType |
string | Page classification, e.g. Home or Contact. |
emails |
array | Discovered email addresses, deduplicated per page. |
phones |
array | Phone numbers from tel: links and page text. |
socials.linkedin |
string | LinkedIn profile/company URL. |
socials.twitter |
string | X/Twitter URL. |
socials.instagram |
string | Instagram URL. |
socials.facebook |
string | Facebook URL. |
socials.youtube |
string | YouTube URL. |
pageTitle |
string | Page meta title (useful for lead qualification). |
metaDescription |
string | Page meta description. |
The default Overview view highlights the fields you'll use most: rootDomain, emails, socials.linkedin, socials.instagram, pageTitle, and url.
{
"url": "https://www.example-agency.com/contact",
"rootDomain": "example-agency.com",
"pageType": "Contact",
"emails": [
"hello@example-agency.com",
"sales@example-agency.com"
],
"phones": [
"+1 415 555 0132",
"+44 20 7946 0958"
],
"socials": {
"linkedin": "https://www.linkedin.com/company/example-agency",
"twitter": "https://x.com/exampleagency",
"instagram": "https://www.instagram.com/exampleagency",
"facebook": "https://www.facebook.com/exampleagency",
"youtube": "https://www.youtube.com/@exampleagency"
},
"pageTitle": "Contact — Example Agency | Digital Marketing & Design",
"metaDescription": "Get in touch with Example Agency. Email, phone, and office locations for our team in San Francisco and London."
}Because the Actor runs on Apify, you can wire it into your stack without writing glue infrastructure:
- Schedules. Run the Actor on a recurring schedule (hourly, daily, weekly) to keep contact lists and CRM records fresh.
- Webhooks. Trigger a webhook when a run finishes to push new contacts to your own endpoint or pipeline.
- Google Sheets / S3 / storage. Export the dataset straight to Google Sheets or Amazon S3, or pull it via the API into any warehouse.
- Zapier / Make / n8n / Pipedream. Connect through Apify's integrations to fan results out to a CRM, email sequencer, Slack, or spreadsheet — no code required.
- CRM & sequencers. Import CSV/JSON output into HubSpot, Salesforce, Pipedrive, Instantly, Lemlist, and similar tools to start outreach immediately.
Every dataset can be exported in one click from the Apify Console, or fetched programmatically via the API:
- CSV — spreadsheet- and CRM-ready.
- JSON — full structured records, including the nested
socialsobject. - JSONL — newline-delimited JSON for streaming and data pipelines.
- Excel (XLSX) — open directly in Microsoft Excel or Google Sheets.
- XML — for legacy and enterprise systems.
Grab any format from the Dataset tab, or append &format=csv (or json, xlsx, xml) to the dataset items API endpoint.
Paste the website's URL into Start URLs and run the Actor. It scans the homepage and, with Max depth set to 1, the Contact/About pages, then returns every email address it finds in the emails field — deduplicated per page. You can do this for one site or thousands of sites in a single run.
Yes — this Actor is effectively a contact-scraping API you don't have to build or host. Call the Apify API endpoint with a list of domains and get back structured JSON containing emails, phone numbers, and social links. See the API examples. You bring an Apify token; there's no separate API key for the target websites and no login.
After a run finishes, open the Dataset tab and click Export → choose Excel or CSV. Programmatically, append &format=csv or &format=xlsx to the dataset items API endpoint to download the file directly. Both formats flatten the fields into columns that import cleanly into spreadsheets and CRMs.
You need an Apify account (which includes free monthly usage) but no API key for the target sites and no login to them. Pricing is pay-per-result, so you only pay for the contacts you extract. Run it with an empty input first to preview results at no meaningful cost.
As many as you like — the Actor is bulk-ready and designed to produce thousands of results per run. Add all your domains to Start URLs and use maxRequestsPerCrawl to set a page budget. For very large lists, raise maxRequestsPerCrawl or split the work across scheduled runs.
Yes. Alongside emails and social links, the Actor collects phone numbers from tel: links and page text into the phones array — useful for building calling lists and multi-channel outreach.
Set Max depth to 1 (the default). At depth 1 the Actor scans the homepage and the Contact/About pages, which is where most companies actually publish their email addresses and phone numbers. Each result's pageType field tells you whether the contact came from the Home or Contact page.
Most sites work in the default fast mode. If a particular site relies on JavaScript to render its contact details and returns empty results, enable the Use JS browser toggle. It's slower and more expensive, so keep it off unless you actually see empty pages for a given site.
Five: LinkedIn, X/Twitter, Instagram, Facebook, and YouTube, each in its own field under socials. LinkedIn and Instagram are surfaced in the default Overview view because they're the most useful for B2B and consumer prospecting respectively.
Yes. Feed the domains from your CRM or lead list into Start URLs, run the Actor, and match results back on rootDomain. Then append the emails, phones, and socials fields to each account. It's a fast way to fill in missing contact and social data at scale.
The Actor collects contact and social information that companies publish publicly on their own websites. As with any data tool, you are responsible for how you use the output — comply with applicable laws (such as GDPR and CAN-SPAM), each website's terms, and email/marketing regulations in your jurisdiction. Use the results for legitimate business outreach and honor opt-outs.
Build a complete lead-gen and enrichment pipeline with these companion Actors:
| Actor | What it does |
|---|---|
| Bulk Email Verifier | Validate the emails this Actor finds before you send — cut bounces and protect deliverability. |
| B2B Lead Scraper | Source new company and person leads with emails to feed into this contact scraper. |
| Bulk Social Profile Extractor | Go deeper on the social links you collect and pull structured profile data at scale. |
📄 Documentation only — the Actor runs on the Apify platform.
MIT © 2026 logiover