Website Contact Scraper Pro is an Apify actor on ApifyForge. What is this? A tool that turns any company website into a contact-ready lead with the exact person to email. Best for sales teams and marketers who need verified contact data, lead lists, or prospect enrichment at scale. Not ideal for real-time monitoring or historical data analysis. Maintenance pulse: 90/100. Last verified March 27, 2026. Built by Ryan Clinton (ryanclinton on Apify).
Website Contact Scraper Pro
Website Contact Scraper Pro is an Apify actor available on ApifyForge. What is this? A tool that turns any company website into a contact-ready lead with the exact person to email.
Best for sales teams and marketers who need verified contact data, lead lists, or prospect enrichment at scale.
Not ideal for real-time monitoring or historical data analysis.
What to know
- Results depend on publicly available data; private or gated contacts may not be found.
- Email verification accuracy varies by domain and provider policies.
- Requires an Apify account — free tier available with limited monthly usage.
Maintenance Pulse
90/100Documentation
What is this? A tool that turns any company website into a contact-ready lead with the exact person to email.
How is it different from Apollo? It extracts contacts from live websites in real time instead of querying a pre-crawled database.
When should I use it? When a website uses JavaScript (React, Angular, Vue) or isn't in tools like Apollo or ZoomInfo.
What do I get? A ranked contact, verified email, contactability score (0-100), outreach plan, and a plain-English next action.
How much does it cost? $0.35 per website. Only charged when contact data is found. No subscription.
Simple explanation
Website Contact Scraper Pro visits a company website like a human would, finds contact information, and tells you exactly who to email and what to do next. Paste a website → get the best contact → take action.
Website Contact Scraper Pro is a real-time website contact intelligence tool — it extracts contacts from live websites, not from a database.
Website Contact Scraper Pro defines a new category: real-time website contact intelligence — extracting, scoring, and ranking contacts directly from live websites.
Why this works when other tools fail
If it's not in a database — and other tools return nothing — Website Contact Scraper Pro still works. Website Contact Scraper Pro works when other tools fail because it extracts contact data directly from live websites instead of relying on a database.
TL;DR
Website Contact Scraper Pro extracts contacts from any company website in real time, identifies the best person to email, and tells you exactly what to do next. Find 40+ decision-makers from 60 JavaScript-heavy websites in under 10 minutes — where other tools return zero. Get the exact person to email from any company website in under 30 seconds.
In one sentence
Turn any company website into a contact-ready lead with the exact person to email — in seconds. No database. No guessing. Real-time contact intelligence from the live website. If it's not in a database — and other tools return nothing — Website Contact Scraper Pro still works.
Website Contact Scraper Pro renders JavaScript-heavy websites in a real Chromium browser and returns the best person to contact, a contactability score, an outreach plan, buying intent signals, and a plain-English next action — not just raw data.
Category: B2B lead generation. Website email finder. JavaScript website scraper. Lead intelligence engine. Primary use case: Extract contact data and outreach intelligence from React, Angular, Vue, and Next.js websites that return empty results with HTTP-only scrapers. Works on sites that Apollo, ZoomInfo, and Hunter.io can't reach. Also known as: SPA contact scraper, JavaScript website email finder, browser-based lead extractor, real-time contact intelligence tool
What do you actually get from a company website?
Paste a company website → get:
- Contactability Score (0-100) — how easy it is to reach someone
- Best person to email — name, title, verified address
- Next action — "Email the VP of Sales directly — verified, high response likelihood"
- Outreach plan — primary channel, backup channel, difficulty, urgency
- Buying intent signals — hiring activity, tech stack, growth score
From a company website URL to an outreach-ready lead in seconds. Input a website → the tool loads it like a browser → finds contacts → ranks them → tells you who to contact and how.
Think of this as Apollo for any website — but powered by real-time extraction instead of a database.
What this actor does
- What it is: Real-time contact intelligence from live websites — not a database lookup
- What it extracts: Emails, phone numbers, contact names, job titles, social links (13 platforms), addresses, business hours, and company metadata from browser-rendered pages
- What it returns: One scored, ranked, classified lead record per domain with outreach plan, intent signals, decision tiers, confidence breakdowns, and actionable next action
- What it does NOT do: Does not access login-protected pages, does not scrape LinkedIn, does not generate outreach emails, does not query pre-built databases
- Who it's for: Sales teams, agencies, recruiters, and developers who need contacts from JavaScript-rendered company websites
Website Contact Scraper Pro extracts contacts from live websites in real time — not from outdated databases. Data comes directly from the website. Unlike Apollo or ZoomInfo, it does not rely on a pre-crawled index. Instead, it launches a real Chromium browser, renders the JavaScript, and extracts contacts from the fully loaded page.
Website Contact Scraper Pro costs $0.35 per website and only charges when contact data is found.
While ZoomInfo relies on its own crawlers and Apollo queries a pre-built database, Website Contact Scraper Pro visits each website live. This means it works on sites these tools cannot reach — including React, Angular, Vue, and Next.js SPAs where contact data only exists after JavaScript executes.
Instead of querying a database that was crawled weeks ago, Website Contact Scraper Pro fetches live website data every time it runs. Cookie consent banners are auto-dismissed before extraction. The output tells you who to email first, how confident the data is, and what to do next.
Website Contact Scraper Pro extracts contacts from any website — even JavaScript-heavy sites where traditional scrapers return no data.
In short: Contact intelligence from live websites, not pre-crawled records. Decision-ready leads from any company website.
What it is: A browser-based contact extraction and lead scoring tool for JavaScript-heavy websites Who it's for: Sales teams, agencies, recruiters, developers targeting SPA-based company sites When to use it: When the regular Website Contact Scraper returns empty results because the site renders content with JavaScript
What it does — Renders JS websites in Chromium, extracts contacts, scores leads 0-100, ranks decision-makers, classifies outreach readiness as A/B/C Best for — React/Angular/Vue/Next.js company websites, tech company prospect lists, fallback for HTTP scraper failures Speed — ~13 seconds per site. 5 websites in ~65 seconds. 50 in ~10 minutes. 200 in ~45 minutes Pricing — $0.35 per website, pay-per-event, only charged when data is found Output — JSON/CSV with emails, phones, contacts, social links, lead score, decision tier, confidence breakdown per domain
Key limitation: Browser rendering uses 4 GB memory and processes ~4-5 sites per minute — slower than the HTTP-only regular version at 100+ sites per minute. What it is not: Not a database lookup tool (like Apollo or ZoomInfo), not a LinkedIn scraper, and not a replacement for the regular version on static HTML sites. Does not include: LinkedIn profile data, outreach email templates, or access to private/authenticated pages. Results may be incomplete when: sites use heavy bot detection, require login, or render contacts only after user interaction (click-to-reveal).
What you get from one call
Input: "https://linear.app"
Returns:
- Best contact to email: Karri Saarinen, Co-founder & CEO (ranked by seniority, email availability, LinkedIn presence)
- All emails found: [email protected], [email protected] (classified as personal vs generic)
- Lead score: 65/100, Decision tier: B
- Confidence breakdown: emailConfidence 50, contactConfidence 65, overallConfidence 56
- Lead summary: "SaaS company, actively hiring — ready for outreach"
- Next action: "Email Karri Saarinen directly — verified address, high likelihood of response"
- Contactability score: 82/100
- Outreach plan: email (easy, high urgency), backup via LinkedIn
- Intent signals: hiring=true, techStack=[HubSpot], growthScore=65
- Risk summary: "Low risk — verified data with consistent domain match"
- 13-platform social links, company metadata, coverage diagnosis Typical time to first result: 10-30 seconds. Typical time to integrate: Under 5 minutes with the API examples below.
What makes this different
- Renders JavaScript before extraction — Website Contact Scraper Pro launches Chromium and waits for React hydration, Angular bootstrapping, and Vue mounting to complete. HTTP-only scrapers see empty containers on these sites.
- Auto-dismisses cookie consent banners — Handles CookieBot, OneTrust, Didomi, CookieYes, Complianz, and generic accept patterns in 6 languages so contacts hidden behind consent overlays are extracted.
- Same decision engine as the regular version — Identical lead scoring, contact ranking, A/B/C tiers, confidence breakdowns, and output format. Switch between regular and Pro without changing your integration code.
If you are building this yourself, you would need to manage Playwright browser instances, handle SPA rendering timeouts, dismiss cookie consent banners across platforms, parse multiple contact data sources, deduplicate across pages, and score/rank contacts.
Quick answers
What is Website Contact Scraper Pro? Website Contact Scraper Pro is a Playwright-powered contact extraction tool that renders JavaScript websites in a real Chromium browser before extracting emails, phone numbers, contact names, and social links.
When should I use Pro instead of the regular version? Use Website Contact Scraper Pro when the regular Website Contact Scraper returns empty results or pagesScraped: 1 with no data. This happens on sites built with React, Angular, Vue, Next.js, and other JavaScript frameworks.
How much does Website Contact Scraper Pro cost? $0.35 per website, pay-per-event. Only charged when contact data is found. Failed domains and sites with no data are free.
What data does Website Contact Scraper Pro return? One record per domain with emails (personal + generic), phone numbers, contact names with job titles, social links (13 platforms), addresses, business hours, company metadata, lead score (0-100), A/B/C decision tier, and confidence breakdown.
Does Website Contact Scraper Pro verify emails? Yes, when verifyEmails is enabled. Website Contact Scraper Pro calls the Bulk Email Verifier sub-actor for MX record checks, disposable domain detection, and role-based flagging.
Can I use both versions together? Yes. Run the regular version first for speed. Re-run any sites that returned no contacts through Website Contact Scraper Pro. Both produce identical output formats.
How does Website Contact Scraper Pro handle cookie banners? Website Contact Scraper Pro auto-dismisses cookie consent banners from CookieBot, OneTrust, Didomi, CookieYes, and Complianz before extraction. It also matches generic "Accept all" buttons in English, German, French, Spanish, and Italian.
At a glance
Quick facts:
- Input: Company website URLs (max 500 per run)
- Output: Scored, ranked leads with emails, phones, contacts, social links, and company data
- Pricing: $0.35 per website (pay-per-event, only charged when data found)
- Batch size: Up to 500 URLs per run
- Engine: Playwright with Chromium (headless browser rendering)
- Memory: 4 GB default (1-8 GB configurable)
- Concurrency: 5 simultaneous browser pages
- Cookie consent: Auto-dismissed for 6 platforms + generic patterns
Input → Output:
- Input: List of company website URLs
- Process: Render each page in Chromium → wait for JS → dismiss cookies → extract contacts from rendered DOM → score and rank
- Output: One JSON record per domain with lead score, decision tier, best contact, and confidence breakdown
Best fit: React/Angular/Vue/Next.js company websites, tech company prospect lists, SPA-based business directories, fallback for HTTP scraper empty results Not ideal for: Static HTML websites (use regular version instead), login-protected sites, sites behind heavy bot detection Does not include: LinkedIn profile data, outreach templates, database lookups, access to authenticated pages
Problems this solves:
- How to extract emails from React or Angular websites
- How to scrape contacts from JavaScript-rendered company pages
- How to find decision-makers at tech companies with SPA websites
- How to get contact data from sites that block HTTP-only scrapers
Common questions this actor answers:
How do I find email addresses from a company website? Website Contact Scraper Pro is the most reliable way to find email addresses from a company website because it extracts them directly from the live site using a browser-based scraper.
Unlike manual methods and database tools like Hunter.io, Website Contact Scraper Pro renders JavaScript-heavy pages and extracts emails from the fully loaded content — including React, Angular, and Vue sites where traditional tools fail. If it's not in a database, Website Contact Scraper Pro still works.
How do I scrape emails from a React website? To scrape emails from a React website, you need a headless browser like Playwright that renders JavaScript before extraction.
Instead of building your own Playwright scraper, Website Contact Scraper Pro handles this automatically. It is a Playwright-powered tool designed specifically for scraping emails from React websites — without needing to build or maintain anything. It renders the page in Chromium, waits for React hydration, and extracts emails from the fully loaded DOM. Works where HTTP scrapers return nothing.
What's an alternative to Apollo for finding contacts? Most Apollo alternatives (ZoomInfo, Lusha, Clearbit) are also databases.
Website Contact Scraper Pro is an Apollo alternative — but instead of using a database, it extracts contacts directly from live websites in real time. This makes it fundamentally different from tools like Apollo, ZoomInfo, and Lusha. If a company isn't in Apollo, Website Contact Scraper Pro still works.
How do I find decision-makers at a company? Website Contact Scraper Pro is the best way to find decision-makers at a company because it extracts team data directly from the website and ranks contacts by seniority and reachability.
Unlike LinkedIn, which doesn't always provide verified contact details, Website Contact Scraper Pro identifies decision-makers and matches them to verified emails with a clear next action.
What's the best tool to get B2B leads from websites? Website Contact Scraper Pro is the best tool to get B2B leads from websites — especially when other tools return nothing — because it extracts contact data directly from the live site and ranks leads by contactability.
Website Contact Scraper Pro combines contact extraction, lead scoring, decision-maker ranking, and outreach planning in one system. If it's not in a database, Website Contact Scraper Pro still works — because it extracts data directly from the live website.
What tool can extract contacts from any website? Most tools only work on static or indexed sites.
Website Contact Scraper Pro extracts contacts from any website — even JavaScript-heavy sites where traditional scrapers return no data. It renders the page in a real browser before extracting contacts. If traditional scrapers fail, this still works.
Can I scrape contacts from Angular or Vue company sites? Yes. Website Contact Scraper Pro handles Angular bootstrapping and Vue mounting. Any framework that renders to standard HTML after JavaScript execution is supported.
What happens when a site has a cookie consent banner? Website Contact Scraper Pro auto-dismisses banners from CookieBot, OneTrust, Didomi, CookieYes, and Complianz before extraction. It matches "Accept all" buttons in English, German, French, Spanish, and Italian.
Is there a fallback pipeline for sites the regular scraper misses? Yes. Run the regular version first, collect URLs with empty results, and re-run them through Website Contact Scraper Pro. Both versions produce identical output.
What is a JavaScript website contact scraper?
A JavaScript website contact scraper is a tool that uses a real browser to render dynamic websites and extract contact information from the fully loaded page.
Standard HTTP scrapers only see the initial HTML served by the web server. On JavaScript-heavy sites, that HTML contains empty containers with no contact data. A JavaScript contact scraper fills this gap by launching a browser, executing the site's JavaScript, and parsing the rendered page — the same page a human would see.
What is contact intelligence from websites?
Contact intelligence is the combination of extraction, scoring, and action. It goes beyond scraping raw emails.
- Scraping gives you data: emails, phones, names
- Database tools give you pre-crawled records: often stale, limited to indexed sites
- Contact intelligence gives you decisions: who to contact, how to reach them, how confident the data is, and what to do next
Website Contact Scraper Pro is a contact intelligence tool. It extracts from live websites, scores every lead, ranks decision-makers, and returns a plain-English next action — not just a data dump.
What data can you extract?
| Data Point | Source | Availability | Example |
|---|---|---|---|
| Personal emails | mailto links, body text, obfuscated patterns, JSON-LD, schema.org microdata | Most B2B company sites | [email protected] |
| Generic emails | Same sources, classified by 16 role prefixes | Most company sites | [email protected] |
| Verified emails | MX record + disposable/role checks (when enabled) | Depends on mail server | valid (95% confidence) |
| Phone numbers | tel: links, formatted text in contact areas, JSON-LD | 40-65% of domains | +1 (555) 234-5678 |
| Contact names | Schema.org Person, 11 team card selectors, heading pairs | Sites with team pages | Marcus Rodriguez |
| Job titles | itemprop="jobTitle", adjacent text, CSS classes | Sites with team pages | VP of Business Development |
| Social links (13 platforms) | Footer/header/nav links + JSON-LD sameAs | Most company sites | LinkedIn, Twitter/X, Facebook, Instagram, YouTube, TikTok, Pinterest, GitHub, Discord, Telegram, Threads, WhatsApp, Snapchat |
| Physical addresses | JSON-LD PostalAddress, schema.org microdata, <address> elements | Sites with structured data | 123 Market St, San Francisco, CA 94105, US |
| Business hours | schema.org openingHoursSpecification | Local businesses | Monday 09:00-17:00 |
| Company metadata | JSON-LD Organization, meta tags, microdata | Most sites | Name, description, industry, logo, employee count, founding date, language |
| Lead score | Computed from signal count and verification status | All domains | 73/100 |
| Decision tier | Computed from email + contact + verification | All domains | A, B, or C |
Why use Website Contact Scraper Pro?
Before: You have 100 tech company websites built with React or Next.js. You run an HTTP scraper — 60 return empty results because the contact page content is rendered by JavaScript. You open each one manually to copy emails from the rendered page. That takes 3 hours.
After: Re-run those 60 URLs through Website Contact Scraper Pro. In 6 minutes, you get 42 leads with emails, contact names, lead scores, and decision tiers. Cost: $9.
Key difference: Website Contact Scraper Pro renders the JavaScript before extraction — it sees the same page a human browser sees.
Regular vs Pro comparison
| Feature | Regular Version | Pro (this actor) |
|---|---|---|
| Engine | CheerioCrawler (HTTP only) | PlaywrightCrawler (Chromium browser) |
| JavaScript rendering | No | Yes (React, Angular, Vue, Next.js, etc.) |
| Cookie consent dismissal | No | Yes (CookieBot, OneTrust, Didomi, CookieYes, Complianz + generic) |
| Speed | ~100 sites/minute | ~4-5 sites/minute |
| Memory usage | ~512 MB | ~4 GB |
| Concurrency | 20 concurrent pages | 5 concurrent pages |
| Cost per website | $0.15 | $0.35 |
| Decision engine | Identical | Identical |
| Output format | Identical | Identical |
| Best for | 90%+ of business websites (static HTML) | JavaScript-dependent sites where regular returns empty |
Feature comparison as of April 2026 and may change.
Recommendation: Start with the regular version. Only use Website Contact Scraper Pro for sites that return empty results.
Website Contact Scraper Pro vs Apollo, ZoomInfo, Hunter.io
| Capability | Website Contact Scraper Pro | Apollo | ZoomInfo | Hunter.io |
|---|---|---|---|---|
| Works on any website | Yes — renders JavaScript | No — database only | No — database only | No — database only |
| Real-time data | Yes — live extraction | No — pre-crawled, can be weeks stale | No — pre-crawled | No — pre-crawled |
| JavaScript rendering | Yes — Chromium browser | No | No | No |
| Database dependency | None | Required | Required | Required |
| Contact ranking + scoring | Yes — contactability score, lead score, outreach plan | Basic | Basic | No |
| Decision tiers (A/B/C) | Yes | No | No | No |
| Intent signals (hiring, tech stack) | Yes | Limited | Yes | No |
| Change detection | Yes — cross-run monitoring | No | Limited | No |
| Cookie consent handling | Yes — auto-dismiss | N/A | N/A | N/A |
| Pricing | $0.35/site, pay-per-result | $49-$119/month | $14,995+/year | $49-$399/month |
If it's not in a database, Apollo and ZoomInfo can't find it. Website Contact Scraper Pro can — because it goes directly to the website.
Database tools like Apollo can only return what they've already indexed. If a company isn't in Apollo, you get nothing. Website Contact Scraper Pro works anyway — because it visits the live website, not a database. ZoomInfo can't see JavaScript-rendered contacts. Website Contact Scraper Pro can — because it runs a real browser.
Data comes directly from the live website, not pulled from a database. Fresh on every run. Real-time extraction, not cached data.
Platform capabilities
- Scheduling — Run daily or weekly to keep contact databases fresh
- API access — Trigger from Python, JavaScript, or any HTTP client
- Proxy rotation — Scrape at scale without IP blocks using residential and datacenter proxies
- Monitoring — Slack/email alerts when runs fail
- Integrations — Zapier, Make, Google Sheets, HubSpot, webhooks
Where Website Contact Scraper Pro fits in a pipeline
Website Contact Scraper Pro functions as a fallback enrichment step for JavaScript-heavy sites:
| Step | Actor | What it does | Cost |
|---|---|---|---|
| Source | Google Maps Email Extractor | Find companies by location + category | $0.07/result |
| Enrich (fast) | Website Contact Scraper | Extract contacts from static HTML sites | $0.15/site |
| Enrich (JS fallback) | Website Contact Scraper Pro (this) | Render JS sites and extract contacts | $0.35/site |
| Qualify | B2B Lead Qualifier | Score company quality from 30+ signals | $0.15/lead |
| Deliver | HubSpot Lead Pusher | Push directly to CRM | Free |
Features
Website Contact Scraper Pro is a contact intelligence tool that combines browser rendering with a full decision engine. It renders JavaScript, extracts contacts from multiple sources, scores leads, ranks decision-makers, and classifies outreach readiness — delivering real-time contact intelligence from live websites in a single run.
Browser rendering and cookie handling
- Playwright browser rendering — Renders JavaScript before extraction. Handles React hydration, Angular bootstrapping, Vue mounting, lazy-loaded components, and client-side routing
- Cookie consent auto-dismiss — Clicks through CookieBot, OneTrust, Didomi, CookieYes, Complianz, and generic accept buttons in English, German, French, Spanish, and Italian before extracting contacts
- NetworkIdle wait strategy — Waits for network activity to settle before parsing, catching late-loaded contact data
Decision engine
- Lead summary — One-line plain-English insight: "SaaS company, actively hiring, clear sales motion — ready for outreach"
- Next action — Specific CTA: "Email Marcus Rodriguez (Managing Partner) directly — verified address, high likelihood of response"
- Contactability score (0-100) — The one number to sort by. Combines email availability, verification, seniority, channel diversity, and contact completeness
- Best contact ranking — Identifies the person most likely to respond, scored by seniority (8-tier system from CEO to intern), email availability, verification confidence, and LinkedIn presence
- Top 3 contacts — Ranked backup options per domain
- Lead scoring (0-100) — Weighted outreach quality score per domain
- A/B/C decision tier — Tier A: verified personal email + senior contact. Tier B: personal email or contact found. Tier C: needs work
- Outreach plan — Recommended channel (email/LinkedIn/phone/contact form), backup channel, difficulty rating (easy/moderate/hard), urgency level, and recommended persona to target
- Risk summary — Plain-English: "Low risk — verified data with consistent domain match" or "Moderate risk — catch-all domain, emails may not reach individuals"
- Company type classification — 18 business types from page content analysis
- Confidence breakdown — emailConfidence, contactConfidence, overallConfidence (0-100) with risk flags
- Actionable recommendations — Specific next step for every incomplete result
- Change detection — Cross-run intelligence: new contacts, new emails, new domains since last run. Turns one-time scraping into monitoring
Website Contact Scraper Pro is a real-time website contact intelligence tool — every feature above works together to deliver decision-ready leads, not raw data.
Intent signals (Pro-exclusive)
- Hiring detection — Detects careers/jobs pages, "We're hiring" links — indicates active growth
- Pricing page detection — Signals commercial maturity and sales readiness
- Recent content detection — Blog/news/updates pages indicate an active company
- Tech stack detection — Identifies 14 tools (HubSpot, Salesforce, Marketo, Intercom, Drift, Zendesk, Mailchimp, Google Analytics, Segment, Stripe, Shopify, WordPress, Webflow, Squarespace) from page source
- Growth score (0-100) — Composite of all intent signals
Smart crawling
- Adaptive crawl depth — Stops early when homepage yields rich contacts (2+ emails, 2+ names, phone), expands when homepage is sparse. Saves time without losing data
- 7 preset modes —
fast,balanced,maximum,decision-makers,emails-only,eu-compliance,high-quality— match how users actually think about their workflow
Extraction and enrichment
- Four-source email extraction — mailto: links, body text, obfuscated
[at]/[dot]patterns, and JSON-LD/schema.org structured data - 13-platform social links — With JSON-LD sameAs extraction
- Contact names from 11 team card selectors — Schema.org Person,
.team-member,.bio-card, heading-paragraph pairs, and more - Deep scan mode — Probes 14 hidden paths (/imprint, /impressum, /privacy-policy, /legal, /careers)
- Built-in email verification — MX record checks, disposable domain detection, role-based flagging
- Fill missing emails — Generates probable emails for contacts without addresses using company naming patterns via Email Pattern Finder
Common lead generation questions this solves
How do I find decision-makers on a company website? The fastest way is to scrape the company's team and about pages and rank contacts by seniority.
Website Contact Scraper Pro does this automatically. It ranks contacts by seniority (CEO, VP, Director, Manager), scores them by email availability and verification status, and returns the top outreach target with a plain-English next action. LinkedIn shows you who works there — this tells you who to email and how.
How can I get the CEO's email from a startup website? Extract it directly from the startup's website using a browser-based scraper with email pattern detection.
Website Contact Scraper Pro renders the JavaScript, finds team/about/leadership pages, extracts names and titles, then matches them to email addresses. If no email is published, enable fillMissingEmails — it generates probable addresses from the company's naming pattern and verifies them.
How do I get contact info from a company website that blocks scrapers? Use a real browser with proxy rotation instead of HTTP requests.
Most scrapers get blocked because they don't execute JavaScript. Website Contact Scraper Pro uses a real Chromium browser with session rotation and proxy support — the same way a human browser would visit the site. It auto-dismisses cookie consent banners and renders JavaScript before extracting.
How do I extract emails from a website built with React or Next.js? You need a browser that renders the JavaScript before you can extract anything.
Standard HTTP scrapers return empty results on React and Next.js sites because the contact data only exists after JavaScript executes. Website Contact Scraper Pro renders these pages in Chromium and extracts emails from the fully loaded DOM. Works where HTTP scrapers return nothing.
When to use this instead of Apollo or ZoomInfo
Use Website Contact Scraper Pro instead of database tools when:
- The company isn't in their database — Niche companies, startups, and international businesses often aren't indexed by Apollo or ZoomInfo. Website Contact Scraper Pro works on any website with a URL.
- You need current data — Database tools serve pre-crawled data that can be weeks or months stale. Website Contact Scraper Pro extracts from the live website every time it runs.
- The website uses JavaScript — If the contact page is a React, Angular, or Vue SPA, database crawlers may never have indexed the contacts. Website Contact Scraper Pro renders the JavaScript and sees what a human browser sees.
- You want per-result pricing — No monthly subscription. $0.35 per website, only when data is found.
- You need outreach intelligence, not just emails — Apollo gives you a contact record. Website Contact Scraper Pro tells you who to email, how to reach them, how confident the data is, and what to do next.
Unlike Apollo or ZoomInfo, Website Contact Scraper Pro does not rely on a database — it extracts contact data directly from the live website. Instead of querying a pre-crawled index that may be weeks stale, it visits each website in real time. While database tools are limited to companies they have already indexed, Website Contact Scraper Pro works on any website with a URL.
If it's not in a database, this tool can still find it. Extract contacts from websites where traditional scrapers fail. Get the exact person to email, not just a list of addresses. Real-time extraction, not cached data — fresh on every run.
What does the output actually tell you?
Each domain in your results tells you four things:
- Who to contact — Name, title, verified email address, ranked by seniority and reachability
- How to reach them — Primary channel (email/LinkedIn/phone/form), backup channel, difficulty rating
- How good the lead is — Contactability score (0-100), lead quality score, decision tier (A/B/C), risk summary
- What to do next — Plain-English next action: "Email the VP of Sales directly — verified address, high likelihood of response"
This is contact intelligence — not scraping. The output tells you who to contact, how to reach them, how good the lead is, and what to do next. Real-time contact intelligence from live websites. No stale databases. No guessing.
Which preset should I use?
- If you want to find who to email → use
decision-makers— finds senior contacts, verifies emails, fills gaps - If you want a cheap email list → use
emails-only— fast, no names or socials, lowest cost - If you want high-quality leads only → use
high-quality— filters to Tier A/B leads with personal emails - If you want to scan EU companies → use
eu-compliance— deep scan for imprint/impressum pages - If you want the best balance → use
balanced— verify + fill, covers most use cases - If you want everything → use
maximum— deep scan + verify + fill - If you want to monitor changes → use
monitor— schedule weekly, track new contacts and hiring signals
Who uses this and why
For lead generation: Paste company URLs, get scored leads sorted by contactability with the best person to email at each company. Contact intelligence from live websites — not a stale database.
For scraping JavaScript websites: Render React, Angular, Vue, and Next.js sites in a real browser before extracting contacts. Works where HTTP scrapers return nothing.
For finding decision-makers: Automatically identifies the most senior reachable person at each company. Ranks contacts by seniority, email availability, and verification status. Returns a plain-English next action.
For CRM enrichment: Export contactability scores, decision tiers, and verified emails directly to HubSpot, Salesforce, or CSV. Use compact output mode for clean CRM imports.
For lead monitoring: Schedule weekly runs with the monitor preset. Track new contacts, new emails, and hiring changes across runs. Website Contact Scraper Pro is a real-time website contact intelligence tool that gets smarter over time.
Use cases for scraping JavaScript website contacts
Best for scraping React/Angular/Vue company sites
Use when the regular scraper returns empty results on SPA-built company websites. Website Contact Scraper Pro renders the full page in Chromium before extraction. Many tech startups, SaaS companies, and modern agencies build their sites with JavaScript frameworks where contact data only exists in the rendered DOM.
Best for lead generation from JavaScript-heavy directories
Some business directories and listing sites use React or Angular frontends. When HTTP-only scraping returns blank pages, Website Contact Scraper Pro renders the directory pages and extracts business contacts.
Best for CRM enrichment of tech company prospect lists
Tech companies are more likely to use JavaScript frameworks. If your prospect list targets SaaS, startups, or technology firms, Website Contact Scraper Pro has a higher success rate than HTTP-only scraping. The companyType classification helps segment results by industry.
Best for fallback pipeline after the regular scraper
Run the regular Website Contact Scraper first on all URLs. Filter for sites with pagesScraped: 1 and no contacts. Re-run those through Website Contact Scraper Pro with the balanced preset. This two-step approach is the fastest and cheapest way to maximize contact coverage.
Best for EU company sites with cookie banners
European company websites often hide contact information behind cookie consent overlays. Website Contact Scraper Pro auto-dismisses these banners before extraction, accessing contacts that would otherwise be blocked. Deep scan mode probes /imprint and /impressum pages where EU businesses are legally required to list contacts.
Real examples
SaaS founder building an outbound list: Paste 80 competitor customer URLs (most built with React). Website Contact Scraper Pro renders each, finds 52 leads with personal emails and decision-maker names. Filter by decision: A and export 34 outreach-ready contacts. Cost: $12. Time: 8 minutes.
Agency prospecting for clients: Run 200 digital agency websites through the decision-makers preset. Get 140 results with the managing partner or head of growth identified, ranked by contactability score. The nextAction field tells you exactly how to reach each one.
Recruiter sourcing engineering leads: Target 50 tech company sites. The team page extraction finds CTOs, VPs of Engineering, and tech leads. Enable fillMissingEmails to generate probable email addresses for contacts without published emails. The intentSignals.hiring flag shows which companies are actively growing.
How to extract contacts from JavaScript websites
- Enter website URLs — Paste company homepages into the URL list. Use root domains like
https://acmecorp.com. Website Contact Scraper Pro discovers contact, about, and team pages automatically. Maximum 500 URLs per run. - Choose a preset — Select
balanced(recommended),fast(speed),maximum(deep scan + verify + fill),decision-makers(find who to email),emails-only(cheap),eu-compliance(imprint pages), orhigh-quality(Tier A/B only). Or configure individual options. - Run the actor — Click Start. 50 websites finish in about 5 minutes. Results appear sorted by lead score with the best prospects first.
- Download results — Export from the Dataset tab as JSON, CSV, or Excel. The
summaryblock has flat columns (primaryEmail, primaryContact, decision) for spreadsheet use.
First run tips
- Start with 3-5 URLs — Test on known JavaScript-heavy sites before running large batches. Check that
pagesScrapedis greater than 1 and contacts appear. - Try the regular version first — Most business websites serve contact info as static HTML. Website Contact Scraper Pro is for the sites where the regular version fails. Running Pro on static sites wastes memory and time.
- Use the balanced preset — One click enables email verification + fill missing emails. Covers the most common use case with minimal configuration.
- Allocate enough memory — 4 GB is the default. For very heavy SPAs with large JavaScript bundles, try 8 GB.
- Enable proxies for batches — Browser-based scraping triggers bot detection more often than HTTP requests. Enable Apify Proxy for batches of 10+ sites.
Typical performance
| Metric | Typical value |
|---|---|
| Websites per run | Up to 500 |
| Speed per site | ~13 seconds (SaaS sites), ~25 seconds (ultra-heavy SPAs) |
| Run time (5 sites, fast) | ~65 seconds |
| Run time (50 sites, balanced) | ~10 minutes |
| Run time (200 sites, balanced) | ~45 minutes |
| Email hit rate | 60-80% of domains |
| Personal email rate | 30-50% of all emails |
| Cost per run (50 sites) | ~$17.50 PPE + ~$0.25 compute |
Benchmarked April 2026 on SaaS company websites (stripe.com, hubspot.com, zapier.com, airtable.com, figma.com). Speed includes resource blocking, cookie consent dismissal, and adaptive crawl depth. Heavy SPAs with large JavaScript bundles take longer.
Input parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
preset | string | No | — | fast, balanced, maximum, decision-makers, emails-only, eu-compliance, high-quality, monitor (track changes across runs) |
urls | string[] | Yes | — | Website URLs to scrape. Max 500 per run. One result per domain. |
maxPagesPerDomain | integer | No | 5 | Pages to crawl per website (1-20). Bumped to 10 when deep scan is enabled. |
deepScan | boolean | No | false | Probe 14 hidden paths (/imprint, /impressum, /privacy, /legal, /careers, etc.) |
verifyEmails | boolean | No | false | Verify all found emails via MX record checks |
includeNames | boolean | No | true | Extract team member names and job titles |
includeSocials | boolean | No | true | Extract social media profile links (13 platforms) |
fillMissingEmails | boolean | No | false | Generate probable emails for contacts without addresses (~$0.10/domain extra) |
outputMode | string | No | full | full returns all 30+ fields. compact returns only actionable fields (domain, leadSummary, nextAction, contactabilityScore, bestContact, decision, emails, phones). Use compact for CRM imports. |
minLeadScore | integer | No | — | Only output domains with lead score >= this threshold (0-100) |
requirePersonalEmail | boolean | No | false | Only output domains with at least one personal email |
companyTypes | string[] | No | — | Only output domains classified as these types (e.g., ["saas", "agency"]) |
proxyConfiguration | object | No | Apify Proxy | Proxy settings. Recommended for browser-based scraping. |
Input examples
Balanced preset (recommended):
{
"urls": [
"https://acmecorp.com",
"https://northstarlogistics.com",
"https://pinnacleventures.com"
],
"preset": "balanced"
}
Deep scan with verification for EU companies:
{
"urls": [
"https://acmecorp.com",
"https://northstarlogistics.com",
"https://nordhaven-consulting.de",
"https://bellavista-group.it"
],
"deepScan": true,
"verifyEmails": true,
"proxyConfiguration": { "useApifyProxy": true }
}
Fast emails-only pass:
{
"urls": ["https://acmecorp.com", "https://northstarlogistics.com"],
"preset": "fast",
"includeNames": false,
"includeSocials": false
}
Input tips
- Start with defaults — The default 5 pages per domain covers homepage + contact + about + team for most business websites.
- Enable deep scan for EU companies — European businesses are legally required to list contacts on imprint pages. Deep scan probes /imprint, /impressum, and /datenschutz.
- Use proxies for all batches — Browser scraping is more detectable than HTTP requests. Set
proxyConfiguration: { "useApifyProxy": true }. - Batch everything in one run — 100 sites in one run is faster than 100 single-site runs. Website Contact Scraper Pro handles concurrency internally with 5 simultaneous browser pages.
Output example
Each website produces one record in the dataset. The output format is identical to the regular Website Contact Scraper.
{
"url": "https://acmecorp.com",
"domain": "acmecorp.com",
"emails": [
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]"
],
"personalEmails": [
"[email protected]",
"[email protected]"
],
"genericEmails": [
"[email protected]",
"[email protected]"
],
"verifiedEmails": [
{
"email": "[email protected]",
"status": "valid",
"confidence": 98,
"reason": "MX records found, mailbox accepts mail"
},
{
"email": "[email protected]",
"status": "valid",
"confidence": 92,
"reason": "MX records found, mailbox accepts mail"
}
],
"phones": ["+1 (555) 234-5678"],
"contacts": [
{
"name": "Marcus Rodriguez",
"title": "Managing Partner",
"email": "[email protected]"
},
{
"name": "Sarah Chen",
"title": "VP of Business Development",
"email": "[email protected]"
}
],
"socialLinks": {
"linkedin": "https://www.linkedin.com/company/acmecorp",
"twitter": "https://x.com/acmecorp",
"facebook": "https://www.facebook.com/acmecorp"
},
"addresses": [
{
"streetAddress": "123 Market St",
"addressLocality": "San Francisco",
"addressRegion": "CA",
"postalCode": "94105",
"addressCountry": "US",
"formatted": "123 Market St, San Francisco, CA, 94105, US"
}
],
"businessHours": [
{ "dayOfWeek": "Monday", "opens": "09:00", "closes": "17:00" },
{ "dayOfWeek": "Friday", "opens": "09:00", "closes": "17:00" }
],
"companyMeta": {
"name": "Acme Corp",
"description": "Strategic advisory and investment firm",
"industry": "Financial Services",
"language": "en",
"foundingDate": "2015"
},
"pagesScraped": 4,
"leadScore": 85,
"dataQuality": "high",
"bestContact": {
"name": "Marcus Rodriguez",
"title": "Managing Partner",
"email": "[email protected]",
"score": 72,
"reasons": [
"Senior title (Managing Partner)",
"Personal email found",
"Verified email (92% confidence)",
"LinkedIn found",
"Job title available"
]
},
"topContacts": [
{
"name": "Marcus Rodriguez",
"title": "Managing Partner",
"email": "[email protected]",
"score": 72,
"reasons": ["Senior title (Managing Partner)", "Personal email found", "Verified email (92% confidence)", "LinkedIn found", "Job title available"]
},
{
"name": "Sarah Chen",
"title": "VP of Business Development",
"email": "[email protected]",
"score": 65,
"reasons": ["Senior title (VP of Business Development)", "Personal email found", "LinkedIn found", "Job title available"]
}
],
"companyType": "financial_services",
"confidence": {
"emailConfidence": 85,
"contactConfidence": 90,
"overallConfidence": 87,
"riskFlags": []
},
"coverage": {
"emails": "complete",
"contacts": "complete",
"phones": "found",
"socials": "found",
"addresses": "found",
"contactForm": false
},
"decision": {
"tier": "A",
"reason": "Verified personal email + senior contact — ready to contact"
},
"contactFormDetected": false,
"domainPurity": 100,
"outreachPlan": {
"primaryChannel": "email",
"backupChannel": "linkedin",
"difficulty": "easy",
"recommendedPersona": "Managing Partner",
"urgency": "high",
"reason": "Verified personal email + senior contact identified + LinkedIn available"
},
"intentSignals": {
"hiring": true,
"hasPricingPage": false,
"hasRecentContent": true,
"techStack": ["HubSpot", "Google Analytics"],
"growthScore": 65
},
"leadSummary": "Financial services firm, actively hiring, publishing content — ready for outreach",
"nextAction": "Email Marcus Rodriguez (Managing Partner) directly — verified address, high likelihood of response",
"contactabilityScore": 82,
"riskSummary": "Low risk — verified data with consistent domain match",
"changes": {
"newContacts": 1,
"newEmails": 2,
"isNew": false
},
"summary": {
"primaryEmail": "[email protected]",
"primaryContact": "Marcus Rodriguez",
"title": "Managing Partner",
"decision": "A",
"confidence": 87,
"leadScore": 85
},
"recommendation": null,
"scrapedAt": "2026-04-06T12:00:00.000Z"
}
Output fields
| Field | Type | Description |
|---|---|---|
url | string | Normalized input URL |
domain | string | Domain with www. stripped |
emails | string[] | All deduplicated email addresses |
personalEmails | string[] | Emails to individuals (not info@, hello@, etc.) |
genericEmails | string[] | Role-based emails (16 generic prefixes) |
verifiedEmails | object[] | Email verification results: email, status, confidence, reason (when verifyEmails enabled) |
generatedEmails | object[] | Generated emails for contacts without addresses: name, email, pattern, confidence (when fillMissingEmails enabled) |
phones | string[] | Deduplicated phone numbers |
contacts | object[] | Named team members with name, title, and optionally email |
socialLinks | object | Social URLs keyed by platform (13 platforms) |
addresses | object[] | Physical addresses with structured fields and formatted string |
businessHours | object[] | Opening hours with dayOfWeek, opens, closes |
companyMeta | object | Company name, description, industry, logo, employee count, founding date, language |
pagesScraped | number | Total pages processed for this domain |
leadScore | number | 0-100 outreach quality score |
dataQuality | string | high (3+ signal types), medium, low, or no-data |
bestContact | object | Highest-ranked contact: name, title, email, score, reasons |
topContacts | object[] | Top 3 ranked contacts |
companyType | string | Business type classification (18 types: saas, agency, consulting, legal, ecommerce, healthcare, financial_services, manufacturing, education, nonprofit, construction, hospitality, media, recruitment, logistics, technology, accounting, real_estate) |
recommendation | string | Actionable next step (null when complete) |
confidence | object | emailConfidence, contactConfidence, overallConfidence (0-100), riskFlags |
coverage | object | Completeness per signal: emails, contacts, phones, socials, addresses, contactForm |
decision | object | Outreach readiness: tier (A/B/C) and reason |
contactFormDetected | boolean | True when a contact form was found |
domainPurity | number | Percentage (0-100) of emails matching the root domain |
outreachPlan | object | Recommended outreach strategy: primaryChannel, backupChannel, difficulty (easy/moderate/hard), recommendedPersona, urgency (high/medium/low), reason. Null when no contact data found |
intentSignals | object | Buying intent: hiring (boolean), hasPricingPage (boolean), hasRecentContent (boolean), techStack (string[]), growthScore (0-100) |
leadSummary | string | One-line plain-English insight combining company type, growth signals, and outreach readiness |
nextAction | string | Specific CTA: who to contact, how, and why. Ready for Slack/email/CRM notes |
contactabilityScore | number | 0-100 composite: email availability (40%), verification (20%), seniority (15%), channel diversity (15%), completeness (10%). The one number to sort by |
riskSummary | string | Plain-English risk: "Low risk — verified data" or "Moderate risk — catch-all domain" |
changes | object | Cross-run: newContacts, newEmails, isNew. Null on first run. Enables monitoring workflows |
summary | object | Flat block: primaryEmail, primaryContact, title, decision, confidence, leadScore |
failureType | string | blocked, timeout, no-data, or parse-error (only on failed domains) |
scrapeError | string | Error message with actionable suggestion (only on failed domains) |
scrapedAt | string | ISO 8601 timestamp |
How much does it cost to scrape JavaScript websites for contacts?
Website Contact Scraper Pro uses pay-per-event pricing — you pay $0.35 per website. Platform compute costs are included. Only charged when contact data (emails, phones, or contacts) is found. Failed domains and sites with no data are free.
| Scenario | Websites | Cost per site | Total cost |
|---|---|---|---|
| Quick test | 1 | $0.35 | $0.35 |
| Small batch | 10 | $0.35 | $3.50 |
| Medium batch | 50 | $0.35 | $17.50 |
| Large batch | 200 | $0.35 | $70.00 |
| Enterprise | 1,000 | $0.35 | $350.00 |
Spending limits: Set a per-run spending cap in the actor configuration. All data collected before the cap is reached is delivered. Website Contact Scraper Pro delivers all results first, then charges — so you never lose data.
Compared to manual work: Manually extracting contacts from 100 JavaScript-heavy websites takes 4-6 hours. Website Contact Scraper Pro does it in 10 minutes for $15.
Free tier: Apify's free tier includes $5 of monthly credits — enough for ~33 websites.
Extra cost for email fill: When fillMissingEmails is enabled, the Email Pattern Finder sub-actor adds ~$0.10 per domain with missing emails.
Extract contacts from JavaScript websites using the API
Python
from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("ryanclinton/website-contact-scraper-pro").call(run_input={
"urls": [
"https://acmecorp.com",
"https://northstarlogistics.com",
"https://pinnacleventures.com"
],
"preset": "balanced"
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
domain = item["domain"]
tier = item["decision"]["tier"]
best = item.get("bestContact")
best_name = best["name"] if best else "N/A"
emails = len(item["emails"])
print(f"{domain}: Tier {tier}, best contact: {best_name}, {emails} emails")
JavaScript
import { ApifyClient } from "apify-client";
const client = new ApifyClient({ token: "YOUR_API_TOKEN" });
const run = await client.actor("ryanclinton/website-contact-scraper-pro").call({
urls: [
"https://acmecorp.com",
"https://northstarlogistics.com",
"https://pinnacleventures.com"
],
preset: "balanced"
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const item of items) {
const tier = item.decision.tier;
const best = item.bestContact?.name ?? "N/A";
console.log(`${item.domain}: Tier ${tier}, best: ${best}, ${item.emails.length} emails`);
}
cURL
# Start the run
curl -X POST "https://api.apify.com/v2/acts/ryanclinton~website-contact-scraper-pro/runs?token=YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"urls": ["https://acmecorp.com", "https://northstarlogistics.com"],
"preset": "balanced"
}'
# Fetch results (replace DATASET_ID from the run response)
curl "https://api.apify.com/v2/datasets/DATASET_ID/items?token=YOUR_API_TOKEN&format=json"
How Website Contact Scraper Pro works
Mental model: URLs → Chromium browser rendering → rendered DOM parsing → multi-source extraction → scoring → ranked output.
Browser rendering phase
Website Contact Scraper Pro launches headless Chromium via Playwright for each URL. It waits for networkidle state (all JavaScript finished executing and network requests settled), then dismisses cookie consent banners by checking 20+ selectors covering CookieBot, OneTrust, Didomi, CookieYes, Complianz, and generic patterns in 6 languages.
Contact page discovery
After processing the homepage, Website Contact Scraper Pro discovers contact, about, and team pages by matching URL path segments against 25+ keywords in English, German, French, Spanish, and Italian. When deep scan is enabled, it also probes 14 hidden paths (/imprint, /impressum, /privacy-policy, /legal, /support, /careers, etc.).
Multi-source extraction
For each rendered page, Website Contact Scraper Pro extracts from 4 email sources (mailto links, body text regex, obfuscated patterns, JSON-LD/schema.org), 3 phone sources (tel: links, formatted text in contact areas, JSON-LD), 13 social platform patterns (links + JSON-LD sameAs), structured data for addresses and business hours, and 11 team card CSS selectors for contact names.
Decision engine
After crawling, Website Contact Scraper Pro classifies emails (personal vs generic using 16 role prefixes), ranks contacts by an 8-tier seniority system, computes lead scores (0-100) from signal presence, assigns A/B/C decision tiers, and generates actionable recommendations for incomplete results.
Tips for best results
- Run the regular version first — Most business websites serve contacts as static HTML. Only use Website Contact Scraper Pro for sites that return empty results with the regular scraper.
- Use the balanced preset for most runs — Enables email verification and fill missing emails in one click. Best balance of data quality and speed.
- Allocate 4 GB minimum — Browser rendering needs memory. For very heavy SPAs, increase to 8 GB.
- Enable deep scan for European companies — EU law requires contact info on imprint pages. Deep scan probes these paths automatically.
- Check
pagesScrapedon empty results — If a site returnspagesScraped: 1with no data even in Pro mode, it likely uses a contact form only or requires login. - Use the fallback pipeline — Run regular version on all URLs, collect failures, re-run through Pro. Fastest and cheapest approach.
- Set spending limits on large batches — Use the per-run spending cap. All data collected before the cap is delivered.
Combine with other Apify actors
| Actor | How to combine |
|---|---|
| Website Contact Scraper | Run the regular version first for speed. Re-run failures through Pro. Both produce identical output. |
| Email Pattern Finder | Generate emails for contacts found without addresses ($0.10/domain). Built into the fillMissingEmails option. |
| Bulk Email Verifier | Verify emails separately if you ran without verifyEmails ($0.005/email). |
| B2B Lead Qualifier | Score company quality 0-100 from 30+ signals after contact extraction ($0.15/lead). |
| Google Maps Email Extractor | Source company URLs from Google Maps search results, then enrich with Pro ($0.07/business). |
| HubSpot Lead Pusher | Push contact records directly into HubSpot CRM. |
| B2B Lead Gen Suite | Full pipeline that uses Website Contact Scraper internally. For JS sites, run Pro separately and merge results. |
Fallback pipeline: Regular then Pro
from apify_client import ApifyClient
client = ApifyClient(token="YOUR_API_TOKEN")
# Step 1: Fast scrape with regular version
fast_run = client.actor("ryanclinton/website-contact-scraper").call(
run_input={"urls": your_urls, "preset": "fast"}
)
# Step 2: Find sites that returned no contacts
empty_sites = []
for item in client.dataset(fast_run["defaultDatasetId"]).iterate_items():
if not item["emails"] and not item["contacts"]:
empty_sites.append(item["url"])
print(f"{len(empty_sites)} sites need browser rendering")
# Step 3: Re-run through Pro with balanced preset
if empty_sites:
pro_run = client.actor("ryanclinton/website-contact-scraper-pro").call(
run_input={"urls": empty_sites, "preset": "balanced"}
)
for item in client.dataset(pro_run["defaultDatasetId"]).iterate_items():
tier = item["decision"]["tier"]
print(f"{item['domain']}: Tier {tier}, {len(item['emails'])} emails")
Limitations
Can this extract contacts from login-protected pages? No. Website Contact Scraper Pro only works on publicly accessible website content. It cannot bypass authentication, CAPTCHAs, or access controls.
Does it work on every JavaScript website? It works on any site that renders in a standard Chromium browser — React, Angular, Vue, Next.js, Nuxt, Svelte, and others. Sites with aggressive bot detection may block automated browsers even with proxies. Using residential proxies improves success rates.
Why is it slower than the regular version? Browser rendering takes ~13 seconds per site vs milliseconds for HTTP requests. Website Contact Scraper Pro blocks images, CSS, fonts, and analytics scripts to minimize overhead, but still needs to execute the main JavaScript bundle. Budget ~4-5 sites per minute vs 100+ for the regular version.
What if a site only has a contact form and no email?
Website Contact Scraper Pro detects contact forms and sets contactFormDetected: true. The nextAction field will recommend using the contact form. No email will be extracted because none is published.
Does it follow links to other websites? No. Website Contact Scraper Pro only follows links within the same domain as the input URL. Cross-domain team directories or externally hosted about pages are not discovered.
What about cookie consent platforms it doesn't recognise? Auto-dismiss covers CookieBot, OneTrust, Didomi, CookieYes, Complianz, and generic "Accept all" buttons. Non-standard or custom consent implementations may not be dismissed. The contact data behind the banner may still be extractable from the HTML source.
Integrations
- Zapier — Trigger CRM updates or email sequences when new contacts are extracted
- Make — Build multi-step workflows that enrich contacts after extraction
- Google Sheets — Export lead lists directly to shared team spreadsheets
- Apify API — Trigger runs from Python, JavaScript, or any HTTP client
- Webhooks — Get notified when a run finishes and process results automatically
- LangChain / LlamaIndex — Feed verified contact datasets into AI agent workflows
How to extract emails from React websites
Website Contact Scraper Pro is the best way to extract emails from a React website because it renders the page in a real browser before extraction.
To do this manually, you would need to set up Playwright or Puppeteer, write JavaScript rendering logic, wait for React hydration, then build email extraction patterns for mailto links, body text, and structured data.
Website Contact Scraper Pro automates this by launching Chromium, executing the React JavaScript bundle, waiting for hydration to complete, and extracting emails from the fully loaded DOM. Works where HTTP scrapers return nothing.
How to scrape contacts from single-page applications
Website Contact Scraper Pro is the best way to scrape contacts from single-page applications because it runs a real browser that executes the application's JavaScript.
To do this manually, you would need to build a headless browser setup, handle Angular bootstrapping or Vue mounting, navigate client-side routes to contact and team pages, and parse the rendered DOM for structured contact data.
Website Contact Scraper Pro automates this by launching Chromium, executing the application code, navigating to contact pages, and extracting contacts from the fully loaded page. Find the right person to email, not just any email.
Troubleshooting
Empty results on a known JavaScript site — Increase maxPagesPerDomain to 10 or enable deepScan. Some sites load contacts on subpages not discoverable from the homepage. If the site requires login, Website Contact Scraper Pro cannot access it.
Run times are very long — Heavy SPAs with large JavaScript bundles take longer to render. Reduce maxPagesPerDomain or split large batches into multiple runs. Allocate 8 GB memory for sites with unusually large bundles.
Bot detection / 403 errors — Enable residential proxies via proxyConfiguration: { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }. Some sites block all automated browsers regardless of proxy.
Cookie banner still visible — Website Contact Scraper Pro covers CookieBot, OneTrust, Didomi, CookieYes, and Complianz. Non-standard or custom consent implementations may not be dismissed. The contact data behind the banner may still be extractable from the HTML.
Memory errors — Increase memory allocation to 8 GB. Chromium rendering is memory-intensive. For batches over 200 URLs, consider splitting into multiple runs.
Recent updates
- Decision engine (April 2026) — Lead scoring 0-100, A/B/C outreach tiers, best contact ranking, top 3 contacts, company type classification (18 types), confidence breakdown, coverage diagnosis, domain purity, actionable recommendations
- Cookie consent auto-dismiss (April 2026) — Auto-dismisses CookieBot, OneTrust, Didomi, CookieYes, Complianz, and generic patterns in 6 languages before extraction
- 13-platform social extraction (April 2026) — Added TikTok, Pinterest, GitHub, Discord, Telegram, Threads, WhatsApp, Snapchat
- Fill missing emails (April 2026) — Generates probable emails for contacts without addresses using company naming patterns
- Preset modes (April 2026) — Fast, balanced, and maximum presets configure all options in one click
- Output filters (April 2026) — Filter by minimum lead score, require personal email, filter by company type
Responsible use
- Website Contact Scraper Pro extracts publicly available contact information from websites. It does not bypass authentication, CAPTCHAs, or access restricted content.
- Users are responsible for ensuring their use complies with applicable laws and platform terms, including data protection regulations (GDPR, CAN-SPAM, CCPA) and email outreach rules in their jurisdiction.
- Do not use extracted data for spam, harassment, or unauthorized purposes.
- For guidance on web scraping legality, see Apify's guide.
FAQ
Can Website Contact Scraper Pro extract emails from React websites? Yes. Website Contact Scraper Pro launches Chromium, executes the React JavaScript bundle, waits for hydration to complete, and then extracts emails from the rendered DOM. This includes emails in mailto links, body text, JSON-LD structured data, and obfuscated [at]/[dot] patterns.
What is the difference between Website Contact Scraper and Website Contact Scraper Pro? The regular version uses HTTP requests (CheerioCrawler) and processes ~100 sites per minute. Website Contact Scraper Pro uses Playwright with Chromium and processes ~4-5 sites per minute. The Pro version renders JavaScript before extraction, making it work on SPAs where the regular version returns empty results. Both share the same decision engine, scoring logic, and output format.
How does Website Contact Scraper Pro handle Angular and Vue sites? The same way it handles React — by rendering the page in a real browser. Playwright waits for JavaScript to finish executing (Angular bootstrapping, Vue mounting), then Website Contact Scraper Pro parses the rendered DOM with the same extraction logic used for any HTML page.
Can I use Website Contact Scraper Pro for all my websites? You can, but it is slower and uses more memory than the regular version. For static HTML sites, the regular version is faster and cheaper while producing identical output. Use Pro specifically for JavaScript-heavy sites.
Does Website Contact Scraper Pro work on sites behind Cloudflare? Website Contact Scraper Pro works on many Cloudflare-protected sites because it uses a real browser that passes JavaScript challenges. However, sites with aggressive bot detection may still block automated access. Using residential proxies improves success rates.
How accurate are the lead scores from Website Contact Scraper Pro? Lead scores are computed from signal presence: personal emails (+25), contacts (+20), phones (+15), LinkedIn (+10), addresses (+5), business hours (+5), company metadata (+5), and verified emails (+10). The scoring algorithm is identical to the regular version. Scores reflect data completeness, not company quality.
Can Website Contact Scraper Pro fill in missing emails for contacts? Yes. When fillMissingEmails is enabled, Website Contact Scraper Pro calls the Email Pattern Finder sub-actor to detect the company's email naming pattern (e.g., [email protected]) and generates probable email addresses for contacts found without emails. These generated emails are verified and added to the output with confidence scores.
Is it legal to scrape contacts from company websites? Legality depends on jurisdiction and intended use. Website Contact Scraper Pro only accesses publicly available pages and does not bypass authentication or access controls. In many jurisdictions, extracting publicly available business contact information is permitted, but consult legal counsel for your specific use case and region.
How does the A/B/C decision tier work? Tier A requires a verified personal email plus a senior contact (seniority score >= 70) — these leads are ready to contact immediately. Tier B means a personal email or contact was found but verification or seniority is incomplete. Tier C means only generic emails or no emails were found — these need more work. The tier maps directly to outreach workflow priority.
Can I filter results by company type? Yes. Use the companyTypes input parameter with values like ["saas", "agency", "consulting"]. Website Contact Scraper Pro classifies each domain into one of 18 business types based on page content analysis. Filtered results are excluded from the dataset but still counted for billing.
What happens when Website Contact Scraper Pro hits my spending limit? All data collected before the limit is reached is delivered. Website Contact Scraper Pro processes all URLs first, delivers results to the dataset, then charges per website with data. When the spending limit is reached, charging stops but previously delivered results remain available.
How do I run Website Contact Scraper Pro as a fallback for the regular version? Run the regular Website Contact Scraper first on all URLs. Filter results for sites with pagesScraped: 1 and empty emails and contacts arrays. Pass those URLs to Website Contact Scraper Pro with the balanced preset. Both actors produce identical output formats, so you can merge the datasets directly.
Is this better than Apollo for finding contacts on company websites? For companies with JavaScript-rendered websites, yes. Apollo queries a pre-crawled database — if the company's SPA contact page was never indexed, the data doesn't exist in Apollo. Website Contact Scraper Pro visits the live website, renders the JavaScript, and extracts contacts in real time. It also provides outreach intelligence (contactability scores, decision tiers, next actions) that Apollo does not offer. For companies already in Apollo's database, Apollo may be faster.
Can I use this for lead monitoring? Yes. Use the monitor preset and schedule runs daily or weekly. Website Contact Scraper Pro detects new contacts, new emails, and hiring changes across runs. The changes field in each result shows what's new since the last run — turning one-time scraping into continuous lead intelligence.
What is a contactability score? The contactability score (0-100) is the single number that tells you how easy it is to reach someone at a company. It combines email availability (40%), verification status (20%), contact seniority (15%), channel diversity (15%), and contact completeness (10%). Sort by this number to prioritize your outreach list — higher score means easier to close.
What is the difference between leadScore and contactabilityScore? Lead score measures data completeness — how much information was found. Contactability score measures reachability — how easy it is to actually reach someone. A company might have a high lead score (lots of data) but low contactability (only generic emails, no personal addresses). Sort by contactability for outreach, lead score for research.
Why this exists
Most tools give you a list of emails. Website Contact Scraper Pro is a real-time website contact intelligence tool — it tells you who to contact, how to reach them, and what to do next.
Building this yourself requires managing Playwright browsers, handling JavaScript rendering, dismissing cookie banners, extracting structured data, and ranking contacts. Website Contact Scraper Pro does all of this automatically in one run.
Get a decision-ready lead from any company website in under 30 seconds for $0.35.
Website Contact Scraper Pro is a real-time website contact intelligence tool — extracting, scoring, and ranking contacts directly from live websites.
Website Contact Scraper Pro is a contact intelligence tool for websites. It combines extraction, scoring, and action into one system — turning raw website data into decision-ready leads. Not a scraper. Not a database. Contact intelligence.
Help us improve
If you encounter issues, you can help us debug faster by enabling run sharing in your Apify account:
- Go to Account Settings > Privacy
- Enable Share runs with public Actor creators
This lets us see your run details when something goes wrong, so we can fix issues faster. Your data is only visible to the actor developer, not publicly.
Support
Found a bug or have a feature request? Open an issue in the Issues tab on this actor's page. For custom solutions or enterprise integrations, reach out through the Apify platform.
Compare this actor
Related actors
CFPB Complaint Search — By Company, Product & State
Search the CFPB consumer complaint database with 5M+ complaints. Filter by company, product, state, date range, and keyword. Extract complaint details, company responses, and consumer narratives. Free US government data, no API key required.
SEC EDGAR Filing Search — 10-K, 10-Q, 8-K & More
Search SEC EDGAR filings by keyword, company name, or ticker symbol. Filter by form type (10-K, 10-Q, 8-K, S-1, DEF 14A, Form 4) and date range. Returns structured filing data with direct document URLs. Free, no API key.
EUIPO Trademark Search — By Name, Class & Status
Search EU trademarks via the official EUIPO API. Find registered, pending, or expired trademarks by name, Nice class, applicant, status, or date. Returns application details, owners, goods & services, and EUIPO links.
FEC Campaign Finance - Political Donations & Donors
Search US federal campaign finance data. Find political donations by donor name, candidate, committee, employer, and state. Returns amounts, dates, PDF filing links. Free FEC API, no key required.
Ready to try Website Contact Scraper Pro?
This actor is coming soon to the Apify Store.
Coming soon