# Website Opportunity Auditor (`xxooxannn/website-opportunity-auditor`) Actor

Score business websites for visible growth opportunities, conversion gaps, and outreach-ready lead angles.

- **URL**: https://apify.com/xxooxannn/website-opportunity-auditor.md
- **Developed by:** [Jharan chaudhary](https://apify.com/xxooxannn) (community)
- **Categories:** SEO tools, Lead generation, E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

$350.00 / 1,000 audited websites

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

## Website Opportunity Auditor

Find websites that are worth a follow-up.

Website Opportunity Auditor reviews business websites and returns a practical opportunity score, issue summary, and outreach-ready angle for each site. It is built for people who already have a list of prospects and need to quickly separate weak websites from stronger ones.

### What You Get

- opportunity score for each website
- short reason why the site is worth attention
- visible contact and conversion gap summary
- outreach angle and first-message snippet
- CSV export for prospecting workflows
- manual-review flag when a site blocks automated checks

### Good Fits

- local service prospecting
- SEO and web design lead qualification
- niche market research
- pre-sales website triage
- batch review of existing lead lists

The Actor works best with business websites in markets such as HVAC, plumbing, roofing, electrical services, med spas, dentists, and similar local-service categories.

### Input

You can provide websites in either format:

- `startUrls`: URLs entered directly in the input form
- `csvText`: pasted CSV or plain domain list

At least one of `startUrls` or `csvText` is required.

Useful controls:

- `maxRequests`: limit how many websites are processed in one run
- `marketPreset`: tune findings for a local-service vertical
- `maxInternalPages`: sample a small number of same-site pages
- `proxyConfiguration`: optional Apify Proxy support for stricter websites
- `exportCsv`: write `OUTPUT.csv` to the key-value store

For batch runs, set Apify's `Maximum cost per run` high enough for the number of websites you want to process. At `$0.35` per website, a 20-site batch needs at least `$7.00`; a 100-site batch needs at least `$35.00`.

### Output

Each result includes:

- website URL
- review status
- opportunity score
- issue count
- primary issue codes
- lead type
- severity
- quick fix summary
- outreach angle
- outreach snippet
- positive signals

The run also stores:

- `OUTPUT`: run summary
- `OUTPUT.csv`: spreadsheet-friendly export when CSV export is enabled

### Pricing

This Actor uses pay-per-event pricing.

Billable event: `audit-result`

Price: `$0.35` per audited website

You are charged once for each website that returns an audit result.

If `Maximum cost per run` is lower than the submitted batch needs, the Actor stops before processing the unpaid remainder and writes a `billing-limit-reached` dataset item with `requestedWebsites`, `processedWebsites`, `maxChargeableAudits`, and `requiredMaxCostUsd`.

### Notes

Some websites use bot protection, strict firewalls, temporary blocking, DNS failures, TLS failures, or timeouts. Hard network failures are returned as structured audit results with homepage attempt details so dead sites still produce useful rows. Bot-protection cases that return an analyzable response are marked for manual review instead of being treated as normal website failures.

If a run stops early with `billing-limit-reached`, increase `Maximum cost per run` in Apify run options and run the remaining websites again.

This Actor is designed for fast opportunity qualification, not full technical SEO crawling or browser-based QA.

# Actor input Schema

## `startUrls` (type: `array`):

Website URLs or domains to audit. Provide this or CSV/domain list. Domains without protocol will be normalized to HTTPS first.
## `csvText` (type: `string`):

Pasted CSV or plain list of domains. Provide this or Start URLs. If CSV has headers, use a column like url, domain, website, or site.
## `maxRequests` (type: `integer`):

Safety limit for the number of websites audited in one run. For pay-per-event runs, also set Apify's Maximum cost per run high enough for this many websites.
## `requestTimeoutSecs` (type: `integer`):

Maximum time to wait for each HTTP request.
## `maxInternalPages` (type: `integer`):

How many same-site pages to sample from homepage links. Keep this low to reduce blocking risk.
## `marketPreset` (type: `string`):

Tune CTA detection and outreach wording for a niche. Start with local service businesses unless you have a specific vertical.
## `includeHtmlSnippet` (type: `boolean`):

Store a short HTML snippet in the output for debugging unusual detections.
## `exportCsv` (type: `boolean`):

Write a CSV export to the default key-value store in addition to dataset output.
## `proxyConfiguration` (type: `object`):

Optional Apify Proxy or custom proxy configuration. Useful for reducing blocking on some sites and improving audit completion rates on stricter hosts.
## `failFast` (type: `boolean`):

If enabled, the run stops after the first failed audit instead of recording a failed item and continuing.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://example.com"
    }
  ],
  "maxRequests": 25,
  "requestTimeoutSecs": 12,
  "maxInternalPages": 3,
  "marketPreset": "service-business",
  "includeHtmlSnippet": false,
  "exportCsv": true,
  "failFast": false
}
````

