Home / Tools / Contact Scraper
Lead & company data
Contact Scraper
Extract emails, phone numbers and social media profiles (LinkedIn, Facebook, Instagram, X, YouTube, TikTok...) from any list of company websites or domains. One clean row per website, contact-page aware, email provider (MX) detection. Pay only for websites with contacts.
- Price: $4 per 1,000 × website with contacts
- Prefilled example: finished in 7 s on Oct 19, 2026 (Done: 3 of 3 website(s) returned contacts.)
- Works with: Apify Console, REST API, Python, JavaScript, MCP (Claude, Cursor, VS Code), n8n, Make, Zapier
- Last updated: 2026-10-19
Sample output
| Domain | Phone | |||
|---|---|---|---|---|
| levainbakery.com | [email protected] | +18779322161 | linkedin.com/company/levain-bakery | instagram.com/levainbakery |
| katzsdelicatessen.com | [email protected] | +12122542246 | – | instagram.com/katzsdeli |
Real rows from the prefilled example run (Oct 19, 2026), 5 of 43+ fields shown. Export as JSON, CSV, Excel or HTML, or read them through the API.
Full JSON of one real output row (3 rows in the example dataset)
{
"input": "apify.com",
"domain": "apify.com",
"url": "https://apify.com/",
"status": "ok",
"companyName": "Apify",
"primaryEmail": "[email protected]",
"emails": [
"[email protected]",
"[email protected]",
"[email protected]",
"... 1 more"
],
"primaryPhone": null,
"phones": [],
"linkedin": "https://www.linkedin.com/company/apify",
"facebook": null,
"instagram": null,
"twitter": "https://x.com/apify",
"youtube": "https://www.youtube.com/c/Apify",
"tiktok": "https://www.tiktok.com/@apifytech",
"pinterest": null,
"github": "https://github.com/apify",
"threads": null,
"whatsapp": null,
"telegram": null,
"discord": "https://discord.com/invite/jyEM2PRvMU",
"yelp": null,
"trustpilot": null,
"socialProfiles": [
"https://www.linkedin.com/company/apify",
"https://x.com/apify",
"https://www.youtube.com/c/Apify",
"... 5 more"
],
"address": "Na Příkopě 959/27, Prague, 11000, CZ",
"contactPageUrl": "https://apify.com/contact",
"hasContactForm": true,
"emailProvider": "Google Workspace",
"emailSecurityGateway": null,
"mxRecords": [
"aspmx.l.google.com",
"alt1.aspmx.l.google.com",
"alt2.aspmx.l.google.com",
"... 2 more"
],
"emailDetails": [
{
"email": "[email protected]",
"type": "role",
"onDomain": true,
"source": "mailto",
"page": "https://apify.com/contact",
"domainAcceptsMail": true
},
{
"email": "[email protected]",
"type": "role",
"onDomain": true,
"source": "mailto",
"page": "https://docs.apify.com/legal",
"domainAcceptsMail": true
},
{
"email": "[email protected]",
"type": "role",
"onDomain": true,
"source": "mailto",
"page": "https://docs.apify.com/legal",
"domainAcceptsMail": true
},
"... 1 more"
],
"phoneDetails": [],
"title": "Apify: Marketplace of ready-to-run tools for AI",
"description": "Thousands of tools to automate your business. Get real-time web data, track competitors, generate leads, and integrate your apps and AI agents.",
"language": "en",
"logo": "https://apify.com/img/apify-logo/apify-symbol-200x200.svg",
"legalName": "Apify Technologies s.r.o.",
"pagesCrawled": 6,
"crawledUrls": [
"https://apify.com/",
"https://apify.com/contact",
"https://apify.com/contact-sales",
"... 3 more"
],
"pagesFailed": 0
}Output fields
From the Actor's dataset schema. Every row has the same flat shape, so it drops straight into a spreadsheet, a database or an agent's context.
| Field | Type | Description |
|---|---|---|
input | string | Website or domain as given |
domain | string | Registrable domain (after redirects) |
url | string | Homepage URL after redirects |
status | string | ok (charged) | no_contacts | error | invalid_input | robots_disallowed (all free) |
companyName | string | Name from structured data, og:site_name or page title |
primaryEmail | string | Best email: own domain, explicit mailto, contact page first |
emails | array | All emails found, best first |
primaryPhone | string | Best phone in E.164 |
phones | array | All phone numbers in E.164 |
linkedin | string | LinkedIn company/profile URL |
facebook | string | Facebook page |
instagram | string | Instagram profile |
twitter | string | X / Twitter profile |
youtube | string | YouTube channel |
tiktok | string | TikTok profile |
pinterest | string | Pinterest profile |
github | string | GitHub org/user |
threads | string | Threads profile |
whatsapp | string | WhatsApp click-to-chat link |
telegram | string | Telegram link |
discord | string | Discord invite |
yelp | string | Yelp business page |
trustpilot | string | Trustpilot review page |
socialProfiles | array | All social profile URLs |
Pricing
Pay per result, billed by Apify. No subscription and no minimum. Discount tiers apply automatically on paid Apify plans.
| Event | Free plan | Bronze | Silver | Gold |
|---|---|---|---|---|
| Website with contacts main Charged once for each website that returned at least one email, phone number, or social profile. Websites with no contacts, errors, invalid inputs, and robots-disallowed sites are free. | $0.004 | $0.0035 | $0.003 | $0.0025 |
Examples on the Free plan: 100 website with contactss = $0.40, 1,000 website with contactss = $4, 10,000 website with contactss = $40. Apify's Free plan includes $5 of monthly usage credit. Prices read from the Apify API at build time (2026-10-19).
Example input
This is the prefilled input on the Store page. Keep it and click Start to see real data in seconds.
{
"urls": [
"apify.com",
"https://www.katzsdelicatessen.com",
"levainbakery.com"
],
"maxPagesPerDomain": 6,
"extractPhones": true,
"extractSocials": true,
"defaultCountry": "US",
"onlyRoleEmails": false,
"onlyOwnDomainEmails": false,
"checkMx": true,
"respectRobotsTxt": true,
"maxConcurrency": 30,
"proxyMode": "fallback",
"proxyConfiguration": {
"useApifyProxy": true
},
"residentialFallback": false
}Use it from code, no-code or an AI agent
cURL (one request, returns rows)
curl -X POST \
"https://api.apify.com/v2/acts/wrenfield-data~website-contact-scraper/run-sync-get-dataset-items" \
-H "Authorization: Bearer $APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"urls": ["apify.com", "https://www.katzsdelicatessen.com", "levainbakery.com"], "maxPagesPerDomain": 6, "extractPhones": true, "extractSocials": true, "defaultCountry": "US", "onlyRoleEmails": false, "onlyOwnDomainEmails": false, "checkMx": true, "respectRobotsTxt": true, "maxConcurrency": 30, "proxyMode": "fallback", "proxyConfiguration": {"useApifyProxy": true}, "residentialFallback": false}'Python
# pip install apify-client
import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("wrenfield-data/website-contact-scraper").call(
run_input={
"urls": [
"apify.com",
"https://www.katzsdelicatessen.com",
"levainbakery.com"
],
"maxPagesPerDomain": 6,
"extractPhones": True,
"extractSocials": True,
"defaultCountry": "US",
"onlyRoleEmails": False,
"onlyOwnDomainEmails": False,
"checkMx": True,
"respectRobotsTxt": True,
"maxConcurrency": 30,
"proxyMode": "fallback",
"proxyConfiguration": {
"useApifyProxy": True
},
"residentialFallback": False
},
max_total_charge_usd=1.00, # hard cap for this run
)
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
print(row)JavaScript / Node
// npm i apify-client
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('wrenfield-data/website-contact-scraper').call({
"urls": [
"apify.com",
"https://www.katzsdelicatessen.com",
"levainbakery.com"
],
"maxPagesPerDomain": 6,
"extractPhones": true,
"extractSocials": true,
"defaultCountry": "US",
"onlyRoleEmails": false,
"onlyOwnDomainEmails": false,
"checkMx": true,
"respectRobotsTxt": true,
"maxConcurrency": 30,
"proxyMode": "fallback",
"proxyConfiguration": {
"useApifyProxy": true
},
"residentialFallback": false
}, { maxTotalChargeUsd: 1 });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);MCP (Claude, Cursor, VS Code, any MCP client)
{
"mcpServers": {
"wrenfield-website-contact-scraper": {
"url": "https://mcp.apify.com?tools=wrenfield-data/website-contact-scraper"
}
}
}Remote MCP server hosted by Apify. Sign in with OAuth on first use, or send Authorization: Bearer <APIFY_TOKEN>. The tool appears as wrenfield-data--website-contact-scraper. More client setups on the MCP page.
n8n, Make, Zapier
Use the official Apify node or app, pick Run Actor, enter wrenfield-data/website-contact-scraper and paste the input JSON above. Then read the run's dataset items. Ready-made n8n workflows are on the n8n templates page.
FAQ
How much does Contact Scraper cost?
$0.004 per website with contacts on the Apify Free plan ($4 per 1,000), billed per result by Apify with no subscription. Higher Apify plans get the discounted tiers shown in the pricing table. You can cap any run with a maximum cost.
Do I need a login, cookies or an API key?
No. The Actor only reads public company websites.
Why did a website return no emails?
Many companies publish only a contact form or a phone number. Others hide the email in an image or load it with JavaScript after the page renders, and this Actor doesn't run a browser. You still get phones, socials, hasContactForm and contactPageUrl when available. If nothing at all is found, the row is free.
Does it find personal emails of employees?
Only if the company publishes them on its own website (for example a team page). It doesn't guess email patterns, query third-party databases, or scrape LinkedIn. Use Only role-based emails to keep just info@/sales@/support@-style addresses.
Can I enrich my Google Maps results?
Yes. Put the Google Maps run's dataset ID into Enrich an existing dataset. The website field is read automatically, and each row gets sourceName (the place name) and sourceIndex so you can join the results back.
How accurate is the email provider?
It comes straight from the domain's public MX records. When a security gateway (Proofpoint, Mimecast...) sits in front of the mailbox provider, emailSecurityGateway is set and emailProvider may be empty.
Are the emails verified?
Each email's domain is checked to accept mail (MX record), which removes typos and dead domains. Individual mailboxes are not SMTP-probed. Run a dedicated email verifier before large cold-email sends.
Related tools
Company Name to Domain
Official website domains for company names, with confidence.
SEC Form D Scraper
Startups that just raised money, with executives and amounts.
Businesses Without Websites Launching soon
Google Maps leads with no website or a broken one.
Compare and plan
Try Contact Scraper now
Open it on Apify, keep the prefilled example and click Start. The Apify Free plan includes $5 of monthly credit, no card needed.
Open on Apify