# Company 360: full company profile from a domain (`webdatatools/company-360`) Actor

Company 360 turns a domain into one rich profile row: contacts, tech stack, DNS/e-mail security, TLS/security headers, on-page SEO, hiring signals and company facts (HQ, employees, revenue, founders) merged from our own scraper suite.

- **URL**: https://apify.com/webdatatools/company-360.md
- **Developed by:** [Murat Uzun](https://apify.com/webdatatools) (community)
- **Categories:** Lead generation, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $30.00 / 1,000 companies

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

### What is Company 360?

Company 360 is an Apify Actor that turns **one domain into one rich company profile row** — the research a sales rep, recruiter or analyst would otherwise assemble from six separate tools. Give it `apify.com` and it returns contacts (e-mails, phones, socials), tech stack (CMS, e-commerce, analytics, ad pixels, chat, payments), DNS/e-mail security (SPF, DMARC, mail provider, registrar, domain age), TLS and HTTP security headers, an on-page SEO score, hiring signals (open jobs, hiring velocity) and company facts (HQ, employee count, revenue, founders, founding date, Crunchbase/LinkedIn IDs) — all merged into **one flat, scored row**. Under the hood it orchestrates our own published web-intelligence Actors with `Actor.call()` and inlines the two cheapest-to-run checks itself, so you never touch six different tools or six different bills.

### What data does Company 360 extract?

Company 360 extracts 41 fields per domain across seven independently toggleable sections:

| Field group | Fields | Description |
| --- | --- | --- |
| Identity | `domain`, `websiteUrl`, `companyName`, `description` | Normalised domain, `https://` URL, best-guess name and one-line description |
| Contacts | `emails`, `phones`, `socials`, `linkedinUrl`, `twitterUrl`, `facebookUrl`, `instagramUrl`, `youtubeUrl` | Found on the homepage plus one guessed contact page, or from Wikidata when the site itself has none |
| Tech stack | `cms`, `ecommercePlatform`, `analytics`, `adPixels`, `chatWidget`, `paymentProviders`, `technologyCount` | From our Tech Stack Detector |
| DNS & e-mail security | `emailProvider`, `dnsProvider`, `spfPolicy`, `dmarcPolicy`, `emailSecurityGrade`, `registrar`, `domainAgeDays` | Computed in-process (no sub-Actor call) |
| Security audit | `tlsValid`, `tlsDaysUntilExpiry`, `securityGrade`, `securityScore` | From our Domain Security Audit |
| SEO | `seoScore`, `seoIssues` | From our On-Page SEO Audit |
| Hiring signals | `openJobs`, `hiringVelocity`, `topDepartments` | From our Hiring Signals Actor, matched by the domain's bare label against public ATS boards |
| Company facts | `industries`, `headquarters`, `country`, `employees`, `revenue`, `founders`, `foundedAt`, `crunchbaseId`, `wikidataQid` | From our Wikidata Entity Enrichment Actor |
| Meta | `profileCompleteness`, `warnings`, `error`, `scrapedAt` | 0-100 completeness score, one warning line per section that found nothing, and the check timestamp |

### How to use Company 360

1. Paste your company domains into **Domains** — bare domains or full URLs both work.
2. Leave all seven **Include...** toggles on for a full profile, or turn off the sections you do not need to make the run cheaper.
3. Click **Start**. Each domain fans out to several checks in parallel, so a single profile typically finishes in under a minute.
4. Export the dataset as JSON, CSV, Excel or HTML, or read it back over the API.

### Example input

```json
{
    "domains": ["apify.com", "stripe.com"],
    "includeContacts": true,
    "includeTechStack": true,
    "includeEmailSecurity": true,
    "includeSecurityAudit": true,
    "includeHiring": true,
    "includeCompanyFacts": true,
    "includeSeo": true,
    "maxConcurrency": 1
}
```

### Example output

```json
{
    "domain": "apify.com",
    "websiteUrl": "https://apify.com",
    "companyName": "Apify",
    "description": "Thousands of tools to automate your business...",
    "emails": ["support@apify.com", "hello@apify.com"],
    "socials": { "linkedin": ["https://linkedin.com/company/apify"], "twitter": ["https://x.com/apify"] },
    "cms": null,
    "analytics": ["Google Tag Manager"],
    "chatWidget": "Intercom",
    "technologyCount": 6,
    "emailProvider": "Google Workspace",
    "dnsProvider": "Amazon Route 53",
    "spfPolicy": "-all",
    "dmarcPolicy": "reject",
    "emailSecurityGrade": "A",
    "registrar": "Amazon Registrar, Inc.",
    "domainAgeDays": 6311,
    "tlsValid": true,
    "securityGrade": "A",
    "securityScore": 90,
    "seoScore": 100,
    "headquarters": "Prague",
    "country": "Czech Republic",
    "employees": 66,
    "revenue": 298000000,
    "foundedAt": "2016-02-15",
    "wikidataQid": "Q112502991",
    "profileCompleteness": 86,
    "warnings": [],
    "error": null,
    "scrapedAt": "2026-09-13T00:21:12.652Z"
}
```

### Input parameters

| Parameter | Type | Default | Description |
| --- | --- | --- | --- |
| `domains` | array | `["apify.com"]` | Company domains to profile, one row each |
| `includeContacts` | boolean | `true` | Homepage + contact-page e-mails, phones, socials |
| `includeTechStack` | boolean | `true` | Call Tech Stack Detector |
| `includeEmailSecurity` | boolean | `true` | SPF/DMARC/registrar/domain age, computed directly |
| `includeSecurityAudit` | boolean | `true` | Call Domain Security Audit |
| `includeHiring` | boolean | `true` | Call Hiring Signals |
| `includeCompanyFacts` | boolean | `true` | Call Wikidata Entity Enrichment |
| `includeSeo` | boolean | `true` | Call On-Page SEO Audit |
| `maxConcurrency` | integer | `1` | Domains prepared in parallel (1-5). Sub-Actor calls are globally capped at 3 in flight regardless of this setting. |

### Pricing

Company 360 is pay-per-event: **$0.05 per company profile, i.e. $50 per 1,000 companies**. That price has to cover what the profile costs us to build, so we measured it directly: calling our own published Actors for tech stack, security audit, hiring signals, company facts and SEO costs roughly **$0.015-0.017 per company** in their pay-per-event charges (tech stack $0.005, security audit $0.005, SEO $0.002, company facts $0.001, hiring $0.002-0.004 — occasionally two rows come back when a bare company label coincidentally matches more than one public ATS board), plus a fraction of a cent in actor-start fees. Contacts and DNS/e-mail security are **not** sub-Actor calls — their logic is inlined directly into this Actor (see "How this Actor is built" below) specifically to keep the total under the ~$0.02 budget a $0.05 sell price allows; calling contact-extractor ($0.01/row) and dns-email-security-checker ($0.005/row) as separate Actors would have added another $0.015 and eaten most of the margin. Turn off sections you do not need with the `include...` flags to spend less on domains where, say, hiring data does not matter.

### How this Actor is built

Company 360 calls five of our own published Actors with `Actor.call()` — **Tech Stack Detector**, **Domain Security Audit**, **Hiring Signals**, **Wikidata Entity Enrichment** and **On-Page SEO Audit** — running them in parallel per domain. Contacts and DNS/e-mail security are **inlined**: their regex extraction and DNS-over-HTTPS/RDAP logic live directly in this Actor's own code (scoped down to a homepage-plus-one-page fetch and an SPF/DMARC/MX/RDAP-only DNS check, rather than a full site crawl or a DKIM/MTA-STS/BIMI/CAA audit), so no separate Actor charge applies to them. Every section — inlined or called — is wrapped in its own error handler: a timeout, a failed sub-Actor run, or a domain with no matching data leaves that section's fields `null` and appends one line to `warnings[]`. The row is always produced, and `profileCompleteness` tells you at a glance how much of it filled in.

Sub-Actor calls are throttled through a single global limiter shared across every domain in the run — **at most 3 in flight at any time**, regardless of how many domains `maxConcurrency` prepares in parallel. That keeps this parent run plus its children under the platform's 5-concurrent-Actor-run cap (the same cap free-plan customers have on their own accounts). If a call still hits that limit — e.g. because other runs are active on the account — it is retried automatically after 5 seconds, then again after 15 seconds, before giving up and recording a `warnings[]` entry; the row is still produced either way.

### Company 360 vs. buying contact, tech-stack and security data separately

Buying an e-mail-finder subscription, a tech-stack/BuiltWith-style tool and a security-scanning service separately means three logins, three exports and a manual join on domain name — often at $0.01-0.03 per lookup each, before you even add hiring or firmographic data. Company 360 returns all of it, already joined, in one dataset row, at a single price. It is not a replacement for a dedicated deep-dive tool on any one axis — the sections that call our specialist Actors are, deliberately, a lighter pass than running that Actor directly (see the specific Actors below for full depth on any one section) — but for a first-pass company profile at lead-gen or account-research scale, one row beats six exports.

### Using Company 360 with AI agents and MCP

Company 360 is pay-per-event with limited permissions, so it is callable through the Apify MCP server at `mcp.apify.com` like any of our other Actors. An agent building a company dossier passes `domains` and gets back one structured JSON object per company — no HTML to parse, no six-tool orchestration of its own to write. It works the same way from n8n, Make, Zapier or a LangChain/LlamaIndex tool call.

### FAQ

**Why is a field null even though `includeX` was true?** That section's sub-Actor call failed, timed out, or found nothing for that domain — check `warnings[]` for the reason. The row is still produced; only that section is empty.

**Why does `hiringVelocity` come back null for most domains?** Hiring Signals is matched by the bare second-level label of the domain (`apify` for `apify.com`) against ~10 public ATS boards. Most companies do not run a job board under exactly that slug, so a miss here is normal, not a bug — it shows up as a `hiring:` warning, not an `error`.

**How is `profileCompleteness` calculated?** The share of enabled sections (of the seven `include...` flags) that returned usable data, rounded to the nearest whole percent.

**Is this legal to run?** Yes — it reads only public website content, public DNS/RDAP records and public job boards, and calls Actors that do the same.

**Can I export to CSV or Excel?** Yes, from the Output tab or the API.

### Related Actors

Part of the **webdatatools** web-intelligence suite — every Actor is pay-per-event, runs without
proxies or a headless browser, and returns one clean row per entity:

Browse the whole suite at [webdatatools](https://paulet4a-commits.github.io/webdatatools/), or call ten of
these Actors straight from Claude, Cursor or Cline with the
[webdatatools MCP server](https://github.com/paulet4a-commits/webdatatools-mcp-server).

**Website & domain intelligence**

- [Website Contact & Social Extractor](https://apify.com/webdatatools/contact-extractor) — e-mails, phones and social profiles per domain
- [Website Tech Stack Detector](https://apify.com/webdatatools/tech-stack-detector) — CMS, e-commerce, analytics, pixels and payments per domain
- [Domain DNS & Email Security Checker](https://apify.com/webdatatools/dns-email-security-checker) — SPF, DKIM, DMARC, MX provider, registrar and domain age
- [Domain Security Audit](https://apify.com/webdatatools/domain-security-audit) — TLS expiry, security headers, redirect chain, robots and llms.txt
- [Subdomain Finder (Certificate Transparency)](https://apify.com/webdatatools/subdomain-finder) — every subdomain seen in CT logs, with a live DNS check
- [Bulk Core Web Vitals & PageSpeed Audit](https://apify.com/webdatatools/core-web-vitals-audit) — Lighthouse scores, LCP, CLS, INP and top fixes per URL
- [On-Page SEO Audit](https://apify.com/webdatatools/seo-page-audit) — title, meta, headings, links, images and schema issues per page
- [Sitemap URL Extractor & Change Monitor](https://apify.com/webdatatools/sitemap-extractor) — every sitemap URL, or new and removed pages between runs
- [Wayback Machine Snapshot & Page Change Tracker](https://apify.com/webdatatools/wayback-page-diff) — how a page changed over time, or every archived snapshot

**Content for AI, LLMs and RAG**

- [AI Web Search & Read](https://apify.com/webdatatools/ai-web-search) — a query turned into clean Markdown from the top search results
- [Website to Markdown Crawler for LLM & RAG](https://apify.com/webdatatools/website-to-markdown) — any site as clean Markdown per page, no browser
- [Article & News Extractor](https://apify.com/webdatatools/article-extractor) — clean article text, author, date and Markdown per URL
- [Structured Data & JSON-LD Extractor](https://apify.com/webdatatools/structured-data-extractor) — Schema.org and Open Graph data from any page
- [Google News Scraper](https://apify.com/webdatatools/google-news-scraper) — news results by keyword, topic or site
- [Press Release Monitor](https://apify.com/webdatatools/press-release-monitor) — PR Newswire, Business Wire and GlobeNewswire releases

**Search, video and social**

- [Google Search Results Scraper](https://apify.com/webdatatools/google-search-scraper) — organic SERP results per keyword and country
- [YouTube Comments Scraper](https://apify.com/webdatatools/youtube-comments-scraper) — comments and replies with likes, no API key
- [YouTube Channel Latest Videos](https://apify.com/webdatatools/youtube-channel-videos) — the latest 15 videos of any channel from RSS
- [YouTube Channel Videos Scraper](https://apify.com/webdatatools/youtube-channel-scraper) — a channel's full video, shorts and stream list
- [YouTube Search Results Scraper](https://apify.com/webdatatools/youtube-search-scraper) — videos, channels and playlists per query
- [YouTube Video Details Scraper](https://apify.com/webdatatools/youtube-video-details) — views, likes, description, tags and chapters per video
- [Apple Podcasts Lookup & Episodes Scraper](https://apify.com/webdatatools/podcast-lookup) — podcast metadata and episodes from iTunes and RSS
- [Bluesky Scraper](https://apify.com/webdatatools/bluesky-scraper) — posts, profiles, followers and threads from the AT Protocol API

**Leads, jobs and company data**

- [Hiring Signals Scraper](https://apify.com/webdatatools/hiring-signals) — open jobs and hiring velocity from 10 public ATS boards
- [Y Combinator Companies & Founders Scraper](https://apify.com/webdatatools/yc-companies-scraper) — YC startups by batch, industry and hiring status
- [Wikidata Entity & Company Enrichment](https://apify.com/webdatatools/wikidata-entity-enrichment) — HQ, founders, employees, revenue and social IDs per company
- [Bulk Email Validator](https://apify.com/webdatatools/email-validator) — syntax, MX, disposable, role and free-provider checks
- [OpenStreetMap POI Extractor](https://apify.com/webdatatools/overpass-poi-extractor) — shops and amenities by radius, bbox or area

**Developer, app and research data**

- [npm, PyPI & Crates.io Package Health Checker](https://apify.com/webdatatools/package-health-checker) — releases, downloads, deprecation and a health score
- [GitHub Repository Health & Activity Report](https://apify.com/webdatatools/github-repo-health) — stars, commits, contributors and risk flags per repo
- [VS Code Marketplace Extension Scraper](https://apify.com/webdatatools/vscode-marketplace-extensions) — installs, ratings and versions per extension
- [Chrome Web Store Extension Scraper](https://apify.com/webdatatools/chrome-web-store-extensions) — users, rating, version and developer per extension
- [Google Play Store Scraper](https://apify.com/webdatatools/google-play-scraper) — apps, ratings, installs, developer contact and reviews
- [App Store (iOS) App Metadata & Top Charts](https://apify.com/webdatatools/app-store-lookup) — ratings, price, version and charts per app
- [CrossRef DOI & Citation Metadata Lookup](https://apify.com/webdatatools/crossref-doi-lookup) — papers, authors, journals and citation counts
- [FDA Recalls & Adverse Events Monitor](https://apify.com/webdatatools/openfda-recall-monitor) — food, drug and device recalls from openFDA
- [iCal / ICS Calendar Feed to Events Extractor](https://apify.com/webdatatools/ical-calendar-extractor) — any public calendar feed as event rows
- [Shopify Store Products Scraper](https://apify.com/webdatatools/shopify-products-scraper) — catalog, prices, variants and stock per store

### Support and feedback

Found a company where a section should have matched but did not, or a merge that looks wrong? Open an issue on the **Issues** tab.

# Actor input Schema

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

Enter the company domains to profile, one row is returned per domain, e.g. apify.com. Full URLs and www. prefixes are accepted and stripped automatically, so you can paste a list straight out of your CRM.

## `includeContacts` (type: `boolean`):

Fetch the homepage (and a common contact-page guess) for e-mail addresses, phone numbers and social-profile links.

## `includeTechStack` (type: `boolean`):

Call our Tech Stack Detector Actor for CMS, e-commerce platform, analytics, ad pixels, chat widget and payment providers.

## `includeEmailSecurity` (type: `boolean`):

Look up SPF/DMARC policy, mail provider, DNS provider, registrar and domain age directly (no sub-Actor call).

## `includeSecurityAudit` (type: `boolean`):

Call our Domain Security Audit Actor for TLS certificate validity/expiry and a 0-100 security grade based on HTTP security headers.

## `includeHiring` (type: `boolean`):

Call our Hiring Signals Actor for open job counts and hiring velocity. Only returns data when the domain's ATS job board could be found under its own name (e.g. a Greenhouse/Lever/Ashby board named after the company) - most domains will not match and get a warning instead, not an error.

## `includeCompanyFacts` (type: `boolean`):

Call our Wikidata Entity Enrichment Actor for headquarters, employee count, revenue, founders, founding date and Crunchbase/LinkedIn IDs. Works best for companies with a Wikidata entry.

## `includeSeo` (type: `boolean`):

Call our On-Page SEO Audit Actor for the home page's 0-100 SEO score and a list of issues found.

## `maxConcurrency` (type: `integer`):

Enter how many domains to prepare in parallel, e.g. 1. This only controls how many domains are worked on at once — sub-Actor calls (tech stack, security audit, hiring, company facts, SEO) are globally capped at 3 in flight at any time regardless of this setting, to stay under the platform's concurrent-Actor-run limit.

## Actor input object example

```json
{
  "domains": [
    "apify.com",
    "stripe.com"
  ],
  "includeContacts": true,
  "includeTechStack": true,
  "includeEmailSecurity": true,
  "includeSecurityAudit": true,
  "includeHiring": true,
  "includeCompanyFacts": true,
  "includeSeo": true,
  "maxConcurrency": 1
}
```

# Actor output Schema

## `domains` (type: `string`):

All profiled companies — download as JSON, CSV, Excel or HTML.

# 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",
        "stripe.com"
    ],
    "includeContacts": true,
    "includeTechStack": true,
    "includeEmailSecurity": true,
    "includeSecurityAudit": true,
    "includeHiring": true,
    "includeCompanyFacts": true,
    "includeSeo": true,
    "maxConcurrency": 1
};

// Run the Actor and wait for it to finish
const run = await client.actor("webdatatools/company-360").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",
        "stripe.com",
    ],
    "includeContacts": True,
    "includeTechStack": True,
    "includeEmailSecurity": True,
    "includeSecurityAudit": True,
    "includeHiring": True,
    "includeCompanyFacts": True,
    "includeSeo": True,
    "maxConcurrency": 1,
}

# Run the Actor and wait for it to finish
run = client.actor("webdatatools/company-360").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",
    "stripe.com"
  ],
  "includeContacts": true,
  "includeTechStack": true,
  "includeEmailSecurity": true,
  "includeSecurityAudit": true,
  "includeHiring": true,
  "includeCompanyFacts": true,
  "includeSeo": true,
  "maxConcurrency": 1
}' |
apify call webdatatools/company-360 --silent --output-dataset

```

## MCP server setup

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

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/BbeJDj8MzLbIfg0hM/builds/XFJiFnRYjebRiPpsd/openapi.json