# Actor output Schema

## `results` (type: `string`):

No description

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

No description

## `csvExport` (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 = {
    "startUrls": [
        {
            "url": "https://example.com"
        }
    ],
    "maxRequests": 25,
    "requestTimeoutSecs": 12,
    "maxInternalPages": 3
};

// Run the Actor and wait for it to finish
const run = await client.actor("xxooxannn/website-opportunity-auditor").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 = {
    "startUrls": [{ "url": "https://example.com" }],
    "maxRequests": 25,
    "requestTimeoutSecs": 12,
    "maxInternalPages": 3,
}

# Run the Actor and wait for it to finish
run = client.actor("xxooxannn/website-opportunity-auditor").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 '{
  "startUrls": [
    {
      "url": "https://example.com"
    }
  ],
  "maxRequests": 25,
  "requestTimeoutSecs": 12,
  "maxInternalPages": 3
}' |
apify call xxooxannn/website-opportunity-auditor --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Website Opportunity Auditor",
        "description": "Score business websites for visible growth opportunities, conversion gaps, and outreach-ready lead angles.",
        "version": "0.2",
        "x-build-id": "h9bsddBa0sOXmBfqO"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/xxooxannn~website-opportunity-auditor/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-xxooxannn-website-opportunity-auditor",
                "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/xxooxannn~website-opportunity-auditor/runs": {
            "post": {
                "operationId": "runs-sync-xxooxannn-website-opportunity-auditor",
                "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/xxooxannn~website-opportunity-auditor/run-sync": {
            "post": {
                "operationId": "run-sync-xxooxannn-website-opportunity-auditor",
                "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": {
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "Website URLs or domains to audit. Provide this or CSV/domain list. Domains without protocol will be normalized to HTTPS first.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "csvText": {
                        "title": "CSV or domain list",
                        "type": "string",
                        "description": "Pasted CSV or plain list of domains. Provide this or Start URLs. If CSV has headers, use a column like url, domain, website, or site."
                    },
                    "maxRequests": {
                        "title": "Max websites to audit",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Safety limit for the number of websites audited in one run. For pay-per-event runs, also set Apify's Maximum cost per run high enough for this many websites.",
                        "default": 25
                    },
                    "requestTimeoutSecs": {
                        "title": "Request timeout (seconds)",
                        "minimum": 3,
                        "maximum": 60,
                        "type": "integer",
                        "description": "Maximum time to wait for each HTTP request.",
                        "default": 12
                    },
                    "maxInternalPages": {
                        "title": "Max internal pages to sample",
                        "minimum": 0,
                        "maximum": 10,
                        "type": "integer",
                        "description": "How many same-site pages to sample from homepage links. Keep this low to reduce blocking risk.",
                        "default": 3
                    },
                    "marketPreset": {
                        "title": "Market preset",
                        "enum": [
                            "service-business",
                            "hvac",
                            "plumber",
                            "roofer",
                            "electrician",
                            "med-spa",
                            "dentist"
                        ],
                        "type": "string",
                        "description": "Tune CTA detection and outreach wording for a niche. Start with local service businesses unless you have a specific vertical.",
                        "default": "service-business"
                    },
                    "includeHtmlSnippet": {
                        "title": "Include HTML snippet",
                        "type": "boolean",
                        "description": "Store a short HTML snippet in the output for debugging unusual detections.",
                        "default": false
                    },
                    "exportCsv": {
                        "title": "Export OUTPUT.csv",
                        "type": "boolean",
                        "description": "Write a CSV export to the default key-value store in addition to dataset output.",
                        "default": true
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Optional Apify Proxy or custom proxy configuration. Useful for reducing blocking on some sites and improving audit completion rates on stricter hosts."
                    },
                    "failFast": {
                        "title": "Fail on first error",
                        "type": "boolean",
                        "description": "If enabled, the run stops after the first failed audit instead of recording a failed item and continuing.",
                        "default": false
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
