No-Code scraper · JSON API

Website Contact Extractor

Extract public contact information from website URLs, including email addresses, phone numbers and social links where available.

JSON CSV & XLSX API access
Read the API reference →
From web pages to a dataset

What you can do

Collect publicly listed business contacts.

Enrich your own website research lists.

Export contact fields to your reporting workflow.

01

Set your sources

Open the scraper and enter your own URLs, search terms and limits.

02

Review & run

Check the cost estimate and confirm the task. Follow its progress in your account.

03

Use your data

Explore saved results and export CSV, JSON or XLSX. Downloads of saved results are free.

Know what to expect

Sample data & output fields

Illustrative example

These example values demonstrate the data shape; they are not a live scraper result. Available fields depend on the source, selected options and upstream data.

JSON · illustrative result
[
  {
    "websiteUrl": "https://example.com/result",
    "primaryEmail": "[email protected]",
    "allEmails": [],
    "primaryPhone": "Example primary phone",
    "status": "success"
  }
]
FieldTypeDescription
websiteUrlstringThe normalized website URL that was crawled.
primaryEmailstringThe highest-ranked email address.
allEmailsarrayDeduplicated email addresses ordered by outreach quality.
primaryPhonestringThe highest-precision valid phone number in E.164 format.
statusstringWhether the website produced contacts, produced no contacts, failed, or was skipped by a run guard.
Start with a real configuration

Example input

This is the configured parser input. Replace the example sources with your own and review all limits before running.

JSON · example input
{
  "urls": [
    "konditorei-buchwald.de"
  ],
  "maxPagesPerSite": 20,
  "verifyEmails": false,
  "maxConcurrency": 5,
  "maxWebsitesConcurrency": 5,
  "requestTimeoutSecs": 15,
  "maxSiteDurationSecs": 90,
  "respectRobotsTxt": true,
  "jsFallback": false,
  "useProxy": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "verificationLevel": "mx",
  "smtpFromAddress": "[email protected]",
  "includePersonalNames": true
}
Explore input fields
FieldTypeNotes
urlsarrayRequired. Add 1–10,000 bare domains or full website URLs, one per line. Inputs are normalized and deduplicated by company domain before scanning.
maxPagesPerSiteintegerMaximum number of pages to inspect on each website, from 1 to 200. This setting does not affect the price.
verifyEmailsbooleanOptionally check each found email at the selected verification level. This is charged once per email actually verified.
maxConcurrencyintegerMaximum number of page requests running at once within a website, from 1 to 20. Requests to any single host remain sequential.
maxWebsitesConcurrencyintegerMaximum number of different websites scanned at the same time, from 1 to 20.
requestTimeoutSecsintegerHow many seconds to wait for an individual page before treating that request as failed.
maxSiteDurationSecsintegerHard wall-clock limit for one website. This prevents a slow or broken site from delaying the rest of your lead list.
respectRobotsTxtbooleanHonor each website's robots.txt rules. Enabled by default; turn it off only when you have a lawful reason and permission to do so.
jsFallbackbooleanWhen the HTTP scan finds no email, retry only the homepage and best contact page in a headless browser. Each website that uses this fallback triggers a separate charged event.
useProxybooleanRoute requests through the selected proxy configuration. Proxy traffic may add charges from your Apify proxy plan.
proxyConfigurationobjectChoose Apify Proxy or your own proxy URLs. This setting is used only when “Use a proxy” is enabled and proxy traffic may add charges.
verificationLevelstringChoose format-only validation, mail-server (MX) lookup, or an SMTP mailbox probe. Higher levels can take longer; every email actually checked is charged once.
smtpFromAddressstringOptional. Use a sender address on a domain you own for SMTP probes; this can improve acceptance and accuracy. Used only with the SMTP verification level.
includePersonalNamesbooleanTry to associate each public email with a nearby person's name and job title when the page provides that context.
The same scraper in your application

Run through the API

Create an API key in your account, send the input to the queued endpoint and use the returned task ID to retrieve results. Sending a live request uses credits.

cURL · queue a task
curl --request POST 'https://extracto.cloud/api/v1/parsers/website-contact-extractor/queue' \
  --header 'X-API-KEY: ext_your_api_key' \
  --header 'Content-Type: application/json' \
  --header 'Accept: application/json' \
  --data-binary @- <<'JSON'
{
  "input": {
    "urls": [
      "konditorei-buchwald.de"
    ],
    "maxPagesPerSite": 20,
    "verifyEmails": false,
    "maxConcurrency": 5,
    "maxWebsitesConcurrency": 5,
    "requestTimeoutSecs": 15,
    "maxSiteDurationSecs": 90,
    "respectRobotsTxt": true,
    "jsFallback": false,
    "useProxy": false,
    "proxyConfiguration": {
      "useApifyProxy": true
    },
    "verificationLevel": "mx",
    "smtpFromAddress": "[email protected]",
    "includePersonalNames": true
  }
}
JSON

Your next dataset starts here.

Choose your sources, review the price and run Website Contact Extractor.

Open scraper