# B2B Hiring Signals, Tech Stack & Buying Intent (Clay Ready) (`silver_petalfall/b2b-hiring-signals-tech-stack-scraper`) Actor

Scrape real-time B2B job postings from LinkedIn, Greenhouse & Lever to extract 120+ tech stack tools, active buying signals, opportunity scores (0-100), sales pitch angles, buyer personas & multi-language cold email icebreakers (EN/ES/PT/DE/FR) for Clay, Make, n8n & Apollo.

- **URL**: https://apify.com/silver_petalfall/b2b-hiring-signals-tech-stack-scraper.md
- **Developed by:** [Javi Face](https://apify.com/silver_petalfall) (community)
- **Stats:** 2 total users, 1 monthly users, 60.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 results

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 Hiring Signals, Tech Stack & Buying Intent Scraper

[![Apify Actor](https://img.shields.io/badge/Apify-Actor%20v4-06B6D4?logo=apify)](https://apify.com)
[![Python 3.12](https://img.shields.io/badge/Python-3.12-3776AB?logo=python\&logoColor=white)](https://python.org)
[![Clay Ready](https://img.shields.io/badge/Clay-Native%20Enrichment-10B981)](https://clay.com)
[![Make & n8n Ready](https://img.shields.io/badge/Make%20%2F%20n8n-Webhook%20Ready-8B5CF6)](https://make.com)

Turn public job postings into **high-converting B2B outbound triggers** at a fraction of the cost of enterprise intent platforms. Scrape real-time job openings across **LinkedIn Guest Jobs**, **Greenhouse**, **Lever**, and **Schema.org Career Pages**, and automatically extract:

- **120+ B2B Tech Stack Tools** categorized across CRM, Cloud, Data, AI/LLMs, ERP, and DevSecOps.
- **Active Buying Signals & Pain Points** (*Legacy Migration, Greenfield Implementation, Rapid Team Scaling*).
- **B2B Opportunity & Intent Score (0–100)** (`opportunity_score` & `intent_score`) to prioritize hot accounts.
- **Actionable Sales Pitch Angles** (`primary_pitch_angle` & `all_pitch_angles`) + **Target Buyer Personas** (`target_decision_maker_titles`) ready for **Apollo** / **Clay** people-search enrichment.
- **Multi-Language Cold Email Icebreakers (`en`, `es`, `pt`, `de`, `fr`)** ready to inject directly into **Instantly**, **Smartlead**, **Lemlist**, or **HubSpot**.

***

### ⚡ Why Top RevOps Teams & Lead Gen Agencies Switch to This Actor

| Feature | Legacy Intent Platforms (6sense / Bombora / BuiltWith) | Generic Job Scrapers + OpenAI Credits | **B2B Hiring Signals & Intent Scraper** |
| :--- | :--- | :--- | :--- |
| **Annual Contract** | ❌ $15,000 – $60,000 / year | ⚠️ Apify compute + $0.03/row LLM API cost | ✅ **$0/mo fixed — pure Pay-Per-Event** |
| **Tech Stack Detection** | ⚠️ Stale DNS/cookie footprints | ❌ Raw HTML (requires costly LLM parsing) | ✅ **120+ live tools extracted from active job reqs** |
| **Buying Signals** | ⚠️ Black-box topic surges | ❌ None | ✅ **Verified quotes (*Migration, New Rollout, Scaling*)** |
| **Sales Pitch Angles** | ❌ None | ❌ Manual prompt engineering | ✅ **`primary_pitch_angle` & `all_pitch_angles` included** |
| **Buyer Persona Mapping**| ❌ None | ❌ None | ✅ **`target_decision_maker_titles` for Apollo/Clay** |
| **Multi-Language Copy** | ❌ None | ⚠️ Extra LLM token cost | ✅ **Native `en`, `es`, `pt`, `de`, `fr` icebreakers at $0 extra** |
| **Memory & Compute Cost**| N/A | ❌ >1 GB RAM (slow Headless Chrome) | ✅ **Runs in 256 MB RAM (pooled HTTP/2 & TLS fingerprinting)** |

***

### 🎯 High-ROI Use Cases for B2B Teams & Agencies

1. **Competitor Displacement & Migration Campaigns:** Filter for `MIGRATION_OR_REPLACEMENT` signals and tech stacks like `HubSpot`, `Salesforce`, `Snowflake`, or `NetSuite` to catch companies actively replacing legacy systems.
2. **Clay.com Automated Outbound Waterfalls:** Pull daily high-intent hiring leads (`opportunity_score >= 75`), feed `target_decision_maker_titles` + `company_name` into an Apollo/Contact finder column in Clay, and map `cold_email_icebreaker` directly into **Instantly** or **Smartlead**.
3. **B2B Agency Client Fulfilment (Multi-Geo):** Generate localized outbound hooks in **English (`en`)**, **Spanish (`es`)**, **Portuguese (`pt`)**, **German (`de`)**, or **French (`fr`)** without burning OpenAI/Anthropic credits.
4. **Fractional Executive & Specialized Recruiting:** Spot companies hiring their *"first dedicated hire"* or *"founding engineer"* (`TEAM_EXPANSION`) with disclosed salary budgets (`salary_min` / `salary_max`).

***

### 🧠 How the B2B Opportunity & Buying Intent Engine Works

#### 1. Buying Signal Categories (`buying_signals`)

- `MIGRATION_OR_REPLACEMENT`: Highlights transitions away from legacy systems (*"migrating from HubSpot to Salesforce"*, *"replacing legacy ERP"*, *"modernizing our stack"*).
- `NEW_IMPLEMENTATION`: Identifies greenfield deployments and active vendor evaluations (*"implementing Snowflake"*, *"evaluating new tools"*, *"rolling out Gong"*).
- `TEAM_EXPANSION`: Detects hypergrowth or strategic department builds (*"founding engineer"*, *"first dedicated hire"*, *"building the team from scratch"*).

#### 2. Opportunity & Intent Score (0–100) Algorithm

Each lead receives an objective score (`opportunity_score` / `intent_score`):

- **Detected B2B Tech Stack:** Up to **+30 pts** (+8 pts per verified tool).
- **Buying Signals Present:** Up to **+35 pts** (+20 pts per migration/implementation trigger).
- **Operational Pain Points Detected:** Up to **+10 pts** (+5 pts per pain point).
- **Decision-Maker Seniority:** **+10 pts** (C-Level, VP, Director, Head, Lead).
- **Explicit Compensation Disclosed:** **+10 pts**.
- **Baseline Active Hiring Intent:** **+15 pts**.

**Tiers:**

- `HIGH_INTENT` (**75–100**): Immediate outbound priority — active budget, tooling stack, and strategic urgency confirmed.
- `MEDIUM_INTENT` (**45–74**): Strong fit for automated nurture sequences and account scoring.
- `LOW_INTENT` (**< 45**): General hiring activity without explicit tooling or migration triggers.

***

### 📋 Sample Enriched Output JSON

```json
{
  "lead_id": "9f8c2a1e4b7d6012",
  "company_name": "AcmeCloud",
  "company_website": "https://acmecloud.com",
  "company_linkedin_url": "https://www.linkedin.com/company/acmecloud",
  "job_title": "Head of Revenue Operations",
  "department": "Sales & GTM",
  "seniority_level": "Director / Head",
  "location": "United States",
  "workplace_type": "Remote",
  "salary_min": 130000.0,
  "salary_max": 165000.0,
  "salary_currency": "USD",
  "salary_raw_text": "$130,000 - $165,000",
  "detected_tech_stack": [
    "Salesforce",
    "HubSpot",
    "Gong",
    "Clay",
    "Snowflake",
    "Looker",
    "dbt"
  ],
  "tech_categories": {
    "CRM & Sales": ["Salesforce", "HubSpot", "Gong", "Clay"],
    "Cloud & Data Infrastructure": ["Snowflake", "dbt"],
    "Marketing & Product Analytics": ["Looker"]
  },
  "buying_signals": [
    "[MIGRATION_OR_REPLACEMENT] \"migration from HubSpot to Salesforce and implement Gong...\"",
    "[TEAM_EXPANSION] \"rapidly scaling our Revenue Operations team...\""
  ],
  "intent_score": 100,
  "opportunity_score": 100,
  "intent_tier": "HIGH_INTENT",
  "primary_pitch_angle": "Tech Stack Migration & Legacy Replacement",
  "all_pitch_angles": [
    "Tech Stack Migration & Legacy Replacement",
    "Hypergrowth Team Scaling & Onboarding Acceleration",
    "RevOps Automation & Pipeline Conversion Optimization",
    "Data Pipeline Reliability & Cloud Cost Governance",
    "Executive 90-Day Quick-Win Initiative (Sales & GTM)"
  ],
  "detected_pain_points": [
    "Legacy System & Tech Debt",
    "Pipeline & Revenue Predictability"
  ],
  "target_decision_maker_titles": [
    "VP of Revenue Operations",
    "Chief Revenue Officer (CRO)",
    "Head of Sales Operations",
    "VP of Sales"
  ],
  "cold_email_icebreaker": "Saw AcmeCloud is hiring a Head of Revenue Operations focused on Salesforce, HubSpot, Gong while driving migration or replacement—usually a key moment when teams look to streamline their Sales & GTM stack.",
  "icebreaker_language": "en",
  "job_url": "https://www.linkedin.com/jobs/view/1234567890",
  "source_platform": "linkedin_guest",
  "posted_at": "2026-10-18T08:00:00Z",
  "scraped_at": "2026-10-19T10:15:00+00:00"
}
```

***

### 🚀 Step-by-Step Integration Guide (Clay, Make, n8n & Apollo)

#### 1. Clay.com (Automated Signal-to-Outbound Waterfall)

1. In your Clay workbook, click **Add Source / Add Column** -> **Apify** -> **Run Actor**.
2. Select **`b2b-hiring-signals-tech-stack-scraper`**.
3. Set `onlyHighIntent: true`, choose your `icebreakerLanguage` (`en`, `es`, `pt`, `de`, `fr`), and enter your target keywords (`["Revenue Operations", "Data Engineer"]`).
4. Map the returned items directly into Clay columns:
   - Pass `company_name` + `target_decision_maker_titles` into Clay's **Find People at Company (Apollo / LinkedIn)** enrichment.
   - Use `primary_pitch_angle`, `detected_pain_points`, and `cold_email_icebreaker` as merge variables in your **Instantly** or **Smartlead** push column.

#### 2. Make & n8n (Scheduled Daily Slack & CRM Alerts)

1. Add the **Apify — Run an Actor** module on a daily schedule (e.g., 07:30 AM).
2. Add **Apify — Get Dataset Items** to iterate over the exported leads.
3. Filter by `opportunity_score >= 75` and route directly to **HubSpot / Salesforce / Pipedrive** or a `#hot-buying-signals` **Slack** channel.

***

### ⚙️ Input Parameters Reference

| Parameter | Type | Default | Description |
| :--- | :--- | :--- | :--- |
| `searchKeywords` | Array | `["Revenue Operations", "Data Engineer", "Salesforce"]` | Job titles or technologies to target. |
| `locations` | Array | `["United States", "United Kingdom", "Spain"]` | Countries, states, or cities to monitor. |
| `targetAtsSlugs` | Array | `[]` | Optional direct Greenhouse/Lever company slugs (e.g., `["stripe", "cloudflare"]`). |
| `customCareerUrls` | Array | `[]` | Optional direct career page URLs supporting Schema.org `JobPosting` JSON-LD. |
| `postedWithinDays` | String | `"7"` | Recency filter (`"1"`, `"7"`, `"14"`, or `"30"` days). |
| `requiredTechFilter`| Array | `[]` | Only save and bill leads mentioning at least one of these tools. |
| `onlyHighIntent` | Boolean | `false` | Filter out postings with `intent_score < 60` before saving or billing. |
| `icebreakerLanguage`| String | `"en"` | Outbound copy language: `"en"`, `"es"`, `"pt"`, `"de"`, or `"fr"`. |
| `maxItems` | Integer | `50` | Hard budget cap on total leads exported and billed. |
| `proxyConfiguration`| Object | `{"useApifyProxy": true}` | Apify Proxy configuration. |

***

### 💰 Fair & Transparent Pay-Per-Event (PPE) Pricing

You only pay for **verified, deduplicated leads that pass all your filters** and are delivered to your dataset (strict 1:1 billing guarantee):

| Event | Free ($0/mo) | Starter ($19/mo) | Scale ($199/mo) | Business ($999/mo) | When is it charged? |
| :--- | :--- | :--- | :--- | :--- | :--- |
| **Result (`apify-default-dataset-item`)** | $10.00 / 1,000 | $6.00 / 1,000 | $5.00 / 1,000 | $4.00 / 1,000 | Only when a unique lead passes all your filters and is saved |
| **High-Intent Bonus (`high-intent-lead-detected`)** | $15.00 / 1,000 | $12.00 / 1,000 | $10.00 / 1,000 | $8.00 / 1,000 | Only when `opportunity_score >= 75` (`HIGH_INTENT`) |
| **Actor Start (`apify-actor-start`)** | $0.00005 | $0.00005 | $0.00005 | $0.00005 | Once per Actor run initialization |

#### 🛡️ Triple Cost & Compute Protection

1. **Zero Charge for Filtered or Failed Items:** Postings that fail to load, lack descriptions, are duplicates, or are excluded by `onlyHighIntent` / `requiredTechFilter` are **never billed**.
2. **Hard `maxItems` & Platform Spending Limit:** Immediately halts the moment `maxItems` or your Apify `ACTOR_MAX_PAID_DATASET_ITEMS` / `event_charge_limit_reached` cap is hit.
3. **Automatic `max_attempts` Circuit Breaker:** Caps raw evaluations at `5 × maxItems` (min 100) to protect proxy and compute usage when hyper-strict filters are configured.

***

### 🔒 Enterprise Security, Low-Memory Architecture & GDPR Compliance

- **100% GDPR & CCPA Compliant by Design:** Extracts strictly corporate, public B2B job specifications (company name, role requirements, corporate tech stack, and salary bands). No personal candidate data or private profiles are collected.
- **256 MB RAM Ultra-Light Footprint:** Uses a single shared HTTP/2 connection pool (`httpx.AsyncClient`), concurrent batching (`asyncio.gather` + `asyncio.Semaphore`), and a hard 2 MB streaming cap per response.
- **Hardened Against SSRF, DNS Rebinding & ReDoS:** Every custom URL and redirect hop undergoes strict scheme/port validation, full DNS resolution verification against private/loopback/CGNAT/cloud-metadata IPv4 & IPv6 ranges, IP-pinning with TLS `sni_hostname`, and bounded regex evaluation windows.

# Actor input Schema

## `searchKeywords` (type: `array`):

Job titles (e.g., 'Revenue Operations', 'Data Engineer') or technologies (e.g., 'Salesforce', 'Snowflake') to monitor across LinkedIn & ATS boards.

## `locations` (type: `array`):

Countries, states, or cities to search job postings in.

## `targetAtsSlugs` (type: `array`):

Optional: Company board slugs (e.g., 'stripe', 'cloudflare', 'datadog') to scrape directly via public JSON APIs with zero proxy friction.

## `customCareerUrls` (type: `array`):

Optional: Direct URLs to job postings supporting Schema.org JobPosting JSON-LD.

## `postedWithinDays` (type: `string`):

Filter LinkedIn jobs by recency.

## `requiredTechFilter` (type: `array`):

Only return leads where at least one of these tools is detected in the job description (you are NEVER billed for filtered-out postings).

## `onlyHighIntent` (type: `boolean`):

If enabled, filters out low-intent job postings before billing or saving.

## `icebreakerLanguage` (type: `string`):

Language for the generated outbound cold email icebreaker (ready for Clay, Instantly, Smartlead & Make).

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

Hard cap on total leads extracted and billed.

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

Apify Proxy settings for reliable scraping.

## Actor input object example

```json
{
  "searchKeywords": [
    "Revenue Operations",
    "Data Engineer",
    "Salesforce"
  ],
  "locations": [
    "United States",
    "United Kingdom",
    "Spain"
  ],
  "targetAtsSlugs": [
    "stripe",
    "cloudflare"
  ],
  "customCareerUrls": [],
  "postedWithinDays": "7",
  "requiredTechFilter": [],
  "onlyHighIntent": false,
  "icebreakerLanguage": "en",
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `leads` (type: `string`):

Dataset items: one enriched B2B lead per job posting (company, role, tech stack, buying signals, opportunity score, pitch angles, target decision makers, multi-language icebreaker, job URL).

# 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 = {
    "searchKeywords": [
        "Revenue Operations",
        "Data Engineer",
        "Salesforce"
    ],
    "locations": [
        "United States",
        "United Kingdom",
        "Spain"
    ],
    "targetAtsSlugs": [
        "stripe",
        "cloudflare"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("silver_petalfall/b2b-hiring-signals-tech-stack-scraper").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 = {
    "searchKeywords": [
        "Revenue Operations",
        "Data Engineer",
        "Salesforce",
    ],
    "locations": [
        "United States",
        "United Kingdom",
        "Spain",
    ],
    "targetAtsSlugs": [
        "stripe",
        "cloudflare",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("silver_petalfall/b2b-hiring-signals-tech-stack-scraper").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 '{
  "searchKeywords": [
    "Revenue Operations",
    "Data Engineer",
    "Salesforce"
  ],
  "locations": [
    "United States",
    "United Kingdom",
    "Spain"
  ],
  "targetAtsSlugs": [
    "stripe",
    "cloudflare"
  ]
}' |
apify call silver_petalfall/b2b-hiring-signals-tech-stack-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,silver_petalfall/b2b-hiring-signals-tech-stack-scraper"
        }
    }
}
```

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/xIhBJ9gDGDsF1gPuU/builds/VGZEJfG6SPmfZX2rm/openapi.json
