Contact Page Scraper — Emails, Phones & Socials by Site
Pricing
from $11.00 / 1,000 contact records
Contact Page Scraper — Emails, Phones & Socials by Site
Goes where companies actually put their details — the contact, imprint, about and team pages — and returns what is published there as one tidy row per business: email, phone and social profiles. A short page budget keeps every run fast and cheap.
Pricing
from $11.00 / 1,000 contact records
Rating
0.0
(0)
Developer
Blackcube
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
34 minutes ago
Last modified
Categories
Share
| Website Contact & Email Suite • 9 Actors, one codebase, one contact record billed once | ||
| Website Contact & Email Extractor Verified Emails + Socials | B2B Leads Finder Verified Emails, Phones & Socials | Company Contact Scraper Emails, Phones & Socials |
| Phone Number Scraper Business Numbers From Any Website | MX Verified Email Finder Deliverable Business Emails | Website Email Scraper Verified Emails From Any Site |
| Decision Maker Email Finder Skip the info@ Inbox | Contact Page Scraper ➤ You are here | Email Finder Business Emails From a List of Domains |
More from this account: YouTube Transcript Suite · Career Site & ATS Jobs Suite · Google News Suite · Keyword Research Suite · Shopify Store Intelligence Suite · eBay Data Suite · Amazon Reviews Suite · Reddit · Meta Ad Library · Vinted · Trustpilot Review Intelligence Suite · App Store & Google Play Reviews Suite · Etsy Research Suite · YouTube Comments Intelligence Suite · Telegram Channel Intelligence Suite · Business Reviews Suite · Google Trends Suite · Amazon Product Data Suite · Polymarket Order Book · Nordic Marketplaces Suite · Google Sheets Suite · TikTok Suite · Snapchat Suite · LinkedIn Public Data Suite · Instagram Suite · Contact Validation Suite · Google Maps Suite · X / Twitter
Goes where companies actually put their details — the contact, imprint, about and team pages — and returns what is published there as one tidy row per business: email, phone and social profiles. A short page budget keeps every run fast and cheap.
You pay per company we find a real contact for. Websites with no contacts, failed sites, and records carrying only social links are delivered free.
What it does
A tight page budget beats a deep crawl. The pages a business keeps its details on are a short, predictable list — contact, imprint, impressum, about, team — and this listing spends five pages per site on exactly those, in whatever language the site is written in. Fast runs, small bills, and the same finished row per company: verified email, international phone number and social profiles.
This listing returns every contact role it finds. Set roleFilter to keep only executives, sales, HR and so on.
Billed per company, not per page
Most contact scrapers bill per page crawled, so a headline like "$2 per 1,000" becomes a much larger invoice the moment one site with deep navigation gets crawled for hundreds of pages. That mismatch is the single most common complaint in this category, and it is why a well-known rival sits at 1.89 stars.
Here, one company is one row and one charge, however many pages it took to find the contact.
What you get per company
| Field | What it is |
|---|---|
emails[] | { address, role, foundOn, verification } — every address says what it is, where it came from, and how it verified |
primaryEmail | the single best address, already picked for you |
phones[] | normalised to E.164 |
socials | LinkedIn, X, Facebook, Instagram, YouTube and more, keyed by network |
companyName, address, description | company identity, taken from the site's own markup |
domain, emailCount, phoneCount, pagesCrawled | the registrable domain, already deduplicated, plus what the row cost to find |
Paste acme.io, https://www.acme.io/ and https://acme.io/pricing?utm_source=news and
you get one record, charged once. Deduplication happens by registrable domain across
the whole run, on both input and output — no second merge-and-dedupe actor required.
Honest about verification
Verification is a real MX check, not a guess, and every address says which it is. Addresses that cannot be verified are still delivered and still labelled, rather than being quietly dropped or silently presented as confirmed.
Generic addresses (info@, hello@) are tagged rather than binned, so you decide: keep
them, or set excludeGenericEmails and never see them.
Pricing
Per company with at least one email or phone number, by your Apify plan:
| Plan tier | Per 1,000 companies |
|---|---|
| Free | $27.50 |
| Bronze | $16.50 |
| Silver | $13.80 |
| Gold | $11.00 |
| Platinum | $11.00 |
| Diamond | $11.00 |
New price from 19 October 2026 (Apify's 14-day notice): Free $27.50, Bronze $16.50, Silver $13.80, Gold, Platinum and Diamond $11.00 per 1,000 companies.
Free: companies with no reachable contact, failed and unreachable sites, and records holding
only social links. Set skipDomainsWithoutContacts to leave out the websites with no contacts
at all (dead, blocked or nothing published) — they cost nothing either way.
Use it from anywhere
curl -X POST "https://api.apify.com/v2/acts/vonsensey~contact-page-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \-H 'Content-Type: application/json' \-d '{"domains":["stripe.com","apify.com"]}'
from apify_client import ApifyClientclient = ApifyClient("YOUR_TOKEN")run = client.actor("vonsensey/contact-page-scraper").call(run_input={"domains": ["stripe.com", "apify.com"],})for row in client.dataset(run["defaultDatasetId"]).iterate_items():print(row.get("domain"), row.get("primaryEmail"), row.get("phones"))
Also available through the Apify integrations for n8n, Make and Zapier, and via MCP for AI agents. Feed the output straight into a CRM — one row per company is already the shape a CRM import expects.
Legal and responsible use
Reads public business contact pages only — the addresses a company publishes so it can be contacted. No login, no paywall circumvention, and nothing behind authentication. A named address (jane@company.com) is personal data under the GDPR, so the rules below apply to it.
You are responsible for how you use the output. In the EU/UK that means a lawful basis under GDPR/PECR for any outreach, an honest sender identity, and honouring opt-outs. This is a tool for reaching businesses that published a contact address, not for bulk unsolicited mail.
The rest of the family
- Website Contact & Email Extractor — Verified Emails + Socials
- B2B Leads Finder — Verified Emails, Phones & Socials
- Company Contact Scraper — Emails, Phones & Socials
- Phone Number Scraper — Business Numbers From Any Website
- MX Verified Email Finder — Deliverable Business Emails
- Website Email Scraper — Verified Emails From Any Site
- Decision Maker Email Finder — Skip the info@ Inbox
- Email Finder — Business Emails From a List of Domains
Issues and requests go in the Issues tab — first response within 24 hours.
Use it from n8n, MCP, the API or a schedule
Built to be called by a workflow, not only from the Store form. The Actor is vonsensey/contact-page-scraper; every snippet below sends {}, which runs the defaults shown on the form — replace it with your own input.
n8n
Install the Apify community node (@apify/n8n-nodes-apify under Settings → Community Nodes, or search "Apify" on n8n Cloud). Add Apify → Run Actor with Actor vonsensey/contact-page-scraper and your input JSON, then Apify → Get Dataset Items on the run's defaultDatasetId and pipe the rows anywhere. For scheduled runs, the On new Apify Event trigger fires when a run of this Actor finishes.
MCP (Claude, Cursor, VS Code, any MCP client)
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=vonsensey/contact-page-scraper","headers": {"Authorization": "Bearer <YOUR_APIFY_TOKEN>"}}}}
Your agent then calls vonsensey/contact-page-scraper as a tool with the same input the form takes and reads the dataset back.
REST API (one call, rows in the response)
curl -X POST "https://api.apify.com/v2/acts/vonsensey~contact-page-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \-H "Content-Type: application/json" -d '{}'
Python
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("vonsensey/contact-page-scraper").call(run_input={})for row in client.dataset(run["defaultDatasetId"]).iterate_items():print(row)
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('vonsensey/contact-page-scraper').call({});const { items } = await client.dataset(run.defaultDatasetId).listItems();
Make, Zapier, LangChain, CrewAI
The Apify app in Make and Zapier has a Run an Actor module: pick vonsensey/contact-page-scraper. In LangChain and CrewAI the Apify tool wrappers take the same Actor id. A daily schedule needs nothing but the Console: Schedules → Create → this Actor → cron, and the dataset fills on its own.
Run it without configuring anything — Scrape the contact page of a website, a ready-made example you can start as-is or copy.
Use cases
- Turn a domain list into CRM rows. Company URLs in, one de-duplicated row out per company with email, phone and social profiles.
- Enrich a list you already have. You have the companies but not the contacts — this fills the gap without a data-vendor subscription.
- Reach a person, not an inbox. Prefer a named contact over the generic info@ address where the site publishes one.
- Re-run weekly. Sites add and change contacts constantly; a schedule keeps the list current instead of ageing out.
Run it on a schedule
A one-off pull answers a question; a schedule answers it every day without you. Open Schedules in the Apify Console, point a cron at this Actor, and the dataset keeps filling on its own — no server, no cron box, no babysitting. Everything here is built to be re-run: you are billed per contact record delivered, and the FAQ below says exactly what a scheduled run that finds nothing new costs.
FAQ
Are the email addresses verified?
Each address's domain is checked for a working mail server (MX records) and tagged role or personal, so typos, dead domains and throwaway providers are caught. An MX check cannot see whether one mailbox exists (Apify closes the SMTP port to every Actor), so a status is valid or risky, never a promise that a message will be delivered.
Do I pay for websites that return nothing?
No. Sites that are unreachable, blocked or simply have no published contact details come back as free rows with a reason.
Can I pass bare domains instead of full URLs?
Yes. example.com and https://example.com/contact are both accepted, and both resolve to the same company row.
How is this different from a lead database?
Nothing here is a stale purchased list. Every row is read from the live website at the moment you run it.
Something wrong, or a field you need that is missing? Open an issue on the Issues tab — it is read and it gets fixed. If this saved you time, a rating on the Store page helps the next person find it.