# Local Business Growth Signal Enricher (`coregent/local-business-growth-signal-enricher`) Actor

Enrich local business leads with public growth and outreach signals - website presence, ratings, review volume, contact and digital-presence hints, and a transparent growth/opportunity score. One flat CSV-ready row per business. No login or cookies.

- **URL**: https://apify.com/coregent/local-business-growth-signal-enricher.md
- **Developed by:** [Delowar Munna](https://apify.com/coregent) (community)
- **Categories:** Lead generation, Automation, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.40 / 1,000 business-signal-results

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 a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## Local Business Growth Signal Enricher

![Local Business Growth Signal Enricher](https://raw.githubusercontent.com/coregentdevspace/local-business-growth-signal-enricher-assets/main/thumbnail-local-business-growth-signal-enricher.png)

Enrich local business leads — by **business website URL, Google Maps place URL, or local search query** — with **public growth and outreach signals**. For each business you get one flat, CSV-ready row: identity and contact fields, rating and review bands, website + digital-presence signals, and a transparent **growth-signal score** (0–100).

Built for **local lead-generation teams, web design / SEO / marketing agencies, sales teams, and local market researchers** who want to prioritise which businesses look active, growing, under-served, or ready for outreach.

- ✅ **No login, no cookies, no API keys.** Public data only.
- ✅ **One row per business**, CSV-ready.
- ✅ **Transparent, non-AI scoring** you can audit field-by-field.
- ✅ Lightweight HTTP + structured-data extraction; optional single homepage check — no headless browser.

---

### What it does

For every business input the actor:

1. **Normalizes** the input and detects its type (business website, Google Maps place, or search query).
2. **Extracts** public profile fields where available: name, category, website, phone, address, rating, review count, opening status.
3. Optionally runs a **single homepage check** for digital-presence signals: title, meta description, HTTPS, contact/booking hint, and social-link hint.
4. **Derives** review/rating bands, website + phone flags, a digital-presence level, and best-effort city/state/country.
5. **Scores** a transparent `growth_signal_score` and emits one flat row.

It does **not** do login/session scraping, full review scraping, deep crawling, email enrichment, AI summaries, or historical tracking.

---

### Input

| Field                    | Type             | Default                     | Description                                                                                |
| ------------------------ | ---------------- | --------------------------- | ------------------------------------------------------------------------------------------ |
| `inputMode`              | string           | `businessUrls`              | `businessUrls`, `searchQueries`, or `mixed`.                                               |
| `businessUrls`           | array of strings | `[]`                        | Business website URLs or Google Maps place URLs. Max 1,000.                                |
| `searchQueries`          | array of strings | `[]`                        | Local search terms such as `plumbers Canberra`. Max 100. Best-effort discovery.            |
| `maxResults`             | integer          | `100`                       | Max valid unique business rows to save (1–5000).                                           |
| `maxResultsPerQuery`     | integer          | `50`                        | Max businesses discovered per query (1–500).                                               |
| `includeHomepageSignals` | boolean          | `true`                      | Fetch the homepage once for digital-presence signals.                                      |
| `includeContactPageHint` | boolean          | `true`                      | Detect a homepage link to a contact/booking page (no second fetch).                        |
| `minRating`              | number           | `0`                         | Keep businesses rated ≥ this value (decimals allowed). Missing ratings pass.               |
| `minReviews`             | integer          | `0`                         | Keep businesses with ≥ this many reviews. Missing review counts pass.                      |
| `requireWebsite`         | boolean          | `false`                     | Keep only businesses with a website.                                                       |
| `onlyMissingWebsite`     | boolean          | `false`                     | Keep only businesses without a website (web/SEO prospecting). Ignored if `requireWebsite`. |
| `categoryKeywords`       | array of strings | `[]`                        | Keep if category (or name) contains a keyword.                                             |
| `locationKeywords`       | array of strings | `[]`                        | Keep if address/location contains a keyword.                                               |
| `deduplicate`            | boolean          | `true`                      | One row per business (place URL, domain, phone, or name+address).                          |
| `proxyConfiguration`     | object           | `{ "useApifyProxy": true }` | Datacenter, no proxy, or custom proxy URLs. Apify Residential rejected at startup.         |

#### Example inputs

**1. Enrich a list of real business websites** — the 20-business set used for validation below.

```json
{
    "inputMode": "businessUrls",
    "businessUrls": [
        "https://www.proximityplumbing.com.au",
        "https://www.fixitrightplumbing.com.au",
        "https://www.metropolitanplumbing.com.au",
        "https://www.watermaster.com.au",
        "https://www.smilesolutions.com.au",
        "https://www.thegrounds.com.au",
        "https://www.gelatomessina.com",
        "https://www.guzmanygomez.com.au",
        "https://www.jimsmowing.com.au",
        "https://www.hireahubby.com.au",
        "https://www.snap.com.au",
        "https://www.rotorooter.com",
        "https://www.mrhandyman.com",
        "https://www.terminix.com",
        "https://www.mollymaid.com",
        "https://www.bondivet.com.au",
        "https://www.crownperth.com.au",
        "https://www.flowerpower.com.au",
        "https://www.totaltools.com.au",
        "https://www.autobarn.com.au"
    ],
    "maxResults": 100,
    "includeHomepageSignals": true,
    "includeContactPageHint": true,
    "deduplicate": true,
    "proxyConfiguration": { "useApifyProxy": true }
}
````

**2. Filter to high-value local leads** — keep only well-reviewed plumbers with a website.

```json
{
    "inputMode": "businessUrls",
    "businessUrls": [
        "https://www.proximityplumbing.com.au",
        "https://www.fixitrightplumbing.com.au",
        "https://www.metropolitanplumbing.com.au"
    ],
    "minRating": 4,
    "minReviews": 50,
    "requireWebsite": true,
    "categoryKeywords": ["plumber"],
    "proxyConfiguration": { "useApifyProxy": true }
}
```

**3. Web-design / SEO prospecting — find local businesses missing a website**

```json
{
    "inputMode": "searchQueries",
    "searchQueries": ["plumbers Canberra", "electricians Parramatta"],
    "maxResultsPerQuery": 25,
    "onlyMissingWebsite": true,
    "minReviews": 10,
    "proxyConfiguration": { "useApifyProxy": true }
}
```

***

### Output

One flat row per enriched business. Key fields:

- **Identity / contact**: `business_name`, `business_category`, `website_url`, `website_domain`, `phone`, `address`, `city_or_suburb`, `state_or_region`, `country`
- **Source**: `source_url`, `source_type` (`google_maps_place` / `business_website` / `search_result` / `unknown`)
- **Reputation**: `rating`, `review_count`, `review_volume_band`, `rating_band`, `opening_status`
- **Presence signals**: `has_website`, `has_phone`, `homepage_title`, `homepage_meta_description`, `has_https`, `has_contact_page_hint`, `has_social_link_hint`, `digital_presence_level`
- **Scoring**: `growth_signal_score` (0–100), `growth_signal_label` (`weak`/`moderate`/`strong`/`high_priority`), `reason_tags`
- **Provenance**: `input_value`, `input_mode`, `scraped_at`

#### Sample record

Real output for `https://www.proximityplumbing.com.au` — a `Plumber` with rich schema.org data (rating, review count, address), scored `100 / high_priority`:

```json
{
    "business_name": "Proximity Plumbing",
    "business_category": "Plumber",
    "website_url": "https://proximityplumbing.com.au/",
    "website_domain": "proximityplumbing.com.au",
    "phone": "+0420102394",
    "address": "Plumber in Point Piper, Point Piper, NSW, 2022, Australia",
    "city_or_suburb": "Point Piper",
    "state_or_region": "NSW",
    "country": "Australia",
    "source_url": "https://proximityplumbing.com.au/",
    "source_type": "business_website",
    "rating": 4.9,
    "review_count": 2365,
    "review_volume_band": "very_high",
    "rating_band": "excellent",
    "opening_status": null,
    "has_website": true,
    "has_phone": true,
    "homepage_title": "Proximity Plumbing Sydney | Plumber Eastern Suburbs | 5 ⭐️ Rated",
    "homepage_meta_description": "Proximity Plumbing Voted No.1 Plumber Eastern Suburbs. Providing Quality Sydney Plumbing Service With 25 Years of Collective Experience.",
    "has_https": true,
    "has_contact_page_hint": true,
    "has_social_link_hint": true,
    "digital_presence_level": "strong",
    "growth_signal_score": 100,
    "growth_signal_label": "high_priority",
    "reason_tags": "has_website|has_https|strong_reviews|excellent_rating|has_phone|contact_page_hint|social_link_hint",
    "input_value": "https://www.proximityplumbing.com.au",
    "input_mode": "businessUrls",
    "scraped_at": "2026-06-17T01:19:38.246Z"
}
```

#### Output preview

The default **Local business signals** dataset view — one flat row per business:

![Local business signals — table view](https://raw.githubusercontent.com/coregentdevspace/local-business-growth-signal-enricher-assets/main/local-business-growth-signal-enricher-output-local-business-signals-table-view.png)

> Validated locally on the 20-business input above: **20 inputs → 20 rows saved, 0 failed, 0 filtered.**

A **run summary** is stored in the default key-value store under `RUN_SUMMARY` with counters such as `inputs_total`, `results_saved`, `duplicates_removed`, `filtered_out`, `charged_events`, `homepage_fetches`, and `blocked_requests`.

***

### Growth-signal score

A transparent 0–100 weighted sum (see PRD §7), based only on visible public fields:

- `+20` has a website, `+10` HTTPS, `+10` homepage title/meta
- `+10` contact/booking hint, `+10` social-link hint
- `+15` reviews 20–99, `+25` reviews 100+
- `+10` rating 4.0–4.49, `+15` rating 4.5+
- `+15` has a phone
- `+20` missing website but strong review volume (50+) — a high-priority web/SEO lead

Labels: `80–100 high_priority`, `60–79 strong`, `30–59 moderate`, `0–29 weak`.

***

### Pricing

**Pay Per Event.** One event, `business-signal-result`, is charged **only after** a valid, unique business row is successfully pushed to the dataset. Duplicate businesses, filtered-out businesses, and failed inputs are **never** charged. The actor honours your per-run spending limit and stops cleanly when it is reached.

***

#### 🚦 Proxy policy

Use **Apify Datacenter** proxy or **no proxy** for normal runs — both work reliably for business websites at this actor's conservative concurrency.

**Apify Residential proxy is not supported.** The actor fails at startup if `apifyProxyGroups` includes `RESIDENTIAL`. Reason: in pay-per-event actors, residential bandwidth (~$8/GB) is billed to the developer, not the run user, so a single bandwidth-heavy run could exceed the per-result event revenue.

If you genuinely need residential routing, supply your own residential provider via the proxy editor's **Custom proxy URLs** field — that traffic goes through your provider, not Apify, and is unaffected:

```
http://user:pass@proxy.iproyal.com:12321
http://user:pass@proxy.brightdata.com:22225
http://user:pass@proxy.oxylabs.io:7777
```

***

### Notes & limitations

- **Business websites are the most reliable input.** Identity, contact, and digital-presence signals come from the homepage's structured data (schema.org `LocalBusiness`/`Organization`) and meta tags.
- **Google Maps place URLs are best-effort.** Google Maps pages are JavaScript-rendered and aggressively bot-protected; over Datacenter/no-proxy the actor extracts what the server-sent meta tags expose (name, and sometimes rating/reviews) and otherwise degrades gracefully. This actor is HTTP-only by design — no headless browser — and does no full review scraping.
- **Search-query discovery is experimental** and less stable without a proxy. It uses a single free public search per query to find candidate business websites, then enriches each as a website.
- V1 uses no paid places API, no paid enrichment vendor, and no login/cookies/sessions.

# Actor input Schema

## `inputMode` (type: `string`):

How to interpret your inputs. "Business URLs" treats each item as a business website or Google Maps place URL. "Search queries" runs lightweight public discovery on local search terms. "Mixed" accepts both (URL-like values are fetched directly; the rest are treated as queries).

## `businessUrls` (type: `array`):

Direct business website URLs or Google Maps place URLs to enrich, for example "https://www.exampleplumbing.com.au" or a Google Maps place link. Used when input mode is "Business URLs" or "Mixed". Max 1,000 per run.

## `searchQueries` (type: `array`):

Lightweight local search terms such as "plumbers Canberra" or "restaurants Parramatta". Used when input mode is "Search queries" or "Mixed". Discovery is best-effort and less stable without a proxy. Max 100 per run.

## `maxResults` (type: `integer`):

Maximum number of valid unique business rows to save per run. The run stops saving once this is reached. Range 1-5000.

## `maxResultsPerQuery` (type: `integer`):

Maximum businesses discovered per search query (search/mixed modes only). Prevents one query from consuming the whole run. Range 1-500.

## `includeHomepageSignals` (type: `boolean`):

For businesses with a website, fetch the homepage once to derive title, meta description, HTTPS status, and contact/social hints. Turning this off skips all website fetches.

## `includeContactPageHint` (type: `boolean`):

Detect whether the homepage links to a likely contact/booking/quote page. Only the homepage is read - the contact page itself is not crawled.

## `minRating` (type: `number`):

Keep only businesses with a rating at or above this value (decimals allowed, e.g. 4.5). Businesses with no visible rating pass this filter. Range 0-5.

## `minReviews` (type: `integer`):

Keep only businesses with at least this many visible reviews. Businesses with no visible review count pass this filter.

## `requireWebsite` (type: `boolean`):

Keep only businesses that have a detected website URL.

## `onlyMissingWebsite` (type: `boolean`):

Keep only businesses without a detected website - useful for web design / SEO prospecting. Ignored if "Require website" is also enabled.

## `categoryKeywords` (type: `array`):

Keep only businesses whose category (or, if missing, name) contains at least one of these keywords, for example "plumber", "electrician".

## `locationKeywords` (type: `array`):

Keep only businesses whose address/city/state/country contains at least one of these keywords, for example "Canberra". Businesses with no detected location are filtered out.

## `deduplicate` (type: `boolean`):

Return only one row per business (by place URL, website domain, phone, or name + address) so you are not charged for duplicates.

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

Apify Proxy configuration. Defaults to Apify Proxy enabled. Apify Residential is NOT supported and will fail the run at startup; if you need residential routing, supply your own provider via Custom proxy URLs (proxyUrls).

## Actor input object example

```json
{
  "inputMode": "businessUrls",
  "businessUrls": [
    "https://www.exampleplumbing.com.au"
  ],
  "searchQueries": [
    "plumbers Canberra"
  ],
  "maxResults": 100,
  "maxResultsPerQuery": 50,
  "includeHomepageSignals": true,
  "includeContactPageHint": true,
  "minRating": 0,
  "minReviews": 0,
  "requireWebsite": false,
  "onlyMissingWebsite": false,
  "categoryKeywords": [
    "plumber",
    "electrician"
  ],
  "locationKeywords": [
    "Canberra"
  ],
  "deduplicate": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

Flat table view with one row per enriched business: identity, contact, location, source, rating/review bands, website presence + digital-presence signals, and the derived growth/opportunity score.

# 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 = {
    "businessUrls": [
        "https://www.exampleplumbing.com.au"
    ],
    "searchQueries": [
        "plumbers Canberra"
    ],
    "categoryKeywords": [
        "plumber",
        "electrician"
    ],
    "locationKeywords": [
        "Canberra"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("coregent/local-business-growth-signal-enricher").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 = {
    "businessUrls": ["https://www.exampleplumbing.com.au"],
    "searchQueries": ["plumbers Canberra"],
    "categoryKeywords": [
        "plumber",
        "electrician",
    ],
    "locationKeywords": ["Canberra"],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("coregent/local-business-growth-signal-enricher").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 '{
  "businessUrls": [
    "https://www.exampleplumbing.com.au"
  ],
  "searchQueries": [
    "plumbers Canberra"
  ],
  "categoryKeywords": [
    "plumber",
    "electrician"
  ],
  "locationKeywords": [
    "Canberra"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call coregent/local-business-growth-signal-enricher --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=coregent/local-business-growth-signal-enricher",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Local Business Growth Signal Enricher",
        "description": "Enrich local business leads with public growth and outreach signals - website presence, ratings, review volume, contact and digital-presence hints, and a transparent growth/opportunity score. One flat CSV-ready row per business. No login or cookies.",
        "version": "1.0",
        "x-build-id": "KyHBc5x6C9dusYadP"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/coregent~local-business-growth-signal-enricher/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-coregent-local-business-growth-signal-enricher",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/coregent~local-business-growth-signal-enricher/runs": {
            "post": {
                "operationId": "runs-sync-coregent-local-business-growth-signal-enricher",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/coregent~local-business-growth-signal-enricher/run-sync": {
            "post": {
                "operationId": "run-sync-coregent-local-business-growth-signal-enricher",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "inputMode": {
                        "title": "Input mode",
                        "enum": [
                            "businessUrls",
                            "searchQueries",
                            "mixed"
                        ],
                        "type": "string",
                        "description": "How to interpret your inputs. \"Business URLs\" treats each item as a business website or Google Maps place URL. \"Search queries\" runs lightweight public discovery on local search terms. \"Mixed\" accepts both (URL-like values are fetched directly; the rest are treated as queries).",
                        "default": "businessUrls"
                    },
                    "businessUrls": {
                        "title": "Business URLs",
                        "type": "array",
                        "description": "Direct business website URLs or Google Maps place URLs to enrich, for example \"https://www.exampleplumbing.com.au\" or a Google Maps place link. Used when input mode is \"Business URLs\" or \"Mixed\". Max 1,000 per run.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "searchQueries": {
                        "title": "Search queries",
                        "type": "array",
                        "description": "Lightweight local search terms such as \"plumbers Canberra\" or \"restaurants Parramatta\". Used when input mode is \"Search queries\" or \"Mixed\". Discovery is best-effort and less stable without a proxy. Max 100 per run.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxResults": {
                        "title": "Max results",
                        "minimum": 1,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Maximum number of valid unique business rows to save per run. The run stops saving once this is reached. Range 1-5000.",
                        "default": 100
                    },
                    "maxResultsPerQuery": {
                        "title": "Max results per query",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Maximum businesses discovered per search query (search/mixed modes only). Prevents one query from consuming the whole run. Range 1-500.",
                        "default": 50
                    },
                    "includeHomepageSignals": {
                        "title": "Include homepage signals",
                        "type": "boolean",
                        "description": "For businesses with a website, fetch the homepage once to derive title, meta description, HTTPS status, and contact/social hints. Turning this off skips all website fetches.",
                        "default": true
                    },
                    "includeContactPageHint": {
                        "title": "Include contact-page hint",
                        "type": "boolean",
                        "description": "Detect whether the homepage links to a likely contact/booking/quote page. Only the homepage is read - the contact page itself is not crawled.",
                        "default": true
                    },
                    "minRating": {
                        "title": "Minimum rating",
                        "minimum": 0,
                        "maximum": 5,
                        "type": "number",
                        "description": "Keep only businesses with a rating at or above this value (decimals allowed, e.g. 4.5). Businesses with no visible rating pass this filter. Range 0-5.",
                        "default": 0
                    },
                    "minReviews": {
                        "title": "Minimum reviews",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Keep only businesses with at least this many visible reviews. Businesses with no visible review count pass this filter.",
                        "default": 0
                    },
                    "requireWebsite": {
                        "title": "Require website",
                        "type": "boolean",
                        "description": "Keep only businesses that have a detected website URL.",
                        "default": false
                    },
                    "onlyMissingWebsite": {
                        "title": "Only businesses missing a website",
                        "type": "boolean",
                        "description": "Keep only businesses without a detected website - useful for web design / SEO prospecting. Ignored if \"Require website\" is also enabled.",
                        "default": false
                    },
                    "categoryKeywords": {
                        "title": "Category keywords",
                        "type": "array",
                        "description": "Keep only businesses whose category (or, if missing, name) contains at least one of these keywords, for example \"plumber\", \"electrician\".",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "locationKeywords": {
                        "title": "Location keywords",
                        "type": "array",
                        "description": "Keep only businesses whose address/city/state/country contains at least one of these keywords, for example \"Canberra\". Businesses with no detected location are filtered out.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "deduplicate": {
                        "title": "Deduplicate businesses",
                        "type": "boolean",
                        "description": "Return only one row per business (by place URL, website domain, phone, or name + address) so you are not charged for duplicates.",
                        "default": true
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Apify Proxy configuration. Defaults to Apify Proxy enabled. Apify Residential is NOT supported and will fail the run at startup; if you need residential routing, supply your own provider via Custom proxy URLs (proxyUrls).",
                        "default": {
                            "useApifyProxy": true
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
