# Public Business Email Finder — Snov.io Alternative (`khadinakbar/snov-io-alternative`) Actor

Find business email addresses visibly published on company websites. Supply domains and export email evidence, source URLs, domain-MX signals, and collection times for contact review. No guessed addresses or sending.

- **URL**: https://apify.com/khadinakbar/snov-io-alternative.md
- **Developed by:** [Khadin Akbar](https://apify.com/khadinakbar) (community)
- **Categories:** Lead generation, Automation, MCP servers
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $50.00 / 1,000 source-cited business email evidences

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

## Public Business Email Finder — Snov.io Alternative

Find business email addresses visibly published on company websites. Supply domains and export email evidence, source URLs, domain-MX signals, and collection times for contact review. No guessed addresses or sending. For contact researchers, each dataset result groups the published business-email evidence found for one supplied target domain.

### Workflow: put the results to work

Start with company domains you are authorized to research. Follow the source URLs for each published email and use the domain-MX signal as infrastructure context. Review contact suitability separately before any approved outreach.

### Best fit for this Actor

- You have a company domain and need public business-email evidence that can be reviewed or joined back to a CRM by `externalId`.
- You want an on-demand, API-readable public-web workflow alongside your existing prospecting tools.
- You need to distinguish a published email from a DNS MX signal. This Actor never guesses an address and does not claim mailbox deliverability.

Pair this Actor with an approved email-verification service when your process needs SMTP-level deliverability classification. Choose a broader sales platform when your workflow includes a proprietary contact database, CRM, campaign sending, email warm-up, LinkedIn automation, team collaboration, or historical engagement tracking.

### How this workflow compares with Snov.io

This is a bounded workflow alternative for collecting current, visibly published business-email evidence from caller-supplied company domains. Snov.io remains the broader fit for proprietary finder data, Email Verifier, prospect management, campaigns, warm-up, LinkedIn automation, CRM, and team features.

| Decision | This Actor | Snov.io | Best fit |
|---|---|---|---|
| Scope | Reads one company homepage and directly linked same-site contact-style pages; returns only visible emails with sources. | Provides a wider prospecting, verification, campaign, CRM, and deliverability suite. | Choose this Actor for attributable public-web email evidence; choose Snov.io for its broader suite. |
| Billing and cost | Pay per event plus platform usage; see the Pricing tab for current rates. | Current plans bundle monthly credits and broader product access. | Compare the exact workload, account costs, and platform usage before choosing. |
| Input friction | Starts with a public company domain and optional known business name; no third-party API key is required. | Supports name, domain, social, database, and account-based workflows. | Use this Actor when the domain is already known and public sources are sufficient. |
| Output and provenance | Returns a stable JSON row with `publishedBusinessEmails`, `emailEvidence.sourceUrls`, `collectedAt`, and explicit outcomes. | Provides product-specific prospect and verification outputs. | Use source-linked rows when an operator must review where a value appeared. |
| Integrations and efficiency | The result is a dataset/KV workflow that can be started and read through the Apify API; same-job efficiency is workload-dependent. | Snov.io includes a wider set of suite integrations and automation features. | Use this Actor for a bounded public-data step; retain Snov.io if the wider integration suite is required. |

Snov.io is a trademark of its owner. This independent Actor is not affiliated with, associated with, or endorsed by Snov.io.

### A practical B2B research workflow

Give the Actor a short list of company domains from an approved account list. It retrieves each homepage, selects only directly linked same-site contact, about, team, legal, privacy, or terms pages, then emits a source-cited row. Your next workflow can review the source URL, select the role addresses meeting your criteria, or route selected rows to an approved verification or CRM process.

### Quick start

```json
{
  "targets": [
    {
      "companyDomain": "apache.org",
      "companyName": "Apache Software Foundation",
      "externalId": "account-001"
    }
  ],
  "maxTargets": 1,
  "maxPagesPerTarget": 3,
  "useApifyUnblockerFallback": true
}
```

### Input reference

| Field | Type | What it controls |
|---|---|---|
| `targets` | array | One to 25 authorized company domains, plus optional labels and known business contact names. |
| `maxTargets` | integer | Safety cap from 1 to 25; default `10`. |
| `maxPagesPerTarget` | integer | Homepage plus up to four directly linked, same-site contact-style pages; default `3`. |
| `requestTimeoutSecs` | integer | Per-page timeout from 5 to 45 seconds; default `20`. |
| `useApifyUnblockerFallback` | boolean | Enables one bounded Apify Unblocker retry after a direct classified response. |
| `preferApifyUnblocker` | boolean | Uses the optional proxy first for an authorized target with observed direct blocking. |

### What one result means

One dataset item represents one supplied company domain, not one person and not a mailbox-verification result.

```json
{
  "externalId": "account-001",
  "companyDomain": "example.com",
  "publishedBusinessEmails": ["sales@example.com"],
  "emailEvidence": [
    {
      "email": "sales@example.com",
      "sourceUrls": ["https://example.com/contact"]
    }
  ],
  "emailDomainMx": "MX_PRESENT",
  "collectionOutcome": "PUBLIC_EMAIL_FOUND",
  "collectedAt": "runtime ISO-8601 collection timestamp"
}
```

`emailDomainMx` is a DNS signal for the company domain. `MX_PRESENT` does not prove that any particular mailbox exists or can receive email. `publishedBusinessEmails` only contains values visibly present on a fetched public page, and every value has a source URL in `emailEvidence`.

### Outcome guidance

The compact `OUTPUT` record and detailed `RUN_SUMMARY` record expose a stable outcome for completed collection, useful partial collection, valid empty collection, input guidance, upstream availability, or configuration attention. They also expose counts, safe diagnostics, route activity, and the named event count without returning tokens, cookies, or credentials.

### Use through the Apify API

```bash
curl -X POST "https://api.apify.com/v2/acts/khadinakbar~snov-io-alternative/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"targets":[{"companyDomain":"apache.org","externalId":"account-001"}],"maxTargets":1}'
```

Read the finished run's default dataset for rows and its `OUTPUT` / `RUN_SUMMARY` records before a downstream action. This Actor is read-only and has no sending, CRM-writing, or contact-enrichment side effect.

### Use with AI agents through Apify MCP

> For these authorized company domains, collect visibly published business emails. Return each email with its public source URL and collection time. Keep email patterns ungenerated, and label rows with no public email evidence separately.

Set up Apify MCP from [Apify MCP](https://mcp.apify.com), then have the agent read the terminal outcome and preserve source URLs when reviewing results. Client-specific routing evidence is added after an end-to-end evaluation.

### Best results

- Supply the company website you are authorized to research, using a public hostname rather than a social profile, IP address, or internal host.
- Start with one or two domains to inspect output fields and evidence quality before increasing the batch size.
- Treat role accounts and MX results as review signals. Obtain a lawful basis and appropriate verification before sending any outreach.
- Use direct-only mode for a direct-access audit, or enable the bounded fallback for public, authorized targets with observed direct blocking.

### Builder's note

I designed the page-selection rule to be deliberately conservative. The Actor fetches the homepage first, then follows only directly linked same-site contact-style pages. That preserves provenance, keeps URL selection grounded in the website itself, limits unnecessary requests, and makes collection diagnostics useful to reviewers.

### Responsible use

Use only with public company pages and data you are authorized to process. Respect applicable law, website terms, consent, and any internal outreach policy. This Actor is read-only and operates without sign-in, access-control changes, messaging, or unlisted-contact inference.

### Pricing and run costs

This Actor uses **Pay per event plus Apify platform usage**. The [Pricing tab](https://apify.com/khadinakbar/snov-io-alternative/pricing) lists the current event rates and billing terms.

| Event | Billing unit | When it applies |
|---|---|---|
| `apify-actor-start` | Actor Start | Charged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event). |
| `business-email-evidence-found` | Source-cited business email evidence | Charged after a complete persisted target record contains visible business-email evidence and source URLs. |

Run cost combines the charged events and Apify platform usage. Review the run charge limit and requested result count before starting.

# Actor input Schema

## `targets` (type: `array`):

Provide 1 to 25 public company domains you are authorized to research. Each item accepts a hostname such as 'example.com' and optional known business context. This reads the homepage plus directly linked same-site contact, about, team, legal, privacy, or terms pages. It is not a personal-email list, private database query, or mailbox login.

## `maxTargets` (type: `integer`):

Safety cap for accepted domain targets. Use 1 for a quick canary, and use up to 25 for one bounded batch. The default is 10 and values outside 1 to 25 are constrained. This is not a result-count or page-depth setting.

## `maxPagesPerTarget` (type: `integer`):

Maximum number of public same-site pages to inspect after the homepage, including the homepage. The Actor follows only directly linked contact, about, team, legal, privacy, or terms pages. The default is 3 and values are bounded from 1 to 5. This does not crawl a site broadly or invent URL paths.

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

Time limit for one public page request, for example 20 seconds. The default is 20 and values are bounded from 5 to 45 seconds. Lower values make runs fail faster on unresponsive sites. This is not the whole-run timeout configured by Apify.

## `useApifyUnblockerFallback` (type: `boolean`):

Enable one Apify Unblocker retry only after a public direct request is blocked or transiently unavailable. The default is true and may add Apify proxy usage charges. Disable it for direct-only testing. This is not a guarantee that protected or private pages can be accessed.

## `preferApifyUnblocker` (type: `boolean`):

When true, try Apify Unblocker first for every public page; direct access remains the recovery route if proxy creation fails. The default is false because direct public HTTP is cheaper and preferred. Enable only for an authorized site with observed direct blocking. This is not a bypass for login, paywall, or access controls.

## Actor input object example

```json
{
  "targets": [
    {
      "companyDomain": "apache.org",
      "companyName": "Apache Software Foundation",
      "fullName": "",
      "externalId": "example-001"
    }
  ],
  "maxTargets": 10,
  "maxPagesPerTarget": 3,
  "requestTimeoutSecs": 20,
  "useApifyUnblockerFallback": true,
  "preferApifyUnblocker": false
}
```

# Actor output Schema

## `output` (type: `string`):

No description

## `runSummary` (type: `string`):

No description

## `businessEmailEvidence` (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 = {
    "targets": [
        {
            "companyDomain": "apache.org",
            "companyName": "Apache Software Foundation",
            "fullName": "",
            "externalId": "example-001"
        }
    ],
    "maxTargets": 10,
    "maxPagesPerTarget": 3,
    "requestTimeoutSecs": 20,
    "useApifyUnblockerFallback": true,
    "preferApifyUnblocker": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("khadinakbar/snov-io-alternative").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 = {
    "targets": [{
            "companyDomain": "apache.org",
            "companyName": "Apache Software Foundation",
            "fullName": "",
            "externalId": "example-001",
        }],
    "maxTargets": 10,
    "maxPagesPerTarget": 3,
    "requestTimeoutSecs": 20,
    "useApifyUnblockerFallback": True,
    "preferApifyUnblocker": False,
}

# Run the Actor and wait for it to finish
run = client.actor("khadinakbar/snov-io-alternative").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 '{
  "targets": [
    {
      "companyDomain": "apache.org",
      "companyName": "Apache Software Foundation",
      "fullName": "",
      "externalId": "example-001"
    }
  ],
  "maxTargets": 10,
  "maxPagesPerTarget": 3,
  "requestTimeoutSecs": 20,
  "useApifyUnblockerFallback": true,
  "preferApifyUnblocker": false
}' |
apify call khadinakbar/snov-io-alternative --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,khadinakbar/snov-io-alternative"
        }
    }
}

```

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/8WS1icazgH7IGOhK7/builds/y7iyU0ZK5uBrWoT0X/openapi.json
