# Local Service Growth Agent (`k0nkupa/local-service-growth-agent`) Actor

Turns public local-service websites, directory pages, review profiles, and lead files into workflow-ready growth actions.

- **URL**: https://apify.com/k0nkupa/local-service-growth-agent.md
- **Developed by:** [Tony Le](https://apify.com/k0nkupa) (community)
- **Categories:** Lead generation, SEO tools, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 results

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

### What does Local Service Growth Agent do?

Local Service Growth Agent turns public service-business websites, directory pages, review profiles, and optional uploaded lead files into **workflow-ready growth actions**. It is an API-style Apify Actor for finding prospect leads, stale follow-ups, local SEO fixes, review issues, competitor service gaps, blocked sources, and summary rows.

It does not log into CRMs, Google Business Profile, email, or ad platforms. The Actor works from public URLs and optional files you provide.

### Why use Local Service Growth Agent?

Most lead and SEO scrapers export raw pages. This Actor produces action rows that a local-service owner, agency, or operator can triage immediately.

Use it to:

- Turn directory pages into prospect lead rows with service and location evidence
- Identify stale uploaded leads that need follow-up
- Find local SEO gaps such as missing titles, descriptions, or contact paths
- Compare competitor pages against your own public service signals
- Flag weak public review patterns when ratings are available in page text
- Keep scheduled monitoring, API access, integrations, proxy configuration, and run logs inside Apify

### What data can Local Service Growth Agent extract?

| Field | Type | Description |
| --- | --- | --- |
| `recordType` | string | `prospect_lead`, `follow_up_task`, `review_action`, `local_seo_action`, `competitor_gap`, `blocked_or_unavailable`, or `summary` |
| `priority` | string | `critical`, `high`, `medium`, or `low` |
| `confidence` | string | Deterministic confidence in the row |
| `actionTitle` | string | Short action label for operators |
| `recommendedNextStep` | string | Suggested manual next step |
| `evidence` | array | Structured facts used to produce the row |
| `targetName` | string | Lead, business, or profile name when available |
| `targetWebsite` | string | Target website when found |
| `reviewRating` / `reviewCount` | number | Review signals parsed from source text |
| `aiSummary` / `aiDraft` | string | Optional AI enrichment when `runMode` is `ai` |

### How to scrape local service sources

1. Open the Actor input tab.
2. Add `serviceCategories`, such as `plumbing`, `drainage`, or `roofing`.
3. Add target `locations`, such as `auckland` or `wellington`.
4. Provide at least one source: a business website, competitor URL, directory URL, review profile URL, or uploaded lead CSV key.
5. Keep `runMode` as `standard` for deterministic rows, or choose `ai` and provide AI settings for summaries and drafts.
6. Run the Actor and download the default dataset.

### How much will it cost to scrape local service sources?

Cost depends mainly on the number of URLs fetched and the size of each page. The Actor uses HTTP requests and HTML parsing rather than a browser by default, so standard-mode runs should be lightweight for public pages that return normal HTML.

AI mode may add separate model-provider costs and should be limited with `aiMaxRows` when scanning many sources.

### Input

See the input tab for full configuration options. The key fields are:

- `businessName`: business or client being analyzed
- `businessWebsite`: own public website page
- `serviceCategories`: service terms to match
- `locations`: location terms to match
- `competitorOrDirectoryUrls`: competitor, directory, or listing pages
- `reviewProfileUrls`: public review pages
- `existingLeadsFile`: key-value store key for a CSV lead file
- `runMode`: `standard` or `ai`

Uploaded lead CSV or JSON files should include fields such as `leadName`, `companyName`, `email`, `phone`, `website`, `location`, `serviceInterest`, `leadStatus`, `lastContactedAt`, `nextFollowUpAt`, and `notes`. JSON files can be an array of leads or an object with a `leads` array.

### Output

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

Example rows:

```json
[
  {
    "recordType": "prospect_lead",
    "priority": "high",
    "confidence": "high",
    "actionTitle": "Review local prospect: North Shore Plumbers",
    "recommendedNextStep": "Review the target and decide whether to add it to CRM or an outreach list.",
    "targetWebsite": "https://northshore.example",
    "evidence": [{"label": "Matched services", "value": ["plumbing"]}],
    "status": "ready"
  },
  {
    "recordType": "summary",
    "actionCount": 1,
    "blockedCount": 0
  }
]
````

### Tips

Use focused source URLs instead of a generic homepage when possible. Directory pages with structured business cards tend to produce better prospect rows than broad search-result pages.

Keep service and location terms short and lowercase-friendly. For example, use `hot water`, `drainage`, and `auckland`.

### AI mode

Standard mode is deterministic and does not require an AI key. AI mode is optional and only enriches rows that already have deterministic evidence. If an AI provider call fails for a row, the Actor keeps the deterministic row unchanged.

### FAQ, disclaimers, and support

Our Actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our Actors, when used for ethical purposes by Apify users, are safe. However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

If a source returns a blocked row, check the URL in a browser and replace it with another public source if needed. Use the Issues tab for feedback and the API tab for programmatic access.

# Actor input Schema

## `businessName` (type: `string`):

Name of the business or client being analyzed.

## `businessWebsite` (type: `string`):

Public website for the service business.

## `serviceCategories` (type: `array`):

Services to look for across public sources.

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

Target towns, cities, or service areas.

## `competitorOrDirectoryUrls` (type: `array`):

Public competitor, directory, or listing pages to inspect.

## `reviewProfileUrls` (type: `array`):

Public review profile URLs to inspect for rating signals.

## `existingLeadsFile` (type: `string`):

Optional key-value store key containing a CSV or JSON lead file.

## `region` (type: `string`):

Region label used for reporting.

## `maxTargets` (type: `integer`):

Maximum number of public sources to fetch.

## `runMode` (type: `string`):

Use standard for deterministic rows only, or ai for optional AI summaries and drafts.

## `aiApiKey` (type: `string`):

Optional OpenAI-compatible API key. Required only when run mode is ai.

## `aiBaseUrl` (type: `string`):

OpenAI-compatible base URL.

## `aiModel` (type: `string`):

OpenAI-compatible chat model name.

## `aiMaxRows` (type: `integer`):

Maximum number of ready action rows to enrich with AI in one run.

## Actor input object example

```json
{
  "businessName": "Example Plumbing",
  "businessWebsite": "https://example.com",
  "serviceCategories": [
    "plumbing",
    "drainage"
  ],
  "locations": [
    "auckland"
  ],
  "region": "NZ",
  "maxTargets": 25,
  "runMode": "standard",
  "aiBaseUrl": "https://api.openai.com/v1",
  "aiModel": "gpt-4.1-mini",
  "aiMaxRows": 25
}
```

# Actor output Schema

## `growthActions` (type: `string`):

No description

# 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 = {
    "businessName": "Example Plumbing",
    "businessWebsite": "https://example.com",
    "serviceCategories": [
        "plumbing",
        "drainage"
    ],
    "locations": [
        "auckland"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("k0nkupa/local-service-growth-agent").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 = {
    "businessName": "Example Plumbing",
    "businessWebsite": "https://example.com",
    "serviceCategories": [
        "plumbing",
        "drainage",
    ],
    "locations": ["auckland"],
}

# Run the Actor and wait for it to finish
run = client.actor("k0nkupa/local-service-growth-agent").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 '{
  "businessName": "Example Plumbing",
  "businessWebsite": "https://example.com",
  "serviceCategories": [
    "plumbing",
    "drainage"
  ],
  "locations": [
    "auckland"
  ]
}' |
apify call k0nkupa/local-service-growth-agent --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Local Service Growth Agent",
        "description": "Turns public local-service websites, directory pages, review profiles, and lead files into workflow-ready growth actions.",
        "version": "0.1",
        "x-build-id": "mWQYfSe9ctkacptfS"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/k0nkupa~local-service-growth-agent/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-k0nkupa-local-service-growth-agent",
                "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/k0nkupa~local-service-growth-agent/runs": {
            "post": {
                "operationId": "runs-sync-k0nkupa-local-service-growth-agent",
                "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/k0nkupa~local-service-growth-agent/run-sync": {
            "post": {
                "operationId": "run-sync-k0nkupa-local-service-growth-agent",
                "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",
                "required": [
                    "serviceCategories"
                ],
                "properties": {
                    "businessName": {
                        "title": "Business name",
                        "type": "string",
                        "description": "Name of the business or client being analyzed."
                    },
                    "businessWebsite": {
                        "title": "Business website",
                        "type": "string",
                        "description": "Public website for the service business."
                    },
                    "serviceCategories": {
                        "title": "Service categories",
                        "type": "array",
                        "description": "Services to look for across public sources.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "locations": {
                        "title": "Locations",
                        "type": "array",
                        "description": "Target towns, cities, or service areas.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "competitorOrDirectoryUrls": {
                        "title": "Competitor or directory URLs",
                        "type": "array",
                        "description": "Public competitor, directory, or listing pages to inspect.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "reviewProfileUrls": {
                        "title": "Review profile URLs",
                        "type": "array",
                        "description": "Public review profile URLs to inspect for rating signals.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "existingLeadsFile": {
                        "title": "Existing leads key-value store key",
                        "type": "string",
                        "description": "Optional key-value store key containing a CSV or JSON lead file."
                    },
                    "region": {
                        "title": "Region",
                        "type": "string",
                        "description": "Region label used for reporting.",
                        "default": "NZ"
                    },
                    "maxTargets": {
                        "title": "Max targets",
                        "minimum": 1,
                        "maximum": 250,
                        "type": "integer",
                        "description": "Maximum number of public sources to fetch.",
                        "default": 25
                    },
                    "runMode": {
                        "title": "Run mode",
                        "enum": [
                            "standard",
                            "ai"
                        ],
                        "type": "string",
                        "description": "Use standard for deterministic rows only, or ai for optional AI summaries and drafts.",
                        "default": "standard"
                    },
                    "aiApiKey": {
                        "title": "AI API key",
                        "type": "string",
                        "description": "Optional OpenAI-compatible API key. Required only when run mode is ai."
                    },
                    "aiBaseUrl": {
                        "title": "AI base URL",
                        "type": "string",
                        "description": "OpenAI-compatible base URL.",
                        "default": "https://api.openai.com/v1"
                    },
                    "aiModel": {
                        "title": "AI model",
                        "type": "string",
                        "description": "OpenAI-compatible chat model name.",
                        "default": "gpt-4.1-mini"
                    },
                    "aiMaxRows": {
                        "title": "AI max rows",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Maximum number of ready action rows to enrich with AI in one run.",
                        "default": 25
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
