# B2B Contact Research Tool — Seamless.AI Alternative (`khadinakbar/seamless-ai-alternative`) Actor

Research known B2B contacts against company websites. Export visibly published business emails, phones, page evidence, and timestamps per supplied contact for source-cited CRM and account research.

- **URL**: https://apify.com/khadinakbar/seamless-ai-alternative.md
- **Developed by:** [Khadin Akbar](https://apify.com/khadinakbar) (community)
- **Categories:** Lead generation, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $50.00 / 1,000 source-cited public contact researches

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

## B2B Contact Research Tool — Seamless.AI Alternative

Research known B2B contacts against company websites. Export visibly published business emails, phones, page evidence, and timestamps per supplied contact for source-cited CRM and account research. For CRM teams, each dataset record represents one supplied contact and the business contact evidence found on public company pages.

### Workflow: put the results to work

Supply contacts whose names and employer domains are already known. Review the pages that support each published contact value and retain your CRM identifiers. Missing evidence remains a research gap rather than an invitation to infer private contact data.

### How this workflow compares with Seamless.AI

This is a workflow alternative for a specific job: gathering visibly published contact evidence from a company site when the caller already has a person and company domain. It is not presented as a replacement for a broader sales-data suite.

| Decision area | This public contact-research workflow | Seamless.AI platform | Selection guide |
| --- | --- | --- | --- |
| Workflow scope | Researches caller-supplied people and company domains across a bounded set of public company pages. | Published Seamless.AI materials describe a broader sales-data platform and API. | Use this workflow for source-cited public-page research; use a broader platform when the surrounding sales-data suite is the job. |
| Billing and same-job cost | Pay per event plus platform usage; see the Pricing tab for current rates. | Current plan and credit terms should be checked against the same input volume before making a cost decision. | Compare the current price of one usable, source-cited result rather than unlike plan tiers. |
| Inputs and operator setup | Starts with a structured `contacts` object containing a company domain and optional known person. | Seamless.AI supports broader data and sales workflows through its platform surfaces. | Choose the starting point that matches the work already in hand. |
| Output and provenance | Returns `sourceUrls`, `collectedAt`, an explicit outcome, and evidence grouped by email or phone value. | Seamless.AI documents contact and company data access through its platform and API. | Use the returned source URLs when a reviewer needs to inspect the public-page evidence. |
| Automation and API | Runs through the Apify API with bounded input and a regular-run dataset plus terminal summaries. | Seamless.AI documents an API for programmatic data access. | Select the API contract and data model that fit the downstream workflow. |
| Operating efficiency | Limits each contact to a small public-page pass and stops after the configured page budget. | A broader sales-data platform can serve workflows that need its wider product capabilities. | Match the tool to the exact job so operator time is spent on the needed review or workflow. |

### Workflow: from a CRM row to source-cited evidence

1. Start with a person you already know and their public company domain.
2. The Actor reads a small, bounded set of public company pages: the homepage, contact, about, and team pages.
3. It returns one record per processed contact with raw published contact evidence and the exact source URLs.
4. Next, validate the source-backed evidence in your CRM or pass the dataset to a permitted downstream workflow.

### Quick start and input

Provide one to 25 caller-supplied contacts. `companyDomain` is required; `fullName` helps identify a public mention on the company site.

```json
{
  "contacts": [
    {
      "fullName": "Jane Smith",
      "companyDomain": "example.org",
      "companyName": "Example Organization",
      "externalId": "crm-001"
    }
  ],
  "maxContacts": 10,
  "maxPagesPerContact": 3,
  "requestTimeoutSecs": 20,
  "useApifyUnblockerFallback": true,
  "preferApifyUnblocker": false
}
```

The regular-run model keeps every request bounded: up to four public pages per contact, a 45-second maximum per page, and at most 25 contacts per run. Apify Unblocker is an optional recovery route after a classified public-page access issue and may add Apify proxy usage.

### Data you receive

Each dataset row represents one caller-supplied contact and its public company-page research result.

| Field | Meaning |
| --- | --- |
| `publishedEmails` | Email addresses visibly published on fetched public pages; they are neither guessed nor independently verified. |
| `publishedPhones` | Phone-like values visibly published on fetched public pages; person-level attribution requires the source to make that relationship clear. |
| `emailEvidence` and `phoneEvidence` | Each returned value with the public source URL or URLs where it appeared. |
| `personMentioned` | Whether the supplied full name appeared in fetched public company-page text. |
| `sourceUrls` and `collectedAt` | Provenance and collection time for every row. |
| `collectionOutcome` | `PUBLIC_CONTACT_FOUND`, `PERSON_MENTIONED`, `NO_PUBLIC_CONTACT_FOUND`, `SOURCE_UNAVAILABLE`, or `INVALID_INPUT`. |

```json
{
  "externalId": "crm-001",
  "fullName": "Jane Smith",
  "companyDomain": "example.org",
  "companyName": "Example Organization",
  "personMentioned": true,
  "personMentionSourceUrls": [
    "https://example.org/team"
  ],
  "publishedEmails": [
    "sales@example.org"
  ],
  "publishedPhones": [
    "+1 555 010 9999"
  ],
  "emailEvidence": [
    {
      "value": "sales@example.org",
      "sourceUrls": [
        "https://example.org/contact"
      ]
    }
  ],
  "phoneEvidence": [
    {
      "value": "+1 555 010 9999",
      "sourceUrls": [
        "https://example.org/contact"
      ]
    }
  ],
  "sourceUrls": [
    "https://example.org",
    "https://example.org/contact"
  ],
  "fetchRoutes": [
    "direct"
  ],
  "pagesRequested": 3,
  "pagesFetched": 2,
  "collectionMethod": "public-company-pages",
  "collectionOutcome": "PUBLIC_CONTACT_FOUND",
  "warnings": [],
  "collectedAt": "2026-01-01T00:00:00.000Z"
}
```

The default key-value store also contains `OUTPUT` for a compact terminal outcome and `RUN_SUMMARY` for counts, route activity, charge events, and warnings.

### Run from the API

Set `APIFY_TOKEN` in your environment, then start a run using the real Actor identifier:

```bash
curl "https://api.apify.com/v2/acts/khadinakbar~seamless-ai-alternative/runs?token=$APIFY_TOKEN" \
  -X POST \
  -H 'content-type: application/json' \
  -d '{
    "contacts": [
      {
        "fullName": "Jane Smith",
        "companyDomain": "example.org",
        "externalId": "crm-001"
      }
    ],
    "maxPagesPerContact": 3
  }'
```

Use the run’s default dataset for rows and read `OUTPUT` plus `RUN_SUMMARY` before an automated downstream action.

### AI agents and MCP workflows

The Actor is available through Apify’s actor interfaces for AI-agent and MCP workflows once you grant the agent access to the Actor.

> Research Jane Smith at example.org from public company pages. Return the terminal outcome, dataset row count, published emails and phones with their source URLs, collection time, route used, and result-event charge count. Keep the work limited to public evidence.

An agent should read the final dataset, `OUTPUT`, and `RUN_SUMMARY`, then route only source-cited public evidence to the next step. This preserves provenance, current scope, and cost visibility.

### Best results and responsible use

Provide a canonical public company domain and a known contact name when available. Start with three pages for a fast, focused review, then use four pages for a broader public-company-page pass. Confirm source URLs before using a phone or email for a business workflow.

Use only public company pages you are authorized to access, respecting applicable laws, privacy obligations, and site terms. The Actor accepts no credentials and keeps customer inputs within the execution environment and structured outputs.

### Builder's note

I designed this Actor around a practical gap: a sales researcher often needs to see where a contact detail came from before a CRM or agent action. My goal is a small, transparent unit of public-web research with a stable result contract, bounded requests, event-level cost control, and source provenance on every useful value.

### Pricing and run costs

This Actor uses **Pay per event plus Apify platform usage**. The [Pricing tab](https://apify.com/khadinakbar/seamless-ai-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). |
| `public-contact-researched` | Source-cited public contact research | Charged after one caller-supplied contact has a persisted, schema-valid result with at least one visibly published email or phone. Inputs with no public contact and unavailable public-page routes are not charged. |

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

### Independent alternative

This Actor provides the specific workflow described above. It is not affiliated with or endorsed by Seamless.AI; the named product and its trademarks belong to their respective owners.

### Connect an AI agent

Use the [Apify MCP configurator](https://mcp.apify.com) to choose an available client connection. Inspect this Actor’s current input schema and required credentials before running it.

# Actor input Schema

## `contacts` (type: `array`):

1–25 caller-supplied contacts. companyDomain is required. fullName helps locate a public mention on the company site, but is optional.

## `maxContacts` (type: `integer`):

Safety cap applied after validation. Use a lower number for a small canary run.

## `maxPagesPerContact` (type: `integer`):

The Actor tries the homepage, /contact, /about, and /team in a fixed bounded order.

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

Time limit for each public-page request.

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

When enabled, a single Apify Unblocker retry is attempted only after a direct fetch is blocked or transiently unavailable. This can add Apify proxy usage charges.

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

Off by default. Enable only if a customer-authorized site consistently blocks direct public requests.

## Actor input object example

```json
{
  "contacts": [
    {
      "fullName": "Jane Smith",
      "companyDomain": "example.org",
      "companyName": "Example Organization",
      "externalId": "crm-001"
    }
  ],
  "maxContacts": 10,
  "maxPagesPerContact": 3,
  "requestTimeoutSecs": 20,
  "useApifyUnblockerFallback": true,
  "preferApifyUnblocker": false
}
```

# Actor output Schema

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

No description

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

No description

## `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 = {
    "contacts": [
        {
            "fullName": "Jane Smith",
            "companyDomain": "example.org",
            "companyName": "Example Organization",
            "externalId": "crm-001"
        }
    ],
    "maxContacts": 10,
    "maxPagesPerContact": 3,
    "requestTimeoutSecs": 20,
    "useApifyUnblockerFallback": true,
    "preferApifyUnblocker": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("khadinakbar/seamless-ai-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 = {
    "contacts": [{
            "fullName": "Jane Smith",
            "companyDomain": "example.org",
            "companyName": "Example Organization",
            "externalId": "crm-001",
        }],
    "maxContacts": 10,
    "maxPagesPerContact": 3,
    "requestTimeoutSecs": 20,
    "useApifyUnblockerFallback": True,
    "preferApifyUnblocker": False,
}

# Run the Actor and wait for it to finish
run = client.actor("khadinakbar/seamless-ai-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 '{
  "contacts": [
    {
      "fullName": "Jane Smith",
      "companyDomain": "example.org",
      "companyName": "Example Organization",
      "externalId": "crm-001"
    }
  ],
  "maxContacts": 10,
  "maxPagesPerContact": 3,
  "requestTimeoutSecs": 20,
  "useApifyUnblockerFallback": true,
  "preferApifyUnblocker": false
}' |
apify call khadinakbar/seamless-ai-alternative --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,khadinakbar/seamless-ai-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/wptNZi3zSlTeqJTfx/builds/owEpBsBgUeuy7bYpR/openapi.json
