# Contact Details Scraper | Phone Email Extractor (`taroyamada/contact-details-extractor`) Actor

Extract public phone numbers, emails, social profile URLs, and support pages from supplied websites for data hygiene and contact-detail enrichment workflows. Research-only output, no outreach use.

- **URL**: https://apify.com/taroyamada/contact-details-extractor.md
- **Developed by:** [naoki anzai](https://apify.com/taroyamada) (community)
- **Categories:** Lead generation, Marketing, Automation
- **Stats:** 11 total users, 4 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $8.00 / 1,000 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

## Contact Details Extractor

<!-- v37-internal-flow-boost:start -->
### After this run

Turn this Actor's output into a capped paid report with [CSV Local Business List Scoring & SEO Gap Report](https://apify.com/taroyamada/csv-local-business-list-scoring-report?utm_source=apify_internal&utm_medium=readme_after_run&utm_campaign=v37_internal_flow&utm_content=contact-details-extractor__csv-local-business-list-scoring-report).
Use it when local SEO, lead-gen, and agency operators with an existing CSV need to prioritize which businesses in a list deserve outreach, cleanup, or SEO follow-up.

- First report: $3 / `lead_scoring_report`; set `maxChargeUsd` to $3.
- Deeper report: $15 / `agency_lead_gap_report`; use only when the first result needs competitor or action-depth.
- This is an internal Apify flow aid. It is not revenue proof until accounted paid usage appears.
<!-- v37-internal-flow-boost:end -->

RevOps, support ops, compliance reviewers, and data teams use this actor to turn public business contact pages from websites supplied by the user into a clean dataset for Site QA & Content Intelligence Pack.
Provide focused source inputs, keep the first run small, and expand only after the output shape is useful.
Each emitted row includes source context, timestamps, and fields designed for monitoring, QA, research, or workflow handoff.

### Store Quickstart

Start with owned or target-account contact/about/support pages. The actor emits public business contact-channel rows only; person-level email candidates are suppressed and counted in warnings.

Recommended first run:

```json
{
  "urls": [
    "https://example.com/contact"
  ],
  "includeSocialLinks": true,
  "limit": 25,
  "delivery": "dataset",
  "dryRun": false
}
````

### Input examples

#### Company site

```json
{
  "urls": [
    "https://example.com/contact"
  ],
  "includeSocialLinks": true,
  "limit": 25,
  "delivery": "dataset",
  "dryRun": false
}
```

#### Account data hygiene

```json
{
  "domains": [
    "example.com"
  ],
  "paths": [
    "/contact",
    "/about"
  ],
  "limit": 25,
  "delivery": "dataset",
  "dryRun": false
}
```

#### Webhook validation

```json
{
  "urls": [
    "https://example.com/support"
  ],
  "delivery": "webhook",
  "webhookUrl": "https://example.com/webhook",
  "dryRun": false
}
```

### Sample output

```json
{
  "meta": {
    "actorName": "contact-details-extractor",
    "actorTitle": "Contact Details Extractor",
    "bundle": "Site QA & Content Intelligence Pack",
    "fetchedAt": "2026-05-06T00:00:00.000Z",
    "totalRows": 1
  },
  "rows": [
    {
      "actorName": "contact-details-extractor",
      "rowType": "public_contact_channel",
      "domain": "example.com",
      "sourceUrl": "https://example.com/contact",
      "email": "support@example.com",
      "phone": "+1 555 0100",
      "socialUrls": [
        "https://www.linkedin.com/company/example"
      ],
      "fetchedAt": "2026-05-06T00:00:00.000Z"
    }
  ],
  "warnings": []
}
```

### Output fields

- `rowType`
- `domain`
- `sourceUrl`
- `email`
- `phone`
- `socialUrls`
- `confidence`
- `warnings`
- `fetchedAt`

Rows also include source URLs, fetch timestamps, warnings when a source is partial, and stable IDs when the workflow supports recurring change detection.

### Pricing and no-change runs

$0.001 actor start and $0.008 per verified public business contact-channel row. Empty scans, person-level-only pages, unverified rows, and policy-suppressed candidates should not create dataset charges.

The default dataset is the billable surface. Dry runs, validation-only runs, missing-key warnings, and unchanged recurring polls should not write payable default-dataset rows.

### Compliance guardrails

- Use with public business contact, about, support, location, legal, privacy, or company pages and a lawful basis for downstream processing.
- Designed for account data hygiene, support-channel inventory, and compliance review. Person-level emails are suppressed rather than emitted.
- Individual contact harvesting, personal profile collection, bulk promotional messaging, and consent-free communication workflows are outside the intended use.
- Do not use provider emblems or wording that implies approval by an upstream data provider.

### See also

- [website-content-extractor](https://apify.com/taroyamada/website-content-extractor)
- [bulk-url-health-checker](https://apify.com/taroyamada/bulk-url-health-checker)
- [broken-link-checker](https://apify.com/taroyamada/broken-link-checker)

### Related report Actors

Use these follow-on Actors when you want a capped, decision-ready report instead of more raw rows. They use public or user-provided inputs, respect `maxChargeUsd`, and do not promise rankings, revenue, conversion lifts, or sales outcomes.

- [CSV Local Business List Scoring](https://apify.com/taroyamada/csv-local-business-list-scoring-report) - score user-provided business lists without scraping Google Maps or harvesting private contacts.
- [Website RAG Readiness Audit](https://apify.com/taroyamada/website-rag-readiness-audit) - audit public pages before using them as lead-research context.

### Related paid report workflows

If this Actor gave you raw rows or source context, these follow-on report Actors are designed for a small capped paid run. They help make a decision, not just collect more data.

- [CSV Local Business List Scoring & SEO Gap Report](https://apify.com/taroyamada/csv-local-business-list-scoring-report) - prioritize which businesses in a list deserve outreach, cleanup, or SEO follow-up. Entry $3 / `lead_scoring_report`; premium $15 / `agency_lead_gap_report`.
- [Website RAG Readiness Audit Report](https://apify.com/taroyamada/website-rag-readiness-audit) - decide whether public website pages are clean and complete enough for RAG ingestion. Entry $9 / `website_rag_snapshot_report`; premium $29 / `website_rag_readiness_report`.

Keep `maxChargeUsd` equal to the selected tier. Internal links are traffic aids only; real proof requires accounted paid usage.

> 💾 **Save it for later**: click the bookmark icon at the top of the Apify Store page if you'd like to come back to it. Bookmarks help other engineers find this actor via Apify's discovery surfaces.

### ⭐ Was Contact Details Scraper | Phone Email Extractor useful for your public contact-detail extraction?

If this actor saved you time, **[please leave a 5★ rating on Apify Store](https://apify.com/taroyamada/contact-details-extractor/reviews)** — it takes 10 seconds, helps other engineers and analysts discover it, and keeps updates free.

Have a feature request, bug, or sample workflow you'd like to share? **[Open an issue](https://apify.com/taroyamada/contact-details-extractor/issues)** — we read every one and use them to prioritise the next release.

# Actor input Schema

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

Contact, about, support, or company URLs to extract public business contact channels from (max 100). Person-level emails are suppressed.

## `concurrency` (type: `integer`):

Parallel requests (1-5 recommended for public contact pages).

## `timeoutMs` (type: `integer`):

Request timeout in milliseconds.

## `delivery` (type: `string`):

Non-dry-run Apify runs write canonical dataset rows first. Choose webhook to POST one full payload only after dataset output succeeds.

## `webhookUrl` (type: `string`):

URL to POST the full payload when delivery=webhook and dryRun=false, after dataset output succeeds.

## `dryRun` (type: `boolean`):

If true, skips dataset writes and webhook delivery; local output/result.json is still written.

## `maxChargeUsd` (type: `number`):

Safety cap for this run. Billable rows beyond this cap are returned as no-charge limit\_reached summaries.

## Actor input object example

```json
{
  "urls": [
    "https://www.icann.org/contact",
    "https://automattic.com/contact/"
  ],
  "concurrency": 5,
  "timeoutMs": 15000,
  "delivery": "dataset",
  "dryRun": false,
  "maxChargeUsd": 1
}
```

# 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 = {
    "urls": [
        "https://www.icann.org/contact",
        "https://automattic.com/contact/"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("taroyamada/contact-details-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 = { "urls": [
        "https://www.icann.org/contact",
        "https://automattic.com/contact/",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("taroyamada/contact-details-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 '{
  "urls": [
    "https://www.icann.org/contact",
    "https://automattic.com/contact/"
  ]
}' |
apify call taroyamada/contact-details-extractor --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Contact Details Scraper | Phone Email Extractor",
        "description": "Extract public phone numbers, emails, social profile URLs, and support pages from supplied websites for data hygiene and contact-detail enrichment workflows. Research-only output, no outreach use.",
        "version": "0.1",
        "x-build-id": "tLw1ZaKNkQZR0sKYV"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/taroyamada~contact-details-extractor/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-taroyamada-contact-details-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/taroyamada~contact-details-extractor/runs": {
            "post": {
                "operationId": "runs-sync-taroyamada-contact-details-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/taroyamada~contact-details-extractor/run-sync": {
            "post": {
                "operationId": "run-sync-taroyamada-contact-details-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": [
                    "urls"
                ],
                "properties": {
                    "urls": {
                        "title": "URLs",
                        "minItems": 1,
                        "maxItems": 100,
                        "type": "array",
                        "description": "Contact, about, support, or company URLs to extract public business contact channels from (max 100). Person-level emails are suppressed.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "concurrency": {
                        "title": "Concurrency",
                        "minimum": 1,
                        "maximum": 5,
                        "type": "integer",
                        "description": "Parallel requests (1-5 recommended for public contact pages).",
                        "default": 5
                    },
                    "timeoutMs": {
                        "title": "Timeout (ms)",
                        "minimum": 1000,
                        "maximum": 30000,
                        "type": "integer",
                        "description": "Request timeout in milliseconds.",
                        "default": 15000
                    },
                    "delivery": {
                        "title": "Delivery",
                        "enum": [
                            "dataset",
                            "webhook"
                        ],
                        "type": "string",
                        "description": "Non-dry-run Apify runs write canonical dataset rows first. Choose webhook to POST one full payload only after dataset output succeeds.",
                        "default": "dataset"
                    },
                    "webhookUrl": {
                        "title": "Webhook URL",
                        "type": "string",
                        "description": "URL to POST the full payload when delivery=webhook and dryRun=false, after dataset output succeeds."
                    },
                    "dryRun": {
                        "title": "Dry Run",
                        "type": "boolean",
                        "description": "If true, skips dataset writes and webhook delivery; local output/result.json is still written.",
                        "default": false
                    },
                    "maxChargeUsd": {
                        "title": "Maximum charge (USD)",
                        "minimum": 0,
                        "type": "number",
                        "description": "Safety cap for this run. Billable rows beyond this cap are returned as no-charge limit_reached summaries.",
                        "default": 1
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
