Apify actor · whoareyouanas/website-link-scraper

Website Email & Contact Scraper - Find Emails, Phones & Socials

Crawl supplied website seeds to collect published emails, phone numbers, social links, and page references. Use full page records or an email-focused mode for contact research and link inventories.

Documentation checked 2026-10-29 · deployed build 0.1.8 · run through your Apify account

01 / Overview

Match the actor to the job.

Define the crawl

Control seed URLs, depth, page budget, same-domain behavior, and discovered-link patterns.

Choose extraction fields

Enable email, phone, social, link, image, or file-reference extraction as needed.

Review summaries

Use seed and run summaries to understand crawled pages, failures, and extracted contacts.

02 / Input

Start with a clear, bounded input.

startUrls is required. Include/exclude patterns apply to discovered links, not the initial seeds. Use the final canonical hostname; maxPages bounds crawl work, not the number of extracted email rows.

input.json · example based on the deployed schema
{
  "startUrls": [
    {
      "url": "https://trustmrr.com/"
    }
  ],
  "mode": "full",
  "crawlerType": "http",
  "maxPages": 5,
  "maxDepth": 1,
  "sameDomainOnly": true,
  "includeSubdomains": false,
  "extractEmails": true,
  "extractPhones": true,
  "extractSocial": true,
  "extractLinks": true,
  "extractImages": false,
  "extractFiles": false,
  "maxConcurrency": 1,
  "requestTimeoutSecs": 30
}

Replace example targets and credential placeholders before running. These are documentation examples, not a promise of currently available source results.

Deployed actor input fields, types, defaults, and descriptions
FieldType / requiredDefaultPurpose
startUrlsarrayRequiredNot specifiedSeed URLs to crawl.
modestring"full"Use full for page-wise link intelligence or emails_only for one row per email.

Options: full, emails_only

crawlerTypestring"http"HTTP is cheaper and faster. Browser handles heavy JS websites.

Options: http, browser

maxPagesinteger200Maximum pages across the entire run, shared by all start URLs. Concurrent crawling may slightly exceed this limit.

Minimum: 1

maxDepthinteger2How deep to follow links from each start URL.

Minimum: 0

sameDomainOnlybooleantrueIf enabled, crawler follows only links from the same domain as each seed URL.
includeSubdomainsbooleanfalseTreat subdomains as internal when same-domain crawling is enabled.
extractLinksbooleantrueExtract and classify internal and external page links.
extractEmailsbooleantrueExtract email addresses from page content and mailto links.
extractPhonesbooleantrueExtract phone numbers from tel: links. Plain-text phone numbers are not currently extracted.
extractSocialbooleantrueExtract profile links for major social platforms.
extractImagesbooleantrueExtract image URLs from page markup and metadata.
extractFilesbooleantrueExtract downloadable file links such as PDFs, docs, and archives.
maxConcurrencyinteger25Maximum number of parallel requests while crawling.

Minimum: 1

requestTimeoutSecsinteger20Timeout in seconds for each page request.

Minimum: 1

All other input controls (3)
Deployed actor input fields, types, defaults, and descriptions
FieldType / requiredDefaultPurpose
includeUrlGlobsarray[]If non-empty, only URLs matching at least one glob are crawled.
excludeUrlGlobsarray[]URLs matching any glob are skipped.
proxyConfigurationobjectNot specifiedOptional proxy settings. Leave empty for direct connections.

03 / Output

Know what each returned row represents.

Illustrative output shape · not a live run
{
  "recordType": "email",
  "seedUrl": "https://company.test/",
  "url": "https://company.test/contact",
  "email": "[email protected]",
  "depth": 1,
  "statusCode": 200
}

Example values illustrate the published contract. Available fields and populated values depend on the source, mode, and result status.

Fields in the documented output view

recordType

recordType

seedUrl

seedUrl

pageUrl

pageUrl

url

url

email

email

emails

emails

phoneNumbers

phoneNumbers

socialLinks

socialLinks

files

files

images

images

internalLinks

internalLinks

externalLinks

externalLinks

pagesCrawled

pagesCrawled

failedRequests

failedRequests

uniqueEmails

uniqueEmails

Output views select columns. They do not necessarily filter record types or exhaust the full JSON payload. Use structured JSON when you need nested arrays or objects.

Dataset links and run artifacts (1)
Extracted contacts and crawl summaries
Full mode returns page records; emails_only returns email records deduplicated per seed. Both modes also include seed_summary and run_summary records.

04 / Pricing

Understand the billable unit.

These are the active public event prices checked on 2026-10-29, in USD. They describe each event, not a universal flat price for a run. Confirm your current Apify plan and run budget before starting.

Actor event prices and billing units
Billable eventRate (USD)When it applies

Actor Start

apify-actor-start

$0.00005 / event

Charged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event).

Start units depend on allocated memory: one event per GB, with at least one event.

result

apify-default-dataset-item

$0.004 / event

Single result in the default dataset.

$4.00 per 1,000 of this event. Other events and separate services are additional.

  • Dataset-item billing includes written summaries as well as extracted page or email rows.
  • For example, five page rows plus a seed summary and run summary are seven billed items, not five contacts.

A result limit and a spending cap are different controls. Account charges, applicable taxes, and separately billed providers or proxies must be considered where relevant. A cap setting is not a minimum invoice charge.

05 / API & automation

Use the same input from your workflow.

Test a small run in Apify Console, inspect its records and charges, then save a task or call the actor from your own application. Keep your Apify token in an environment variable. Source-specific credentials, if required, are separate from the Apify API token.

cURL · start an asynchronous actor run
# Save the input example as input.json and set APIFY_TOKEN.
# This request starts an asynchronous, potentially billable run.
curl --request POST \
  'https://api.apify.com/v2/acts/whoareyouanas~website-link-scraper/runs' \
  --header "Authorization: Bearer $APIFY_TOKEN" \
  --header 'Content-Type: application/json' \
  --data @input.json

The response identifies the run. Wait for it to finish, inspect its status, and use its default dataset and key-value store to retrieve results. A successful run can still contain partial or failed records; check the output contract above before continuing downstream.

Coverage & interpretation

Check the result before relying on it.

Questions

Before you build an integration.

What do I need to provide?

startUrls is required. Include/exclude patterns apply to discovered links, not the initial seeds. Use the final canonical hostname; maxPages bounds crawl work, not the number of extracted email rows.

What should I check in the output?
  • The dataset can contain page records or email records plus a summary per seed and a run summary. Use recordType when counting contacts.
  • An Emails column view does not remove summary records. Published emails are not validated for deliverability or ownership.
How do I budget the run?
  • Dataset-item billing includes written summaries as well as extracted page or email rows.
  • For example, five page rows plus a seed summary and run summary are seven billed items, not five contacts.

Keep exploring

Practical guides for the next step.