# Website Email & Phone Finder (`jacksu/website-contact-intelligence-agent`) Actor

Find public business emails, phone numbers, social profiles, and source URLs from company websites with bounded crawling.

- **URL**: https://apify.com/jacksu/website-contact-intelligence-agent.md
- **Developed by:** [jack su](https://apify.com/jacksu) (community)
- **Categories:** Lead generation, Business, Automation
- **Stats:** 2 total users, 0 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

$5.00 / 1,000 useful site results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Website Email & Phone Finder

Find public business emails, phone numbers, social profiles, company details,
and source URLs from company websites. The Actor returns one deduplicated
site-level contact record per requested website and uses strict crawl limits
to keep runs predictable.

This is the searchable Store positioning for the original Website Contact
Intelligence Agent: a bounded website contact finder, company email finder,
phone number finder, and public lead-research helper for AI agents and
automation workflows.

This is an original public-web research tool. It does not infer private email
addresses, enrich private individuals, or connect contacts to hidden
identities. Public pages can still contain personal business contact details.
Users must have a lawful purpose and must not use results for harassment,
spam, or unlawful profiling.

### What It Returns

- Public business emails and phone numbers
- CRM-ready `primaryEmail`, `primaryPhone`, contact page URLs, and a transparent
  confidence score
- A simple role label such as `general`, `sales`, `support`, `careers`, or
  `press`
- The source URL and evidence type for every contact
- Public company name, description, and social profiles
- Completeness, missing fields, pages scanned, page-level errors, and the
  reason crawling stopped
- Machine-readable diagnostics such as `noContactsFound`,
  `noHighIntentLinksFound`, `increaseMaxPages`, and `somePagesFailed`

Each requested website produces exactly one site-level dataset record. The
Actor prioritizes same-domain contact, about, team, support, legal, press,
careers, locations, company, `kontakt`, and `impressum` pages, then links each
discovered contact back to its source page.

### Input

```json
{
  "urls": ["https://apify.com"],
  "maxPagesPerSite": 8,
  "requestTimeoutSecs": 20
}
````

| Field | Type | Limits | Description |
| --- | --- | --- | --- |
| `urls` | array of strings | 1-20 URLs | Public HTTP or HTTPS company websites; paths are reduced to the site origin |
| `maxPagesPerSite` | integer | 1-20, default 8 | Maximum same-domain HTML pages scanned per site |
| `requestTimeoutSecs` | integer | 5-60, default 20 | Maximum wait time for each page request |

### Example Output

```json
{
  "status": "ok",
  "url": "https://example.com",
  "finalUrl": "https://example.com/",
  "companyName": "Example Company",
  "description": "Example public company description.",
  "emails": [
    {
      "value": "sales@example.com",
      "role": "sales",
      "sourceUrl": "https://example.com/contact",
      "evidenceType": "mailto"
    }
  ],
  "phones": [],
  "primaryEmail": "sales@example.com",
  "primaryPhone": null,
  "contactPageUrls": ["https://example.com/contact"],
  "confidenceScore": 0.83,
  "socialProfiles": [],
  "pagesScanned": 4,
  "completenessScore": 0.6,
  "missingFields": ["phones", "socialProfiles"],
  "crawlStoppedReason": "priority_links_exhausted",
  "diagnostics": [],
  "pageErrors": []
}
```

Evidence types can include `mailto`, `tel`, `visible_text`, and `schema_org`.
Results may have a status of `ok`, `partial`, or `error`.

### Pricing

This Actor uses Apify pay-per-event pricing. The paid event is
`useful-site-result`.

- At most one event is charged per requested website.
- Individual crawled pages and duplicate contact occurrences are never
  charged separately.
- A result is useful only when it has `status: ok` and contains at least one
  valid public email or phone.
- Partial results, errors, empty results, and blocked private-network URLs are
  written to the dataset but are not charged.
- Current price: `$0.005` per `useful-site-result`.
- No Actor-start fee is currently configured. `apify-default-dataset-item` is
  intentionally not configured, so error and partial records are not charged
  merely because they are written to the dataset.

### Safety And Limits

- Only intentionally published public company website data is extracted.
- Crawling stays on the requested hostname and follows only prioritized links.
- URLs containing query parameters or fragments are rejected so secrets and
  tracking identifiers are not persisted in output datasets.
- Input paths are reduced to the site origin before crawling and output so
  path-based reset, invitation, and session tokens are not persisted.
- Local and private-network URLs, credential-bearing URLs, and redirects to
  private networks are blocked.
- Each HTML page is limited to 3 MB.
- Users are responsible for choosing targets and limits that respect target
  terms, robots policies, applicable laws, and rate limits.
- Results are stored in the run's Apify dataset; users are responsible for
  appropriate access control and deletion of retained data.

### Local Development

From this product directory:

```bash
pip install -r requirements.txt
python -m unittest discover -v
apify run
```

Validate the independent Actor schemas before future builds or publication:

```bash
apify validate-schema
```

# Actor input Schema

## `urls` (type: `array`):

Public HTTP or HTTPS company website URLs without credentials, query parameters, or fragments. Paths are reduced to the site origin for privacy, and equivalent site origins are processed once. Each website produces one compact site record.

## `maxPagesPerSite` (type: `integer`):

Maximum number of same-domain HTML pages scanned for each website.

## `requestTimeoutSecs` (type: `integer`):

Maximum time in seconds to wait for each page request.

## Actor input object example

```json
{
  "urls": [
    "https://apify.com"
  ],
  "maxPagesPerSite": 8,
  "requestTimeoutSecs": 20
}
```

# Actor output Schema

## `results` (type: `string`):

Site records and any partial or error records produced by this run.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("jacksu/website-contact-intelligence-agent").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("jacksu/website-contact-intelligence-agent").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call jacksu/website-contact-intelligence-agent --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=jacksu/website-contact-intelligence-agent",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Website Email & Phone Finder",
        "description": "Find public business emails, phone numbers, social profiles, and source URLs from company websites with bounded crawling.",
        "version": "0.1",
        "x-build-id": "HL3qXUAR0nJ4uYsI8"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/jacksu~website-contact-intelligence-agent/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-jacksu-website-contact-intelligence-agent",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/jacksu~website-contact-intelligence-agent/runs": {
            "post": {
                "operationId": "runs-sync-jacksu-website-contact-intelligence-agent",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/jacksu~website-contact-intelligence-agent/run-sync": {
            "post": {
                "operationId": "run-sync-jacksu-website-contact-intelligence-agent",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "urls"
                ],
                "properties": {
                    "urls": {
                        "title": "Company website URLs",
                        "minItems": 1,
                        "maxItems": 20,
                        "type": "array",
                        "description": "Public HTTP or HTTPS company website URLs without credentials, query parameters, or fragments. Paths are reduced to the site origin for privacy, and equivalent site origins are processed once. Each website produces one compact site record.",
                        "items": {
                            "type": "string"
                        },
                        "default": [
                            "https://apify.com"
                        ]
                    },
                    "maxPagesPerSite": {
                        "title": "Maximum pages per site",
                        "minimum": 1,
                        "maximum": 20,
                        "type": "integer",
                        "description": "Maximum number of same-domain HTML pages scanned for each website.",
                        "default": 8
                    },
                    "requestTimeoutSecs": {
                        "title": "Request timeout",
                        "minimum": 5,
                        "maximum": 60,
                        "type": "integer",
                        "description": "Maximum time in seconds to wait for each page request.",
                        "default": 20
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
