# Company Enrichment – Firmographics by Domain (`sfoln/company-enrichment`)

Enrich a company domain into one live profile: name, legal name, logo, addresses, emails, phones, socials, tech stack, MX/SPF/DMARC, domain age, open jobs, LEI and SEC ticker, Shopify flag. Optional name lookup and LinkedIn data. $5 per 1,000 companies.

- Family: Company & lead intelligence
- Categories: Lead generation, Developer tools, Automation
- Availability: on request (private on Apify). Email contact@sfoln.com with subject "Access request: Company Enrichment – Firmographics by Domain (sfoln/company-enrichment)" before calling; calls fail until it is public.
- JSON: https://www.sfoln.com/actors/company-enrichment.json
- MCP: https://mcp.apify.com?tools=sfoln/company-enrichment
- REST (sync): POST https://api.apify.com/v2/actors/sfoln~company-enrichment/run-sync-get-dataset-items
- REST (async): POST https://api.apify.com/v2/actors/sfoln~company-enrichment/runs

Turn a company domain into one live company profile: the Actor reads the company's own website (homepage plus up to three contact, imprint, careers and about pages), its DNS records, its domain registration and TLS certificate, its public job board and the free LEI and SEC registers, and returns about 60 normalized fields in one JSON record: name and legal name, logo, addresses, e-mails (locally pre-checked), phones (E.164), social profiles, tech stack, SaaS tools seen in DNS, mail provider with SPF and DMARC, domain age, SSL, open jobs by department, LEI, SEC CIK and ticker, VAT and register numbers, and a Shopify / WooCommerce store flag. Built for SDR and RevOps teams enriching CRM accounts, VC and M&A screening, and AI agents answering "tell me about acme.com". Nothing comes from a stale database: every profile is read live.

## Price per delivered record

