# Company Lookup · Registry, Contacts, Tech Stack, Jobs, News (`agentsgearbox/company-lookup`) Actor

Give it a domain, get one row with everything public about the company: legal name and VAT validated against VIES, emails and phones, social profiles, tech stack, mail and DNS providers, open jobs, apps, latest news and Wikidata facts. No login, no proxies. $2.40 per 1,000; first 3 a month free.

- **URL**: https://apify.com/agentsgearbox/company-lookup.md
- **Developed by:** [AgentsGearbox](https://apify.com/agentsgearbox) (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 $1.44 / 1,000 company looked ups

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

## Company Lookup · registry, contacts, tech stack, jobs, news from a domain

Give it a domain, get one row with everything public about the company: the legal name and VAT number found on its own pages and validated against the EU's VIES service, emails and phones, social profiles, the tech it runs on, who handles its mail and DNS, how old the domain is, how many jobs are open on its applicant tracking system, which apps it publishes, the latest news about it and the Wikidata facts (founded, headquarters, employees, industry, Wikipedia summary). No login, no proxies, no third-party database: every field comes from a public source that is named in the output. Up to 1,000 companies per run. The first 3 companies each month are free for every account.

Built by [agentsgearbox](https://agentsgearbox.com). Questions: support@agentsgearbox.com.

### What you get

One `company` item per domain. A real row for `stripe.com`, shortened:

```json
{
  "domain": "stripe.com",
  "status": "OK",
  "name": "Stripe",
  "legalName": "Stripe, LLC",
  "description": "Stripe is a suite of APIs powering online payment processing and commerce solutions…",
  "country": "Ireland",
  "vat": null,
  "registrations": [],
  "emails": ["media@stripe.com", "notices@stripe.com", "lerequests@stripe.com"],
  "phones": [],
  "socials": { "x": "https://x.com/stripe", "youtube": "https://www.youtube.com/stripe", "linkedin": "https://www.linkedin.com/company/stripe", "github": "https://github.com/stripe", "crunchbase": "https://www.crunchbase.com/organization/stripe", "instagram": "https://www.instagram.com/stripe", "facebook": "https://www.facebook.com/StripeHQ" },
  "tech": [ { "name": "Next.js", "category": "framework" }, { "name": "Google Tag Manager", "category": "analytics" }, { "name": "nginx", "category": "server" } ],
  "platform": "Next.js",
  "dns": { "mailProvider": "Google Workspace", "dnsProvider": "Amazon Route 53", "spf": true, "spfIncludes": ["_spf.google.com", "…"], "dmarc": "reject", "verificationRecords": ["google-site-verification", "facebook-domain-verification"] },
  "registry": { "domain": "stripe.com", "created": "1995-09-12", "expires": "2027-09-11", "registrar": "SafeNames Ltd." },
  "hiring": { "careersUrl": "https://stripe.com/jobs", "ats": "Greenhouse", "openJobs": 732, "titles": ["Account Executive, Startups", "Backend Engineer, Payments", "…"], "detectedBy": "domain guess, verified against the board API" },
  "apps": { "ios": [ { "name": "Stripe Dashboard", "id": 978516833, "seller": "Stripe, Inc.", "rating": 4.8, "ratings": 24210, "url": "https://apps.apple.com/us/app/…" } ], "googlePlay": { "developerPage": null, "apps": 0 } },
  "news": [ { "title": "Polygon Labs completes Coinme acquisition to challenge Visa and Stripe", "source": "The Block", "published": "Fri, 17 Oct 2026 09:15:00 GMT", "link": "https://news.google.com/rss/articles/…" } ],
  "wikidata": { "id": "Q20751129", "label": "Stripe", "description": "Irish-American financial services and software company", "inception": "2010-01-01", "headquarters": "San Francisco", "country": "Ireland", "employees": 8000, "industry": ["financial technology"], "wikipedia": "https://en.wikipedia.org/wiki/Stripe,_Inc.", "wikipediaSummary": "Stripe, Inc. is an Irish-American multinational financial services…", "matchedBy": "official website" },
  "sectionsFound": ["identity", "contacts", "social", "tech", "dns", "hiring", "apps", "news", "wikidata"],
  "pagesFetched": 7,
  "fetchedAt": "2026-10-17T15:45:02.311Z"
}
```

For a company with a VAT number on its site (here `apify.com`), the identity block is validated:

```json
"legalName": "Apify Technologies s.r.o.",
"country": "Czechia",
"vat": { "number": "CZ04788290", "country": "CZ", "valid": true, "viesName": "Apify Technologies s.r.o.", "viesAddress": "Vodičkova 704/36, 110 00 Praha 1" },
"address": "Na Příkopě 959/27, 11000, Prague, CZ"
```

Flat fields for spreadsheets: `vatValid`, `socialCount`, `platform`, `mailProvider`, `domainCreated`, `ats`, `openJobs`, `iosApps`, `newsCount`, `employees`. Plus one free `summary` item per run and a free `error` item for domains that cannot be reached (`UNREACHABLE`) or are not valid domains.

### Where each field comes from

| Section | Source | Notes |
|---|---|---|
| Identity | JSON-LD `Organization` on the site, the imprint/legal/contact pages, VIES | VAT numbers are found with country-specific patterns (IT, DE, FR, ES, NL, GB and all EU formats) and validated live; registration numbers (Companies House, Handelsregister, REA, SIREN, KvK, EIN) are extracted as written on the page |
| Contacts | `mailto:` and `tel:` links, JSON-LD `contactPoint`, text of the contact and legal pages | Emails on the company's own domain are listed first; up to ten each |
| Social | links on the pages to 18 platforms | LinkedIn, X, Facebook, Instagram, YouTube, TikTok, GitHub, Threads, Bluesky, Telegram, Discord, Medium, Crunchbase, Product Hunt, Glassdoor, Pinterest, Mastodon, Trustpilot |
| Tech | response headers and script URLs | 60 fingerprints: shop platforms, CMS, frameworks, analytics, chat, payments, marketing, security, hosting and CDN |
| DNS and registry | DNS-over-HTTPS (MX, NS, TXT, DMARC), RDAP via the IANA registry list | Mail provider (Google Workspace, Microsoft 365, Zoho, Proton…), DNS provider, SPF includes, DMARC policy, domain creation date, registrar |
| Hiring | links on the careers page, then a verified guess by domain name | Greenhouse, Lever, Ashby, Workable, SmartRecruiters, Recruitee, Personio, BambooHR, Breezy counted through their public job APIs; Teamtailor, Workday, Jobvite, iCIMS detected without a count |
| Apps | Apple's iTunes Search API, Google Play developer page | iOS apps matched by seller name or developer URL |
| News | Google News RSS for the exact company name | Latest headlines with source and date; links are Google's redirect links (use our Google News Scraper for decoded URLs and text) |
| Wikidata | Wikidata search for the official website, then the entity's claims | Founded, headquarters, country, employees, industry, ticker, English Wikipedia summary |

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `domains` | string\[] | required | Company websites as domains or URLs, up to 1,000. |
| `sections` | string\[] | all nine | `identity`, `contacts`, `social`, `tech`, `dns`, `hiring`, `apps`, `news`, `wikidata`. Deselect to make runs faster. |
| `newsItems` | integer | `5` | Headlines per company (0 to 20). |
| `jobTitles` | integer | `10` | Open job titles to list; the total count is always included. |
| `validateVat` | boolean | `true` | Check EU VAT numbers against VIES. |
| `concurrency` | integer | `5` | Companies processed in parallel. |
| `timeoutSecs` | integer | `20` | Per-request timeout. |

### Pricing

**Try it free.** The first 3 companies each calendar month are free for every Apify account, with nothing to enter: the actor keeps count in a small key-value store in your account (`free-slice-company-lookup`) and charges only from the 4th on. The free results are real results you keep; the counter resets on the first of each month.

Pay per event: **$0.0024 per company** (`company`), that is $2.40 per 1,000 companies, 40% under the most used company-data actor on the Store. Summary and error records are free; a domain that cannot be reached costs nothing. Apify plans above Free get an automatic discount on every event (10% to 40%).

| Run | Cost |
|---|---|
| Enrich a 100-row lead list | $0.24 |
| Profile 1,000 prospect domains | $2.40 |
| Daily check of 50 competitors (jobs, news, tech changes) | $0.12 a day |

A company takes 5 to 15 seconds (15 to 25 small requests); 1,000 companies finish in about half an hour at the default concurrency.

### Example tasks

Ready-made configurations you can open, copy and run as they are:

- [Enrich a lead list of domains with full company profiles](https://apify.com/agentsgearbox/company-lookup/examples/enrich-a-lead-list-with-company-profiles): five well-known domains turned into full profiles, from a Shopify brand to companies with 700+ open jobs.

### Run it from your code

**Node.js**

```js
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('agentsgearbox/company-lookup').call({ domains: ['stripe.com', 'notion.so'], sections: ['identity', 'contacts', 'hiring', 'tech'] });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const c of items.filter((i) => i.type === 'company')) console.log(c.domain, c.legalName, c.openJobs, c.platform, c.emails[0]);
```

**Python**

```python
from apify_client import ApifyClient
client = ApifyClient(token=os.environ["APIFY_TOKEN"])
run = client.actor("agentsgearbox/company-lookup").call(run_input={"domains": ["apify.com"]})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    if item.get("type") == "company":
        print(item["name"], item["vat"], item["hiring"]["openJobs"], item["wikidata"]["employees"])
```

**cURL**

```bash
curl -s -X POST "https://api.apify.com/v2/acts/agentsgearbox~company-lookup/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H 'Content-Type: application/json' -d '{"domains":["stripe.com"]}'
```

### For AI agents

Give your agent hands. "Research this company" as a tool call: instead of fetching ten pages, three APIs and a registry and reasoning about each, the agent gets one verified row back, priced per company. Doing the same by hand takes a researcher ten to fifteen minutes per company; this actor returns it in about ten seconds for a quarter of a cent.

- **MCP, this actor only:** add `https://mcp.apify.com?tools=agentsgearbox/company-lookup` to Claude Desktop, Claude Code, Cursor or any MCP client (with your Apify token), then ask for "a profile of notion.so: legal entity, open jobs, tech stack and latest news".

* **MCP, all agentsgearbox actors:** `https://mcp.apify.com?tools=agentsgearbox/telegram-channel-scraper,agentsgearbox/google-play-reviews-scraper,agentsgearbox/substack-scraper,agentsgearbox/google-news-scraper,agentsgearbox/brand-name-generator,agentsgearbox/ai-readiness-audit,agentsgearbox/company-lookup,agentsgearbox/app-intelligence,agentsgearbox/app-store-reviews-scraper`

- **No Apify account?** This actor is eligible for Apify's agentic payments: an agent can buy a spend-capped token through [agi.apify.com](https://agi.apify.com) (x402, MPP or Skyfire) and call the API directly.
- Prices are per result and known in advance; unreachable domains come back as free error records instead of failed runs.

### Reading the results

- `status` is `OK`, `BOT_PROTECTED` (the site challenged a plain client; DNS, registry, news, apps and Wikidata still work, the site-derived sections are thin) or `HTTP_<code>`. Inputs that cannot be looked up are free `error` rows: `INVALID` (not a domain, an e-mail address, a local host) or `UNREACHABLE`. The same host in several spellings (`https://www.example.com/pricing`, `example.com`, `EXAMPLE.COM`) is looked up and charged once.
- `name` prefers the JSON-LD organization name, then Wikidata, then the site's own title; `legalName` comes from JSON-LD or VIES only, never guessed.
- `vat.valid` is `true` or `false` from VIES; `null` means the number could not be checked (VIES down or validation disabled). Some member states (Germany among them) do not publish the registered name, so `viesName` can be empty for a valid number.
- `hiring.detectedBy` tells you whether the job board was linked from the site or found by trying the company's name on the common boards and verifying the API answered.
- `news` uses the exact company name as the query; short or generic names produce unrelated headlines, so check `name` first.
- `sectionsFound` lists which sections returned data, so you can filter rows before paying attention to them.

### Limitations, stated plainly

- Everything comes from public pages and free registries. There is no email guessing, no LinkedIn scraping and no paid data behind it; if a company does not publish a phone number, you will not get one.
- Company registries other than VIES (Companies House, Handelsregister, OpenCorporates) need API keys and are not queried; their numbers are extracted from the site's own legal pages when present.
- Sites behind aggressive bot protection return `BOT_PROTECTED` with the sections that do not depend on the site.
- Tech detection recognises 60 common tools by their script URLs and headers; it is a fingerprint, not a full BuiltWith report.

### Troubleshooting

| Symptom | Cause | Fix |
|---|---|---|
| Wrong company in `wikidata` | Several Wikidata entities can share an official website; the actor keeps those whose website matches the domain and takes the best-described one (most Wikipedia sitelinks). When Wikidata lists several countries, `country` is the preferred one or the headquarters' country and `wikidata.countries` lists them all | Check `wikidata.matchedBy`; `official website` is reliable, `name search` should be verified |
| `openJobs: null` with an `ats` name | The board has no public API (Teamtailor, Workday, Jobvite, iCIMS) | The careers URL is still returned; count manually or request support for that board |
| Empty `emails` | The site exposes contact forms only | Nothing to fix; the actor never guesses addresses |
| `BOT_PROTECTED` | Cloudflare, Akamai or similar challenged the request | DNS, registry, Wikidata, news and apps are still returned |

### More from agentsgearbox

- [Telegram Channel Scraper](https://apify.com/agentsgearbox/telegram-channel-scraper): public Telegram channels as JSON, no API key.
- [Google Play Reviews Scraper](https://apify.com/agentsgearbox/google-play-reviews-scraper): Google Play reviews with replies and versions, any market.
- [Substack Scraper](https://apify.com/agentsgearbox/substack-scraper): Substack posts with full text and comments, custom domains too.
- [Google News Scraper](https://apify.com/agentsgearbox/google-news-scraper): Google News with real publisher URLs and full text.
- [Brand & Business Name Generator](https://apify.com/agentsgearbox/brand-name-generator): brand names verified live on domains, handles and app stores.
- [AI Readiness Audit](https://apify.com/agentsgearbox/ai-readiness-audit): how well AI search engines and agents can read a site: crawler access, llms.txt, structured data, content without JavaScript, scored with fixes.
- [App Intelligence](https://apify.com/agentsgearbox/app-intelligence): App Store and Google Play in one run: search, top charts, full app details and each app's twin on the other store.
- [App Store Reviews Scraper · iOS + Google Play, Any Country](https://apify.com/agentsgearbox/app-store-reviews-scraper): Reviews of any iOS or Android app from both stores in one run: stars, text, version, votes, developer replies, since-last-run checkpoint, rating trend per app..

All of them are pay-per-event, run without a browser, and are compared with their alternatives on [agentsgearbox.com](https://agentsgearbox.com/actors/).

### Support

Email support@agentsgearbox.com or use the issues tab. Compare this actor with alternatives on [agentsgearbox.com](https://agentsgearbox.com).

# Actor input Schema

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

Company websites, one per line, as domains or URLs (up to 1,000). Each company takes 15 to 25 small requests: the homepage and a few of its pages (contact, about, legal), DNS and registry lookups, the company's job board, the app stores, Google News and Wikidata.

## `sections` (type: `array`):

Leave all selected for the full profile; deselect sections you do not need to make runs faster.

## `newsItems` (type: `integer`):

Latest Google News headlines mentioning the company name (title, source, date, link).

## `jobTitles` (type: `integer`):

How many open job titles to include when the company's job board is detected. The total count is always included.

## `validateVat` (type: `boolean`):

When a VAT number is found on the site, check it with the European Commission's VIES service and return the registered name and address where the member state publishes them.

## `concurrency` (type: `integer`):

Lower it if you look up many domains on the same hosting provider.

## `timeoutSecs` (type: `integer`):

Maximum time to wait for each request.

## Actor input object example

```json
{
  "domains": [
    "stripe.com",
    "https://www.apify.com",
    "openai.com"
  ],
  "sections": [
    "identity",
    "contacts",
    "social",
    "tech",
    "dns",
    "hiring",
    "apps",
    "news",
    "wikidata"
  ],
  "newsItems": 5,
  "jobTitles": 10,
  "validateVat": true,
  "concurrency": 5,
  "timeoutSecs": 20
}
```

# Actor output Schema

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

One item per company (identity, contacts, socials, tech, hiring, apps, news, Wikidata) plus one free summary item.

# 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": [
        "stripe.com",
        "https://www.apify.com",
        "openai.com"
    ],
    "sections": [
        "identity",
        "contacts",
        "social",
        "tech",
        "dns",
        "hiring",
        "apps",
        "news",
        "wikidata"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("agentsgearbox/company-lookup").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": [
        "stripe.com",
        "https://www.apify.com",
        "openai.com",
    ],
    "sections": [
        "identity",
        "contacts",
        "social",
        "tech",
        "dns",
        "hiring",
        "apps",
        "news",
        "wikidata",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("agentsgearbox/company-lookup").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": [
    "stripe.com",
    "https://www.apify.com",
    "openai.com"
  ],
  "sections": [
    "identity",
    "contacts",
    "social",
    "tech",
    "dns",
    "hiring",
    "apps",
    "news",
    "wikidata"
  ]
}' |
apify call agentsgearbox/company-lookup --silent --output-dataset

```

## MCP server setup

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

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/FwKfizvHrLoDCLXwx/builds/XhDe6Xl7r4WvQO4qa/openapi.json
