# Website Contact Refresh for CRM | Emails & Sources (`riparazionecomputerecellulari/business-contact-evidence-emails-phones-source-urls`) Actor

Refresh public company contacts for CRM. Extract role emails, published phones and social links with source URLs; compare previous email lists to flag new and missing contacts for review. Up to 10 static websites per run. Missing contacts are not proof of removal.

- **URL**: https://apify.com/riparazionecomputerecellulari/business-contact-evidence-emails-phones-source-urls.md
- **Developed by:** [Riparazione Computer\&Cellulari](https://apify.com/riparazionecomputerecellulari) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 websites

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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Business Contact Refresh — Changes & Source Evidence

Extract public business contact details from up to 10 static websites. Every email, phone and social link includes the page where it was found. Designed for auditable company research and recurring CRM contact refreshes.

### What makes this focused

- Conservative role emails such as info, sales, support, contact, office and booking. Personal-name addresses are excluded.
- Phones only from explicit tel links or structured JSON-LD, avoiding numbers guessed from page text.
- Source URL and extraction method for each contact; duplicate contacts collapsed per site.
- Homepage plus up to two same-host contact/about pages. A hard 30-second site deadline bounds the work.
- Robots.txt respected, private network addresses rejected, errors returned explicitly.

### Contact refresh comparison

Pass optional previousEmails, mapping each exact input URL to the email list returned by an earlier scan. Get addedEmails, notSeenEmails, refreshStatus and reviewRequired. These signals help prioritize manual CRM review. A contact not seen in a limited scan may still exist elsewhere; do not delete CRM contacts automatically. Failed or partial scans suppress notSeenEmails and mark comparisonReliable:false. Compare the same URLs and crawl scope. Flat firstEmail and firstEmailSourceUrl fields make CSV review easier; firstEmail is alphabetical, not an outreach recommendation.

### Input

```json
{"urls":["https://www.advanexus.com/contact/"],"previousEmails":{"https://www.advanexus.com/contact/":["info@advanexus.com"]}}
```

Use final public HTTP(S) URLs. Cross-host redirects are rejected; use the destination hostname instead. Maximum 10 URLs per run; repeat batches for larger lists.

### Output

One dataset row per attempted site: url, domain, status, emails, phones, socialLinks, pagesScanned, sourceUrls, errors and retrievedAt (UTC).
Emails contain value, sourceUrl, method. Phones also contain verified:false. Social links contain url and sourceUrl. A SUMMARY key reports processed and skipped sites.

### Pricing

$0.005 per site processed, plus $0.001 for a run started at the default 512 MB memory. Platform usage is included. Failed sites and sites with no contacts are charged because processing was attempted. Ten sites at default memory cost $0.051. Higher memory increases the startup charge according to Apify's startup event rules. The default $0.15 maximum cost covers a full default batch; a lower budget may stop before all URLs are attempted.

### Limits

Static HTML only; no browser rendering, CAPTCHA solving, login, proxies, PDFs or email deliverability checks. UTF-8 decoding and explicit public contacts only; obfuscated or JavaScript-injected contacts may be missed. Responses limited to 2 MB. At most 100 emails, 100 phones and 100 social links are retained per site. Deadline failures return diagnostics and may discard contacts collected before the deadline. Emails use a fixed role allowlist; no claim of complete contact coverage or ownership verification. Social links are not fetched or verified. Use public contact data responsibly and comply with applicable rules.

# Actor input Schema

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

1–10 final public HTTP(S) URLs; up to three static pages per website. Sites with no contacts or errors are also charged.

## `previousEmails` (type: `object`):

Map exact input URLs to prior public business email lists. Comparison flags changes for manual review, never proves a mailbox disappeared.

## Actor input object example

```json
{
  "urls": [
    "https://www.advanexus.com/contact/"
  ],
  "previousEmails": {}
}
```

# Actor output Schema

## `contacts` (type: `string`):

No description

## `summary` (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 = {
    "urls": [
        "https://www.advanexus.com/contact/"
    ],
    "previousEmails": {}
};

// Run the Actor and wait for it to finish
const run = await client.actor("riparazionecomputerecellulari/business-contact-evidence-emails-phones-source-urls").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.advanexus.com/contact/"],
    "previousEmails": {},
}

# Run the Actor and wait for it to finish
run = client.actor("riparazionecomputerecellulari/business-contact-evidence-emails-phones-source-urls").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).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.advanexus.com/contact/"
  ],
  "previousEmails": {}
}' |
apify call riparazionecomputerecellulari/business-contact-evidence-emails-phones-source-urls --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,riparazionecomputerecellulari/business-contact-evidence-emails-phones-source-urls"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/hoFRqWmetiXcvQ1uX/builds/UpjnDne8dRbd6GmZN/openapi.json
