How to find a company's LinkedIn, X and other social links from its domain

# sales# crm# api# python
How to find a company's LinkedIn, X and other social links from its domainHay Equipos

Turn a list of company domains into rows with official social profiles, contact, about and careers pages, role mailboxes, phone, name and logo.

You have a list of company websites and need the right channel for each one: the LinkedIn company page, the X account, the contact page, a shared inbox like sales@. Finding these by hand means opening every site, scrolling to the footer and copying links one at a time, and guessing the profile from a search often lands on the wrong account.

The Company Social Links and Contact Page Finder, published by Hay Equipos on the Apify Store, reads each company's own website and returns one row per domain with the profiles and contact routes the company publishes about itself. It reads only the home page and, when linked, the contact page on the same domain. No search engines, no social network scraping, no login and no browser. robots.txt is respected.

What you get back

One row per domain (illustrative values, some network fields left out):

{
  "domain": "example.com",
  "found": true,
  "websiteUrl": "https://www.example.com/",
  "companyName": "Example Inc",
  "description": "Example makes scheduling software for clinics.",
  "linkedin": "https://www.linkedin.com/company/example",
  "twitter": "https://x.com/example",
  "facebook": "https://www.facebook.com/example",
  "instagram": null,
  "youtube": "https://www.youtube.com/@example",
  "github": null,
  "socialProfileCount": 4,
  "contactPageUrl": "https://www.example.com/contact",
  "aboutPageUrl": "https://www.example.com/about",
  "careersPageUrl": "https://www.example.com/careers",
  "emails": ["sales@example.com", "support@example.com"],
  "phones": ["+15550100200"],
  "logoUrl": "https://www.example.com/logo.png",
  "pagesScanned": 2,
  "error": null
}
Enter fullscreen mode Exit fullscreen mode

Networks covered include LinkedIn company pages, X, Facebook, Instagram, YouTube, TikTok, GitHub, Pinterest, Threads, Discord, Telegram, Medium, Bluesky, Crunchbase, and App Store and Google Play app links. There is one profile per network. When a site links several accounts on the same network, the actor prefers the one in the company's own structured data, then the one whose handle matches the domain, then the most linked one.

Business data only. Personal LinkedIn profiles are dropped. Email addresses are kept only when they are shared role mailboxes (info, sales, support, press and similar) on the company's own domain; anything that could belong to a person is discarded before storage. Phones come only from call links and structured data.

Step by step in the Apify Console

  1. Open the actor on the Apify Store and start it in the Console.
  2. Paste your Company domains or websites, one per line. example.com, https://www.example.com or any URL on the site all work; only the domain is used and duplicates are removed.
  3. Leave Also read the contact page on for more profiles, mailboxes and phones (one extra request per domain).
  4. Choose whether to Include role mailboxes and Include business phone numbers (both on by default).
  5. Set Maximum domains if you want a cap (default 10,000).
  6. Click Start and export the dataset as CSV, Excel or JSON for your CRM.

Calling it from code

curl:

curl -X POST \
  "https://api.apify.com/v2/acts/pistachio_implementation~company-social-links-finder/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"domains": ["apify.com", "crawlee.dev"], "scanContactPage": true}'
Enter fullscreen mode Exit fullscreen mode

Python with apify-client:

import os
from apify_client import ApifyClient

client = ApifyClient(os.environ["APIFY_TOKEN"])

run = client.actor("pistachio_implementation/company-social-links-finder").call(
    run_input={
        "domains": ["apify.com", "https://www.hubspot.com", "mailchimp.com"],
        "scanContactPage": True,
        "includeRoleEmails": True,
        "includePhones": True,
    }
)

for row in client.dataset(run["defaultDatasetId"]).iterate_items():
    if row["found"]:
        print(row["domain"], row["linkedin"], row["twitter"], row["contactPageUrl"], row["emails"])
    else:
        print(row["domain"], "no result:", row["error"])
Enter fullscreen mode Exit fullscreen mode

Rows with found: false carry an error explaining why, for example that the site answered with an error, blocked the request, or published nothing the actor could use.

Pricing

Pay per event: $0.0015 per domain with results, which is $1.50 per 1,000 domains. A domain counts as having results when at least one social profile, contact page, role mailbox or phone was found. Domains where nothing is found, unreachable sites, sites that block cloud servers and robots.txt refusals come back as free rows. No start fee and no platform usage charged on top. You can set a maximum charge per run and the actor stops cleanly when it is reached.

Limits and what it does not do

  • Server HTML only. The actor does not run JavaScript, so sites that build their footer with JavaScript can show fewer profiles.
  • Some sites block cloud servers. Those domains return a free error row; the actor does not try to get around blocks.
  • At most two pages per company (home and contact). Profiles that appear only deeper in the site are not found.
  • Only role mailboxes, never personal addresses. If a company publishes only personal addresses, emails is empty.
  • Phone numbers are not validated. They are returned as the site publishes them, reduced to digits and a leading plus.
  • It never looks up individuals.

Please use the data in line with each website's terms and the rules that apply to your outreach.

Try it on the Apify Store: https://apify.com/pistachio_implementation/company-social-links-finder