# Sitelemetry Website Audit (`ozandikici/sitelemetry-website-audit`) Actor

Turn website URLs into actionable security, SEO, AI readiness, accessibility and integration reports. Get evidence, prioritized findings and fixes in structured JSON. Audit up to 10 websites per run with native Apify billing. No Sitelemetry account required.

- **URL**: https://apify.com/ozandikici/sitelemetry-website-audit.md
- **Developed by:** [Ozan Dikici](https://apify.com/ozandikici) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$1,490.00 / 1,000 website audit 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?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

<img src="https://sitelemetry.com/favicon.svg" width="40" height="40" alt="Sitelemetry" />

## Sitelemetry Website Audit

**Find website issues, understand the evidence, and see what to fix next.**

Sitelemetry brings security, technical SEO, AI content readiness, integrations and accessibility into detailed reports you can review and export directly in Apify. No Sitelemetry account, subscription, API key or OAuth connection is required.

Paying Apify users can audit **up to 10 websites per run**, with a crawl limit of **up to 10 pages per website**. Each audit uses the scope described below. Free-plan Apify users receive an **uncharged one-website, one-page sample** covering public security, SEO and AI readiness.

### What you get

Reports include findings, supporting evidence, remediation and clear coverage details. An unavailable check is shown as unavailable; a partial report identifies what was measured and what remains incomplete.

| Audit area | Examples of checks | Scope |
| --- | --- | --- |
| **Public security** | TLS, HTTP security headers, HTTPS posture, DNS/email records, registration metadata and technology observations. | Public domain and website observations; no authenticated or intrusive testing. |
| **Technical SEO** | Indexability, titles and descriptions, canonical signals, robots.txt, sitemaps and bounded broken-link checks. | Up to your selected page limit, with crawl coverage reported. |
| **AI content readiness** | Structured data, brand/entity clarity, answer-oriented content, source/trust signals and llms.txt availability. | Static content analysis up to your selected page limit; no live AI answer or ranking measurement. |
| **Integrations** | Publicly visible analytics, tag managers, marketing pixels, verification and consent-manager signals. | HTML and response-header observations from up to 2 pages. |
| **Accessibility** | Image alt attributes, form labels, page language, heading structure and landmarks. | Static HTML checks on 1 page; browser interaction and WCAG certification are outside this scope. |

The page limit applies per audit, not to the total number of HTTP requests. Robots, sitemaps, redirects and bounded link checks can add requests. Reachability and each audit's limits determine actual coverage.

### Start in three steps

1. **Add your website URLs.** Use public websites you own or have permission to audit. Paying users can enter up to 10 URLs; free-plan users can enter one.
2. **Choose the report language, page limit and budget.** Confirm your authorization. The default maximum charge is **$1.49**, enough for one paid report; raise it to **$14.90** to allow ten paid reports at the current price.
3. **Run and review.** Open **Website audit reports** to browse the full reports in Apify's dataset view and export the results.

The prefilled one-page demo uses Sitelemetry's own public website with the owner's permission. When replacing it with another website, confirm that you own that website or have permission to audit it.

Demo input:

```json
{
  "urls": ["https://sitelemetry.com/"],
  "language": "en",
  "maxPages": 1,
  "authorized": true
}
```

Use HTTP(S) URLs or domains without credentials, query parameters or fragments. Duplicate URLs, private/internal targets and unsupported input fields are rejected. The authorization checkbox is required.

Report languages: English (`en`), Turkish (`tr`), Spanish (`es`), German (`de`), French (`fr`), Portuguese (`pt`), Italian (`it`), Japanese (`ja`) and Chinese (`zh`). Technical evidence and some diagnostic text may retain their original language. Free-plan samples always use one page, regardless of the selected page limit.

### Useful for

- **Website owners:** review issues before a launch or after a site change.
- **Agencies and site managers:** run consistent checks across websites you are authorized to audit.
- **Development and content teams:** turn findings and evidence into concrete remediation tasks.

### Pricing and spending control

Paid reports currently cost **$1.49 per delivered, usable website report**, using one native Apify `website-audit` event. The event price displayed by Apify is authoritative. A partially complete report can qualify for one event when at least one audit area produces useful measured evidence; its coverage is shown in the report.

**Failed jobs, all-unavailable reports, queued/running statuses and action-required responses are not billed. The restricted free-plan sample is never charged.** Apify platform usage and account conditions are governed by Apify separately from this report event.

The default maximum total charge is **$1.49**, which covers one paid report. For a batch of ten websites, raise the maximum total charge to **$14.90** to allow ten paid reports at the current price. The Actor checks the available event budget before starting each paid website. Websites run sequentially, and the Actor stops before starting another site when the remaining budget cannot cover one report event. An explicit zero budget allows no paid work; removing the maximum total charge leaves no explicit spending cap.

The complete report is saved to **OUTPUT and the default dataset before charging**. Interrupted charge confirmations are retried without intentionally charging twice for the same report. If confirmation remains unavailable, the run stops before the next website and the saved report remains accessible.

### Review, export and recovery

**Website audit reports** opens the default dataset, with a record for each terminal website job. Each record includes the full report, findings, evidence, remediation and measured coverage. Use the dataset export controls to download your results; JSON preserves the complete nested structure.

For current billing state and any stop reason, open **Storage → default key-value store → OUTPUT** in the run. The same full reports are also retained there for API access. Its `billing` field is `not_billable`, `not_charged`, `pending_confirmation` or `charged`. Dataset `billable` describes eligibility, rather than charge confirmation. A job marked `completed` can contain a partially complete report, so review its per-area results and coverage.

To recover interrupted work, restart/resurrect the **same Apify run within 24 hours of its original start**, retaining its input and storage. A new run starts a new audit. The Actor waits up to 45 minutes within the platform timeout. Reports already delivered remain available if later work stops, and pending work is never charged merely because the wait ends.

### Frequently asked questions

**Do I need a Sitelemetry account?**
No. Start from your Apify account; this Actor does not ask for Sitelemetry credentials or a separate subscription.

**Does the Actor fix my website automatically?**
It provides findings, evidence and recommended fixes for your team to review and implement. It does not edit your website.

**Can I audit pages behind a login?**
This Actor works with publicly accessible websites. It does not accept passwords, cookies or account access tokens.

**How should I use the scores?**
Use each score alongside its findings, evidence and measured coverage to prioritize work. Security covers public observations, accessibility covers static HTML, and AI readiness covers content signals. The scope table explains what each area measures.

### Support

Contact <support@sitelemetry.com>. For an Actor issue, include your Apify run ID, the approximate time and the status or error shown in OUTPUT.

[Privacy Policy](https://sitelemetry.com/privacy) · Use of this Actor is governed by Apify's [Standard Actor Contract](https://docs.apify.com/legal/standard-actor-contract).

# Actor input Schema

## `urls` (type: `array`):

Public HTTP(S) websites you own or are authorized to audit. Up to 10 URLs for paying Apify users, or one URL for a free-plan sample. Enter plain URLs or domains, without credentials, query parameters or fragments.

## `language` (type: `string`):

Language requested for the report. Technical evidence, identifiers and some diagnostic messages may remain in their original language.

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

Maximum page scope for a paid report, from 1 to 10. Free-plan samples always use one page. Actual coverage depends on reachability and each audit's scope; unavailable checks are reported explicitly.

## `authorized` (type: `boolean`):

Required. The prefilled Sitelemetry demo website is supplied with its owner's permission for these public checks. For any other website, confirm that you own it or have permission to audit it. This confirmation does not authorize intrusive testing or bypass access controls.

## Actor input object example

```json
{
  "urls": [
    "https://sitelemetry.com/"
  ],
  "language": "en",
  "maxPages": 1,
  "authorized": true
}
```

# Actor output Schema

## `reports` (type: `string`):

Review and export the full website reports, including findings, evidence, remediation and coverage. Each terminal website job has a dataset record. For current charge confirmation, open OUTPUT in the run's 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 = {
    "urls": [
        "https://sitelemetry.com/"
    ],
    "maxPages": 1,
    "authorized": true
};

// Run the Actor and wait for it to finish
const run = await client.actor("ozandikici/sitelemetry-website-audit").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 = {
    "urls": ["https://sitelemetry.com/"],
    "maxPages": 1,
    "authorized": True,
}

# Run the Actor and wait for it to finish
run = client.actor("ozandikici/sitelemetry-website-audit").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 '{
  "urls": [
    "https://sitelemetry.com/"
  ],
  "maxPages": 1,
  "authorized": true
}' |
apify call ozandikici/sitelemetry-website-audit --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ozandikici/sitelemetry-website-audit"
        }
    }
}
```

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/JWMrHPfRXpbZ9O33L/builds/ypUdM0AEqYUhsm8pa/openapi.json
