# LeadLint Revenue Kits - Proof-to-Pitch Packs (`may-i-ai/leadlint-revenue-kits`) Actor

Turn verified local-business website gaps into complete private Revenue Kits with proof, a concept preview, proposal, prepared outreach, and seller-entered deal math.

- **URL**: https://apify.com/may-i-ai/leadlint-revenue-kits.md
- **Developed by:** [Leron Mollon](https://apify.com/may-i-ai) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $100.00 / 1,000 revenue kits

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/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

## LeadLint Revenue Kits

Tell LeadLint what you sell and where. It returns complete, evidence-backed prospect packages—not another spreadsheet of names.

Each delivered Revenue Kit contains a real business record, a timestamped and specifically verified website problem, observable activity evidence, a private white-label concept preview, a proposal, a three-touch outreach sequence, and seller-entered deal math. LeadLint prepares these assets but never contacts anyone.

### Why a Revenue Kit is different

A business is delivered only when every mandatory gate passes:

- a business name and public phone are present;
- the record has at least the requested number of public reviews;
- the quality score meets the chosen threshold;
- the source record has no listed website, or the listed site produced a confirmed 404, 410, DNS-resolution failure, or TLS-certificate failure;
- the business is not a duplicate in the current run; and
- unless repeat delivery is explicitly enabled, the business was not delivered in an earlier run for the same Apify account.

Timeouts, rate limits, protected sites, low ratings, and generic network errors are not treated as definite website problems. Weak or ambiguous prospects do not become Revenue Kits.

### What the customer receives

- **Revenue Kit dashboard:** a polished index of every qualified kit in the run;
- **private concept preview:** a responsive, white-label HTML page using only supplied public facts and the seller's actual offer;
- **timestamped proof:** the exact observed issue, status, and verification time;
- **proposal:** public facts, evidence boundary, seller-entered scope, price, and cost math;
- **three-touch outreach sequence:** first message, day-three follow-up, and day-seven close-out, all labeled `prepared_not_sent`;
- **machine-readable kit:** structured JSON in the run dataset for CRM or workflow use;
- **asset manifest:** stable keys for each preview and proposal;
- **repeat protection:** persistent delivery history prevents paying for the same business on routine reruns.

The preview is prominently labeled **PRIVATE CONCEPT PREVIEW — NOT A LIVE BUSINESS WEBSITE**. It is never published as the prospect's website and never claims the business approved it.

### Input

Provide exactly one business source:

1. `searchTerms` plus `location`, `locations`, or both for current Google Maps results through the maintained source Actor;
2. `sourceDatasetId` for an existing Apify dataset; or
3. `records` for a non-empty array of business records.

For Revenue Kits mode, also enter:

- `sellerBrandName`;
- `serviceOfferName`;
- `serviceOfferSummary` containing the actual scope you sell;
- optional `sellerContact`;
- optional `offerPriceUsd`; and
- optional `estimatedFulfillmentCostUsd` when a price is supplied.

LeadLint uses the offer text and amounts exactly as entered. It does not invent services, pricing, contacts, performance claims, or revenue forecasts.

#### Bulk territory search

- Enter up to 10 business types in `searchTerms` and up to 25 places in `locations`.
- LeadLint searches every business-type/location combination in one run, so 10 terms across 25 locations creates 250 searches.
- `location` remains available for a single market and can be combined with `locations`; duplicates are removed automatically.
- `maxResultsPerSearch` applies to each combination, while `maxRecords` limits the combined run to 25,000 records.
- `sourceLocationConcurrency` runs up to five locations at once to reduce elapsed time without launching unbounded child runs.
- Before starting any paid source run, LeadLint fails if the requested combinations could exceed `maxRecords`.

### Output

Open **Revenue Kit dashboard** from the run output page for the human-friendly delivery. Use the default dataset for structured records and **Revenue Kit manifest** for downstream automation.

Each qualified dataset row preserves the original source fields and adds normalized and duplicate-control fields, website verification evidence, Revenue Kit quality and problem fields, the complete `leadlint_revenue_kit` object, private asset keys, and `leadlint_outreach_status: prepared_not_sent`.

If no business passes, the dashboard says so plainly. LeadLint does not manufacture substitute prospects.

### Safe website evidence

Website checks allow only public HTTP and HTTPS destinations. LeadLint blocks loopback, private, link-local, multicast, and reserved IP ranges before every request and redirect; pins the resolved public address; limits redirects to five; and bounds concurrency and timeouts.

A missing website means only that no website appeared in the supplied public record. It does not claim that no website exists anywhere. Recheck every fact before use because public listings and websites can change.

### Cost and billing controls

- Direct search uses `compass/crawler-google-places`, which has its own usage charge.
- Direct search requires the Apify account running LeadLint to have access to that public Store Actor. Creator-plan accounts can still use `sourceDatasetId` or `records`, but the direct-search option requires a plan with access to all Store Actors.
- `sourceActorMaxChargeUsd` is one combined hard ceiling for the entire run. LeadLint divides it among the location child runs; adding locations cannot multiply the authorized cap.
- `maxRecords`, per-search results, concurrency, and timeouts are bounded.
- No external AI API, enrichment subscription, image source, or domain is required.
- In pay-per-event mode, only a complete Revenue Kit uses the `revenue-kit` event. Rejected candidates are not Revenue Kit events.
- The Actor respects the customer's Apify spending limit.

Pricing must be set only after a private cloud run measures source, compute, storage, and transfer cost. LeadLint does not promise replies, sales, or profit.

### Retention without lock-in

Customers can save an input and schedule it for a recurring multi-market territory scan. Persistent delivery history filters already delivered businesses across the combined run, so each recurring run focuses on newly qualifying opportunities. Customers can disable history or deliberately allow repeat delivery in the input.

LeadLint does not send email, text messages, direct messages, or proposals. That boundary keeps prospecting decisions and legal outreach compliance with the customer.

### Limitations

- Source records can be incomplete or stale.
- Public websites can change immediately after verification.
- A protected, slow, or temporarily unavailable site may be a poor prospect and is excluded from Revenue Kits.
- Generated copy must be reviewed for accuracy, brand fit, and applicable outreach laws before use.
- LeadLint prepares sales assets; it cannot guarantee contact, response, conversion, revenue, or profit.

# Changelog

This Actor's version history is a separate document: https://apify.com/may-i-ai/leadlint-revenue-kits/changelog.md

# Actor input Schema

## `searchTerms` (type: `array`):

Enter up to 10 business types. LeadLint searches every term across every location below. Use this direct-search source or one of the dataset sources below, not both.

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

Optional single city, state, or country for direct search. For bulk work, use Locations below. If both are supplied, LeadLint combines and deduplicates them.

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

Enter up to 25 cities, states, or countries. LeadLint runs every business type in every location, then deduplicates the combined records.

## `maxResultsPerSearch` (type: `integer`):

Bounds source-data cost and run time for each business-type and location combination.

## `countryCode` (type: `string`):

Two-letter country code used by the source search.

## `language` (type: `string`):

Language code used by the source search.

## `sourceActorMaxChargeUsd` (type: `integer`):

One hard spending ceiling shared across every location source run. LeadLint divides this budget across locations. This is separate from LeadLint's result fee.

## `sourceLocationConcurrency` (type: `integer`):

How many location searches may run at once. Higher values finish bulk runs faster but do not increase the combined source-data charge cap.

## `sourceDatasetId` (type: `string`):

An existing Apify dataset containing Google Maps business records. Use this or one other source, not both.

## `records` (type: `array`):

Existing business records as JSON. Use this or one other source, not both. Compatible with common Google Maps fields.

## `sellerBrandName` (type: `string`):

Required for Revenue Kits. This appears on the private preview and proposal.

## `sellerContact` (type: `string`):

Optional email, phone, or booking URL placed in prepared copy. LeadLint never sends it.

## `serviceOfferName` (type: `string`):

Required for Revenue Kits. Example categories include website redesign, SEO, or booking setup; enter your actual offer.

## `serviceOfferSummary` (type: `string`):

Required for Revenue Kits. Used verbatim as your proposed scope; LeadLint will not invent deliverables.

## `offerPriceUsd` (type: `number`):

Optional. If supplied, the proposal shows this exact seller-entered amount. No price is estimated.

## `estimatedFulfillmentCostUsd` (type: `number`):

Optional. When price is also supplied, LeadLint calculates contribution per won deal using only your numbers.

## `verifyWebsites` (type: `boolean`):

Safely check public HTTP/HTTPS sites for reachability. Private-network and local addresses are blocked.

## `minimumRevenueKitQuality` (type: `integer`):

A strict completeness threshold. A business must also have a public phone, enough reviews, and a definite website problem regardless of this score.

## `minimumReviewsForRevenueKit` (type: `integer`):

Requires observable activity before a prospect can become a Revenue Kit.

## `rememberDeliveredBusinesses` (type: `boolean`):

Keep account-level delivery history so repeat runs do not return the same business again.

## `redeliverPreviouslyDelivered` (type: `boolean`):

Off by default. Turn on only when you deliberately want previously delivered businesses again.

## `maxRecords` (type: `integer`):

Hard combined processing limit across every location. Supports up to 25,000 records when raised deliberately.

## `websiteConcurrency` (type: `integer`):

Lower this if target websites rate-limit checks.

## `requestTimeoutSecs` (type: `integer`):

Stop each website check after this many seconds so slow sites cannot stall the run.

## Actor input object example

```json
{
  "maxResultsPerSearch": 100,
  "countryCode": "US",
  "language": "en",
  "sourceActorMaxChargeUsd": 5,
  "sourceLocationConcurrency": 3,
  "verifyWebsites": true,
  "minimumRevenueKitQuality": 80,
  "minimumReviewsForRevenueKit": 5,
  "rememberDeliveredBusinesses": true,
  "redeliverPreviouslyDelivered": false,
  "maxRecords": 5000,
  "websiteConcurrency": 10,
  "requestTimeoutSecs": 15
}
```

# Actor output Schema

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

Qualified local-business records with verification evidence and a complete LeadLint Revenue Kit.

## `revenueKitDashboard` (type: `string`):

Private HTML dashboard linking every delivered concept preview and proposal.

## `revenueKitManifest` (type: `string`):

Machine-readable manifest of delivered kit IDs and private asset keys.

## `summary` (type: `string`):

Run counts, quality-gate outcomes, duplicate protection, and cost-control status.

# 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("may-i-ai/leadlint-revenue-kits").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("may-i-ai/leadlint-revenue-kits").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 may-i-ai/leadlint-revenue-kits --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,may-i-ai/leadlint-revenue-kits"
        }
    }
}
```

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/OvGpBbccQc6GJ2pkE/builds/iUllDnOa2njzyoKbe/openapi.json
