# B2B Company, Contact, Tech Stack & Buying Signal Enricher (`zinjaink/b2b-company-enricher`) Actor

Ultra-fast HTTP B2B domain enricher for Clay, n8n, Make, and cold outreach. Extracts verified emails (including Cloudflare-obfuscated emails), phone numbers, LinkedIn/social profiles, 35+ tech stack & ad pixel signatures, ATS/hiring signals, pricing pages, and a 0-100 Lead Quality Score.

- **URL**: https://apify.com/zinjaink/b2b-company-enricher.md
- **Developed by:** [Daniel Thairu](https://apify.com/zinjaink) (community)
- **Categories:** Lead generation, Business, Marketing
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 enriched 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.

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

## B2B Company, Contact, Tech Stack & Buying Signal Enricher

Turn any list of bare domains or company URLs into **sales-ready B2B dossiers** in seconds. Built on ultra-fast HTTP (`CheerioCrawler`) with **near-zero compute cost**, this Actor is designed for **Clay, n8n, Make, Zapier, AI SDR agents, and cold outreach agencies**.

Unlike basic email scrapers that only regex the homepage, **B2B Company Enricher** crawls high-signal internal pages (`/contact`, `/about`, `/pricing`, `/careers`, `/team`), decodes **Cloudflare-protected emails (`data-cfemail`)**, parses **Schema.org JSON-LD**, fingerprints **40+ tech stack & ad pixel signatures**, and detects **active hiring/ATS & SaaS buying signals**.

***

### What Data Does It Extract?

| Category | Extracted Fields |
| :--- | :--- |
| **1. Verified Emails (Categorized)** | `bestEmail`, `executiveEmails` (`ceo@`, `founder@`), `salesAndMarketingEmails` (`sales@`, `growth@`, `partnerships@`), `generalAndSupportEmails`, `personalOrOtherEmails`, `allEmails` *(Includes automatic Cloudflare XOR hex de-obfuscation & `[at]` decoding)* |
| **2. Phones & Physical Address** | `phones` (`tel:` links + Schema.org `ContactPoint`), `addresses` (`PostalAddress` street, city, region, postal code, country) |
| **3. Social & Review Profiles** | `linkedinUrl`, `twitterUrl`, `facebook`, `instagram`, `youtube`, `tiktok`, `github`, `crunchbase`, `g2`, `trustpilot`, `discord` |
| **4. Tech Stack & Ad Pixels (40+)** | **CMS/Frameworks:** Shopify, WooCommerce, WordPress, Webflow, Wix, Squarespace, Framer, Next.js, Nuxt, Gatsby, BigCommerce, Magento<br>**CRM/Marketing:** HubSpot, Salesforce/Pardot, Marketo, Klaviyo, Mailchimp, ActiveCampaign, Customer.io, Brevo, Apollo, Clearbit<br>**Ad Pixels & Analytics:** Google Tag Manager, GA4, Meta Pixel, LinkedIn Insight Tag, TikTok Pixel, X Pixel, Microsoft Clarity, Hotjar, Segment, PostHog, Mixpanel, Amplitude<br>**Live Chat:** Intercom, Drift, Zendesk, Crisp, Tidio, Freshchat, Gorgias, LiveChat, HelpScout<br>**Payments & Booking:** Stripe, PayPal, Paddle, Chargebee, Calendly, Cal.com, Chili Piper, Typeform |
| **5. B2B Buying & Growth Signals** | `hasPricingPage` + `pricingPageUrl`, `hasCareersPage` + `careersPageUrl`, `atsPlatform` (`Greenhouse`, `Lever`, `Ashby`, `Workable`, `BambooHR`, `Rippling`, `Workday`), `hasDemoOrTrialCta` (`Book a Demo`, `Start Free Trial`, `Talk to Sales`, `Get a Quote`), `copyrightYear` & `isActivelyMaintained` |
| **6. Lead Scoring & Classification** | `leadQualityScore` (`0–100`), `businessModelGuess` (`B2B SaaS / Tech`, `E-Commerce / DTC`, `B2B Agency / Services`, `Local / Brick-and-Mortar Business`) |

***

### Example Output Record

```json
{
  "domain": "apify.com",
  "url": "https://apify.com",
  "companyName": "Apify",
  "leadQualityScore": 90,
  "businessModelGuess": "B2B SaaS / Tech",
  "bestEmail": "hello@apify.com",
  "allEmails": ["hello@apify.com"],
  "executiveEmails": [],
  "salesAndMarketingEmails": [],
  "generalAndSupportEmails": ["hello@apify.com"],
  "personalOrOtherEmails": [],
  "phones": [],
  "addresses": [],
  "linkedinUrl": "https://www.linkedin.com/company/apify",
  "twitterUrl": "https://x.com/apify",
  "socials": {
    "linkedin": "https://www.linkedin.com/company/apify",
    "twitter": "https://x.com/apify",
    "facebook": null,
    "instagram": null,
    "youtube": "https://www.youtube.com/@apify",
    "tiktok": null,
    "github": "https://github.com/apify",
    "crunchbase": null,
    "g2": null,
    "trustpilot": null,
    "discord": "https://discord.com/invite/jyEM2PRvMU"
  },
  "techStack": [
    "Next.js",
    "HubSpot",
    "Google Tag Manager",
    "Intercom"
  ],
  "techCategories": {
    "cmsAndFramework": ["Next.js"],
    "crmAndMarketing": ["HubSpot"],
    "analyticsAndPixels": ["Google Tag Manager"],
    "chatAndSupport": ["Intercom"],
    "paymentsAndScheduling": []
  },
  "buyingSignals": {
    "hasPricingPage": true,
    "pricingPageUrl": "https://apify.com/pricing",
    "hasCareersPage": true,
    "careersPageUrl": "https://apify.com/jobs",
    "atsPlatform": null,
    "hasDemoOrTrialCta": true,
    "detectedCtas": ["Book a Demo", "Talk to Sales"],
    "hasCaseStudiesOrTestimonials": true,
    "copyrightYear": 2026,
    "isActivelyMaintained": true
  },
  "pagesCrawled": 4,
  "scrapedAt": "2026-10-28T20:40:00.000Z"
}
```

***

### Why Use This in Clay, n8n, or Make?

1. **10x Faster & Cheaper than Browser Scrapers:** Uses pure HTTP (`CheerioCrawler`) rather than headless Chromium, enriching hundreds of domains per minute for fractions of a cent in compute.
2. **Cloudflare Email De-Obfuscation Built In:** Automatically cracks `data-cfemail` and `/cdn-cgi/l/email-protection` hex hashes that return `[email protected]` on standard scrapers.
3. **Zero False-Positive Emails:** Strips `sentry.io`, `wixpress.com`, `@2x.png` image assets, and `noreply@` addresses automatically.
4. **Actionable Agency Triggers:** Instantly filter leads by *"Has Meta Pixel + Shopify but NO Klaviyo"* (for email agencies) or *"Has HubSpot + Active Careers Page on Ashby"* (for B2B recruiters and SaaS reps).

***

### Automate & Wire Into Clay, n8n, or Make (1-Click API)

Run this Actor synchronously via REST API and receive the enriched JSON dataset directly in a single HTTP call:

#### `cURL` / `n8n` / `Clay` HTTP Request Endpoint

```bash
curl -X POST "https://api.apify.com/v2/acts/zinjaink~b2b-company-enricher/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "urls": ["https://apify.com", "https://cal.com"],
    "maxPagesPerDomain": 4,
    "extractTechStack": true,
    "extractBuyingSignals": true
  }'
```

#### Recommended Automated Workflows

1. **Clay / Instantly Outbound Enrichment:** Trigger `zinjaink~b2b-company-enricher` on every new domain added to your table -> map `bestEmail`, `linkedinUrl`, `techStack`, and `buyingSignals.detectedCtas` into personalized email lines.
2. **n8n / Make Inbound Lead Router:** When a prospect submits a form on Typeform/HubSpot, enrich their email domain in `< 2.5s` and route leads with `leadQualityScore >= 70` directly to Slack.

# Actor input Schema

## `urls` (type: `array`):

List of company website URLs or bare domains (e.g. 'apify.com', 'https://cal.com'). Both bare domains and full URLs are supported.

## `maxPagesPerDomain` (type: `integer`):

Maximum number of high-signal pages (Homepage + /contact, /about, /pricing, /careers, /team) to crawl per company domain. Keep at 3-5 for maximum speed.

## `extractTechStack` (type: `boolean`):

Detect 35+ technologies including CMS (Shopify, WordPress, Webflow), CRM (HubSpot, Klaviyo), Ad Pixels (Meta, Google Tag Manager, LinkedIn, TikTok), and Live Chat (Intercom, Zendesk, Crisp).

## `extractBuyingSignals` (type: `boolean`):

Detect pricing pages, active careers/hiring pages, ATS platforms (Greenhouse, Lever, Ashby, Workable), demo/trial CTAs, and copyright year freshness.

## `onlyCompaniesWithEmail` (type: `boolean`):

If enabled, companies without at least one discovered email address will be skipped from the final dataset.

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

Maximum number of parallel HTTP requests. Higher values speed up large batch runs.

## `proxyConfiguration` (type: `object`):

Optional proxy settings. Standard HTTP requests work without proxies for most company websites, keeping compute costs near zero.

## Actor input object example

```json
{
  "urls": [
    "https://apify.com",
    "https://crawlee.dev"
  ],
  "maxPagesPerDomain": 4,
  "extractTechStack": true,
  "extractBuyingSignals": true,
  "onlyCompaniesWithEmail": false,
  "maxConcurrency": 20,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `enrichedCompanies` (type: `string`):

No description

## `summary` (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 = {
    "urls": [
        "https://apify.com",
        "https://crawlee.dev"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("zinjaink/b2b-company-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 = { "urls": [
        "https://apify.com",
        "https://crawlee.dev",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("zinjaink/b2b-company-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 '{
  "urls": [
    "https://apify.com",
    "https://crawlee.dev"
  ]
}' |
apify call zinjaink/b2b-company-enricher --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,zinjaink/b2b-company-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/C62PO8tZhHt15dFdV/builds/zNS5Q1uKRcI1tJct3/openapi.json
