# Company Social Links and Contact Page Finder (`pistachio_implementation/company-social-links-finder`) Actor

Give company domains, get their official LinkedIn, X, Facebook, Instagram, YouTube, TikTok, GitHub and other profiles, plus contact, about and careers page links, role mailboxes like info@ and sales@, business phone, name and logo. Reads only the company's own site. Business data only.

- **URL**: https://apify.com/pistachio\_implementation/company-social-links-finder.md
- **Developed by:** [Hay Equipos](https://apify.com/pistachio_implementation) (community)
- **Categories:** Lead generation, Social media, Marketing
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$1.50 / 1,000 domain with results

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

## Company Social Links and Contact Page Finder

Give the actor a list of company domains and get one row per company with its official social profiles and ways to reach it: LinkedIn company page, X, Facebook, Instagram, YouTube, TikTok, GitHub, Pinterest, Threads, Discord, Telegram, Medium, Bluesky, Crunchbase and its App Store and Google Play apps, plus the contact, about and careers page links, shared company mailboxes such as info@ and sales@, business phone numbers, the company name, description and logo.

The actor reads only the company's own website: its home page and, when the home page links to one, its contact page. No search engines, no social network scraping, no login, no browser, no proxies. robots.txt is respected, including rules that name Apify.

**Business data only.** Personal LinkedIn profiles are never returned. Email addresses are kept only when they are shared role mailboxes on the company's own domain (info, hello, sales, support, press, careers and similar); any address that could belong to a person is dropped and never stored.

### What you can use it for

- **CRM enrichment:** fill in the social profiles, contact page and logo for a list of accounts.
- **Lead lists for B2B outreach:** turn a list of company websites into rows with the right channel for each company.
- **Agency and brand audits:** check which networks a set of brands is active on.
- **Market maps:** collect logos, descriptions and profile links for a landscape slide or directory.
- **AI agents:** "find the LinkedIn and X accounts for these 50 domains" is one call.

### Input

| Field | What it does | Default |
|---|---|---|
| Company domains or websites | `apify.com`, `https://www.notion.com` or any URL on the site | required |
| Also read the contact page | One extra page per company for more profiles, mailboxes and phones | on |
| Include role mailboxes | info@, sales@, support@ and similar on the company's own domain | on |
| Include business phone numbers | Numbers the site publishes as call links or structured data | on |
| Maximum domains | Cap for the run | 10,000 |

Example input:

```json
{
  "domains": ["apify.com", "hubspot.com", "mailchimp.com"],
  "scanContactPage": true
}
```

### Output

One row per domain.

```json
{
  "domain": "apify.com",
  "found": true,
  "websiteUrl": "https://apify.com/",
  "companyName": "Apify",
  "description": "Cloud platform for web scraping, browser automation, AI agents, and data for AI...",
  "linkedin": "https://www.linkedin.com/company/apify",
  "twitter": "https://x.com/apify",
  "facebook": null,
  "instagram": null,
  "youtube": null,
  "tiktok": "https://www.tiktok.com/@apifytech",
  "github": "https://github.com/apify",
  "discord": "https://discord.com/invite/jyEM2PRvMU",
  "socialProfileCount": 5,
  "contactPageUrl": "https://apify.com/contact",
  "aboutPageUrl": "https://apify.com/about",
  "careersPageUrl": "https://apify.com/jobs",
  "emails": ["support@apify.com", "hello@apify.com"],
  "phones": [],
  "logoUrl": "https://apify.com/img/apify-logo/apify-symbol-200x200.svg",
  "faviconUrl": "https://apify.com/icon6.png",
  "pagesScanned": 2,
  "error": null
}
```

- One profile per network. When a site links several accounts on one network, the actor prefers the one the company lists in its own structured data, then the one whose name matches the domain, then the most linked one.
- `found` is true when at least one profile, contact page, role mailbox or phone was found. Only those rows are charged.
- Domains that could not be read (the site is down, blocks cloud servers, or disallows automated reading in robots.txt) come back with `found: false` and an `error` explaining why, free of charge.

### Pricing

Pay per event. No start fee, no subscription, no platform usage charged on top.

| Event | Price |
|---|---|
| Domain with results | $0.0015 ($1.50 per 1,000 domains) |

Domains where nothing is found, and domains that fail, cost nothing. Example: 1,000 company domains where about 850 have results cost about $1.28. Set a maximum charge per run in Apify and the actor stops cleanly when it is reached.

### Limits

- The actor reads the server's HTML without running JavaScript. Sites that only render their footer with JavaScript can show fewer profiles.
- Some sites block requests from cloud servers. Those domains return a free error row; the actor does not try to get around blocks.
- At most two pages per company are read (home and contact). Profiles that appear only deeper in the site are not found.
- Only shared role mailboxes are returned, never personal addresses. If a company publishes only personal addresses, `emails` is empty.
- Phone numbers are returned as the site publishes them, digits and a leading plus only; the actor does not validate them.

### FAQ

**Does it look people up?** No. It never searches for or returns individuals' profiles or personal email addresses. It reports what a company publishes about itself on its own site.

**Why is LinkedIn missing for some companies?** The company does not link its LinkedIn page from the home or contact page, or its footer is built with JavaScript.

**Can I give full URLs?** Yes. Only the domain is used, and duplicates are removed.

**Can an AI agent call it?** Yes. One input field, one row per domain, pay per event pricing with no start fee.

# Actor input Schema

## `domains` (type: `array`):

One per line: apify.com, https://www.notion.com or a full URL (only the domain is used).

## `scanContactPage` (type: `boolean`):

When the home page links to a contact page on the same site, read it too for more profiles, mailboxes and phone numbers. One extra request per domain.

## `includeRoleEmails` (type: `boolean`):

Shared company mailboxes on the company's own domain, such as info@, sales@, support@ and press@. Addresses that look like a person's name are never collected.

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

Phone numbers the site publishes as call links or in its structured data.

## `maxDomains` (type: `integer`):

Process at most this many domains from the list.

## Actor input object example

```json
{
  "domains": [
    "apify.com",
    "crawlee.dev"
  ],
  "scanContactPage": true,
  "includeRoleEmails": true,
  "includePhones": true,
  "maxDomains": 10000
}
```

# Actor output Schema

## `results` (type: `string`):

All rows the run saved to the default dataset.

## `summary` (type: `string`):

The RUN\_SUMMARY record: counts and problems for the whole run.

# 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 = {
    "domains": [
        "apify.com",
        "crawlee.dev"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("pistachio_implementation/company-social-links-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 = { "domains": [
        "apify.com",
        "crawlee.dev",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("pistachio_implementation/company-social-links-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 '{
  "domains": [
    "apify.com",
    "crawlee.dev"
  ]
}' |
apify call pistachio_implementation/company-social-links-finder --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,pistachio_implementation/company-social-links-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/CAgFIKwnJefQCraTJ/builds/u1gOS8mCZtbRqALxL/openapi.json
