# Contact & Outreach Opportunity Finder (`ib4ngz/contact-outreach-opportunity-finder`) Actor

Find public business contacts, outreach pages, evidence, and ranked opportunity scores.

- **URL**: https://apify.com/ib4ngz/contact-outreach-opportunity-finder.md
- **Developed by:** [Iqbal R](https://apify.com/ib4ngz) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 website analyzeds

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

### What does Contact & Outreach Opportunity Finder do?

**Contact & Outreach Opportunity Finder turns public websites into structured outreach intelligence.** Add one or more domains and receive contact pages, published business contacts, social profiles, contact forms, and clearly stated opportunities such as guest posting, advertising, partnerships, sponsorships, press inquiries, and content submissions.

Try it with [apify.com](https://apify.com). Every website produces a separate result with source URLs, evidence, confidence levels, and an outreach score, making the data practical for both manual review and automated lead-qualification workflows. On Apify, you can run the Actor through the Console or API, schedule recurring scans, connect results to other apps, use proxy rotation, monitor runs, and export datasets.

### Why use Contact & Outreach Opportunity Finder?

This Actor helps agencies, partnerships teams, PR professionals, founders, and researchers identify the right public route for contacting an organization.

- Qualify websites before starting an outreach campaign.
- Find editorial, contributor, advertising, partnership, sponsorship, and press pages.
- Collect publicly listed business emails, phone numbers, social profiles, and form URLs.
- Prioritize prospects with comparable 0100 scores.
- Retain evidence and source-page links for review.
- Process multiple websites in one run without combining their results.

The Actor performs research only. It does not send messages, submit forms, guess private contact details, or bypass access controls.

### How to use Contact & Outreach Opportunity Finder

1. Open the Actor in Apify Console.
2. Add one or more URLs under **Websites to analyze**.
3. Choose the page limit and link depth that suit your list.
4. Select the contact and opportunity types you want included.
5. Click **Save & Start**.
6. Review the **Outreach opportunities** table or export the dataset.

For an initial run, the default limits offer a useful balance between coverage, speed, and cost.

### Input

Configure the Actor in the **Input** tab or provide JSON through the Apify API.

```json
{
    "startUrls": [{ "url": "https://apify.com" }],
    "maxPagesPerSite": 15,
    "maxDepth": 2,
    "includeEmails": true,
    "includePhones": true,
    "includeSocialProfiles": true,
    "includeContactForms": true,
    "includeOpportunityDetection": true,
    "sameDomainOnly": true,
    "maxConcurrency": 10,
    "maxRequestRetries": 2,
    "requestTimeoutSecs": 45,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
}
```

| Input field                      | Description                                                   |
| -------------------------------- | ------------------------------------------------------------- |
| `startUrls`                      | One or more public website URLs. Required.                    |
| `maxPagesPerSite`                | Maximum pages analyzed for each website, from 1 to 100.       |
| `maxDepth`                       | Maximum number of internal-link levels followed, from 0 to 5. |
| `includeEmails`, `includePhones` | Enable extraction of publicly listed contact details.         |
| `includeSocialProfiles`          | Include official social profile links.                        |
| `includeContactForms`            | Detect relevant forms without submitting them.                |
| `includeOpportunityDetection`    | Detect explicit outreach and submission opportunities.        |
| `sameDomainOnly`                 | Keep discovery within the submitted website. Recommended.     |
| `maxConcurrency`                 | Maximum number of pages processed at the same time.           |
| `maxRequestRetries`              | Retry limit for temporary request failures.                   |
| `requestTimeoutSecs`             | Per-page timeout in seconds.                                  |
| `proxyConfiguration`             | Optional Apify Proxy or custom proxy settings.                |

### Output

The default dataset contains one aggregated item per input website. The following shortened example illustrates the response shape; findings depend on the website's current public content.

```json
{
    "inputUrl": "https://apify.com",
    "finalUrl": "https://apify.com/",
    "canonicalUrl": "https://apify.com/",
    "domain": "apify.com",
    "status": "success",
    "organization": {
        "name": "Apify",
        "websiteType": "company"
    },
    "pagesAnalyzed": 1,
    "contactPages": [],
    "contacts": [
        {
            "type": "email",
            "value": "support@apify.com",
            "category": "support",
            "confidence": 0.96,
            "sourceUrl": "https://apify.com/"
        }
    ],
    "contactForms": [],
    "socialProfiles": [
        {
            "platform": "linkedin",
            "url": "https://www.linkedin.com/company/apify",
            "profileType": "organization",
            "confidence": 0.96
        }
    ],
    "opportunities": [],
    "bestContact": {
        "type": "email",
        "value": "support@apify.com",
        "category": "support",
        "confidence": 0.96
    },
    "outreachScore": 6,
    "scores": {
        "contactability": 16,
        "guestPost": 0,
        "advertising": 0,
        "partnership": 0,
        "sponsorship": 0
    }
}
```

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel. JSON preserves the complete nested evidence and source information.

### Data table

| Field                                            | Description                                                                             |
| ------------------------------------------------ | --------------------------------------------------------------------------------------- |
| `inputUrl`, `finalUrl`, `canonicalUrl`, `domain` | Input and resolved website identity.                                                    |
| `status`                                         | Website-level result: `success`, `partial`, or `failed`.                                |
| `organization`                                   | Public organization name, description, logo, type, and related profiles when available. |
| `pagesAnalyzed`                                  | Number of pages included in the analysis.                                               |
| `contactPages`                                   | Relevant page URLs with type and confidence.                                            |
| `contacts`                                       | Deduplicated public emails and phone numbers with category and sources.                 |
| `contactForms`                                   | Form locations, categories, and visible field names.                                    |
| `socialProfiles`                                 | Official profiles discovered on the website.                                            |
| `opportunities`                                  | Detected outreach types with confidence, source URL, and evidence.                      |
| `bestContact`                                    | Most suitable available contact route and selection reason.                             |
| `outreachScore`, `scores`                        | Overall and category scores from 0 to 100.                                              |
| `errors`                                         | Website or page issues useful for reviewing incomplete results.                         |

### How much does it cost to analyze websites?

This Actor uses **Pay per Event + usage** pricing. There is no subscription: users pay the event charges below plus the Apify platform resources consumed by each run.

| Event            |    Free |   Bronze |  Silver |   Gold |
| ---------------- | ------: | -------: | ------: | -----: |
| Website analyzed | $0.0015 | $0.00135 | $0.0012 | $0.001 |

At the Free-tier rate, the event charges are **$0.15 for 100 websites** and **$1.50 for 1,000 websites**. Platform usage is added separately and depends on crawl limits, retries, page sizes, and optional proxy usage. A website triggers the analyzed event only when it produces a successful or partial result. Failed websites remain available for review without that event charge, although their consumed platform resources may still be billed. Apify plan credits can be used to try the Actor.

### Tips and advanced options

- Keep `sameDomainOnly` enabled for predictable per-website results.
- Use a depth of 1 for quick screening and 2 for broader discovery.
- Disable output categories you do not need to keep results focused.
- Use moderate concurrency when analyzing many websites and respect target-site capacity.
- Enable proxy rotation only when it is appropriate for the target and your use case.
- Review evidence and source pages before using any contact or opportunity.
- Schedule recurring runs when you need to detect newly published outreach pages.

### FAQ, disclaimers, and support

#### Does the Actor contact people or submit forms?

No. It only analyzes information already available on public web pages.

#### Are all findings guaranteed to be current?

No. Websites can contain outdated, incomplete, or ambiguous information. Confidence scores support prioritization, but important findings should be confirmed on the linked source page.

#### Is it legal to collect public contact information?

Laws and website terms vary. You are responsible for following applicable privacy, data-protection, anti-spam, copyright, robots, and website terms in your jurisdiction and use case. Do not use the Actor to collect or misuse sensitive personal data.

#### What can affect coverage?

Some content may require authentication, interaction, client-side rendering, CAPTCHA completion, or access to non-public documents. Restricted, blocked, or unavailable pages may produce partial results.

For help, bug reports, or feature requests, use the Actor's **Issues** tab and include a public URL plus the relevant result details. Custom configurations and tailored extraction requirements are also available as a custom solution.

# Actor input Schema

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

One or more website URLs. Each input root produces one aggregated dataset item.

## `maxPagesPerSite` (type: `integer`):

Hard per-site crawl limit. Higher values can discover more opportunity pages but use more compute.

## `maxDepth` (type: `integer`):

How many prioritized internal-link levels to follow from each root page.

## `includeEmails` (type: `boolean`):

Find published emails in mailto links, visible page text, and relevant structured data.

## `includePhones` (type: `boolean`):

Find public phone numbers in tel links, contact context, and structured data.

## `includeSocialProfiles` (type: `boolean`):

Find organization and personal social profiles while excluding share buttons.

## `includeContactForms` (type: `boolean`):

Classify relevant forms without submitting them.

## `includeOpportunityDetection` (type: `boolean`):

Detect guest post, contributor, advertising, partnership, sponsorship, press, and submission opportunities.

## `sameDomainOnly` (type: `boolean`):

Recommended. Prevents discovered links from taking the crawl to external websites.

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

Maximum number of HTTP pages processed at once across all websites.

## `maxRequestRetries` (type: `integer`):

Retries for transient page failures. Crawlee applies retry backoff automatically.

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

Maximum request-handler duration for one page.

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

Optional Apify Proxy or custom proxy configuration for reliable batch crawling.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://apify.com"
    }
  ],
  "maxPagesPerSite": 15,
  "maxDepth": 2,
  "includeEmails": true,
  "includePhones": true,
  "includeSocialProfiles": true,
  "includeContactForms": true,
  "includeOpportunityDetection": true,
  "sameDomainOnly": true,
  "maxConcurrency": 10,
  "maxRequestRetries": 2,
  "requestTimeoutSecs": 45,
  "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("ib4ngz/contact-outreach-opportunity-finder").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("ib4ngz/contact-outreach-opportunity-finder").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 '{
  "startUrls": [
    {
      "url": "https://apify.com"
    }
  ]
}' |
apify call ib4ngz/contact-outreach-opportunity-finder --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ib4ngz/contact-outreach-opportunity-finder"
        }
    }
}

```

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/WYJtAQyvRYXd7X1ht/builds/4NnekFUt1ABXJwH1O/openapi.json
