# B2B Company Enrichment — Qualified Leads (`impressionable_lupine/qualified-b2b-lead-finder`) Actor

Find qualified B2B leads and enrich known company domains with public business contacts, matching criteria and source evidence. Structured JSON for sales prospecting. $0.07/qualified lead; usage included.

- **URL**: https://apify.com/impressionable_lupine/qualified-b2b-lead-finder.md
- **Developed by:** [Majd Hijazin](https://apify.com/impressionable_lupine) (community)
- **Categories:** Lead generation, Agents
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$70.00 / 1,000 qualified leads

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 Enrichment — Qualified Leads

Which supplied companies meet my supported criteria and have public business contacts?

Qualify existing prospect lists using field-level evidence. Geographic discovery is a separate, less validated mode.

Observed company fields and criteria are sourced individually. Inferences are labeled and unknown criteria cannot silently pass. A live website does not prove current operation; a public email does not prove deliverability. Discovery requires additional providers; unsupported criteria remain explicit. Local pending patch reads explicit matching business metadata on bounded contact/about pages; conflicting fields remain unknown.

### Agent input and cost

Exact Actor: `impressionable_lupine/qualified-b2b-lead-finder`. Current configured price: $0.07 per `qualified-lead`; platform usage included. Historical default build: 0.2.2.

```json
{
  "mode": "enrich",
  "domains": [
    "https://cliniquealpa.co.uk/"
  ],
  "max_results": 1,
  "email_required": true
}
```

Hard request bounds: At most 120 candidates; larger targets need separate batches. Public website acquisition is bounded to 240 requests, 40 MB and 180 seconds. Preserve source evidence and unknowns; never fabricate contacts, entities, dates, currencies or actual purchase intent. Lead enriches supplied domains; geographic discovery remains experimental. SaaS extraction does not establish regional or active annual/monthly billing unless explicitly evidenced. Updates requires article-level publication dates; coverage is bounded and incomplete.

Connect to https://mcp.apify.com?tools=actors,runs,storage securely, fetch the exact Actor details before any approved capped call, save its run ID and retrieve that same run. Input schemas, report schema and BILLING receipt are part of this release. A new run is a new charge; do not buy again to poll. Caller-owned durable budget state is required.

### Historical owner-funded output

Run J7hFalvqwlDnMaIRW, build 0.2.2, 4 October 2026. Unchanged recorded structure, not a fresh source check or customer purchase.

```json
{
  "schema_version": "1.0",
  "report_id": "49dd95e53827b4fcc21cf8ed08657d40245c7c3f72372f3997127da9f95f66c2",
  "status": "success",
  "error_code": null,
  "error_message": null,
  "checked_at": "2026-10-04T08:53:00.347Z",
  "completed_at": "2026-10-04T08:53:01.120Z",
  "mode": "enrich",
  "query": null,
  "requested_results": 1,
  "discovered_count": 1,
  "deduplicated_count": 1,
  "processed_count": 1,
  "website_live_count": 1,
  "business_email_found_count": 1,
  "qualified_count": 1,
  "delivered_count": 1,
  "excluded_prior_count": 0,
  "truncated": false,
  "coverage_scope": "Only the supplied companies and their accessible public websites were checked.",
  "leads": [
    {
      "schema_version": "1.0",
      "lead_id": "5adba6d8822c3f105cf445ab16571f602d728fefc494c0420547e0d2334bf817",
      "company_name": "Clinique Alpa",
      "domain": "cliniquealpa.co.uk",
      "website": "https://cliniquealpa.co.uk/",
      "website_status": "live",
      "category": null,
      "description": "Unhurried private GP appointments in Palmers Green, North London, with named GMC-registered doctors.",
      "location": {
        "city": null,
        "region": null,
        "country": null,
        "address": null
      },
      "contact": {
        "business_email": "enquiries@cliniquealpa.co.uk",
        "business_phone": "+442088828088",
        "contact_page": "https://cliniquealpa.co.uk/contact/"
      },
      "socials": {
        "linkedin": null,
        "instagram": null,
        "facebook": null
      },
      "rating": null,
      "review_count": null,
      "business_status": "appears_active",
      "parent_company": null,
      "business_location": null,
      "chain_status": "likely_independent",
      "booking_capability": "not_observed",
      "ecommerce_capability": "unknown",
      "technology_signals": [],
      "qualification": {
        "status": "qualified",
        "qualified": true,
        "matched_criteria": [
          {
            "criterion": "business_exists",
            "basis": "observed"
          },
          {
            "criterion": "public_business_email",
            "basis": "observed"
          }
        ],
        "failed_criteria": [],
        "unknown_criteria": []
      },
      "evidence": [
        {
          "field": "website",
          "source_url": "https://cliniquealpa.co.uk/",
          "checked_at": "2026-10-04T08:53:00.822Z",
          "basis": "observed",
          "confidence": "medium",
          "sha256": "cffffcabf79c7ff8167fb30d8a5d3c8a6983461544c1133f54578ab1ee410b38"
        },
        {
          "field": "company_name",
          "source_url": "https://cliniquealpa.co.uk/",
          "checked_at": "2026-10-04T08:53:00.822Z",
          "basis": "observed",
          "confidence": "medium",
          "sha256": "cffffcabf79c7ff8167fb30d8a5d3c8a6983461544c1133f54578ab1ee410b38"
        },
        {
          "field": "description",
          "source_url": "https://cliniquealpa.co.uk/",
          "checked_at": "2026-10-04T08:53:00.822Z",
          "basis": "observed",
          "confidence": "medium",
          "sha256": "cffffcabf79c7ff8167fb30d8a5d3c8a6983461544c1133f54578ab1ee410b38"
        },
        {
          "field": "business_email",
          "source_url": "https://cliniquealpa.co.uk/",
          "checked_at": "2026-10-04T08:53:00.822Z",
          "basis": "observed",
          "confidence": "high",
          "sha256": "cffffcabf79c7ff8167fb30d8a5d3c8a6983461544c1133f54578ab1ee410b38"
        },
        {
          "field": "phone",
          "source_url": "https://cliniquealpa.co.uk/",
          "checked_at": "2026-10-04T08:53:00.822Z",
          "basis": "observed",
          "confidence": "high",
          "sha256": "cffffcabf79c7ff8167fb30d8a5d3c8a6983461544c1133f54578ab1ee410b38"
        },
        {
          "field": "contact_page",
          "source_url": "https://cliniquealpa.co.uk/contact/",
          "checked_at": "2026-10-04T08:53:01.044Z",
          "basis": "observed",
          "confidence": "high",
          "sha256": "30147e75c80ead80bc361d01c4614970f89ab20fd9e792556dbbe1f66f35caad"
        },
        {
          "field": "business_status",
          "source_url": "https://cliniquealpa.co.uk/",
          "checked_at": "2026-10-04T08:53:00.822Z",
          "basis": "inferred",
          "confidence": "low",
          "sha256": "cffffcabf79c7ff8167fb30d8a5d3c8a6983461544c1133f54578ab1ee410b38"
        }
      ],
      "field_confidence": {
        "website": "medium",
        "email": "high",
        "category": "unavailable",
        "active_business": "low"
      },
      "source_url": "https://cliniquealpa.co.uk/",
      "source_provider": "customer_input",
      "retrieved_at": "2026-10-04T08:53:01.104Z",
      "status": "success",
      "issues": []
    }
  ],
  "qualification_summary": [
    {
      "criterion": "business_exists",
      "result": "matched",
      "count": 1
    },
    {
      "criterion": "public_business_email",
      "result": "matched",
      "count": 1
    }
  ],
  "unsupported_criteria": [],
  "provider_runs": [],
  "source_errors": [],
  "http_request_count": 3,
  "duration_ms": 773,
  "billing_event": null,
  "billing_quantity": 0
}
```

### Release evidence

Reuses the existing intelligence engine and reviewed reliability repairs. Candidates must pass private build and bounded cloud contract checks before release. Recorded owner-funded examples above are dated, not fresh customer purchases. Broad coverage, repeat demand, settled revenue and profitability are unproven.

Built by Majd Hijazin / Boatify Rentals LLC; the publisher can earn from eligible paid calls.

### Copy-paste API

Save the minimal JSON above as input.json. After caller approval, reserve $0.07 in a durable budget ledger, then run:

```sh
curl --fail-with-body -X POST 'https://api.apify.com/v2/acts/aos5zh1SYdavQsonV/runs?build=publication-2026-10-08&memory=512&timeout=120&maxTotalChargeUsd=0.07' -H 'Authorization: Bearer <YOUR_PRIVATE_APIFY_TOKEN>' -H 'Content-Type: application/json' --data @input.json
```

For MCP, connect to `https://mcp.apify.com?tools=actors,runs,storage`, call `fetch-actor-details` for `impressionable_lupine/qualified-b2b-lead-finder`, and then `call-actor` with the JSON input and callOptions containing build `publication-2026-10-08`, memory 512, timeout 120 and maxTotalChargeUsd 0.07. Save the returned run ID and retrieve that same run, its OUTPUT, dataset and BILLING receipt. Never create another paid run just to poll. A cap does not promise a positive result.

# Actor input Schema

## `query` (type: `string`):

Experimental provider-led discovery using documented filters only; source coverage and provider costs require validation. Prefer mode=enrich with supplied domains for the initial supported workflow. Unsupported criteria remain unknown.

## `max_results` (type: `integer`):

Target maximum. One run checks at most 120 candidates; larger requests return a partial report and require batching.

## `companies` (type: `array`):

Array of objects with website and/or name. This selects enrich mode by default. At most five companies may omit a website per run because each name requires a separate paid search-provider call; provide domains for larger batches.

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

Simple list of company domains or URLs. This also selects enrich mode.

## `exclude_lead_ids` (type: `array`):

Optional lead_id values from previous runs. Matching leads are skipped and are never counted as billable results. Keep this list in your agent's own state for cross-run deduplication.

## `mode` (type: `string`):

enrich checks supplied companies/domains; discover searches supported providers. Providing companies or domains selects enrich by default.

## `industry` (type: `string`):

Requested business category. It must match observed category or labeled website evidence; unknown category cannot qualify a lead.

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

Requested city/region. Qualification needs sourced address fields; a domain extension is not location evidence. Broad continental regions remain unknown.

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

Requested explicit country name or ISO country code. Checked against source-stated country/address evidence; never inferred from a domain suffix or phone prefix. Contradictions remain unknown.

## `minimum_rating` (type: `number`):

Minimum source-provided rating from 0 to 5. Missing ratings remain unknown and cannot pass this criterion.

## `minimum_review_count` (type: `number`):

Minimum source-provided review count. Missing counts remain unknown; website contact information does not establish reviews.

## `website_required` (type: `boolean`):

Require a checked live public website. This verifies website availability, not current business operation.

## `email_required` (type: `boolean`):

Require an observed public business email. Publication is checked; mailbox ownership and deliverability are not tested.

## `contact_required` (type: `boolean`):

Require at least one verified public business email or phone number. Use email_required and phone_required together only when both are needed.

## `phone_required` (type: `boolean`):

Require an observed public business phone number. Publication is checked; the number is not called.

## `social_profile_required` (type: `boolean`):

Require at least one observed linked public social profile. Profile ownership and activity are not independently verified.

## `exclude_chains` (type: `boolean`):

An inference from public signals; not proof of ownership.

## `exclude_booking` (type: `boolean`):

No observed booking link is not proof no booking exists.

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

Phrases required in the sourced company name, description or category. Phrase matching is explicit; no latent purchase intent is inferred.

## `exclude_keywords` (type: `array`):

Phrases that disqualify a company when present in its sourced name, description or category. Missing descriptive content remains unknown.

## `discovery_source` (type: `string`):

auto uses bounded Maps and Search discovery. A specific maps, search, or osm value uses only that source family; osm does not silently launch paid Maps or Search providers. OSM is explicit-only while public Overpass availability is unreliable.

## `include_unqualified` (type: `boolean`):

Return additional audit rows when true. Only qualification.qualified=true rows count as paid qualified-lead events.

## `include_hiring_signal` (type: `boolean`):

Reserved; currently reported as unsupported and never inferred.

## `enrichment_options` (type: `object`):

Optional public website checks.

## `active_required` (type: `boolean`):

Require verified current operation. A live website alone is only a low-confidence inference, so this criterion remains unknown and the lead is not qualified without stronger evidence.

## Actor input object example

```json
{
  "max_results": 25,
  "website_required": false,
  "email_required": false,
  "contact_required": false,
  "phone_required": false,
  "social_profile_required": false,
  "exclude_chains": false,
  "exclude_booking": false,
  "discovery_source": "auto",
  "include_unqualified": false,
  "include_hiring_signal": false,
  "active_required": false
}
```

# Actor output Schema

## `report` (type: `string`):

JSON report with source scope, qualification counts, errors and lead rows.

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

Structured qualified business rows in the default dataset.

## `billing` (type: `string`):

Actual accepted qualified-lead count; not confirmation of customer revenue.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("impressionable_lupine/qualified-b2b-lead-finder").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("impressionable_lupine/qualified-b2b-lead-finder").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 '{}' |
apify call impressionable_lupine/qualified-b2b-lead-finder --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,impressionable_lupine/qualified-b2b-lead-finder"
        }
    }
}
```

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/aos5zh1SYdavQsonV/builds/l5iYqaIdthlLGhPTO/openapi.json
