# Website Intelligence Extractor (`determined_yealing/website-contact-extractor`) Actor

Extract company information, emails, phone numbers, social profiles, addresses, logos, metadata, JSON-LD, and key pages from any website. Crawls multiple pages and merges everything into a single structured JSON output for lead generation and CRM enrichment.

- **URL**: https://apify.com/determined\_yealing/website-contact-extractor.md
- **Developed by:** [Savaş Dersim Çelik](https://apify.com/determined_yealing) (community)
- **Categories:** Lead generation, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

### What does Website Contact Extractor do?

**Website Contact Extractor** is an Apify Actor that automatically collects **contact details**, **social media profiles**, and **company metadata** from any website. Give it one or more start URLs and it will scan the homepage, discover Contact and About pages, and merge everything into a single structured JSON record per domain.

The Actor extracts emails, phone numbers, physical addresses, social links (Facebook, Instagram, LinkedIn, X, YouTube, TikTok, WhatsApp, Telegram, GitHub, and more), company name, logo, favicon, and Schema.org / JSON-LD structured data. It runs on the [Apify platform](https://apify.com) with fast HTTP crawling (Crawlee + Cheerio), optional proxy rotation, API access, scheduling, and integrations with CRMs and spreadsheets.

Try it in Apify Console, call it via API, or run it locally with `apify run`.

### Why use Website Contact Extractor?

- **Lead generation** — Build prospect lists with verified contact channels from company websites.
- **CRM enrichment** — Fill missing phone, email, and social fields in your existing records.
- **Sales intelligence** — Research companies before outreach with structured, machine-readable data.
- **Marketing automation** — Feed contact and social data into email tools, ad platforms, or enrichment pipelines.
- **Directory building** — Aggregate business contact information at scale from multiple domains.
- **One record per domain** — Multiple pages (homepage, Contact, About) are merged automatically so you get the fullest picture without duplicate rows.

### How to use Website Contact Extractor

1. Open the Actor in [Apify Console](https://console.apify.com) or run it locally with `apify run`.
2. Add one or more **Start URLs** (e.g. `https://example.com`).
3. Set **Max requests per crawl** to at least **3** if you want Contact and About pages crawled (recommended: **5**).
4. Keep **Follow Contact & About pages** enabled for best results.
5. Click **Start** and wait for the run to finish.
6. Download results from the **Output** tab as JSON, CSV, Excel, or HTML.

#### Local development

```bash
npm install
apify run
````

### Input

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `startUrls` | array | — | Websites to scrape (required) |
| `maxRequestsPerCrawl` | integer | `10` | Max pages to crawl in total (max `5000`) |
| `followImportantPages` | boolean | `true` | Auto-crawl Contact & About pages |
| `maxConcurrency` | integer | `50` | Parallel page fetches (max `50`) |
| `proxyConfiguration` | object | no proxy | Apify Proxy settings |

Example input:

```json
{
  "startUrls": [{ "url": "https://apify.com" }],
  "maxRequestsPerCrawl": 10,
  "followImportantPages": true,
  "maxConcurrency": 50,
  "proxyConfiguration": { "useApifyProxy": false }
}
```

### Output

Each dataset item represents **one website (domain)** with merged data from all scanned pages.

```json
{
  "url": "https://example.com",
  "domain": "example.com",
  "companyName": "Example Inc.",
  "title": "Example Inc. — Home",
  "description": "We build great products.",
  "keywords": ["software", "saas"],
  "language": "en",
  "phones": ["+15551234567"],
  "emails": ["hello@example.com"],
  "facebook": "https://facebook.com/example",
  "instagram": "https://instagram.com/example",
  "linkedin": "https://linkedin.com/company/example",
  "twitter": "https://x.com/example",
  "youtube": "",
  "tiktok": "",
  "telegram": "",
  "whatsapp": "https://wa.me/15551234567",
  "github": "https://github.com/example",
  "address": "123 Main Street, San Francisco, CA 94105, US",
  "city": "San Francisco",
  "country": "US",
  "postalCode": "94105",
  "logo": "https://example.com/logo.png",
  "favicon": "https://example.com/favicon.ico",
  "contactPage": "https://example.com/contact",
  "aboutPage": "https://example.com/about",
  "pagesScanned": 3,
  "scannedPages": [
    "https://example.com",
    "https://example.com/contact",
    "https://example.com/about"
  ],
  "scrapedAt": "2026-07-03T12:00:00.000Z"
}
```

You can download the dataset in various formats such as **JSON**, **CSV**, **Excel**, or **HTML**.

### Data table

| Field | Description |
|-------|-------------|
| `url` | Primary URL of the website |
| `domain` | Normalized domain name |
| `companyName` | Company name from JSON-LD or Open Graph |
| `title` | Page title |
| `description` | Meta description |
| `phones` | Phone numbers (validated, deduplicated) |
| `emails` | Email addresses (validated, deduplicated) |
| `facebook` … `threads` | Social profile URLs |
| `address`, `city`, `country`, … | Location fields from JSON-LD, `<address>`, or page text |
| `logo`, `favicon` | Branding assets |
| `contactPage`, `aboutPage` | Discovered important page URLs |
| `pagesScanned` | Number of pages crawled for this domain |
| `scrapedAt` | ISO timestamp of extraction |

### Pricing / Cost estimation

This Actor uses **CheerioCrawler** (HTTP-only, no browser), which keeps compute costs low. A typical run with 5 pages per website uses a fraction of a compute unit.

**Rough estimate:** scraping 100 websites with 3 pages each on Apify's free tier is usually feasible for development and small batches. For large-scale production runs, monitor compute units in the Apify Console and adjust `maxRequestsPerCrawl` and `maxConcurrency` accordingly.

### Tips and advanced options

- **Set `maxRequestsPerCrawl` ≥ 3** — Homepage alone often misses contact details; Contact and About pages carry the richest data.
- **Multiple start URLs** — Add many domains in one run; each produces a separate output row.
- **Disable `followImportantPages`** — Use when you only need data from the exact URLs you provide.
- **Use Apify Proxy** — Enable proxy for geo-restricted or rate-limited sites.
- **Phone filtering** — Tracking IDs (Meta Pixel, analytics) are filtered out to reduce false positives.
- **Email filtering** — Placeholder and system addresses (`noreply@`, `example.com`) are excluded.
- **JavaScript-heavy sites** — Sites that render content entirely in the browser may need a Playwright-based Actor instead.

### FAQ, disclaimers, and support

**Is web scraping legal?** Scraping publicly available contact information is common for B2B lead generation, but you are responsible for complying with applicable laws, website Terms of Service, and privacy regulations (GDPR, CAN-SPAM, etc.) in your jurisdiction.

**Known limitations**

- Static HTML only — JavaScript-rendered contact widgets may not be captured.
- Address detection works best with JSON-LD, `<address>` tags, or Turkish/English address patterns.
- Social share links (`/sharer`, `/intent/tweet`) are ignored in favor of profile URLs.

**Support** — Report bugs or request features via the **Issues** tab in Apify Console. Custom integrations and enterprise deployments are available on request.

### License

MIT

# Actor input Schema

## `startUrls` (type: `array`):

Extract company information, emails, phone numbers, social profiles, addresses, logos, metadata, JSON-LD, and key pages from any website. Crawls multiple pages and merges everything into a single structured JSON output for lead generation and CRM enrichment.

## `maxRequestsPerCrawl` (type: `integer`):

Maximum pages to crawl in total. Use at least 3 to allow homepage + Contact + About page discovery.

## `followImportantPages` (type: `boolean`):

When enabled, automatically discovers and crawls Contact and About pages for richer contact data.

## `maxConcurrency` (type: `integer`):

Maximum number of pages fetched in parallel.

## `proxyConfiguration` (type: `object`):

Proxy settings for accessing geo-restricted or protected websites.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://apify.com"
    }
  ],
  "maxRequestsPerCrawl": 10,
  "followImportantPages": true,
  "maxConcurrency": 50,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

No description

# 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 = {
    "startUrls": [
        {
            "url": "https://apify.com"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("determined_yealing/website-contact-extractor").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 = { "startUrls": [{ "url": "https://apify.com" }] }

# Run the Actor and wait for it to finish
run = client.actor("determined_yealing/website-contact-extractor").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 '{
  "startUrls": [
    {
      "url": "https://apify.com"
    }
  ]
}' |
apify call determined_yealing/website-contact-extractor --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Website Intelligence Extractor",
        "description": "Extract company information, emails, phone numbers, social profiles, addresses, logos, metadata, JSON-LD, and key pages from any website. Crawls multiple pages and merges everything into a single structured JSON output for lead generation and CRM enrichment.",
        "version": "0.0",
        "x-build-id": "30J6w0HrdUbgdZWko"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/determined_yealing~website-contact-extractor/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-determined_yealing-website-contact-extractor",
                "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/determined_yealing~website-contact-extractor/runs": {
            "post": {
                "operationId": "runs-sync-determined_yealing-website-contact-extractor",
                "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/determined_yealing~website-contact-extractor/run-sync": {
            "post": {
                "operationId": "run-sync-determined_yealing-website-contact-extractor",
                "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": [
                    "startUrls"
                ],
                "properties": {
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "Extract company information, emails, phone numbers, social profiles, addresses, logos, metadata, JSON-LD, and key pages from any website. Crawls multiple pages and merges everything into a single structured JSON output for lead generation and CRM enrichment.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "maxRequestsPerCrawl": {
                        "title": "Max requests per crawl",
                        "minimum": 1,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Maximum pages to crawl in total. Use at least 3 to allow homepage + Contact + About page discovery.",
                        "default": 10
                    },
                    "followImportantPages": {
                        "title": "Follow Contact & About pages",
                        "type": "boolean",
                        "description": "When enabled, automatically discovers and crawls Contact and About pages for richer contact data.",
                        "default": true
                    },
                    "maxConcurrency": {
                        "title": "Max concurrency",
                        "minimum": 1,
                        "maximum": 50,
                        "type": "integer",
                        "description": "Maximum number of pages fetched in parallel.",
                        "default": 50
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Proxy settings for accessing geo-restricted or protected websites.",
                        "default": {
                            "useApifyProxy": false
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
