# Company Enrichment by Domain: No API Key (`glasswing/company-profile-by-domain`) Actor

One domain in, one company profile out: name, description, industry, HQ city and country, LinkedIn company page, social links, tech stack, mail provider, SPF/DMARC and UK Companies House number and status. Batch input, $5 per 1,000 profiles.

- **URL**: https://apify.com/glasswing/company-profile-by-domain.md
- **Developed by:** [Raffy](https://apify.com/glasswing) (community)
- **Categories:** Lead generation, Automation, AI
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.50 / 1,000 company profiles

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?

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

### What does Company Profile by Domain do?

Company Profile by Domain turns a **list of company domains into firmographic rows**. Paste `monzo.com`, `https://www.hubspot.com/pricing` or `sales@apify.com` and get one row per company: **company name, legal name, description, industry, founding year, HQ city and country, LinkedIn company page, social accounts, tech stack, mail provider, SPF/DMARC** and, for UK companies, the **Companies House number, status, SIC codes and registered office**.

It works as a **company enrichment API** for CRMs, lead lists and AI agents: no API key, no login and no monthly plan. It reads the company's own homepage, public DNS, the public UK register and Wikidata over plain HTTP, so a domain takes about a second and a 1,000-domain batch costs $5.

It returns **company data only**. Founders, employees and contact people are never collected.

### Use cases for this company enrichment API

- **CRM and lead-list enrichment.** Turn the domain column of a CRM export or a CSV into industry, HQ country, LinkedIn page and tech stack.
- **Lead scoring and routing.** Route accounts by country or industry, or score them by tech stack and mail provider.
- **Sales prospecting by technology.** Find which prospects run a given CMS, analytics tool or chat widget.
- **KYB and supplier checks for UK companies.** Confirm the company behind a website is `Active` in Companies House before onboarding.
- **Email deliverability and security audits.** See the mail provider, SPF and DMARC policy for every domain in a list.
- **AI agents.** One call with a domain returns a compact, self-describing company profile.

### Use with AI agents

- Actor: `glasswing/company-profile-by-domain`
- README for LLMs: `https://apify.com/glasswing/company-profile-by-domain.md`
- MCP: `https://mcp.apify.com/?tools=glasswing/company-profile-by-domain`
- Minimal input: `{"startUrls": ["apify.com"]}` returns one company row in a few seconds.

### What data you get for every domain

| Field | Description |
|---|---|
| `domain` | The company domain, lower-case, without `www.` |
| `status` | `ok` (profile built, billed), `not_found` (domain does not exist, free) or `error` (no company could be identified, free) |
| `companyName` | Company or brand name from the site, else the UK register or Wikidata |
| `legalName` | Registered legal name (schema.org `legalName` or Companies House) |
| `description` | Company description from the site (max 1,000 characters, e-mails and phone numbers redacted) |
| `industry` | Sector label such as Software & IT, Financial services, Retail & e-commerce, Healthcare |
| `industrySource` | `uk-sic`, `schema.org`, `wikidata` or `keywords`: how the industry was decided |
| `foundedYear` | Founding or incorporation year |
| `employeeCount` | Employee count when the site or Wikidata publishes one |
| `hqAddress`, `hqCity`, `hqRegion` | Business address and HQ city/region |
| `hqCountry`, `hqCountryName` | HQ country (ISO code and English name) |
| `hqSource` | `schema.org`, `companies-house`, `wikidata` or `tld` |
| `logoUrl` | Company logo URL |
| `linkedinUrl` | LinkedIn **company** page linked from the site (never personal profiles) |
| `socialLinks` | Company accounts: twitter, facebook, instagram, youtube, tiktok, github, crunchbase, wikipedia |
| `websiteUrl`, `websiteTitle`, `language` | Final homepage URL, page title and language |
| `techStack` | Wappalyzer-style fingerprints: CMS, frameworks, analytics, e-commerce, chat widgets, marketing and payment tools, server |
| `cms`, `cdn` | Primary CMS/platform and the CDN in front of the site |
| `mailProvider`, `mxHosts` | Mail provider from MX records (Google Workspace, Microsoft 365, Proofpoint, Mimecast, ...) |
| `spfPresent`, `dmarcPolicy`, `emailSecurity` | SPF record and DMARC policy (`none`, `quarantine`, `reject`) |
| `ukCompanyNumber`, `ukCompanyStatus` | Companies House number and status when the company is matched |
| `ukCompany` | Company type, incorporation date, SIC codes, nature of business, registered office, `matchedBy` (`number-on-site` or `name-search`) and register URL |
| `wikidataId` | Wikidata item used to fill gaps, when there is one |
| `warnings` | Non-fatal problems, for example a homepage that answered HTTP 403 |
| `error` | Why a row is `not_found` or `error` |

#### Result status (tri-state output)

Every domain gives exactly one row. `ok` rows are billed. A domain that does not exist in DNS is `not_found`; a domain whose website cannot be read and that no source can name is `error`, still with its mail provider and DMARC columns filled. Parked and for-sale domains (redirects to HugeDomains, Sedo, Dan, Afternic, GoDaddy and similar, "this domain is for sale" pages, placeholder pages whose only name is the domain itself) are also `error` rows, so a lead list full of dead domains costs nothing. All of these are free.

### How to enrich company domains with this Actor

1. Open the Actor and paste your domains into **Company domains**, one per line. URLs and work e-mail addresses work too.
2. Leave **Match UK companies in Companies House** on if you want UK register data.
3. Set **Maximum results** and click **Start**.
4. Download the results as JSON, CSV or Excel, or read them from the API.

### Input

```json
{
    "startUrls": ["apify.com", "monzo.com", "hubspot.com"],
    "maxItems": 20,
    "includeUkRegistry": true
}
```

API and agent callers can send the same list as `domains`. Duplicates are removed and `www.` is stripped.

### Output

A real row from a run (trimmed):

```json
{
    "domain": "monzo.com",
    "status": "ok",
    "scrapedAt": "2026-10-26T15:41:08.570Z",
    "companyName": "Monzo Bank",
    "legalName": "MONZO BANK LIMITED",
    "description": "Making money work for everyone",
    "industry": "Financial services",
    "industrySource": "uk-sic",
    "foundedYear": 2015,
    "hqAddress": "Broadwalk House, 5 Appold St, London, EC2A 2AG",
    "hqCity": "London",
    "hqCountry": "GB",
    "hqCountryName": "United Kingdom",
    "hqSource": "schema.org",
    "logoUrl": "https://monzo.com/static/images/monzo-logo-stacked.svg",
    "linkedinUrl": "https://www.linkedin.com/company/monzo-bank",
    "socialLinks": {
        "twitter": "https://twitter.com/monzo",
        "facebook": "https://www.facebook.com/monzobank",
        "instagram": "https://www.instagram.com/monzo",
        "youtube": "https://www.youtube.com/monzobank",
        "wikipedia": "https://en.wikipedia.org/wiki/Monzo"
    },
    "websiteTitle": "Monzo | Open a Free Account",
    "language": "en-GB",
    "ukCompanyNumber": "09446231",
    "ukCompanyStatus": "Active",
    "ukCompany": {
        "companyNumber": "09446231",
        "companyName": "MONZO BANK LIMITED",
        "companyStatus": "Active",
        "companyType": "Private limited Company",
        "incorporationDate": "2015-02-18",
        "sicCodes": [
            "64191",
            "64999"
        ],
        "natureOfBusiness": [
            "64191 - Banks",
            "64999 - Financial intermediation not elsewhere classified"
        ],
        "registeredOfficeAddress": "Broadwalk House, 5 Appold Street, London, England, EC2A 2AG",
        "matchedBy": "number-on-site",
        "registerUrl": "https://find-and-update.company-information.service.gov.uk/company/09446231"
    },
    "websiteUrl": "https://monzo.com/",
    "techStack": {
        "cms": "Contentful",
        "frameworks": [
            "Next.js",
            "React"
        ],
        "other": [
            "Amazon CloudFront"
        ]
    },
    "cms": "Contentful",
    "cdn": "Amazon CloudFront",
    "mailProvider": "Google Workspace",
    "mxHosts": [
        "aspmx.l.google.com",
        "alt1.aspmx.l.google.com"
    ],
    "spfPresent": true,
    "dmarcPolicy": "reject"
}
```

### How much does it cost to enrich a company domain?

Pay per result: **$5 per 1,000 company profiles**. Rows with status `not_found` or `error` are free. Compute, DNS and register lookups are included; no proxy is needed.

| Event | Price | Charged when |
|---|---|---|
| `apify-actor-start` | $0.00005 | Once per run, when it starts. |
| `result` | $0.005 | Each company profile saved with status `ok`. |

| Domains | Cost |
|---|---|
| 100 | $0.50 |
| 1,000 | $5.00 |
| 10,000 | $50.00 |

The Actor stops gracefully when your run's maximum charge is reached.

### Integrations, exports and API access

Run it from the Apify API, the JavaScript or Python client, the Apify CLI or on a **Schedule**. Send the dataset to Google Sheets, Airtable, HubSpot, Make, n8n, Zapier or a webhook. AI agents can call it through the Apify MCP server.

### Limitations

- **Big consumer brands sometimes block datacenter visitors** (HTTP 403). The Actor then fills name, HQ and industry from Wikidata when the domain has a Wikidata item; otherwise the row is a free `error` row with the DNS and mail columns.
- **HQ city** is only as good as what the company publishes: schema.org markup on its site, the UK registered office, or Wikidata. A `tld` source means the country comes from a country-code domain only.
- **Industry** is a sector guess (about 20 labels), not a NAICS code. `uk-sic` is the most reliable source, `keywords` the least.
- **Companies House matching** uses the company number printed on the site, or an exact name match in the register search. It never guesses fuzzy matches, so some UK companies stay unmatched.
- No headcount ranges from LinkedIn, no revenue, no funding and no contact people.
- Results reflect the website and registers at the time of the run.

### FAQ

**Do I need an API key or an account with a data vendor?** No. The Actor reads the company's public homepage, public DNS, the public Companies House register and Wikidata.

**How fast is it?** About one second per domain, ten domains in parallel.

**Why did a domain come back as `error`?** The website blocked the request or names no organisation, and no other source knew the company. You are not billed for it. The `warnings` column says what happened.

**Does it return employees or contact e-mails?** No, by design. It returns company-level data only; e-mail addresses and phone numbers in descriptions are redacted.

**Can I enrich 10,000 domains?** Yes. Paste them (or send them through the API) and set **Maximum results** to at least that number.

**Can I use it from an AI agent or MCP client?** Yes. It runs with no input, accepts plain domain strings and every row explains itself with `status` and `error`.

**What if a site changes?** Rows degrade to fewer filled columns or a free `error` row, never to made-up values. Report problems in the **Issues** tab with the run ID.

### Related Actors

- [Domain Intelligence Report](https://apify.com/glasswing/domain-intelligence-report) - use it for a deep technical audit of a domain: DNS, TLS expiry, registrar, hosting and DKIM.
- [Companies House Scraper](https://apify.com/glasswing/companies-house-scraper) - use it for full UK register data: filing history, accounts and confirmation deadlines.
- [LinkedIn Company Scraper](https://apify.com/glasswing/linkedin-company-scraper) - use it to add LinkedIn industry, size and follower counts to the `linkedinUrl` this Actor finds.
- [LinkedIn Ad Library Scraper](https://apify.com/glasswing/linkedin-ad-library-scraper) - use it to see which ads a company is running on LinkedIn.
- [Google Maps Scraper](https://apify.com/glasswing/google-maps-scraper) - use it to build the list of local businesses and their websites to enrich here.
- [ATS Jobs Scraper](https://apify.com/glasswing/ats-jobs-scraper) - use it to see which of your accounts are hiring.
- [Website Screenshot API](https://apify.com/glasswing/website-screenshot-api) - use it to capture each company's homepage next to its profile.

If this Actor saved you time, a rating or a save helps others find it. Found a problem? Open an Issue, we reply within 24 h.

### Legal and data-protection notice

This Actor extracts company-level information that companies publish about themselves on their own websites and in public DNS, plus public records from the UK Companies House register (Open Government Licence v3.0) and Wikidata (CC0). It does not collect founders, employees, officers, persons with significant control or contact people, it redacts e-mail addresses and phone numbers found in descriptions, and it does not log in or work around access controls. A small business's address can still be a home address, so your results could contain personal data. Personal data is protected by the UK GDPR, the EU GDPR and other regulations around the world. You should not process personal data unless you have a legitimate reason to do so. If you are unsure whether your reason is legitimate, consult your lawyers. You are responsible for complying with the terms of the websites you look up and with applicable law when using the extracted data.

This Actor is an independent tool and is not affiliated with, endorsed by or sponsored by Companies House, Wikidata, LinkedIn or any company whose domain you look up. All trademarks belong to their respective owners.

# Changelog

This Actor's version history is a separate document: https://apify.com/glasswing/company-profile-by-domain/changelog.md

# Actor input Schema

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

One domain per line. Bare names (`monzo.com`), website URLs (`https://www.hubspot.com/pricing`) and work e-mail addresses (`sales@apify.com`) are all accepted and reduced to the domain; a leading `www.` is removed and duplicates are dropped. Every domain produces exactly one row. The API also accepts the alias `domains` (when sent, it replaces this list).

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

Stop after this many rows have been saved. Each row with status `ok` is one billable company profile; `not_found` and `error` rows are free.

## `includeUkRegistry` (type: `boolean`):

When the website states a UK company number, or says it is registered in England, Wales, Scotland or Northern Ireland, look the company up in the public Companies House register and add its number, status, type, incorporation date, SIC codes and registered office (`ukCompany`). Officers and persons with significant control are never read. Same price either way.

## Actor input object example

```json
{
  "startUrls": [
    "apify.com",
    "monzo.com",
    "hubspot.com"
  ],
  "maxItems": 20,
  "includeUkRegistry": true
}
```

# 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": [
        "apify.com",
        "monzo.com",
        "hubspot.com"
    ],
    "maxItems": 20,
    "includeUkRegistry": true
};

// Run the Actor and wait for it to finish
const run = await client.actor("glasswing/company-profile-by-domain").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": [
        "apify.com",
        "monzo.com",
        "hubspot.com",
    ],
    "maxItems": 20,
    "includeUkRegistry": True,
}

# Run the Actor and wait for it to finish
run = client.actor("glasswing/company-profile-by-domain").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": [
    "apify.com",
    "monzo.com",
    "hubspot.com"
  ],
  "maxItems": 20,
  "includeUkRegistry": true
}' |
apify call glasswing/company-profile-by-domain --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,glasswing/company-profile-by-domain"
        }
    }
}
```

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/XiYAWZTGO8jxZl47J/builds/aXsvsP02ges1Q4MUj/openapi.json
