# Web App Installability & Release Readiness Agent (`quanmatrix/pwa-manifest-auditor`) Actor

Use this Actor to analyze web app installability and release readiness and return decision-ready structured signals. Audit web app manifests, service workers, icons, HTTPS and installability regressions with release scores and agent-ready remediation actions.

- **URL**: https://apify.com/quanmatrix/pwa-manifest-auditor.md
- **Developed by:** [Rafael Barreto Haddad](https://apify.com/quanmatrix) (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 $2.80 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## Web App Installability & Release Readiness Agent

Use this Actor to analyze web app installability and release readiness and return decision-ready structured signals. It is designed for repeatable human, API, Apify AI, and MCP-driven workflows.

Audit whether a modern web app has the public evidence needed for reliable installation and release readiness. Instead of validating manifest JSON in isolation, this Actor combines manifest discovery, service-worker evidence, icon readiness, HTTPS and snapshot-based regression detection.

### Why use this Actor

PWAs and installable web apps often fail because one small release removes a service worker, breaks the manifest path, drops a required icon or changes configuration. Browser-based audit stacks can be heavy for simple recurring checks. This Actor provides a lightweight structured gate that frontend teams and AI agents can run continuously.

### Key features

- Discover a manifest from HTML or common manifest paths.
- Validate name, start URL, display mode and icons.
- Check 192x192 and 512x512 icon coverage plus maskable icon evidence.
- Discover service-worker registration or common service-worker paths.
- Verify HTTPS and public page availability.
- Record manifest fingerprint and compare with previous snapshots.
- Detect manifest or service-worker regressions.
- Produce `installabilityScore`, `releaseReadinessScore`, `releaseGate` and `agentAction`.
- HTTP-first 256 MB runtime with no Lighthouse service or paid AI dependency.

### Input

Provide one or more public web app URLs. Add previous snapshots for recurring release monitoring.

```json
{"urls":["https://www.pwabuilder.com"],"previousSnapshots":{}}
```

### Output

Each URL returns manifest and service-worker evidence, icon readiness, installability and release scores, regression fields, a reusable snapshot and a recommended action.

### Example

A release that loses its service worker can move from `PASS` to `REVIEW` or `BLOCK`, surface `service_worker_disappeared`, and recommend `REVIEW_WEB_APP_REGRESSION`.

### Use cases

PWA release gates, frontend CI, agency QA, ecommerce PWAs, SaaS web apps, manifest regressions, service-worker monitoring, installability audits and AI-agent release validation.

### Pricing

Pay per result. The base configured price is **$0.004 USD per web app result**, with tiered discounts where supported.

### Limitations

The Actor uses public HTTP evidence and heuristics rather than a full interactive browser. Browser-specific installation prompts and runtime service-worker behavior can differ. A PASS is strong release evidence, not a guarantee that every browser will offer installation.

# Changelog

This Actor's version history is a separate document: https://apify.com/quanmatrix/pwa-manifest-auditor/changelog.md

# Actor input Schema

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

Public web app or website URLs to inspect for installability and release readiness.

## `previousSnapshots` (type: `object`):

Optional prior snapshots keyed by input or final URL to detect manifest and service-worker regressions.

## `maxUrls` (type: `integer`):

Maximum web app URLs processed in one run.

## `concurrency` (type: `integer`):

Maximum parallel web app checks.

## `failRunOnReadiness` (type: `boolean`):

Fail after writing evidence if any releaseReadinessScore is below the minimum.

## `minimumReadinessScore` (type: `number`):

Minimum acceptable releaseReadinessScore when failRunOnReadiness is enabled.

## `verifyDeclaredAssets` (type: `boolean`):

Best-effort check declared icon URLs for reachability.

## `failRunOnRegression` (type: `boolean`):

Fail after writing evidence when manifest/service-worker state regresses.

## `mcpConnectors` (type: `array`):

Optional MCP connectors authorized in your Apify account. Use them to send or write this Actor result to tools such as Slack, Notion, GitHub, Sentry, Supabase, or another compatible MCP service.

## `mcpToolName` (type: `string`):

Optional exact MCP tool name. Leave blank to let the selected MCP action preset discover a compatible tool automatically.

## `mcpToolArguments` (type: `object`):

JSON object passed to the selected MCP tool. String values may use {{actor\_title}}, {{result\_summary}}, or {{result\_json}} placeholders.

## `mcpFailOnError` (type: `boolean`):

When enabled, an MCP delivery error fails the Actor run. Disabled by default so data extraction and intelligence results remain available even if the external destination is unavailable.

## `mcpActionPreset` (type: `string`):

Choose a safe action pattern. AUTO\_SAFE\_WRITE discovers a compatible non-destructive write tool automatically; use a specific preset for Slack, GitHub, Notion, or database delivery.

## Actor input object example

```json
{
  "urls": [
    "https://www.pwabuilder.com"
  ],
  "previousSnapshots": {},
  "maxUrls": 100,
  "concurrency": 6,
  "failRunOnReadiness": false,
  "minimumReadinessScore": 70,
  "verifyDeclaredAssets": false,
  "failRunOnRegression": false,
  "mcpToolName": "",
  "mcpToolArguments": {},
  "mcpFailOnError": false,
  "mcpActionPreset": "AUTO_SAFE_WRITE"
}
```

# Actor output Schema

## `dataset` (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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("quanmatrix/pwa-manifest-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("quanmatrix/pwa-manifest-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 '{}' |
apify call quanmatrix/pwa-manifest-auditor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,quanmatrix/pwa-manifest-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/kyWnw3cJqvqN8MuVH/builds/wXf0fTFYkxTw4o7PS/openapi.json