| Event | Price | Per 1,000 | Charged for |
| --- | --- | --- | --- |
| Company profile (`company-profile`) | $0.005 | $5 / 1,000 | Charged once per company whose website was read: one profile with names, logo, addresses, e-mails (pre-checked), phones, socials, tech stack, e-mail DNS setup, domain age, SSL, hiring snapshot, LEI / SEC identifiers and store flags. |
| LinkedIn company profile (`linkedin-firmographics`), paid plans only | $0.007 | $7 / 1,000 | Paid add-on (includeLinkedIn): the company's LinkedIn page linked from its website (industry, size, employees on LinkedIn, followers, headquarters, founded, specialties, funding). Paid Apify plans only. |
| Company name lookup (`company-name-lookup`), paid plans only | $0.0045 | $4.5 / 1,000 | Paid add-on (companyNames): one Google search for a company name to find its website (knowledge graph and organic results, verified against the site's own name). Paid Apify plans only. |

Pay-per-event, USD, billed by Apify; no platform usage charge. Only records with status `ok` are charged. Cap a run with `maxTotalChargeUsd`. Apify free plan: up to 10 per run.

## Run

```bash
curl -X POST "https://api.apify.com/v2/actors/sfoln~company-enrichment/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"domains":["apify.com"]}'
```

MCP client configuration:

```json
{
  "mcpServers": {
    "apify": {
      "type": "http",
      "url": "https://mcp.apify.com?tools=sfoln/company-enrichment"
    }
  }
}
```

Example prompt: Enrich apify.com: give me the company's legal name, address, LinkedIn page, tech stack, e-mail provider, number of open jobs and its LEI.

## Input

Enter company domains (or, on paid plans, company names). Each company produces one profile record.

| Field | Type | Default | Meaning |
| --- | --- | --- | --- |
| `domains` | array | — | Company domains: Company websites as domains (apify.com) or URLs, one per line. Duplicates are removed. Accounts on the Apify free plan can process up to 10 companies per run. |
| `companyNames` | array | `[]` | Company names (paid plans): Company names to find the website of first, one per line, optionally with a country: "Acme Widgets \| DE". Each name costs one search ($0.0045, company-name-lookup) whether or not a website is found; the profile is charged only when the website was found. Paid Apify plans only. |
| `country` | string | — | Default country for names: ISO country code (US, DE) used for company names given without one: it localises the search. |
| `includeLinkedIn` | boolean | `false` | LinkedIn company data: Also read the company's LinkedIn page linked from its website (industry, size, employees, followers, funding). Paid add-on: $0.007 per company (linkedin-firmographics), paid Apify plans only. |
| `includeHiring` | boolean | `true` | Hiring snapshot: Find the company's job board (Greenhouse, Lever, Ashby, Workable, Recruitee, Personio, Teamtailor, SmartRecruiters, BambooHR, Breezy, Workday) and count its open roles by department. |
| `guessJobBoard` | boolean | `true` | Guess the job board from the domain: When the website links no job board, try the domain name on the main ATS APIs (the match is checked against the company; reported as detectedBy slug_guess). |
| `includeIdentifiers` | boolean | `true` | LEI and SEC identifiers: Look the company up in GLEIF (LEI) and SEC EDGAR (CIK, ticker, exchange). |
| `maxPages` | integer | `4` | Pages per website: Pages read per company: the homepage plus up to 3 of its contact, imprint, careers and about pages. |
| `maxItems` | integer | `1000` | Max companies: Safety cap on how many companies (domains and names) are processed in this run. |
| `concurrency` | integer | `5` | Concurrency: How many companies are enriched in parallel (1–10). |
| `includeRaw` | boolean | `false` | Include raw response data: Attach the homepage's response headers, redirects and its JSON-LD Organization under raw. |

Example input:

```json
{
  "domains": [
    "apify.com"
  ]
}
```

## Output

One record per input item with `status` (`ok` is charged; `not_found`, `error`, `skipped_*` are free) and `charged`. The run stores an `OUTPUT` summary record.

| Field | Type | Meaning |
| --- | --- | --- |
| `input` | string | object | Input: The domain or URL as given, or { companyName, country } for a name lookup. |
| `status` | string | Status: ok \| not_found \| error \| skipped_invalid \| skipped_budget \| skipped_free_plan \| skipped_unmetered |
| `charged` | boolean | Charged: Whether this record incurred a company-profile charge (paid add-ons charged for it are listed in chargedAddOns). |
| `chargedEvent` | string | Charged event: company-profile (present only when charged). |
| `chargedCount` | integer | Events charged: Events actually charged when the charge came back short (present only then). |
| `chargedAddOns` | array | Charged add-ons: Paid add-on events charged for this record (company-name-lookup, linkedin-firmographics), also when the profile itself was not found or not charged; present only when one was charged. |
| `source` | string | Source: Upstream data sources. |
| `fetchedAt` | string | Fetched at: ISO timestamp. |
| `error` | object | Error: { code, message, provider?, status? } when status is not ok: invalid_domain, domain_not_found, site_blocked, page_not_found, http_error, website_not_found, name_lookup_paid_plan, budget_exhausted, plus the runtime codes (budget_exhausted, free_plan_limit, unmetered, aborted, charge_failed, record_too_large, invalid_record, dataset_push_failed) and upstream codes (auth, insufficient_credits, rate_limit, timeout, network, server, client, invalid_response, not_found). |
| `warnings` | array | Warnings: Sections that failed or were skipped, pages that could not be read, add-on notes. |
| `inputType` | string | Input type: domain or company_name. |
| `domain` | string | null | Domain: Registrable domain of the company (apify.com); for a site on a shared platform domain the site's own host (acme.myshopify.com), whose DNS and RDAP sections are then skipped. |
| `website` | string | null | Website: Final homepage URL after redirects. |
| `companyName` | string | null | Company name: Name from JSON-LD, og:site_name or the page title. |
| `legalName` | string | null | Legal name: Legal name published in JSON-LD (legalName), else the registered name in the imprint or footer text. |
| `legalNameSource` | string | null | Legal name source: Where legalName comes from: json-ld, imprint or website_text (null without a legal name). |
| `alternateName` | string | null | Alternate name: JSON-LD alternateName. |
| `description` | string | null | Description: JSON-LD description, else the meta description. |
| `slogan` | string | null | Slogan: JSON-LD slogan. |
| `logo` | string | null | Logo: Logo URL from JSON-LD. |
| `favicon` | string | null | Favicon: Declared favicon URL. |
| `ogImage` | string | null | Share image: og:image URL. |
| `language` | string | null | Language: Homepage language (html lang). |
| `country` | string | null | Country: ISO 3166-1 alpha-2 country of the company. |
| `countrySource` | string | null | Country source: json-ld, vat_number, registration_number, input, tld, phone or lei. |
| `foundedYear` | integer | null | Founded: Founding year. |
| `foundedYearSource` | string | null | Founded source: json-ld or website_text. |
| `employees` | object | null | Employees: { min, max } from JSON-LD numberOfEmployees. |
| `addresses` | array | Addresses: { formatted, street, city, region, postalCode, country, source } from JSON-LD, <address> elements and microdata. |
| `emails` | array | Emails: { email, sourcePage, isOwnDomain, verdict, settled, role, freeProvider, disposable, typoSuggestion }: addresses published on the site, own domain first, with the local pre-check verdict (no mailbox verification). |
| `phones` | array | Phones: { number (E.164), valid, country, type, source } from tel: links and JSON-LD. |
| `socials` | object | Social profiles: linkedin, x, facebook, instagram, youtube, tiktok, pinterest, github (null when not linked). |
| `techStack` | array | Tech stack: { name, slug, categories, version, confidence, evidence, website } detected on the pages, the TLS issuer and DNS. |
| `techSummary` | object | Tech summary: cms, ecommercePlatform, analytics, tagManagers, advertising, marketingAutomation, crm, liveChat, paymentProcessors, hosting, cdn, webServer, javascriptFrameworks. |
| `saasFromDns` | array | SaaS seen in DNS: Services verified in DNS records (TXT verification tokens, MX, SPF includes, NS, CNAMEs). |
| `mailProvider` | string | null | Mail provider: Mailbox provider from MX (Google Workspace, Microsoft 365, …). |
| `mx` | array | MX hosts: Mail exchangers by preference. |
| `emailSenders` | array | E-mail senders: Services allowed to send the domain's mail (SPF includes). |
| `spf` | object | null | SPF: { record, allQualifier, includes }. |
| `dmarc` | object | null | DMARC: { record, policy, subdomainPolicy, pct, reports }. |
| `emailSecurityScore` | integer | null | E-mail security score: 0–100 from SPF, DMARC and MX findings. |
| `registrar` | string | null | Registrar: Domain registrar (RDAP). |
| `domainCreatedAt` | string | null | Domain created: Registration date (RDAP). |
| `domainAgeDays` | integer | null | Domain age (days): Days since registration. |
| `domainExpiresAt` | string | null | Domain expires: Expiry date (RDAP). |
| `sslIssuer` | string | null | SSL issuer: TLS certificate issuer. |
| `sslDaysLeft` | integer | null | SSL days left: Days until the TLS certificate expires. |
| `sslValid` | boolean | null | SSL valid: The certificate is trusted, unexpired and covers the host. |
| `hiring` | object | null | Hiring: { ats, atsName, boardToken, boardUrl, detectedBy, openJobs, complete, jobsRead, departments[], locations[], remoteShare, postedLast30Days, newestPostedAt, sampleTitles[] }. |
| `identifiers` | object | Identifiers: { lei, leiRecord, secCik, ticker, exchange, secRecord, vatNumber, vatNumbers[], registrationNumbers[], duns, naics }. |
| `ecommerce` | object | E-commerce: { isStore, platform, myshopifyDomain, currency, publishedProducts, shipsToCountries }. |
| `websiteSignals` | object | Website signals: { https, hsts, hasPricingPage, hasBlog, hasCareersPage, hasLogin, hasContactPage, copyrightYear, staleSite, lastModified, generator, jsonLdTypes, cms, ecommercePlatform }. |
| `linkedin` | object | null | LinkedIn: LinkedIn company data (add-on): url, name, industry, companySize, employeeCountRange, employeesOnLinkedin, followerCount, headquarters, founded, companyType, specialties, description, website, fundingRounds, lastFundingRound. |
| `nameLookup` | object | Name lookup: For companyNames: { query, country, domain, candidates[], verification }. |
| `pagesFetched` | integer | Pages read: Website pages read (homepage included). |
| `pages` | array | Pages: { kind, url, status } of each page read. |
| `sources` | array | Sources: Pages read, dns, rdap, the job board, GLEIF and EDGAR links. |
| `sections` | object | Sections: State of each part: website, dns, domain, tls, hiring, lei, sec, linkedin: ok \| not_found \| error \| skipped \| timeout (dns and domain are skipped for a site on a shared platform domain). |

Example record:

```json
{
  "input": "apify.com",
  "inputType": "domain",
  "domain": "apify.com",
  "website": "https://apify.com/",
  "companyName": "Apify",
  "legalName": "Apify Technologies s.r.o.",
  "legalNameSource": "json-ld",
  "description": "Thousands of tools to automate your business. Get real-time web data, track competitors, generate leads, and integrate your apps and AI agents.",
  "logo": "https://apify.com/img/apify-logo/apify-symbol-200x200.svg",
  "favicon": "https://apify.com/favicon.ico",
  "language": "en",
  "country": "CZ",
  "countrySource": "json-ld",
  "foundedYear": 2015,
  "foundedYearSource": "json-ld",
  "addresses": [
    {
      "formatted": "Na Příkopě 959/27, 11000 Prague, CZ",
      "street": "Na Příkopě 959/27",
      "city": "Prague",
      "region": null,
      "postalCode": "11000",
      "country": "CZ",
      "source": "json-ld"
    }
  ],
  "emails": [
    {
      "email": "support@apify.com",
      "sourcePage": "https://apify.com/",
      "isOwnDomain": true,
      "verdict": "role",
      "settled": false,
      "role": true,
      "freeProvider": false,
      "disposable": false,
      "typoSuggestion": null
    }
  ],
  "phones": [],
  "socials": {
    "linkedin": "https://linkedin.com/company/apify",
    "x": "https://x.com/apify",
    "facebook": null,
    "instagram": null,
    "youtube": null,
    "tiktok": "https://www.tiktok.com/@apifytech",
    "pinterest": null,
    "github": "https://github.com/apify"
  },
  "techStack": [
    {
      "name": "Next.js",
      "slug": "next-js",
      "categories": [
        "Web frameworks",
        "Web servers"
      ],
      "version": null,
      "confidence": 100,
      "evidence": [
        "scriptSrc",
        "header"
      ],
      "website": "https://nextjs.org"
    }
  ],
  "techSummary": {
    "cms": null,
    "ecommercePlatform": null,
    "analytics": [
      "Mixpanel"
    ],
    "tagManagers": [],
    "advertising": [],
    "marketingAutomation": [
      "HubSpot"
    ],
    "crm": [
      "Intercom"
    ],
    "liveChat": [
      "Intercom"
    ],
    "paymentProcessors": [],
    "hosting": [
      "Amazon Web Services"
    ],
    "cdn": [
      "Amazon Cloudfront"
    ],
    "webServer": "Next.js",
    "javascriptFrameworks": [
      "React"
    ]
  },
  "saasFromDns": [
    "Google Workspace",
    "HubSpot",
    "Mailgun",
    "Amazon SES",
    "Google Search Console",
    "Zapier"
  ],
  "mailProvider": "Google Workspace",
  "mx": [
    "aspmx.l.google.com",
    "alt1.aspmx.l.google.com"
  ],
  "emailSenders": [
    "Google Workspace",
    "Mailgun",
    "Amazon SES",
    "HubSpot"
  ],
  "spf": {
    "record": "v=spf1 a mx include:_spf.google.com include:mailgun.org include:amazonses.com -all",
    "allQualifier": "-all",
    "includes": [
      "_spf.google.com",
      "mailgun.org",
      "amazonses.com"
    ]
  },
  "dmarc": {
    "record": "v=DMARC1; p=reject; sp=reject; pct=100; rua=mailto:dmarc-reports@apify.com",
    "policy": "reject",
    "subdomainPolicy": "reject",
    "pct": 100,
    "reports": true
  },
  "emailSecurityScore": 100,
  "registrar": "Amazon Registrar, Inc.",
  "domainCreatedAt": "2009-06-02T17:14:10Z",
  "domainAgeDays": 6343,
  "domainExpiresAt": "2035-06-02T17:14:10Z",
  "sslIssuer": "Amazon",
  "sslDaysLeft": 63,
  "sslValid": true,
  "hiring": {
    "ats": "ashby",
    "atsName": "Ashby",
    "boardToken": "apify",
    "boardUrl": "https://jobs.ashbyhq.com/apify",
    "detectedBy": "website",
    "openJobs": 11,
    "complete": true,
    "jobsRead": 11,
    "departments": [
      {
        "name": "Engineering",
        "count": 8
      },
      {
        "name": "GTM",
        "count": 2
      }
    ],
    "locations": [
      {
        "name": "Prague",
        "count": 8
      }
    ],
    "remoteShare": 0,
    "postedLast30Days": 3,
    "newestPostedAt": "2026-10-14T16:14:26.368Z",
    "sampleTitles": [
      "Platform Reliability Engineer",
      "Senior Backend Engineer, Billing"
    ]
  },
  "identifiers": {
    "lei": "315700DHB47UOCE2LE29",
    "leiRecord": {
      "lei": "315700DHB47UOCE2LE29",
      "legalName": "Apify Technologies s.r.o.",
      "country": "CZ",
      "jurisdiction": "CZ",
      "entityStatus": "ACTIVE",
      "registrationStatus": "ISSUED",
      "legalFormCode": "9HLU",
      "registeredAs": "04788290",
      "entityCreationDate": "2016-02-14T23:00:00Z",
      "headquartersCity": "Praha",
      "matchedBy": "registry_id",
      "matchScore": 1,
      "gleifUrl": "https://search.gleif.org/#/record/315700DHB47UOCE2LE29"
    },
    "secCik": null,
    "ticker": null,
    "exchange": null,
    "secRecord": null,
    "vatNumber": "CZ04788290",
    "vatNumbers": [
      {
        "vatNumber": "CZ04788290",
        "country": "CZ",
        "formatValid": true,
        "source": "json-ld"
      }
    ],
    "registrationNumbers": [],
    "duns": null,
    "naics": null
  },
  "ecommerce": {
    "isStore": false,
    "platform": null,
    "myshopifyDomain": null,
    "currency": null,
    "publishedProducts": null,
    "shipsToCountries": null
  },
  "websiteSignals": {
    "https": true,
    "hsts": true,
    "hasPricingPage": true,
    "hasBlog": true,
    "hasCareersPage": true,
    "hasLogin": true,
    "hasContactPage": true,
    "copyrightYear": 2026,
    "staleSite": false,
    "lastModified": null,
    "generator": null,
    "jsonLdTypes": [
      "Organization",
      "WebSite",
      "SoftwareApplication"
    ],
    "cms": null,
    "ecommercePlatform": null
  },
  "linkedin": null,
  "pagesFetched": 4,
  "pages": [
    {
      "kind": "home",
      "url": "https://apify.com/",
      "status": 200
    },
    {
      "kind": "contact",
      "url": "https://apify.com/contact",
      "status": 200
    },
    {
      "kind": "careers",
      "url": "https://apify.com/jobs",
      "status": 200
    },
    {
      "kind": "about",
      "url": "https://apify.com/about",
      "status": 200
    }
  ],
  "sources": [
    "https://apify.com/",
    "https://apify.com/contact",
    "https://apify.com/jobs",
    "https://apify.com/about",
    "dns",
    "rdap",
    "https://jobs.ashbyhq.com/apify",
    "https://search.gleif.org/#/record/315700DHB47UOCE2LE29"
  ],
  "sections": {
    "website": "ok",
    "dns": "ok",
    "domain": "ok",
    "tls": "ok",
    "hiring": "ok",
    "lei": "ok",
    "sec": "not_found",
    "linkedin": "skipped"
  },
  "status": "ok",
  "charged": true,
  "chargedEvent": "company-profile",
  "source": "website+dns+registries",
  "fetchedAt": "2026-10-15T09:00:00.000Z"
}
```

## FAQ

**Where does the data come from?**

Live from public sources at run time: the company's own website (up to 4 pages: the homepage plus its contact, imprint, careers and about pages), its DNS records (MX, SPF, DMARC, verification TXT records, CNAMEs of common subdomains), RDAP domain registration data, its TLS certificate, the public job-board APIs of applicant tracking systems (Greenhouse, Lever, Ashby and 8 more), GLEIF (LEI register) and SEC EDGAR. Nothing comes from a stored database, so a profile is as fresh as the website.

**How are LEI and SEC identifiers matched?**

Conservatively: an LEI published on the site wins; then a register number or a VAT number published on the site that GLEIF knows; then an exact legal name. A brand name alone matches only when exactly one active entity has that name (in the company's country when known). The SEC registrant is matched on the exact company name in EDGAR's list of listed companies, and rejected when EDGAR records a website on another domain. Each match carries matchedBy and matchScore.

**Can I enrich a company name instead of a domain?**

Yes, on paid plans: put names in companyNames (optionally "Name | country code"). Each name costs one search ($0.0045, company-name-lookup, charged whether or not a website is found, and listed in the record's chargedAddOns); the best candidates' homepages are compared with the name (the site's own name, its domain or Google's knowledge-graph title must match), and the profile ($0.005) is charged only when the website was confidently found and read. Passing the domain is cheaper and exact.


## Related

- [Website Contact Details Scraper](https://www.sfoln.com/actors/company-contacts-finder.md) (`sfoln/company-contacts-finder`)
- [Tech Stack Detector – Website Technologies](https://www.sfoln.com/actors/tech-stack-detector.md) (`sfoln/tech-stack-detector`)
- [Hiring Signals API – Open Jobs by Company](https://www.sfoln.com/actors/hiring-signals.md) (`sfoln/hiring-signals`)
- [Website Audit – SEO, Security, SSL & DNS](https://www.sfoln.com/actors/website-audit.md) (`sfoln/website-audit`)
- [LinkedIn Company Details Scraper (No Login)](https://www.sfoln.com/actors/linkedin-company-lookup.md) (`sfoln/linkedin-company-lookup`)
- [LEI Lookup – GLEIF Legal Entity Search](https://www.sfoln.com/actors/lei-lookup.md) (`sfoln/lei-lookup`)
- [SEC EDGAR Filings Scraper – 10-K, 10-Q, 8-K](https://www.sfoln.com/actors/sec-edgar-filings.md) (`sfoln/sec-edgar-filings`)
- [Email Validator – MX & Disposable Check](https://www.sfoln.com/actors/email-validator.md) (`sfoln/email-validator`)
- [KYB Company Check – Registry, LEI, VAT](https://www.sfoln.com/actors/kyb-company-check.md) (`sfoln/kyb-company-check`)
- [Domain WHOIS & DNS Lookup](https://www.sfoln.com/actors/domain-intelligence.md) (`sfoln/domain-intelligence`)

Publisher: SFOLN LLC, contact@sfoln.com. Catalogue: https://www.sfoln.com/catalog.json. Agent guide: https://www.sfoln.com/agents.md.
