# Lead Adjudicator — pay only for what we can prove (`ledgerworks/lead-adjudicator`) Actor

A verdict for every record against the criteria you declared: filter respected, field present, duplicate, email reachable. You are not charged for records we cannot adjudicate. Live Excel receipt included.

- **URL**: https://apify.com/ledgerworks/lead-adjudicator.md
- **Developed by:** [Alessandro Bonzio](https://apify.com/ledgerworks) (community)
- **Categories:** Lead generation, Automation, Developer tools
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.50 / 1,000 record adjudicateds

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Lead Adjudicator — pay only for what we can prove

You bought 5,000 records. You paid for 5,000. Then you opened the file and found
1,200 with no email, 900 outside the region you asked for, 400 duplicates and
600 `info@` addresses instead of people.

You paid for 5,000. You can use 1,900. Nobody promised you anything you could
check.

This Actor gives you a **verdict for every record**, against the criteria *you*
declared — and a live Excel receipt with the one number that matters: what you
actually paid per usable record.

### What it checks

| Column | What it decides |
|---|---|
| **The field you asked for is empty** | Certain, always |
| **A criterion you declared is not met** | Certain, always |
| **This record is a duplicate of an earlier one** | Certain, always |
| **The email cannot receive mail** | Dead domains, throwaway services, role addresses and typos: certain. Whether a specific mailbox exists: **we say we don't know** |

### The pricing, in full

> **$0.005 per record we can adjudicate.**
> **The first 200 adjudicated records of every run are free — always.**
> **Never more than $1.50 per 1,000 records you gave us.**

Every one of those three numbers is checkable against figures printed in your
receipt. Nothing here asks you to take our word for it.

Three consequences worth stating plainly:

1. **Records we cannot adjudicate are free.** If we cannot prove a verdict, you
   do not pay for that record. The receipt marks every one of them, so you can
   check we applied it.
2. **On the B2B list we measured, this works out to about $0.000875 per record
   you gave us** — about a sixth of what the same list would cost if we billed
   every record we delivered — because most of that list falls into "we don't
   know" on the email column and we do not bill it. Your list will differ: the
   more of it we can adjudicate, the more you pay, up to $0.005 per record, and
   never past the cap above.
3. **Nothing here will ever be taken away.** The free allowance is permanent,
   not a trial. There is no future day on which this becomes more expensive
   than it says today.

#### Two numbers, and you pay the lower

We work out what you owe twice, and charge whichever comes out smaller:

- **By the record**: `(records we adjudicated − 200 free) × $0.005`
- **By the size of the job**: `records you gave us ÷ 1000 × $1.50`

That second figure is a ceiling, not a price — it is there so that a very clean
list cannot end up costing more to check than it is worth. It is worked out on
the records **you** handed us, which we count in front of you: there is no
figure you have to declare, and nothing you could declare that would change it.

| You give us | We can adjudicate | By the record | Ceiling | **You pay** |
|---:|---:|---:|---:|---:|
| 999 | 174 (17%) | $0.00 | $1.50 | **$0.00** |
| 5,000 | 875 (17%) | $3.38 | $7.50 | **$3.38** |
| 5,000 | 3,175 (64%) | $14.88 | $7.50 | **$7.50** |
| 100,000 | 17,500 (17%) | $86.50 | $150.00 | **$86.50** |

The first row is free because 174 adjudicated records all sit inside the 200
you get free every run — not because of the ceiling. On a typical B2B list,
runs below about 1,100 records cost nothing at all.

The price shown is the one that applies on Apify's **Free** plan. If your
account is on a higher plan, Apify's own tier discount applies and you pay
**less** than the figure above — never more.

### What you get back

- **A live Excel workbook.** Real formulas, not a picture of numbers: the totals
  are `COUNTIF`s over the per-record verdicts, so you can re-do our arithmetic
  in front of us. Change the amount you paid in the yellow cell and every figure
  recalculates.
- **A dataset with one row per record**: position in your file, verdict, whether
  it was charged, and why.

### What it does not do

It does not scrape, enrich, or look anything up about the people in your file.
It reads the records you give it, compares them to the criteria you declare, and
returns a verdict. Nothing is stored: there is no database, and the workbook is
held only for the life of the run.

### Input

| Field | Required | What it is |
|---|---|---|
| `datasetId` | yes | The dataset to adjudicate. Read-only access, that dataset only. |
| `filters` | no | The criteria you asked for, e.g. `[{"field":"region","op":"equals","value":"Lombardia"}]` |
| `dedupeKeys` | no | Fields that identify one record, e.g. `["email"]` |
| `emailField` | no | Name of the email field, to turn on the email column |
| `amountPaidUsd` | no | What you paid for the data. Used only to show your real cost per usable record. **It has no effect on what you are charged.** |
| `locale` | no | `en` or `it` |

### Privacy

This tool reads only the dataset you point it at, and has no access to anything
else in your account. It keeps nothing after the run. When the email column is
enabled, only the **domain** part of each address is sent to a DNS resolver —
never the part that identifies the person.

A data processing agreement is available on request.

***

Built by [ledgerworks](https://apify.com/ledgerworks). Source: BUSL-1.1.

# Actor input Schema

## `datasetId` (type: `string`):

The dataset you want checked, record by record. It is read only — this Actor never writes to it, and has no access to anything else in your account.

## `filters` (type: `array`):

The criteria you specified when you bought this data, so every record can be checked against them. Each entry: {"field":"region","op":"equals","value":"Lombardia"}. Operators: nonEmpty, equals, oneOf, min, max, after, before, matches. Dotted paths work: "company.country".

## `dedupeKeys` (type: `array`):

Two rows with the same values in these fields are the same record, and the second one is reported as a duplicate. Example: \["email"] or \["name","company"]. Leave empty to compare whole rows.

## `emailField` (type: `string`):

Turn on the email column by naming the field, e.g. "email". Dead domains, throwaway services, role addresses and typos are identified with certainty. Whether a specific mailbox exists cannot be verified — those records are reported as Not adjudicated and are NOT charged.

## `amountPaidUsd` (type: `number`):

What this dataset cost you, from your Apify console. Optional: it produces your real cost per usable record in the receipt. It has no effect on what you are charged — the ceiling is worked out on the records you gave us, which we count ourselves, so there is nothing you can declare here that would change your bill.

## `locale` (type: `string`):

Language used for the labels in the generated workbook.

## Actor input object example

```json
{
  "filters": [],
  "dedupeKeys": [],
  "locale": "en"
}
```

# Actor output Schema

## `verdicts` (type: `string`):

One row per record you gave us: its position in your file, the verdict, whether it was charged, and why. This is the evidence behind the bill — you can re-do our arithmetic on it.

## `receipt` (type: `string`):

A real workbook, not a picture of numbers: the totals are COUNTIFs over the per-record verdicts, so every figure derives from the rows above it. Change the amount you paid in the yellow cell and the whole receipt recalculates.

# 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("ledgerworks/lead-adjudicator").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("ledgerworks/lead-adjudicator").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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 ledgerworks/lead-adjudicator --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=ledgerworks/lead-adjudicator",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/tfqNddE8oUaPTDE0S/builds/1lyPDVhO2FfYGE4rl/openapi.json
