# Company Social Profile Email Finder (`jungle_synthesizer/company-social-profile-email-finder`) Actor

Finds a company's Instagram or Facebook profile from its name alone and returns whatever business contact details that profile exposes — email, phone, and website. Built for company lists that have no domain to start from.

- **URL**: https://apify.com/jungle\_synthesizer/company-social-profile-email-finder.md
- **Developed by:** [BowTiedRaccoon](https://apify.com/jungle_synthesizer) (community)
- **Categories:** Lead generation
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.40 / 1,000 record scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
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

## Company Social Profile Email Finder

Turn a plain list of company names into contact details — starting from nothing but the
name. No website, no domain, no LinkedIn URL required. This actor finds each company's
Instagram or Facebook profile and returns whatever business contact information that
profile publishes: email, phone, and website.

### Who This Is For

Most contact-finding tools assume you already have a domain or a LinkedIn profile to work
from. This one is for the opposite case: a list of company or organization names — from a
directory export, an association roster, a sponsor list, an agency database — where a
meaningful share of entries have **no website on file at all**. If that's your list, this is
the actor that reaches the companies the others can't.

### How It Works

For each company name you provide, the actor:

1. Searches for a matching Instagram or Facebook profile.
2. Confirms the match using the strongest available evidence — a profile handle that matches
   the company name, a supplied verification token found on the profile, or (as a
   lower-confidence fallback) the company name appearing in a search result.
3. Reads the profile page for whatever business contact details it exposes — email, phone
   number, and website.
4. Optionally verifies any found email address for deliverability.

Every input company gets a row in the output — including the ones with no contact found —
so you always know exactly what was checked and what was found.

### Input

| Field                | Type              | Description |
|-----------------------|-------------------|-------------|
| `companies`            | array of strings  | **Required.** List of company names to search for. |
| `verificationTokens`   | array of arrays   | Optional, parallel to `companies`. A list of distinctive strings you know belong to each company (e.g. a client name, a member name). When one of these appears on a discovered profile, it confirms the match. This is the single highest-value optional input — supply it whenever you have it. |
| `platforms`            | string            | `instagram`, `facebook`, or `both` (default). Restrict the search to one platform. |
| `verifyEmails`         | boolean           | Default `true`. Checks any found email address for deliverability. |
| `maxItems`             | integer           | Maximum number of companies (from the `companies` list) to process in this run. |

#### Example input

```json
{
  "companies": [
    "LL Sportsmanagement AB",
    "Next Level Sports Agency"
  ],
  "verificationTokens": [
    ["Erling Haaland"],
    []
  ],
  "platforms": "both",
  "verifyEmails": true,
  "maxItems": 50
}
```

### Output Fields

| Field               | Description |
|---------------------|-------------|
| `input_company`      | The company name as you supplied it. |
| `matched`            | `true` if a social profile was confidently matched to this company. |
| `platform`           | `instagram` or `facebook` — the platform the matched profile is on. `null` if unmatched. |
| `profile_url`        | The URL of the matched profile. |
| `handle`              | The profile's handle or page slug. |
| `match_basis`        | How the match was made: `handle` (the profile's own handle matches the company name — strongest), `token` (a supplied verification token was found on the profile — strongest), or `title` (the company name only appeared in a search result — weaker; treat with more skepticism). |
| `business_email`     | Business email exposed on the profile. `null` if the profile publishes none. |
| `business_phone`     | Business phone exposed on the profile. `null` if the profile publishes none. |
| `website`             | A website the profile links to, if any — often new information not on file anywhere else. |
| `email_confidence`   | Deliverability check result for `business_email`: `verified`, `invalid`, `catch_all`, or `unknown`. `null` when no email was found or verification was skipped. |
| `scraped_at`          | Timestamp the profile was checked. |

### How Billing Works

You are billed per company processed at the base rate. If a company's profile actually
exposes a business email or phone number, that row additionally bills at the found-contact
rate — so you are never charged extra just because a company happens to have no public
contact information. A large share of companies genuinely publish nothing at all; this
actor's pricing reflects that rather than charging you the same for every outcome.

### FAQ

#### Why don't all my companies get an email?

Not every company publishes a business email on its social profile — many list only a phone
number, only a website, or nothing at all. `matched: true` with a `null` `business_email`
means a profile was found but it doesn't expose an email; a `matched: false` row means no
confident profile match was found for that company at all.

#### What does `match_basis` mean, and should I trust every row equally?

No. `handle` and `token` matches are strong — the evidence directly ties the profile to the
company. `title` matches are weaker: the company name appeared in a search result, but
nothing on the profile itself confirms it. If you need high precision, filter to
`match_basis` in `["handle", "token"]`. If a `title`-tier row also carries a real
`business_email`, that's meaningful corroborating evidence the match is likely correct.

#### What does `email_confidence` mean?

It reflects a deliverability check on the found address, not a guess. `verified` means the
mailbox was confirmed to accept mail. `invalid` means it was confirmed to reject mail — the
row is kept so you can see what was found and why it's unreliable. `catch_all` means the
domain accepts any address so the individual mailbox couldn't be confirmed either way.
`unknown` means no determinate answer was available (or `verifyEmails` was set to `false`).

#### Can I search a huge list of companies in one run?

Yes — set `maxItems` to the size of your list (or higher). Each company is processed
independently, so a `null` result on one row doesn't affect any other.

### Need More Features?

Have a request — a different platform, additional contact fields, bulk verification against
your own CRM export? [Message us](https://console.apify.com/actors) and we'll take a look.

# Actor input Schema

## `sp_intended_usage` (type: `string`):

What will this data feed? E.g. lead lists, KYB checks, price tracking.

## `sp_improvement_suggestions` (type: `string`):

Provide any feedback or suggestions for improvements.

## `sp_contact` (type: `string`):

We'll personally help with your use case. No spam.

## `companies` (type: `array`):

List of company names to search for (one per line). Required.

## `verificationTokens` (type: `array`):

Optional array of arrays, parallel to `companies`. Distinctive strings known to belong to each company (e.g. a client/roster name). When a token appears on the discovered profile it CONFIRMS the match and is the single highest-value optional input. Example: \[\["Player One", "Player Two"], \["Client A"]]

## `platforms` (type: `string`):

Which platform(s) to search for a company's social profile.

## `verifyEmails` (type: `boolean`):

Route any found email address through MillionVerifier to check deliverability.

## `maxItems` (type: `integer`):

Maximum number of companies (from the companies list) to process in this run.

## Actor input object example

```json
{
  "sp_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "companies": [
    "LL Sportsmanagement AB",
    "Next Level Sports Agency"
  ],
  "platforms": "both",
  "verifyEmails": true,
  "maxItems": 50
}
```

# 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 = {
    "sp_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "companies": [
        "LL Sportsmanagement AB",
        "Next Level Sports Agency"
    ],
    "maxItems": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("jungle_synthesizer/company-social-profile-email-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 = {
    "sp_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "companies": [
        "LL Sportsmanagement AB",
        "Next Level Sports Agency",
    ],
    "maxItems": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("jungle_synthesizer/company-social-profile-email-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 '{
  "sp_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "companies": [
    "LL Sportsmanagement AB",
    "Next Level Sports Agency"
  ],
  "maxItems": 50
}' |
apify call jungle_synthesizer/company-social-profile-email-finder --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,jungle_synthesizer/company-social-profile-email-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/dOz0kyFg5rBfM9spd/builds/B8UXsBT8PhMM6jqao/openapi.json
