# Agency Evidence Pack (`checksmithcats/agency-evidence-pack`) Actor

Builds multi-client observed snapshots and change labels from bounded public-site signal checks.

- **URL**: https://apify.com/checksmithcats/agency-evidence-pack.md
- **Developed by:** [Checksmith Cats](https://apify.com/checksmithcats) (community)
- **Categories:** Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / agency evidence pack generated

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## Agency Evidence Pack

For recurring client reporting, Agency Evidence Pack builds a multi-client observed snapshot and change report from existing Checksmith public-site signal engines.

It is designed for agencies or operators who need a repeatable monthly record across multiple client sites without manually stitching reports together.

The Actor accepts one to twenty public client sites. It runs the same bounded checks for each client, isolates failures to the affected engine or client, and returns one consistent evidence pack. A failed observation does not become a positive finding and one unreachable site does not prevent the remaining clients from completing.

### What It Produces

- Client-by-client observed snapshot
- Engine status per client
- Previous-snapshot comparison when provided
- Client-level Evidence Pack references
- Markdown, HTML, JSON, and dataset rows
- Fixed boundary disclaimer in the report footer

The current engine set records public AI-crawler readiness signals and public domain, TLS, DMARC, MTA-STS, and security.txt deadline signals. Each engine reports a `checked`, `unobserved`, or `error` state. The pack does not combine those observations into an agency score or a client quality grade.

### Typical Workflow

1. Add each client name, bare domain, and public site URL.
2. Run the Actor before a recurring review or client handoff.
3. Download `REPORT.html`, `REPORT.md`, or `REPORT.json` from the run storage.
4. Keep `currentSnapshot` if the next run should label clients as new, changed, or unchanged.

The previous snapshot is supplied explicitly. The Actor does not silently maintain a long-term client database and does not require an account login for any client site.

### Billing

- `agency-evidence-pack-generated`: USD 3.00 once when at least one client has an observable result.
- `agency-client-checked`: USD 1.20 for each client with at least one observable engine result.

A one-client run is USD 4.20, five checked clients are USD 9.00, and the maximum twenty-client run is USD 27.00, plus Apify platform usage. Invalid input and runs with no observable client result do not trigger either custom event. A client for which every engine errors or returns only unobserved signals is not counted as checked.

### Boundaries

This product does not provide SEO, security, compliance, uptime, agency-performance, ranking, traffic, or platform-acceptance certification. It does not prove that a site is managed correctly. It reports machine-observed public-site signals and changes only.

Template editing is intentionally not supported. Branding is limited to agency name, optional logo URL metadata, and an optional footer note while the boundary disclaimer remains included.

The report is not a replacement for manual SEO, security, legal, compliance, uptime, traffic, or platform review. It does not log into client systems, repair findings, monitor private networks, predict rankings, or certify that an agency has managed a site correctly. The logo URL is stored as metadata only; it is not fetched or embedded by the Actor.

### Support Boundary

Supported questions cover input shape, public URL requirements, report locations, snapshot handoff, and reproducible Actor errors. Support does not include interpreting whether a client site is good, providing remediation services, editing client reports, promising platform outcomes, or reviewing private account data.

### Local Example

```bash
PYTHONPATH=src python -m agency_evidence_pack.cli examples/sample-input.json --json report.json --md report.md
```

For a first run, keep `sampleLimit` small and use public test domains. Review the generated engine statuses before adding more clients.

# Actor input Schema

## `agencyName` (type: `string`):

Optional agency or report name shown in report headings.

## `agencyLogoUrl` (type: `string`):

Optional logo URL shown as metadata only. Template editing is not supported.

## `footerNote` (type: `string`):

Optional short footer note. The boundary disclaimer remains included.

## `sampleLimit` (type: `integer`):

Maximum page sample passed to underlying site-signal engines.

## `clients` (type: `array`):

Client sites to include. One failing client does not stop the whole pack.

## `previousSnapshot` (type: `object`):

Optional currentSnapshot from a prior run, used only for change labels.

## Actor input object example

```json
{
  "sampleLimit": 5,
  "clients": [
    {
      "name": "Example Client",
      "domain": "example.com",
      "siteUrl": "https://example.com/"
    }
  ]
}
```

# Actor output Schema

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

No description

## `report` (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 = {
    "clients": [
        {
            "name": "Example Client",
            "domain": "example.com",
            "siteUrl": "https://example.com/"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("checksmithcats/agency-evidence-pack").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 = { "clients": [{
            "name": "Example Client",
            "domain": "example.com",
            "siteUrl": "https://example.com/",
        }] }

# Run the Actor and wait for it to finish
run = client.actor("checksmithcats/agency-evidence-pack").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 '{
  "clients": [
    {
      "name": "Example Client",
      "domain": "example.com",
      "siteUrl": "https://example.com/"
    }
  ]
}' |
apify call checksmithcats/agency-evidence-pack --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,checksmithcats/agency-evidence-pack"
        }
    }
}

```

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/ouOivGvX5zav7VfeK/builds/FcTPqM0r6XEM6lcjp/openapi.json
