# Stepstone DACH & Benelux Buying-Signal Scraper (DE, AT, BE, NL) (`aperture/stepstone-dach-buying-signal-scraper`) Actor

Extract high-intent B2B hiring signals across Germany, Austria, Belgium & the Netherlands (stepstone.de, .at, .be, .nl). Features copy-paste searchUrls, postedWithinDays filters, cross-run Delta Mode deduplication, Impressum contact email & phone enrichment, and strict named-contact PPE billing.

- **URL**: https://apify.com/aperture/stepstone-dach-buying-signal-scraper.md
- **Developed by:** [Aperture](https://apify.com/aperture) (community)
- **Categories:** Lead generation, Jobs, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 job buying signal scraped (basic mode + free role email fallback)s

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

<p align="center">
  <a href="https://apify.com/aperture/stepstone-dach-buying-signal-scraper">
    <img src="https://api.apify.com/v2/key-value-stores/j5l13XT1d0O0NQmTI/records/stepstone-dach.png" width="64" height="64" alt="Stepstone DACH & Benelux B2B Buying-Signal Scraper" />
  </a>
</p>

## Stepstone DACH & Benelux B2B Buying-Signal Scraper (No Cookies)

Extract real-time, high-intent **B2B hiring buying signals** across Germany, Austria, Belgium, and the Netherlands ([`aperture/stepstone-dach-buying-signal-scraper`](https://apify.com/aperture/stepstone-dach-buying-signal-scraper)) with zero cookies, zero browser overhead, and an industry-first **Strict Named-Contact Pay-Per-Event Guarantee**.

Built by **[Aperture — Data Aggregation Solutions](https://apify.com/aperture)** for outbound sales agencies, RevOps teams, Clay / HeyReach / n8n pipelines, and AI SDR agents (Apify MCP Server & Skyfire).

***

### Why GTM & RevOps Teams Switch to Aperture

| Feature / Capability | Standard Job Scrapers | Aperture Stepstone Buying-Signal Scraper |
| :--- | :--- | :--- |
| **Pricing Fairness** | Charges full enriched price for generic `info@` addresses, empty strings, or unverified mailboxes. | **Strict Named-Contact PPE Guarantee**: `$0.008` is billed strictly when a verified named individual contact (`firstname.lastname@`, `email_verification_status: "ok"`) is delivered. Generic corporate role inboxes (`info@`, `karriere@`, `jobs@`, `office@`) are included **100% free** as `"role_fallback"` at the basic `$0.002` rate. |
| **Scheduled Monitoring** | Re-scrapes, re-emits, and re-bills identical job listings every week, flooding CRMs with duplicates. | **Cross-Run Delta Mode (`onlyNewSignals: true`)**: Persists seen listing keys in the named `buying-signal-dedup-store` Key-Value Store. Skips previously emitted jobs **before** enrichment or `Actor.charge()` fires — duplicate listings cost **`$0.00`**. |
| **Search Flexibility** | Rigid single-keyword form inputs only. No way to paste browser filters or target recency. | **Browser `searchUrls` + `postedWithinDays` (`1 \| 3 \| 7 \| 14 \| 30`) + `contractTypeFilter`**: Paste any live filtered Stepstone search URL (`.de`, `.at`, `.be`, `.nl`), filter by publication age (`ag=N`), or combine keywords, locations, and contract types effortlessly. |
| **Zero-Cost Bonus Metadata** | Scrapes only basic job title and raw job board URL. | **`contact_phone`, `salary_band`, and `contract_type`**: Automatically extracted from schema.org JSON-LD, Stepstone badges, and job ad content at **`$0.00` extra compute cost**. |
| **DACH & Benelux Impressum Engine** | Emits useless Stepstone redirect links or ATS URLs (`personio.de`, `workday.com`). | **4-Tier Domain Waterfall + Legal `/impressum`, `/kontakt`, `/over-ons` Crawler + DNS/DoH MX Fingerprinting & BYOK Verifier Hook**: Resolves authentic corporate root domains and statutory legal disclosures across 4 European markets. |

***

### 5-Actor Global B2B Buying-Signal Suite (`aperture`) (MCP-Ready)

> **Strict Named-Contact Enriched Guarantee:** Across the entire Aperture suite, the enriched PPE tier ($0.008 / $0.009) is billed **strictly when a verified named individual contact** (`firstname.lastname@`, `email_verification_status: "ok"`) is extracted. Generic or departmental role inboxes (`info@`, `hello@`, `contact@`, `office@`, `jobs@`, `hr@`, `karriere@`) are **never discarded** — they remain populated in `contact_email` for free with `email_verification_status: "role_fallback"` and automatically downgrade billing to the basic tier ($0.002 / $0.003).

Combine our regional zero-cookie signal scrapers with our zero-proxy ICP scoring engine to run a unified **8-country** multi-market outbound pipeline across **3 buying-signal dimensions (`jobs`, `funding`, `contract_award` -> `multi_signal`)** in **Europe (`DE`, `AT`, `BE`, `NL`, `FR`, `UK`)** and **APAC (`AU`, `NZ`)**:

| Actor | Markets (`geo`) | Signal Types | Primary Sources | PPE Pricing (Basic / Enriched) |
| :--- | :---: | :--- | :--- | :--- |
| <img src="https://api.apify.com/v2/key-value-stores/j5l13XT1d0O0NQmTI/records/stepstone-dach.png" width="22" height="22" style="vertical-align: middle; margin-right: 4px;" /> **[`aperture/stepstone-dach-buying-signal-scraper`](https://apify.com/aperture/stepstone-dach-buying-signal-scraper)** *(This Actor)* | `DE`, `AT`, `BE`, `NL` | `jobs` | Stepstone Germany, Austria, Belgium & the Netherlands + statutory `/impressum` & `/over-ons` emails | $2.00 / $8.00 per 1k |
| <img src="https://api.apify.com/v2/key-value-stores/j5l13XT1d0O0NQmTI/records/seek-anz.png" width="22" height="22" style="vertical-align: middle; margin-right: 4px;" /> **[`aperture/seek-anz-buying-signal-scraper`](https://apify.com/aperture/seek-anz-buying-signal-scraper)** | `AU`, `NZ` | `jobs` | Seek Australia & New Zealand JSON/GraphQL + ANZ corporate `/contact` & `/privacy` emails | $2.00 / $8.00 per 1k |
| <img src="https://api.apify.com/v2/key-value-stores/j5l13XT1d0O0NQmTI/records/france-signals.png" width="22" height="22" style="vertical-align: middle; margin-right: 4px;" /> **[`aperture/france-buying-signal-scraper`](https://apify.com/aperture/france-buying-signal-scraper)** | `FR` | `jobs`, `funding` | France Travail B2B Hiring + Maddyness Startup Funding Rounds + `/mentions-legales` emails | $2.00 / $8.00 per 1k |
| <img src="https://api.apify.com/v2/key-value-stores/j5l13XT1d0O0NQmTI/records/eu-uk-procurement.png" width="22" height="22" style="vertical-align: middle; margin-right: 4px;" /> **[`aperture/eu-uk-procurement-award-signal-scraper`](https://apify.com/aperture/eu-uk-procurement-award-signal-scraper)** | `UK`, `FR`, `DE`, `NL`, `BE`, `AT` | `contract_award` | UK Contracts Finder & Find a Tender OCDS + France BOAMP Open Data v2.1 + EU TED Search v3 | $2.00 / $8.00 per 1k |
| <img src="https://api.apify.com/v2/key-value-stores/j5l13XT1d0O0NQmTI/records/b2b-icp-aggregator.png" width="22" height="22" style="vertical-align: middle; margin-right: 4px;" /> **[`aperture/b2b-buying-signal-icp-aggregator`](https://apify.com/aperture/b2b-buying-signal-icp-aggregator)** | `DE`, `AT`, `BE`, `NL`, `FR`, `UK`, `AU`, `NZ` | `jobs`, `funding`, `contract_award`, `multi_signal` | Zero-proxy cross-dataset deduplicator, multi-signal ICP scorer (`0–100`), 28-tool tech-stack extractor, and cold outreach hook engine | $3.00 / $9.00 per 1k |

***

### What does Stepstone DACH & Benelux B2B Buying-Signal Scraper do?

**Stepstone DACH & Benelux B2B Buying-Signal Scraper** is a high-speed, **No Cookies / No Login Required** scraper that extracts live B2B hiring intent across:

- **Germany**: [Stepstone Germany (`stepstone.de`)](https://www.stepstone.de)
- **Austria**: [Stepstone Austria (`stepstone.at`)](https://www.stepstone.at)
- **Belgium**: [Stepstone Belgium (`stepstone.be`)](https://www.stepstone.be)
- **The Netherlands**: [Stepstone Netherlands (`stepstone.nl`)](https://www.stepstone.nl)

When a B2B company advertises roles like *Account Executive*, *Sales Development Representative*, *Head of Sales*, or *RevOps Manager*, active budget allocation and expansion are occurring in real time. This Actor turns these hiring events into clean, normalized buying signals formatted for instant CRM routing.

#### Key Architectural Advantages

- **Pure HTTP/2 CheerioCrawler Architecture**: Runs in lightweight **256 MB – 1,024 MB** containers without bloated headless browser overhead. Zero session cookies, zero login credentials, and sub-30-second execution on standard runs.
- **The DACH & Benelux Statutory Impressum Advantage (`§ 5 DDG`, `§ 5 ECG`, Belgian CEL, Dutch BW Art. 3:15d)**: Commercial entities across Germany, Austria, Belgium, and the Netherlands are legally obligated to publish authentic corporate electronic contact channels. In `enriched_with_email` mode, the Actor crawls corporate `/impressum`, `/kontakt`, `/team`, `/over-ons`, and `/karriere` pages, decodes Cloudflare obfuscated emails, and prioritizes named individual contacts.
- **4-Tier Root Domain Waterfall**: Resolves true company domains (`domain`) by inspecting Schema.org `JobPosting` data, Stepstone Passport metadata, canonical company cards, and normalized company names—filtering out third-party ATS hosts (`personio.de`, `workday.com`, `greenhouse.io`, `softgarden.io`, `stepstone.*`).
- **Pre-Charge Blacklist Filtering (`blacklistDomains`)**: Exclude existing accounts, competitors, or recruiting agencies prior to Pay-Per-Event billing—excluded listings cost **`$0.00`**.
- **Enterprise MX Fingerprinting + BYOK Verifier Hook**: Fingerprints mail infrastructure (`Google Workspace`, `Microsoft 365`, `Hornetsecurity`, `IONOS`, `Hetzner`, `Strato`), detects disposable/privacy-shield MX hosts, runs safe SMTP handshake probes, and supports optional Bring-Your-Own-Key verification via **MillionVerifier**, **ZeroBounce**, or **Reacher** with zero platform markup.

***

### Data Extracted (Dataset Schema)

| Field Name | Type | Description |
| :--- | :--- | :--- |
| `detected_at` | `string` | ISO 8601 UTC timestamp when the signal was scraped (`2026-10-31T19:00:12Z`). |
| `company` | `string` | Normalized hiring company name (`StackFuel GmbH`, `Adyen N.V.`). |
| `domain` | `string` | Verified corporate root domain (`stackfuel.com`, `adyen.com`), cleansed of ATS/job board hosts. |
| `role_title` | `string` | Job role title listed on Stepstone (`Enterprise Account Executive (m/w/d)`). |
| `seniority_band` | `string` | Standardized seniority tier: `entry`, `mid`, `senior`, `manager`, `director`, `vp`, or `cxo`. |
| `location` | `string` | City, province, or workplace location (`Berlin`, `Wien`, `Brussels`, `Amsterdam`). |
| `geo` | `string` | ISO country code: `DE`, `AT`, `BE`, or `NL`. |
| `posted_date` | `string` | ISO 8601 publication timestamp of the job posting. |
| `signal_type` | `string` | Canonical signal type (`"jobs"`). |
| `signal_detail` | `string` | Ready-to-use CRM summary (`Job: Enterprise Account Executive (m/w/d) — Berlin [Full-time, Hybrid/Remote \| 51-250 employees]`). |
| `signal_source_actor` | `string` | Source Actor identifier (`stepstone-dach-buying-signal-scraper`). |
| `signal_date` | `string` | ISO date (`YYYY-MM-DD`) compatible with aggregation pipelines. |
| `evidence_url` | `string` | Canonical live URL to the Stepstone job listing. |
| `contact_email` | `string` | Verified named individual contact (`malte.fenger@stackfuel.com`) or free fallback corporate role inbox (`jobs@adyen.com`). |
| `contact_phone` | `string` | Direct telephone / recruiter contact number (`+49 30 5557890`, `+31 20 240 1234`). |
| `salary_band` | `string` | Disclosed compensation or salary range (`€ 75.000 - € 95.000 per jaar`). |
| `contract_type` | `string` | Standardized contract type (`Festanstellung / Vollzeit`, `Vast contract`, `Permanent`). |
| `email_verification_status` | `string` | Deliverability status: `ok` (verified named contact), `role_fallback` (free role inbox), `mx_only`, `invalid`, `unverified`, or `not_requested`. |
| `mx_provider` | `string` | Fingerprinted mail server (`Google Workspace`, `Microsoft 365`, `IONOS`, etc.). |
| `ppe_event_charged` | `string` | Pay-Per-Event tier billed (`job-signal-scraped`, `buying-signal-enriched`, or `none`). |
| `notes` | `string` | Enrichment provenance, SMTP verification codes, and MX diagnostic notes. |
| `error` | `string \| null` | Error description if extraction failed, or `null`. |

***

### Pay-Per-Event (PPE) Pricing & Strict Named-Contact Guarantee

No recurring monthly subscriptions. Pay only for successful, non-duplicate signals extracted:

| Scraper Mode (`scraperMode`) | PPE Event Name | Price | What Is Included | Strict Named-Contact Billing Guarantee |
| :--- | :--- | :--- | :--- | :--- |
| **`basic`** | `job-signal-scraped` | **$2.00 / 1,000 listings** ($0.002 / item) | Normalized hiring signals (`company`, 4-tier `domain`, `role_title`, `seniority_band`, `location`, `geo`, `signal_date`, `evidence_url`, `contact_phone`, `salary_band`, `contract_type`) + pre-charge `blacklistDomains` and Delta Mode deduplication. | Billed for standard listings **and** `enriched_with_email` runs where only a generic role inbox (`role_fallback`, provided free in `contact_email`) or no deliverable email was found. |
| **`enriched_with_email`** | `buying-signal-enriched` | **$8.00 / 1,000 verified contacts** ($0.008 / item) | Everything in Basic **plus** Impressum/over-ons crawling, Cloudflare decoding, named individual prioritization, DoH/DNS MX fingerprinting, and SMTP/BYOK email verification. | **You ONLY pay $0.008 when a verified NAMED individual contact (`firstname.lastname@`, `email_verification_status === "ok"`) is delivered!** Generic role inboxes (`info@`, `karriere@`, `jobs@`, `office@`) are kept in `contact_email` as `role_fallback` and **automatically downgraded to basic pricing ($0.002)**. |

#### Free-Tier Run Limits & Budget Protection

- **Strict Budget Guard (`ACTOR_MAX_TOTAL_CHARGE_USD`)**: The Actor monitors Apify's `ChargeResult` in real time and cleanly halts crawling the moment your maximum spend limit is reached—zero unbilled overruns.
- **25-Item Free-Tier Cap**: Accounts on Apify's Free Tier can test both `basic` and `enriched_with_email` modes up to **25 items per run**. Upgrade to any paid Apify plan for high-volume jobs (up to 5,000 records per run) and automated schedules.

***

### Copy-Paste Recipes & Integration Workflows

#### 1. Scheduled Monday Delta Monitoring (`onlyNewSignals: true` + `postedWithinDays: 7`)

Set up a recurring Apify Task scheduled every **Monday at 07:00 UTC** (Cron: `0 7 * * 1`). This pulls jobs posted over the past week and skips any previously emitted listings across runs via the persistent Key-Value Store:

```json
{
  "keywords": ["Account Executive", "Sales Development Representative", "Head of Sales"],
  "country": "DE",
  "location": "Berlin",
  "postedWithinDays": 7,
  "onlyNewSignals": true,
  "monitorScopeName": "dach-b2b-sales-monday",
  "scraperMode": "enriched_with_email",
  "seniorityFilter": ["mid", "senior", "manager", "director"],
  "blacklistDomains": ["existing-customer.de", "competitor.de"],
  "maxItems": 200
}
```

#### 2. Clay HTTP API Integration (`POST run-sync-get-dataset-items`)

Import real-time Stepstone buying signals directly into your Clay table using an **HTTP API (Enrichment / Action)** column:

**Endpoint:**

```http
POST https://api.apify.com/v2/acts/aperture~stepstone-dach-buying-signal-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN&maxTotalChargeUsd=2.00
Content-Type: application/json
```

**Request Body:**

```json
{
  "searchUrls": [
    "https://www.stepstone.nl/jobs/sales-director/in-amsterdam?ag=7",
    "https://www.stepstone.de/jobs/account-executive/in-munich?ag=7"
  ],
  "maxItems": 100,
  "scraperMode": "enriched_with_email",
  "onlyNewSignals": true
}
```

**Clay Column Mappings:**

- **Company Domain:** `{{domain}}`
- **Signal Summary:** `{{signal_detail}}`
- **Evidence URL:** `{{evidence_url}}`
- **Verified Contact Email:** `{{contact_email}}` (filter on `email_verification_status == 'ok'`)
- **Direct Phone:** `{{contact_phone}}`
- **Compensation Range:** `{{salary_band}}`
- **Contract Type:** `{{contract_type}}`

#### 3. Claude Desktop, Cursor & Antigravity MCP Server Configuration

Connect [`@apify/actors-mcp-server`](https://www.npmjs.com/package/@apify/actors-mcp-server) to **Claude Desktop** (`claude_desktop_config.json`) or **Cursor / Google Antigravity** (`.cursor/mcp.json` or `.agents/mcp_config.json`) to allow your AI agent to discover live Stepstone hiring signals on demand:

```json
{
  "mcpServers": {
    "apify": {
      "command": "npx",
      "args": [
        "-y",
        "@apify/actors-mcp-server",
        "--actors",
        "aperture/stepstone-dach-buying-signal-scraper,aperture/seek-anz-buying-signal-scraper,aperture/france-buying-signal-scraper,aperture/eu-uk-procurement-award-signal-scraper,aperture/b2b-buying-signal-icp-aggregator"
      ],
      "env": {
        "APIFY_TOKEN": "YOUR_APIFY_TOKEN"
      }
    }
  }
}
```

**Prompt Example for Claude / Cursor:**

> *"Use the Stepstone scraper to find companies hiring Account Executives or SDRs in Amsterdam and Rotterdam with jobs posted in the last 7 days. Return the top 20 verified leads with contact emails, telephone numbers, and salary ranges."*

***

### Input Configuration

| Parameter | Type | Default | Description |
| :--- | :--- | :--- | :--- |
| `keywords` | `array` | `["Account Executive"]` | Persona role titles or hiring intent keywords (e.g. `["SDR", "RevOps", "BDR"]`). |
| `country` | `string` | `"DE"` | Stepstone market: `"DE"` (`stepstone.de`), `"AT"` (`stepstone.at`), `"BE"` (`stepstone.be`), or `"NL"` (`stepstone.nl`). |
| `location` | `string` | `""` | Target city or province (e.g. `"Berlin"`, `"Wien"`, `"Brussels"`, `"Amsterdam"`). |
| `searchUrls` | `array` | `[]` | Copy-pasted browser search URLs from Stepstone (`.de`, `.at`, `.be`, `.nl`). Overrides keyword/location when provided. |
| `postedWithinDays`| `number` | `undefined` | Filter listings published within `1`, `3`, `7`, `14`, or `30` days (`ag=N`). |
| `contractTypeFilter` | `array` | `[]` | Filter jobs by contract type substrings (e.g. `["Full-time", "Vast contract", "Festanstellung"]`). |
| `onlyNewSignals` | `boolean` | `false` | **Cross-Run Delta Mode**: Skips previously emitted listings stored in `buying-signal-dedup-store` at `$0.00` cost. |
| `monitorScopeName`| `string` | `""` | Custom partition namespace for Delta Mode deduplication storage across separate campaigns. |
| `maxItems` | `integer` | `10` | Maximum signal records to collect per run (`1`–`5000`; capped at `25` on Free-Tier). |
| `scraperMode` | `string` | `"basic"` | `"basic"` ($2.00 / 1k) or `"enriched_with_email"` ($8.00 / 1k verified named contact). |
| `seniorityFilter` | `array` | `[]` | Filter by seniority band: `["entry", "mid", "senior", "manager", "director", "vp", "cxo"]`. |
| `blacklistDomains` | `array` | `[]` | Root domains or company names excluded before PPE billing fires (`$0.00` spend). |
| `proxyConfiguration` | `object` | `undefined` | Crawlee proxy options (supports Apify Proxy or custom residential proxies). |
| `customEmailVerifierApiKey` | `string` | `""` | BYOK verification token: MillionVerifier (`mv:<KEY>`), ZeroBounce (`zb:<KEY>`), or Reacher (`reacher:<URL>\|<SECRET>`). |

***

### Sample Output

```json
[
  {
    "detected_at": "2026-10-31T19:00:12Z",
    "company": "StackFuel GmbH",
    "domain": "stackfuel.com",
    "role_title": "Enterprise Account Executive (m/w/d)",
    "seniority_band": "mid",
    "location": "Berlin",
    "geo": "DE",
    "posted_date": "2026-10-30T10:00:00.000Z",
    "signal_type": "jobs",
    "signal_detail": "Job: Enterprise Account Executive (m/w/d) — Berlin [Full-time, Hybrid/Remote | 51-250 employees]",
    "signal_source_actor": "stepstone-dach-buying-signal-scraper",
    "signal_date": "2026-10-30",
    "evidence_url": "https://www.stepstone.de/stellenangebote--Enterprise-Account-Executive-Berlin-StackFuel-GmbH--14571042-inline.html",
    "contact_email": "malte.fenger@stackfuel.com",
    "contact_phone": "+49 30 5557890",
    "salary_band": "€ 70.000 - € 90.000",
    "contract_type": "Festanstellung / Vollzeit",
    "email_verification_status": "ok",
    "mx_provider": "Google Workspace",
    "ppe_event_charged": "buying-signal-enriched",
    "notes": "source=impressum; verify=smtp_250_ok; mx=Google Workspace",
    "error": null
  },
  {
    "detected_at": "2026-10-31T19:02:30Z",
    "company": "Adyen N.V.",
    "domain": "adyen.com",
    "role_title": "Enterprise Account Executive Benelux",
    "seniority_band": "senior",
    "location": "Amsterdam",
    "geo": "NL",
    "posted_date": "2026-10-30T10:00:00.000Z",
    "signal_type": "jobs",
    "signal_detail": "Job: Enterprise Account Executive Benelux — Amsterdam [Full-time]",
    "signal_source_actor": "stepstone-dach-buying-signal-scraper",
    "signal_date": "2026-10-30",
    "evidence_url": "https://www.stepstone.nl/vacatures--Enterprise-AE-Amsterdam-Adyen-NV--99887766-inline.html",
    "contact_email": "jobs@adyen.com",
    "contact_phone": "+31 20 240 1234",
    "salary_band": "€ 75.000 - € 95.000 per jaar",
    "contract_type": "Vast contract",
    "email_verification_status": "role_fallback",
    "mx_provider": "Google Workspace",
    "ppe_event_charged": "job-signal-scraped",
    "notes": "source=impressum; verify=mx_fingerprinted_impressum_match; mx=Google Workspace",
    "error": null
  }
]
```

***

### FAQ & Legal / Compliance Disclosures

#### Why did an item with a valid `contact_email` charge `job-signal-scraped` ($0.002) instead of `buying-signal-enriched` ($0.008)?

Our **Strict Named-Contact Enriched Guarantee** protects your budget. We only bill the $0.008 enriched tier when we uncover a **verified named individual decision-maker** (`firstname.lastname@`, `f.lastname@`). When a company only publishes a departmental role inbox (`info@`, `jobs@`, `karriere@`, `office@`), we never throw that data away—we include it in `contact_email` as a **free bonus** (`email_verification_status: "role_fallback"`) and bill it at the basic $0.002 rate.

#### Does this Actor require Stepstone cookies or login credentials?

No. All listing discovery, structured `JobPosting` schema parsing, and corporate Impressum extractions run via fast, stateless HTTP/2 requests with zero cookies or authentication.

#### Legal & GDPR Compliance

This Actor extracts publicly published commercial employment postings and statutory corporate disclosure notices (`/impressum`, `/kontakt`, `/over-ons`) required by European trade law. While corporate entities are legally required to disclose direct contact channels, personal contact details may constitute personal data under GDPR in the European Union. Ensure you process B2B contact data in accordance with legitimate interest requirements and local regulations.

***

Published and supported by **[Aperture — Data Aggregation Solutions](https://apify.com/aperture)**. For custom enterprise feeds, feedback, or dedicated proxy pools, open an issue in the Apify Console.

# Actor input Schema

## `keywords` (type: `array`):

Concrete B2B job titles or role keywords signaling active buying intent on Stepstone (e.g., Account Executive, SDR, BDR, RevOps, Head of Sales).

## `country` (type: `string`):

Target Stepstone country domain (ISO 3166-1 alpha-2 geo code): DE (stepstone.de), AT (stepstone.at), BE (stepstone.be), or NL (stepstone.nl).

## `location` (type: `string`):

Optional city, state, or region filter on Stepstone (e.g., Berlin, München, Wien, Brussels, Amsterdam). Leave empty to search nationwide.

## `searchUrls` (type: `array`):

Optional list of direct Stepstone search URLs (stepstone.de, stepstone.at, stepstone.be, stepstone.nl) copied directly from your browser. When provided, these URLs are crawled directly alongside any keywords.

## `postedWithinDays` (type: `integer`):

Optional recency filter to restrict Stepstone search results to jobs published within the last 1, 3, 7, 14, or 30 days (\&ag=N).

## `contractTypeFilter` (type: `array`):

Optional filter to retain specific employment contract types (e.g., Full-time, Part-time, Permanent, Contract).

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

Maximum number of normalized job buying-signal records to output. Free-tier Apify runs are capped at 25 items per run; paid Apify plans support unlimited runs.

## `scraperMode` (type: `string`):

Choose 'basic' ($2.00 / 1,000 listings via job-signal-scraped) for normalized B2B hiring signals, or 'enriched_with_email' ($8.00 / 1,000 verified named-contact listings via buying-signal-enriched) to crawl DACH/Benelux Impressum, team, and contact pages for verified named individual contacts (e.g., firstname.lastname@company.de). Generic role addresses (info@, jobs@, karriere@, office@) are still included in contact_email as a free 'role_fallback' bonus and automatically downgraded to basic pricing ($0.002).

## `seniorityFilter` (type: `array`):

Optional filter to include only specific normalized seniority_band values (entry, mid, senior, manager, director, vp, cxo). Leave empty to capture all seniority bands.

## `blacklistDomains` (type: `array`):

Optional list of company root domains (e.g., existing-client.de, competitor.com) to exclude. Matching listings are filtered out before charging so blacklisted domains cost $0.

## `onlyNewSignals` (type: `boolean`):

When enabled, persists seen job/company keys in a named Apify Key-Value Store (monitorScopeName) across scheduled runs and skips previously emitted listings BEFORE enrichment or PPE charging ($0 cost for already-seen jobs).

## `monitorScopeName` (type: `string`):

Name of the persistent Apify Key-Value Store used to track seen signal keys when onlyNewSignals is enabled (default: 'buying-signal-dedup-store').

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

Optional Apify Proxy or custom proxy URLs. Lightweight HTTP requests run with zero cookies or login; enable Apify Proxy for high-volume scheduled runs.

## `customEmailVerifierApiKey` (type: `string`):

Optional Bring-Your-Own-Key (BYOK) token for third-party HTTPS SMTP verification during 'enriched_with_email' mode. Supports MillionVerifier ('mv:\<API_KEY>' or raw key), ZeroBounce ('zb:\<API_KEY>'), or Reacher ('reacher:\<ENDPOINT_URL>|\<HEADER_SECRET>'). Leave empty to use the built-in zero-cost DNS/DoH MX provider fingerprinting + SMTP verifier.

## Actor input object example

```json
{
  "keywords": [
    "Account Executive"
  ],
  "country": "DE",
  "location": "",
  "searchUrls": [],
  "contractTypeFilter": [],
  "maxItems": 10,
  "scraperMode": "basic",
  "seniorityFilter": [],
  "blacklistDomains": [],
  "onlyNewSignals": false,
  "monitorScopeName": "buying-signal-dedup-store",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `dataset` (type: `string`):

Dataset containing normalized Stepstone DACH/BE buying-signal records and optional verified Impressum emails.

## `state` (type: `string`):

Key-value store record persisting crawl progress and graceful shutdown checkpoints.

# 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 = {
    "keywords": [
        "Account Executive"
    ],
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("aperture/stepstone-dach-buying-signal-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 = {
    "keywords": ["Account Executive"],
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("aperture/stepstone-dach-buying-signal-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 '{
  "keywords": [
    "Account Executive"
  ],
  "maxItems": 10
}' |
apify call aperture/stepstone-dach-buying-signal-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,aperture/stepstone-dach-buying-signal-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/idZZRizPvXw9erx7P/builds/5a8YpDFxRtsuBNQGP/openapi.json
