Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 

Repository files navigation

Website Contact Scraper — Emails, Phone Numbers & Social Links Extractor (No API)

Apify Actor No API key required Pay per result Export JSON | CSV | Excel

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.


What you get

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 from tel: 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 as Home or Contact, so you know where each contact came from.
  • url — The exact page URL where the data was found, for auditing and traceability.

Use cases

  • 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 pageTitle field on hand to personalize the first line.
  • CRM enrichment. Append company emails, phone numbers, and LinkedIn/Instagram/Facebook links onto existing accounts, keyed by rootDomain so 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 using pageTitle and metaDescription before 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.

Quick start

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.

Apify Console

  1. Open the Actor: apify.com/logiover/website-contact-scraper.
  2. Click Try for free.
  3. Leave the input empty to run a small demo crawl and preview the output format, or paste your list of websites into Start URLs.
  4. Optionally set Max depth to 1 so it also scans Contact/About pages (recommended), then click Start.
  5. When the run finishes, open the Dataset tab and export to CSV, JSON, or Excel — or grab thousands of results at once.

Apify CLI

Install the CLI, log in, and call the Actor:

npm i -g apify-cli
apify login
apify call logiover/website-contact-scraper

Pass 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-stdin

See examples/cli.md for input files and how to export the dataset from the terminal.

API / cURL

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.

JavaScript & Python (apify-client)

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.


Input

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 useJsBrowser off first. Only enable this toggle if a site returns empty results, since browser mode is slower and costs more.
  • Use maxRequestsPerCrawl as a budget dial: a small number for quick previews, a larger number for full campaigns.

Output

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.

Sample output item

{
  "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."
}

Integrations & automation

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.

Export formats

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 socials object.
  • 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.


FAQ

How do I scrape emails from a website?

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.

Is there a website contact API?

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.

How do I export contacts to Excel or CSV?

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.

Is it free? Do I need an API key?

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.

How many websites can I scrape per run?

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.

Does it get phone numbers too?

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.

How do I scrape emails from a Contact or About page?

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.

Does it work on JavaScript sites?

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.

What social networks does it extract?

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.

Can I enrich my CRM or existing lead list?

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.

Is scraping contact information legal?

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.


Related actors

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. ▶️ Run it: https://apify.com/logiover/website-contact-scraper

MIT © 2026 logiover

About

Scrape emails, phone numbers & social links (LinkedIn, Instagram, X, Facebook, YouTube) from any website — bulk, no API key. Apify Actor.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors