# Company Website Enricher: Tech Stack, Emails & Socials (`pandadad0214/company-website-enricher`) Actor

Use this to enrich a list of company domains in one run: company name, description, public emails and phones, LinkedIn and social links, tech stack (CMS, analytics, CRM, ads, chat), mail provider, SaaS tools seen in DNS and domain age. Excel and CSV.

- **URL**: https://apify.com/pandadad0214/company-website-enricher.md
- **Developed by:** [Panda Federation](https://apify.com/pandadad0214) (community)
- **Categories:** Lead generation, Developer tools, Marketing
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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 Website Enricher: Tech Stack, Emails & Socials

> **Enrich a list of company domains in one run.** For every domain you get the **company name and description**, **public emails and phone numbers**, **LinkedIn and social links**, the **tech stack** (CMS, e-commerce, analytics, CRM and marketing automation, ad pixels, chat, payments, CDN), the **mail provider**, **SaaS tools the company has verified in DNS** (Microsoft 365, Atlassian, DocuSign, Stripe…), **email-sending tools** and **domain age**, exported to Excel, CSV and JSON. Apify's free plan includes $5 of monthly platform credit, enough for about 1,600 domains at $0.003 each (pricing below).

**One cheap pass that replaces a BuiltWith lookup, a contact-scraper run and a WHOIS check.**

Most enrichment tools do one thing: a tech-stack detector, an email scraper, or a WHOIS lookup, each priced separately. **Company Website Enricher** reads the company's own home page plus a few contact/about pages (robots.txt respected), public DNS and RDAP, and returns one clean row per domain:

- 🏢 **Company basics:** name, description, address (when published in structured data), site language, latest copyright year (is the site maintained?)
- 📇 **Contacts the company publishes:** emails (own-domain first), phone numbers, LinkedIn company page, X, Facebook, Instagram, YouTube, TikTok, GitHub, Pinterest
- 🧰 **Tech stack (about 150 fingerprints):** WordPress, Shopify, Webflow, Wix, HubSpot, Marketo, Pardot, Klaviyo, Intercom, Drift, Zendesk, Google Analytics, Segment, Hotjar, Meta Pixel, LinkedIn Insight Tag, Stripe, OneTrust, Cloudflare, Vercel, Next.js…, grouped by category
- 📬 **Mail provider** from MX records (Google Workspace, Microsoft 365, Zoho…) and **email-sending tools** from SPF (HubSpot, Salesforce, SendGrid, Mailchimp…)
- ✅ **SaaS verified in DNS:** domain-verification records reveal tools like Atlassian, DocuSign, Stripe, Zoom, Miro, Figma, OpenAI, Okta and 50 more
- 📅 **Domain age, creation and expiry dates, registrar** via RDAP (the official WHOIS successor)
- 🎯 **Filters:** only sites using given tech (e.g. Shopify + Klaviyo), only with an email, only with a phone. Filtered-out domains are free
- 📊 **Excel + CSV export** with a Technologies sheet (one row per domain and technology)
- 💸 **$0.003 per domain returned.** 1,000 domains cost $3.00. Unreachable sites cost nothing

### Who it's for

- **Sales and SDR teams:** qualify accounts by stack ("uses HubSpot, not Salesforce"), find the right contact channel and LinkedIn page
- **Agencies and SaaS founders:** build lists of sites using a competitor or a platform you integrate with (Shopify apps, WordPress plugins, Klaviyo partners)
- **Lead-gen freelancers (Fiverr / Upwork):** turn a raw domain list into an enriched spreadsheet in minutes
- **Investors and analysts:** quick due diligence on a list of companies: stack, maturity, domain age
- **CRM hygiene:** fill in missing company names, descriptions, socials and phone numbers

### How to use it

1. Click **Try for free**.
2. Paste **domains** (or website URLs or emails), one per line.
3. Optional: **only sites using** certain technologies, **only with email / phone**, and how many **extra pages** to read.
4. Click **Start**. 100 domains take about one to two minutes. Download **ENRICHED_XLSX** or **ENRICHED_CSV** from **Storage → Key-value store**, or use the dataset via API.

#### Input example

```json
{
  "domains": ["glossier.com", "allbirds.com", "basecamp.com", "https://www.notion.so"],
  "onlyWithTech": ["Shopify", "Klaviyo"],
  "onlyWithEmail": true
}
```

### Task examples

- **Shopify stores using Klaviyo:** a list of store domains + `onlyWithTech: ["Shopify"]`; sort by `techStack` to spot Klaviyo, Gorgias, Yotpo.
- **HubSpot vs Salesforce accounts:** your target accounts + `onlyWithTech: ["HubSpot", "Salesforce", "Marketo", "Pardot"]`.
- **Clean up a CRM export:** domains of records missing data; use `companyName`, `description`, `linkedinUrl`, `phones`.
- **Find old, unmaintained sites to pitch a redesign:** filter `copyrightYear` < 2023 and `cms` = WordPress / Wix.
- **Chain with Company Hiring Signals:** enrich the companies that are hiring right now.

### Output example

One row per domain. A real row from a test run:

```json
{
  "domain": "glossier.com",
  "companyName": "Glossier",
  "description": "Glossier",
  "primaryEmail": "brand@glossier.com",
  "emails": [
    "brand@glossier.com",
    "gteam@glossier.com",
    "press@glossier.com"
  ],
  "phones": [],
  "linkedinUrl": null,
  "socials": {
    "facebook": "https://www.facebook.com/glossier",
    "instagram": "https://www.instagram.com/glossier",
    "tiktok": "https://www.tiktok.com/@glossier"
  },
  "address": null,
  "cms": "Shopify",
  "techStack": [
    "Shopify",
    "Google Tag Manager",
    "Klaviyo",
    "Gorgias",
    "OneTrust",
    "Optimizely",
    "Vimeo",
    "Cloudflare"
  ],
  "techByCategory": {
    "Ecommerce": [
      "Shopify"
    ],
    "Analytics": [
      "Google Tag Manager"
    ],
    "Email marketing": [
      "Klaviyo"
    ],
    "Chat & support": [
      "Gorgias"
    ],
    "Cookie consent": [
      "OneTrust"
    ],
    "A/B testing": [
      "Optimizely"
    ],
    "Video": [
      "Vimeo"
    ],
    "CDN & hosting": [
      "Cloudflare"
    ]
  },
  "techCount": 8,
  "mailProvider": "Google Workspace",
  "emailSendingTools": [],
  "verifiedServices": [
    "Shopify",
    "Google Search Console",
    "Stripe",
    "Anthropic",
    "Amazon SES",
    "DocuSign",
    "Dropbox",
    "Atlassian (Jira/Confluence)",
    "Zoom",
    "Miro",
    "Klaviyo",
    "Apple"
  ],
  "domainCreated": "2012-09-24",
  "domainAgeYears": 14.1,
  "domainExpires": "2027-09-24",
  "registrar": "CSC Corporate Domains, Inc.",
  "copyrightYear": 2026,
  "language": "en",
  "finalUrl": "https://www.glossier.com/",
  "status": "enriched",
  "agentSummary": "glossier.com: Glossier; site on Shopify; 8 technologies: Shopify, Google Tag Manager, Klaviyo, Gorgias, OneTrust, Optimizely; email brand@glossier.com; socials: facebook, instagram, tiktok; mail by Google Workspace; uses Shopify, Google Search Console, Stripe, Anthropic, Amazon SES; domain 14.1 yrs old"
}
```

#### Fields

| Field | What it is |
|---|---|
| `companyName`, `title`, `description`, `address`, `language`, `copyrightYear` | Company basics from the website |
| `primaryEmail`, `emails`, `phones` | Contacts published on the company's own site (own-domain emails first) |
| `linkedinUrl`, `socials` | LinkedIn company page and other social profiles linked from the site |
| `techStack`, `techByCategory`, `techCount`, `cms` | Detected technologies, grouped by category |
| `mailProvider`, `mxHosts` | Who hosts the company's email |
| `emailSendingTools` | Services allowed to send email for the domain (SPF) |
| `verifiedServices` | SaaS tools with a domain-verification record in DNS |
| `domainCreated`, `domainAgeYears`, `domainExpires`, `registrar` | From RDAP (not available for every TLD) |
| `finalUrl`, `pagesRead`, `status` | Where the site ended up and how many pages were read; unreachable sites get a status and are free |
| `agentSummary` | One plain-English line per domain |

#### Files in the key-value store

| Key | What it is |
|---|---|
| `ENRICHED_XLSX` | Excel workbook: **Companies**, **Technologies** (one row per domain + technology), **Run log**, **Read me** |
| `ENRICHED_CSV` | Companies table as CSV |
| `SUMMARY` | JSON: how many have email / phone / LinkedIn, most common technologies, unreachable domains, a one-line `takeaway` and `nextStep` |

### For AI agents

Use this Actor to enrich company domains with name, description, public contacts, social links, tech stack, mail provider, SaaS tools and domain age. Call it with Apify's MCP server (`https://mcp.apify.com`, tool `call-actor`, Actor `pandadad0214/company-website-enricher`) or the API (`POST https://api.apify.com/v2/acts/pandadad0214~company-website-enricher/run-sync-get-dataset-items`).

Minimal input:

```json
{"domains": ["glossier.com", "basecamp.com"]}
```

Each dataset item includes:

- `agentSummary`: one line, e.g. `glossier.com: Glossier; site on Shopify; 8 technologies: Shopify, Google Tag Manager, Klaviyo, Gorgias; email brand@glossier.com; mail by Google Workspace; uses Stripe, Atlassian (Jira/Confluence), Miro; domain 14.1 yrs old`
- `techStack`, `techByCategory`: what the site runs on
- `primaryEmail`, `phones`, `linkedinUrl`, `socials`: how to reach the company
- `verifiedServices`, `emailSendingTools`, `mailProvider`: tools the company uses behind the scenes

The run's key-value store has a `SUMMARY` record with `withEmail`, `withPhone`, `withLinkedIn`, `topTech`, a one-line `takeaway` and `nextStep`. Unreachable sites come back with a `status` and are not charged.

### Pricing

**Apify paid-plan discounts:** Bronze members pay 10% less, Silver 20% less and Gold 30% less per domain. Free-plan prices are shown below; the discount applies automatically.

**$0.003 per domain returned** (pay-per-event), plus a tiny Actor-start fee of $0.00005. Contacts, tech stack, DNS, domain age, Excel, CSV and summary are all included. Sites that can't be reached, and domains removed by your filters, cost nothing. Your **maximum charge per run** is respected.

### FAQ

**Where does the data come from?** The company's own public website (home page and up to 4 contact / about / team pages, robots.txt respected), public DNS (Google / Cloudflare DNS over HTTPS) and the registries' public RDAP service, all read at run time. No LinkedIn scraping, no logins, no paid data brokers.

**Does it find personal emails of employees?** No. It returns the emails and phone numbers the company itself publishes on its website (info@, sales@, press@, founders' addresses when they are on the site). It does not guess or verify personal addresses.

**How complete is the tech stack?** It sees what the page code and HTTP headers reveal: about 150 widely used tools. Back-end tools that leave no trace in the page are not visible, which is why the DNS-verified services column is a useful complement.

**Why is domain age empty for some domains?** A few registries (for example some country-code TLDs and .edu) don't offer public RDAP yet.

**A site blocks the crawler. Am I charged?** No. Unreachable or blocked sites are listed with a status and cost nothing.

**Can I use it from code or an AI agent?** Yes, via the Apify API, the Python/JS clients, or as a tool through Apify's MCP server.

### More Panda Federation tools

- [Company Hiring Signals](https://apify.com/pandadad0214/company-hiring-signals)
- [Email Domain Security Checker](https://apify.com/pandadad0214/email-domain-security-checker)
- [Local Business Leads](https://apify.com/pandadad0214/local-business-leads)
- [AI Search & SEO Audit](https://apify.com/pandadad0214/ai-search-seo-audit)
- [Podcast Leads Finder](https://apify.com/pandadad0214/podcast-leads-finder)

[All Panda Federation Actors on Apify](https://apify.com/pandadad0214)

Questions or a technology you'd like detected? Open an issue on this Actor's **Issues** tab.

### Changelog

- **2026-11-02:** First public release: company basics, public emails and phones, social links, ~150 tech fingerprints, MX mail provider, SPF sending tools, DNS-verified SaaS, RDAP domain age, tech / email / phone filters, Excel/CSV export, agent-friendly `agentSummary` and `takeaway`, pay-per-event pricing with Bronze/Silver/Gold discounts.

# Actor input Schema

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

One per line: example.com, https://www.example.com/page or name@example.com all work (the domain is extracted, duplicates dropped). Leave empty for a 3-domain demo.

## `onlyWithTech` (type: `array`):

Optional. Keep only domains where at least one of these shows up in the tech stack, email tools or DNS-verified services, e.g. Shopify, HubSpot, Klaviyo, WordPress, Salesforce, Microsoft 365. Others are not returned and not charged.

## `onlyWithEmail` (type: `boolean`):

Domains without an email on their website are not returned and not charged.

## `onlyWithPhone` (type: `boolean`):

Domains without a phone link on their website are not returned and not charged.

## `extraPages` (type: `integer`):

Besides the home page, read up to this many contact / about / team pages to find emails, phones and the address. 0 to 4; default 2.

## `maxDomains` (type: `integer`):

You pay per domain returned, so this also caps the cost. 1 to 10,000; default 1,000.

## Actor input object example

```json
{
  "domains": [
    "glossier.com",
    "basecamp.com"
  ],
  "onlyWithTech": [
    "Shopify",
    "Klaviyo"
  ],
  "onlyWithEmail": false,
  "onlyWithPhone": false,
  "extraPages": 2,
  "maxDomains": 1000
}
```

# Actor output Schema

## `table` (type: `string`):

No description

## `xlsx` (type: `string`):

No description

## `csv` (type: `string`):

No description

## `summary` (type: `string`):

Run-level summary record. Agent-friendly keys: `takeaway` (one-line result), `withEmail`, `withPhone`, `withLinkedIn`, `topTech`, `nextStep` and `nextSteps`.

# 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",
        "basecamp.com",
        "allbirds.com"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("pandadad0214/company-website-enricher").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",
        "basecamp.com",
        "allbirds.com",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("pandadad0214/company-website-enricher").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",
    "basecamp.com",
    "allbirds.com"
  ]
}' |
apify call pandadad0214/company-website-enricher --silent --output-dataset

```

## MCP server setup

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

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/m6iq7QnRd6cSWSY6e/builds/yo2YnBN2KA196L3QB/openapi.json
