Website Email & Phone Scraper with Branch Matching avatar

Website Email & Phone Scraper with Branch Matching

Pricing

$5.00 / 1,000 website analyzeds

Go to Apify Store
Website Email & Phone Scraper with Branch Matching

Website Email & Phone Scraper with Branch Matching

Extract public business emails and phone numbers from websites. Match contacts to the right branch by city and address, distinguish company-wide numbers, and get source URLs with confidence and crawl coverage. Export to JSON, CSV or Excel for lead enrichment and workflows.

Pricing

$5.00 / 1,000 website analyzeds

Rating

0.0

(0)

Developer

Eduard Kalyta

Eduard Kalyta

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Extract published business emails and phone numbers from company websites, then identify which contacts belong to the location you need. Every contact includes a source URL and is classified as branch, company-wide, or unknown.

What you get

  • Emails and phone numbers from public HTTPS pages, contact links, and structured business data.
  • Branch matching using a city and optional street, postal code, country, or known location page.
  • Source evidence and confidence for each contact, plus explicit crawl errors and coverage limits.
  • One Dataset row per unique target, ready to export as JSON, CSV, or Excel and use through the Apify API, Make, or n8n.

Useful for enriching business directories, preparing location-specific contact lists, and separating a local branch from a company's main number. No external AI key or proxy subscription is required by the code.

Input example

{
"targets": [
{
"id": "my-business-1",
"url": "https://company.example/",
"city": "London",
"street": "10 High Street",
"locationUrl": "https://company.example/locations/london"
}
],
"maxPagesPerSite": 12,
"maxTargets": 20
}

Replace the example domain with the business website you want to analyze. Only url is required. Omit city to discover general company contacts. A known locationUrl must use the same website host; www redirects are supported.

Understanding your results

Each row includes id, url, target, status, branchMatch, contacts, coverage, and sourcePages. Contact entries contain type, value, scope, confidence, and source evidence. The SUMMARY record reports successful sites, failures, branch matches, duplicates, charges, and budget stops.

  • COMPLETE: the selected crawl queue completed.
  • PARTIAL: the crawl hit a cap, stopped early, or encountered a page error. Inspect coverage.
  • FAILED: no page was successfully fetched.
  • branchMatch is true only when at least one contact meets the branch matching rules. A fetched site without a branch match can still return useful company contacts.

How branch matching works

The crawler prioritizes contact and location pages. It extracts mailto and tel links, visible emails and international phone numbers, and Schema.org business data. A branch claim requires a matching structured address with an attached contact, or a city-matching location page or heading with a contact not repeated elsewhere. Repeated footer contacts are classified as company-wide; weak evidence stays unknown.

Limits

Up to 100 targets and 25 pages per site can be configured; defaults are 20 targets and 12 pages. The crawler checks a 90-second site deadline between requests. It supports public HTTPS pages, validates and pins DNS addresses, and rejects private networks, credentials, nonstandard ports, oversized pages, and unrelated-host redirects.

JavaScript-only locators, PDFs, images, separate location domains, and bot-protected pages may not work. The Actor does not verify email deliverability or whether a phone answers. Results are published contact information, not verified leads. Respect website restrictions and applicable data-use rules.

Billing

When pay-per-event pricing is enabled, the site-analyzed event is charged once per unique target with at least one successfully fetched page. Failed targets are not charged this event. A branch match is not guaranteed. Check the Store pricing panel for the current rate. Without pay-per-event pricing, successful results are still saved without event charges.

Local development

Requires Node.js 22+. Install with npm ci, put input in storage/key_value_stores/default/INPUT.json, and run npm start. Run npm test for deterministic extraction, matching, network-safety, and billing tests.