# SEO Auditor & Rank Tracker — BrightEdge Alternative (`khadinakbar/brightedge-alternative`) Actor

Audit a public website and optionally check Google keyword ranks. Get one report with technical issues, page evidence, prioritized fixes, robots and sitemap checks, and keyword observations for an SEO repair plan.

- **URL**: https://apify.com/khadinakbar/brightedge-alternative.md
- **Developed by:** [Khadin Akbar](https://apify.com/khadinakbar) (community)
- **Categories:** SEO tools, Automation, MCP servers
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $250.00 / 1,000 seo opportunity reports

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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

## SEO Auditor & Rank Tracker — BrightEdge Alternative

Audit a public website and optionally check Google keyword ranks. Get one report with technical issues, page evidence, prioritized fixes, robots and sitemap checks, and keyword observations for an SEO repair plan. For SEO consultants and launch teams, the dataset returns one combined site-audit and optional keyword-rank report.

### Workflow: put the results to work

Start with the website you need to improve and a bounded crawl. Add the priority keywords when a rank snapshot will inform the repair plan. Review issue counts with the affected page evidence, then turn the proposed fixes into a scoped implementation queue.

### Best fit for this Actor

- Audit a known public website through a bounded sample of 1–50 same-origin HTML pages.
- Review titles, meta descriptions, canonicals, headings, crawl directives, structured-data presence, image alt text, HTTP status, and initial response time.
- Check up to 10 supplied keywords in a current top-10 Google organic-result window for a chosen location, language, and device.
- Return one concise or detailed report that preserves evidence URLs, collection timestamps, scope notes, and warnings.

Choose BrightEdge when the work requires enterprise-scale crawling, historical rank tracking, collaborative dashboards, managed support, or a broader ongoing SEO program. This Actor focuses on one repeatable audit-and-rank-check workflow.

### How this workflow compares with BrightEdge

This Actor is a focused BrightEdge alternative for an on-demand public-site audit plus optional current keyword checks. BrightEdge remains the broader platform for estate-scale crawling, long-term reporting, and enterprise SEO operations.

| Decision                 | This Actor                                                                       | BrightEdge                                              | Best fit                                                                   |
| ------------------------ | -------------------------------------------------------------------------------- | ------------------------------------------------------- | -------------------------------------------------------------------------- |
| Scope                    | One public site, a 1–50 page HTML sample, and up to 10 supplied queries          | Broader ContentIQ crawling and enterprise SEO workflows | Use this Actor for a scoped checkpoint; use BrightEdge for larger programs |
| Billing                  | Pay per completed report plus Apify platform usage                               | Enterprise purchasing process                           | Match the billing model to the frequency and breadth of the work           |
| Output                   | One structured report with findings, fixes, page observations, and rank statuses | Dashboards and reports across a broader platform        | Use the format that fits the next review or handoff                        |
| Effective efficiency     | One report concentrates page evidence, query statuses, and prioritized actions   | Wider workflows coordinate a broader SEO program        | Use this Actor when one scoped report can drive the next action            |
| Automation               | Repeatable JSON input, dataset output, API, and CLI execution                    | Wider managed platform workflows                        | Use this Actor for a bounded programmatic run                              |
| Freshness and provenance | Evidence URLs and collection timestamps are included in each report              | Broader monitoring and reporting operations             | Use this Actor when the immediate observation trail matters                |
| Broader product          | No historical rank series, collaboration suite, or full-estate crawler           | Designed for wider enterprise SEO management            | Keep BrightEdge for suite-level requirements                               |

### What the audit checks

| Area              | Observed signals                                                                                                            |
| ----------------- | --------------------------------------------------------------------------------------------------------------------------- |
| Crawl access      | Starting-page response, `robots.txt`, wildcard blocks, sitemap reachability, and same-origin discovery                      |
| On-page SEO       | Title, meta-description, canonical, `noindex`, H1 count, and document language                                              |
| Media and markup  | Images missing non-empty alt text and JSON-LD presence in the initial HTML                                                  |
| Response evidence | HTTP status and initial server response time for sampled pages                                                              |
| Rank context      | Optional current top-10 organic result status, observed position, result URL, title, and SERP features per supplied keyword |

The technical score is a transparent triage signal derived from the observed findings. Google ranking performance remains a separate measurement.

### Example workflow

A technical marketer starts with a public launch URL and the queries that matter to the release. The Actor samples the chosen site scope, records crawlability and on-page evidence, and returns `findings`, `recommendations`, `pageObservations`, and `rankSnapshots`. The marketer can then assign each evidence-linked fix to a developer or use the report as a documented launch checkpoint.

### Quick start input

```json
{
    "siteUrl": "https://example.com",
    "keywords": ["technical seo audit", "seo site audit"],
    "includeRankSnapshot": true,
    "locationCode": 2840,
    "languageCode": "en",
    "device": "desktop",
    "maxPages": 10,
    "checkLinks": true,
    "respectRobotsTxt": true,
    "requestTimeoutSecs": 20,
    "responseFormat": "concise"
}
```

Use `maxPages` to control the HTML sample size. The optional `keywords` list defines the current visibility questions; each query receives an explicit `found`, `not_found`, or `unavailable` status.

### Input reference

| Field                 | What it controls                                                                               |
| --------------------- | ---------------------------------------------------------------------------------------------- |
| `siteUrl`             | Required public HTTP or HTTPS starting URL; credentials and private-network hosts are rejected |
| `maxPages`            | Same-origin HTML sample from 1 to 50 pages; defaults to 10                                     |
| `keywords`            | Up to 10 plain-language queries for optional current rank checks                               |
| `includeRankSnapshot` | Enables or skips keyword-provider requests                                                     |
| `locationCode`        | Google location identifier used only for rank checks                                           |
| `languageCode`        | Google language code used only for rank checks                                                 |
| `device`              | Desktop or mobile rank-check context                                                           |
| `checkLinks`          | Discovers same-origin links until the page cap is reached                                      |
| `respectRobotsTxt`    | Applies wildcard robots directives to discovered pages                                         |
| `requestTimeoutSecs`  | Per-request timeout from 5 to 60 seconds                                                       |
| `responseFormat`      | Concise decision report or detailed page observations                                          |

### Output data you receive

One dataset item represents one SEO audit and rank-check report for the supplied public site.

| Field                                   | Meaning                                                                             |
| --------------------------------------- | ----------------------------------------------------------------------------------- |
| `siteUrl`, `auditedAt`                  | Normalized site origin and report collection time                                   |
| `overallScore`, `issueCounts`           | Transparent technical triage score and severity totals                              |
| `findings`                              | Technical observations with severity, code, evidence URL, and recommended action    |
| `recommendations`                       | Prioritized action queue derived from observed findings and rank statuses           |
| `pageObservations`                      | Sampled response, metadata, heading, image, indexation, and structured-data signals |
| `rankSnapshots`, `rankSummary`          | Per-query current result evidence and found/not-found/unavailable totals            |
| `robots`, `sitemap`                     | Crawl-policy and sitemap reachability observations                                  |
| `provenance`, `limitations`, `warnings` | Source boundaries and interpretation context                                        |

```json
{
    "siteUrl": "https://example.com",
    "auditedAt": "2026-09-07T12:00:00.000Z",
    "overallScore": 76,
    "pagesRequested": 10,
    "pagesAudited": 8,
    "issueCounts": { "critical": 0, "warning": 2, "info": 4 },
    "findings": [
        {
            "severity": "warning",
            "code": "canonical-missing",
            "evidenceUrl": "https://example.com/",
            "recommendation": "Add an intentional canonical URL when this page should be indexed."
        }
    ],
    "rankSnapshots": [
        {
            "keyword": "technical seo audit",
            "status": "not_found",
            "position": null,
            "resultUrl": null
        }
    ],
    "provenance": {
        "technicalSource": "public-http-html-and-same-origin-sitemap-sample",
        "rankSource": "live-google-organic-results"
    },
    "limitations": ["The crawl is a bounded sample, not a full-site crawl."],
    "warnings": []
}
```

The dataset, `OUTPUT`, and `RUN_SUMMARY` support deterministic readback. Preserve the provenance, evidence URLs, and timestamps when passing findings into another workflow.

### Use through the API

```bash
curl -X POST "https://api.apify.com/v2/acts/khadinakbar~brightedge-alternative/runs" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"siteUrl":"https://example.com","keywords":["technical seo audit"],"maxPages":5}'
```

Read the run’s default dataset for the report and inspect `OUTPUT` or `RUN_SUMMARY` for the terminal outcome and charge diagnostics.

### AI agent and MCP prompt card

Use the prompt with an Apify agent workflow, then inspect the terminal outcome and dataset readback. Preserve provenance, collection time, scope notes, and the billing summary when paginating or passing the report onward.

> Run `khadinakbar/brightedge-alternative` for `https://example.com` with a 10-page scope and the supplied priority keywords. Return the terminal outcome, overall score, issue counts, source-linked recommendations, rank statuses, collection time, and billing summary. Preserve unavailable statuses and scope notes instead of guessing missing evidence.

### Limits and interpretation

- The crawler reads public initial HTML and follows same-origin discovery within the page cap. Browser-rendered and enterprise-scale crawling remain separate workflows.
- Link discovery supports sampling within the page cap; complete broken-link inventories require a dedicated crawl.
- Rank checks cover a current top-10 organic-result window. Historical series and search-ranking outcomes remain separate measurements.
- When configured provider responses are unavailable, rank entries retain an explicit unavailable status while the technical audit still returns useful evidence.
- Initial response time is a server observation; Core Web Vitals and browser performance remain separate measurements.

### Best results

- Start with the canonical public URL for the site or launch surface you need to review.
- Use a concise report for triage and detailed output when a developer needs more page observations.
- Supply only decision-relevant keywords and choose the location, language, and device that match the intended market.
- Compare later runs by their timestamps and source evidence rather than treating the score as a search-engine metric.

### Builder's note

While testing this workflow, I found that a standalone score was much less useful than an evidence trail. That is why every report keeps source URLs, explicit collection times, scope notes, and prioritized actions together: the next person can see what was observed before deciding what to change.

### Responsible use

Use this Actor on public sites you own or are authorized to assess. Follow applicable laws, site terms, and robots directives, and handle any collected information according to your organization’s policies.

### Brand disclosure

```text
BrightEdge is a trademark of its owner. This independent Actor is not affiliated with, associated with, or endorsed by BrightEdge.
```

### Pricing and run costs

This Actor uses **Pay per event plus Apify platform usage**. The [Pricing tab](https://apify.com/khadinakbar/brightedge-alternative/pricing) lists the current event rates and billing terms.

| Event | Billing unit | When it applies |
|---|---|---|
| `apify-actor-start` | Actor Start | Charged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event). |
| `seo-opportunity-report` | SEO opportunity report | One persisted, source-linked technical SEO opportunity report for one public website. |

Run cost combines the charged events and Apify platform usage. Review the run charge limit and requested result count before starting.

### Connect an AI agent

Use the [Apify MCP configurator](https://mcp.apify.com) to choose an available client connection. Inspect this Actor’s current input schema and required credentials before running it.

# Actor input Schema

## `siteUrl` (type: `string`):

Public HTTP or HTTPS website origin or starting page to audit, for example https://example.com. The Actor only crawls same-origin pages and never accepts credentials or private-network hosts. This field is required. It is not a Google Search Console connection or authenticated-site audit.

## `keywords` (type: `array`):

Optional list of up to ten plain-language queries to check in the live Google organic-result window. The domain in Website URL is matched against observed results at collection time. Defaults to an empty list. Search operators are intentionally rejected because they change provider cost and semantics.

## `includeRankSnapshot` (type: `boolean`):

When enabled, collect one current Google organic-result snapshot per supplied keyword. Defaults to true, but no provider request is made when the keyword list is empty. Snapshot availability is reported honestly when the configured data provider cannot respond. It does not provide historical rankings, unlimited SERPs, or ranking guarantees.

## `locationCode` (type: `integer`):

Location code applied to optional rank snapshots. Defaults to 2840 for the United States and accepts public provider location identifiers. Set a location relevant to the market you are assessing. This does not change the technical crawl location.

## `languageCode` (type: `string`):

Language code applied to optional rank snapshots, such as en. Defaults to en. Use a valid language code relevant to the query market. This does not translate the audited page or inspect localized pages automatically.

## `device` (type: `string`):

Device profile for optional live rank snapshots. Choose desktop or mobile; defaults to desktop. This setting is sent only to the rank-snapshot provider. It is not an emulated mobile performance audit.

## `maxPages` (type: `integer`):

Maximum same-origin HTML pages sampled in the technical audit, including the starting page. Defaults to 10 and accepts 1 through 50. Lower values make a fast spot check; higher values broaden the bounded sample. This is not a full-site crawl or an indexed-page count.

## `checkLinks` (type: `boolean`):

When enabled, discover and crawl same-origin links from sampled pages until the page cap is reached. Defaults to true. Disable it to audit only the starting page and same-origin sitemap URLs. This does not perform an unlimited broken-link inventory.

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

Skips discovered same-origin pages disallowed for the wildcard robots.txt group. Defaults to true, while robots.txt remains an audit signal either way. This setting does not bypass authentication, access controls, or explicit site terms. The initial URL is still assessed to report the supplied audit target.

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

Maximum time for each public website or optional rank-provider request. Defaults to 20 seconds and accepts 5 through 60 seconds. Increase only for slow public sites you are authorized to assess. It is not a total run-time guarantee.

## `responseFormat` (type: `string`):

Choose concise for a compact decision report or detailed for more sampled findings and page observations. Defaults to concise. Both formats contain the same top-level evidence fields and limitations. Detailed output is still capped by the bounded input page limit.

## Actor input object example

```json
{
  "siteUrl": "https://example.com",
  "keywords": [
    "technical seo audit",
    "seo opportunity audit"
  ],
  "includeRankSnapshot": true,
  "locationCode": 2840,
  "languageCode": "en",
  "device": "desktop",
  "maxPages": 10,
  "checkLinks": true,
  "respectRobotsTxt": true,
  "requestTimeoutSecs": 20,
  "responseFormat": "concise"
}
```

# Actor output Schema

## `seoOpportunityReport` (type: `string`):

One validated, source-linked SEO opportunity report for the supplied public website.

## `output` (type: `string`):

Terminal outcome, item count, and event charge information for this run.

## `runSummary` (type: `string`):

Terminal diagnostics, provider counters, and report summary for this run.

# 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 = {
    "siteUrl": "https://example.com"
};

// Run the Actor and wait for it to finish
const run = await client.actor("khadinakbar/brightedge-alternative").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 = { "siteUrl": "https://example.com" }

# Run the Actor and wait for it to finish
run = client.actor("khadinakbar/brightedge-alternative").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "siteUrl": "https://example.com"
}' |
apify call khadinakbar/brightedge-alternative --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,khadinakbar/brightedge-alternative"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/JFRIWfCbR0htySxd6/builds/qZpPPb2RCpgXbj80U/openapi.json
