# B2B Website Contact & SEO Lead Auditor (`glowing_glove/b2b-website-contact-seo-lead-auditor`) Actor

Audit business websites and extract public contact details, social profiles, lead forms, tech stack hints, and SEO sales signals.

- **URL**: https://apify.com/glowing\_glove/b2b-website-contact-seo-lead-auditor.md
- **Developed by:** [Ushba Khan](https://apify.com/glowing_glove) (community)
- **Categories:** Lead generation, SEO tools, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 2 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

$15.00 / 1,000 audited domains

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

## B2B Website Contact & SEO Lead Auditor

Turn company websites into sales-ready lead intelligence.

This Actor audits business websites and returns clean, structured records with public contact details, social profiles, lead form signals, technology hints, and SEO issues. It is built for B2B lead generation, SEO prospecting, marketing audits, agency outreach, CRM enrichment, and sales research.

### Why this Actor

Apify Store demand is strongest around lead generation, SEO, e-commerce, and business data. Large platform scrapers are crowded and fragile, while website-level enrichment is durable, legal-friendly, and useful for agencies, sales teams, SaaS companies, and local service providers.

#### Opportunity comparison

| Actor idea | Marketplace demand | Buyer usefulness | Competition | Difficulty | Pricing potential |
| --- | --- | --- | --- | --- | --- |
| B2B Website Contact & SEO Lead Auditor | High | High: turns domain lists into outreach-ready data | Medium-low | Medium | High |
| Local Service Website Form Finder | Medium | Good for agencies selling web/SEO services | Low | Low-medium | Medium |
| SaaS Pricing Page Change Monitor | Medium | Useful for competitive intelligence | Medium | Medium | Medium-high |
| Shopify Store Trust & Conversion Auditor | Medium-high | Useful for e-commerce agencies | Medium | Medium | Medium-high |
| Sitemap URL Classifier for SEO Teams | Medium | Useful but narrower | Low | Low | Medium |

Chosen product: **B2B Website Contact & SEO Lead Auditor** because it has broad buyer demand, lower maintenance risk than social scrapers, clear pay-per-domain value, and useful output even from small crawls.

### What it extracts

- Public emails and phone numbers from website pages
- LinkedIn, Facebook, Instagram, X, YouTube, TikTok, and GitHub profiles
- Contact/about/team/pricing/careers/business pages
- Lead forms and form field signals
- CTA text such as demo, quote, consultation, and subscribe prompts
- Technology signals such as WordPress, Shopify, WooCommerce, Webflow, Wix, HubSpot, Intercom, Drift, Google Analytics, GTM, Meta Pixel, React, Next.js, and Cloudflare
- Basic SEO issues: missing title, poor title length, missing meta description, poor meta description length, missing H1, multiple H1s, and thin content
- Lead score, SEO score, business signals, and recommended sales angles

### Input

```json
{
  "websites": ["https://apify.com", "example.com"],
  "maxPagesPerWebsite": 8,
  "includeLikelyContactPages": true,
  "discoverFromSitemap": true,
  "maxSitemapUrls": 25,
  "respectRobotsTxt": true,
  "requestTimeoutSecs": 20,
  "maxRequestRetries": 2,
  "maxConcurrency": 3,
  "outputMode": "summaries",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
````

### Output

Each domain summary includes:

```json
{
  "recordType": "domainSummary",
  "domain": "apify.com",
  "status": "ok",
  "pagesFetched": 3,
  "leadScore": 60,
  "seoScore": 95,
  "emails": [{ "value": "hello@apify.com", "type": "domain" }],
  "phones": [],
  "socialProfiles": {
    "linkedin": "http://linkedin.com/company/apify/",
    "x": "https://x.com/apify"
  },
  "technologies": ["Google Analytics", "Google Tag Manager", "HubSpot", "Intercom", "Next.js", "React"],
  "businessSignals": {
    "hasContactPage": true,
    "hasLeadForm": false,
    "analyticsDetected": true,
    "chatDetected": true
  },
  "recommendedSalesAngles": [
    "Conversion opportunity: no obvious lead/contact form found."
  ]
}
```

Set `outputMode` to `both` to also receive page-level records with titles, H1s, page type, forms, technologies, SEO issues, and extracted contact data per URL.

### Use cases

- Enrich lead lists before cold email or CRM import
- Find companies missing contact forms, analytics, or SEO basics
- Build agency prospect lists for web design, SEO, CRO, analytics, or WordPress services
- Audit customer/prospect websites at scale
- Qualify domains from Google Maps, directories, events, job boards, or purchased lead lists

### Reliability features

- Retries with backoff
- Request timeouts
- Optional Apify Proxy support
- robots.txt support
- Sitemap discovery
- Same-domain crawl limits
- Clean page-level and domain-level outputs
- Local and Apify platform storage support
- Pay-per-event charging hook for successful audited domains

### Pay-per-event pricing recommendation

Recommended event: `auditedDomain`

Charge this event once for each website that returns at least one successfully fetched HTML page and produces a domain summary. This is the fairest unit because buyers think in domains or companies, not raw pages. It also prevents charging for unreachable domains.

Recommended pricing:

- Launch price: **$0.015 per audited domain** ($15 per 1,000 domains)
- Mature price after reviews: **$0.025 per audited domain** ($25 per 1,000 domains)
- Premium tier with deeper page limits or extra enrichment later: **$0.04-$0.06 per audited domain**

This is realistic because the Actor returns enriched business intelligence, not just raw HTML or one scraped field.

### Local test

The included local input tests:

- `https://apify.com`
- `https://example.com`

Run:

```bash
npm install
npm start
```

The latest local test completed successfully with 2/2 successful audits and wrote dataset records plus a `SUMMARY` key-value store record.

# Actor input Schema

## `websites` (type: `array`):

Company websites to audit. Use full URLs or bare domains, one item per company.

## `maxPagesPerWebsite` (type: `integer`):

Maximum number of pages to fetch from each website. Higher values find more contacts and signals but cost more.

## `includeLikelyContactPages` (type: `boolean`):

Try common contact, about, team, pricing, services, and careers URLs before following normal internal links.

## `discoverFromSitemap` (type: `boolean`):

Read sitemap.xml and prioritize useful business pages when available.

## `maxSitemapUrls` (type: `integer`):

Maximum sitemap URLs to consider per website before filtering and prioritizing.

## `respectRobotsTxt` (type: `boolean`):

Skip pages disallowed for this actor's user agent.

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

Maximum time to wait for a page response.

## `maxRequestRetries` (type: `integer`):

Retry failed requests this many times before marking the page as failed.

## `maxConcurrency` (type: `integer`):

Maximum websites to audit at the same time.

## `outputMode` (type: `string`):

Choose whether to save domain summaries only, page-level records only, or both.

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

Optional Apify Proxy configuration. Usually not needed for ordinary business websites, but useful for strict hosts.

## Actor input object example

```json
{
  "websites": [
    "https://apify.com",
    "example.com"
  ],
  "maxPagesPerWebsite": 8,
  "includeLikelyContactPages": true,
  "discoverFromSitemap": true,
  "maxSitemapUrls": 25,
  "respectRobotsTxt": true,
  "requestTimeoutSecs": 20,
  "maxRequestRetries": 2,
  "maxConcurrency": 3,
  "outputMode": "summaries",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

Domain summaries and optional page-level audit records from the default dataset.

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

Aggregate audit counts and compact domain summaries saved in the default key-value store.

# 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 = {
    "websites": [
        "https://apify.com",
        "example.com"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("glowing_glove/b2b-website-contact-seo-lead-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 = { "websites": [
        "https://apify.com",
        "example.com",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("glowing_glove/b2b-website-contact-seo-lead-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 '{
  "websites": [
    "https://apify.com",
    "example.com"
  ]
}' |
apify call glowing_glove/b2b-website-contact-seo-lead-auditor --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "B2B Website Contact & SEO Lead Auditor",
        "description": "Audit business websites and extract public contact details, social profiles, lead forms, tech stack hints, and SEO sales signals.",
        "version": "1.0",
        "x-build-id": "KDQwc9g7anary3372"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/glowing_glove~b2b-website-contact-seo-lead-auditor/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-glowing_glove-b2b-website-contact-seo-lead-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/glowing_glove~b2b-website-contact-seo-lead-auditor/runs": {
            "post": {
                "operationId": "runs-sync-glowing_glove-b2b-website-contact-seo-lead-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/glowing_glove~b2b-website-contact-seo-lead-auditor/run-sync": {
            "post": {
                "operationId": "run-sync-glowing_glove-b2b-website-contact-seo-lead-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",
                "required": [
                    "websites"
                ],
                "properties": {
                    "websites": {
                        "title": "Websites or domains",
                        "type": "array",
                        "description": "Company websites to audit. Use full URLs or bare domains, one item per company.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxPagesPerWebsite": {
                        "title": "Max pages per website",
                        "minimum": 1,
                        "maximum": 50,
                        "type": "integer",
                        "description": "Maximum number of pages to fetch from each website. Higher values find more contacts and signals but cost more.",
                        "default": 8
                    },
                    "includeLikelyContactPages": {
                        "title": "Prioritize contact/about pages",
                        "type": "boolean",
                        "description": "Try common contact, about, team, pricing, services, and careers URLs before following normal internal links.",
                        "default": true
                    },
                    "discoverFromSitemap": {
                        "title": "Discover URLs from sitemap",
                        "type": "boolean",
                        "description": "Read sitemap.xml and prioritize useful business pages when available.",
                        "default": true
                    },
                    "maxSitemapUrls": {
                        "title": "Max sitemap URLs to inspect",
                        "minimum": 0,
                        "maximum": 200,
                        "type": "integer",
                        "description": "Maximum sitemap URLs to consider per website before filtering and prioritizing.",
                        "default": 25
                    },
                    "respectRobotsTxt": {
                        "title": "Respect robots.txt",
                        "type": "boolean",
                        "description": "Skip pages disallowed for this actor's user agent.",
                        "default": true
                    },
                    "requestTimeoutSecs": {
                        "title": "Request timeout",
                        "minimum": 5,
                        "maximum": 90,
                        "type": "integer",
                        "description": "Maximum time to wait for a page response.",
                        "default": 20
                    },
                    "maxRequestRetries": {
                        "title": "Request retries",
                        "minimum": 0,
                        "maximum": 5,
                        "type": "integer",
                        "description": "Retry failed requests this many times before marking the page as failed.",
                        "default": 2
                    },
                    "maxConcurrency": {
                        "title": "Max concurrency",
                        "minimum": 1,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Maximum websites to audit at the same time.",
                        "default": 3
                    },
                    "outputMode": {
                        "title": "Output mode",
                        "enum": [
                            "summaries",
                            "pages",
                            "both"
                        ],
                        "type": "string",
                        "description": "Choose whether to save domain summaries only, page-level records only, or both.",
                        "default": "summaries"
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Optional Apify Proxy configuration. Usually not needed for ordinary business websites, but useful for strict hosts.",
                        "default": {
                            "useApifyProxy": 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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
