# Website Form & Privacy Auditor (`produkdigitalali/website-form-privacy-auditor`) Actor

Audit public website forms, fields, conversion CTAs, visible privacy and consent signals, accessible labels, third-party actions, and insecure submission risks.

- **URL**: https://apify.com/produkdigitalali/website-form-privacy-auditor.md
- **Developed by:** [ProdukDigitalAli](https://apify.com/produkdigitalali) (community)
- **Categories:** Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$5.00 / 1,000 page auditeds

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

## Website Form & Privacy Auditor

Inventory forms and conversion CTAs on public webpages without submitting anything. Get structured fields, form actions, accessible-label checks, privacy/consent signals, third-party endpoint indicators, risk codes, and a page score.

### Quick start

```json
{"startUrls":[{"url":"https://www.hubspot.com/"}],"maxFormsPerPage":50,"maxFieldsPerForm":30,"maxCtasPerPage":100,"requestTimeoutSeconds":15,"maxUserChargeUsd":1}
```

### Output

One dataset row per input page. Each row includes forms, bounded fields, CTA categories, visible privacy-link status, issues, score, and grade. SUMMARY reports successful, failed, and charged pages.

### Issue codes

REQUIRED\_FIELD\_WITHOUT\_LABEL, CONTACT\_FORM\_WITHOUT\_VISIBLE\_PRIVACY\_SIGNAL, INSECURE\_FORM\_ACTION, PASSWORD\_FORM\_ON\_HTTP\_PAGE, NETWORK\_DESTINATION\_BLOCKED, and FETCH\_FAILED.

### Limits and interpretation

The Actor reads server-returned HTML only; JavaScript-injected forms may be absent. A visible privacy link or consent checkbox is a page signal, not proof of legal compliance. Third-party form actions are reported as evidence, not automatically treated as violations. Only public HTTP(S) pages are accepted; HTML is capped at 2 MB and never stored.

### Pricing proposal

$0.005 per successfully audited page, no start fee. Failed pages are free. Final price depends on measured Apify cost.

# Actor input Schema

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

Add 1-50 public landing, signup, demo, contact, or newsletter pages.

## `maxFormsPerPage` (type: `integer`):

Hard cap on forms returned from each page.

## `maxFieldsPerForm` (type: `integer`):

Hard cap on fields returned for each form.

## `maxCtasPerPage` (type: `integer`):

Hard cap on classified CTA elements per page.

## `requestTimeoutSeconds` (type: `integer`):

Maximum seconds allowed for each public page request.

## `maxUserChargeUsd` (type: `number`):

Stop before successful page charges exceed this amount.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.hubspot.com/"
    }
  ],
  "maxFormsPerPage": 50,
  "maxFieldsPerForm": 30,
  "maxCtasPerPage": 100,
  "requestTimeoutSeconds": 15,
  "maxUserChargeUsd": 1
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

## `summary` (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://www.hubspot.com/"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("produkdigitalali/website-form-privacy-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://www.hubspot.com/" }] }

# Run the Actor and wait for it to finish
run = client.actor("produkdigitalali/website-form-privacy-auditor").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 '{
  "startUrls": [
    {
      "url": "https://www.hubspot.com/"
    }
  ]
}' |
apify call produkdigitalali/website-form-privacy-auditor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,produkdigitalali/website-form-privacy-auditor"
        }
    }
}
```

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/3DCVnyJgDmDzXf9mC/builds/I3cPNiJkvKC1S7ezX/openapi.json
