# PCAOB Auditor Change & Engagement Partner Monitor (`malonestar/pcaob-auditor-engagement-monitor`) Actor

Track auditor switches, engagement-partner rotations, SOX five-year partner tenure, first-year audits and offshore component-audit disclosure across every SEC issuer, benefit plan and fund from PCAOB Form AP filings. Return only what is new since your last run, or roll up mandate wins per firm.

- **URL**: https://apify.com/malonestar/pcaob-auditor-engagement-monitor.md
- **Developed by:** [Kyle Maloney](https://apify.com/malonestar) (community)
- **Categories:** Business, Developer tools, Agents
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $6.60 / 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/platform/actors/running/actors-in-store#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

## PCAOB Auditor & Engagement Change Monitor

**An auditor resignation is one of the oldest distress tells there is.** So is an unexplained
engagement-partner change at a bank that just restated, or a lead partner quietly serving a seventh
consecutive year on an issuer audit. This actor turns PCAOB's daily Form AP archive into a clean,
machine-readable feed of **auditor switches, engagement-partner rotations and tenure, first-year
audits, component-audit disclosure, amendment lineage and per-firm mandate wins and losses** — for
every SEC issuer, employee benefit plan and investment company that files.

Data source: [`assets.pcaobus.org/firm-filings/FirmFilings.zip`](https://assets.pcaobus.org/firm-filings/FirmFilings.zip)
— the official PCAOB Form AP extract, refreshed daily, ~13 MB compressed / ~93 MB uncompressed,
62 columns, **155,000+ filings** covering the full history back to February 2017.

***

### Who this is for

**Audit committees and governance analysts.** You need to know the moment an issuer's audit firm
changes, whether the outgoing firm was replaced by a smaller one, and whether your lead engagement
partner is approaching the SEC's five-year rotation limit. `mode: "changes"` gives you the switch
feed with `prior_audit_firm`, `prior_partner` and `prior_fiscal_period_end` on the same row;
`partner_consecutive_periods` and `partner_rotation_status` give you the rotation clock.

**Short sellers and forensic accountants.** A Big Four to micro-cap auditor downgrade, a partner
rotation immediately before a restatement, a Form AP that **amends the audit report itself** rather
than a typo, or an audit where a large share of the work was performed by a firm in another country
— those are all first-class fields here, not something you reconstruct by hand. `amended_sections`,
`other_participating_firm_countries` and `participant_range` sit on the row.

**Audit-firm competitive intelligence and business development.** `mode: "firm-rollup"` gives you
mandate wins, mandate losses, net change, market share, distinct partners fielded, and the split
between operating issuers, benefit plans and investment companies — per firm, filterable to your
target segment.

**SOX and independence compliance teams.** SEC Regulation S-X 2-01(c)(6) caps the lead engagement
partner on an issuer audit at five consecutive years. `partner_rotation_status` reports
`within_five_periods`, `fifth_consecutive_period` or `over_five_consecutive_periods` — and
`unknown_left_censored` when PCAOB's own history is too short to tell, rather than guessing.

**Investor relations and benchmarking.** Compare your auditor, partner tenure and audit structure
against peers in the same segment. `bankIssuersOnly` narrows the file to depositories.

**Bank credit and counterparty risk.** `bankIssuersOnly: true` reduces the file to banks, thrifts
and bank holding companies. An auditor change at a mid-size bank is worth a phone call.

***

### What makes this different from reading Form AP yourself

- **Identity is not naive.** PCAOB reuses one Issuer ID for a company *and* its benefit plans
  (Issuer ID 32577 covers "PulteGroup, Inc.", "PulteGroup, Inc. 401(k) Plan" and two more name
  variants — 16.0% of Issuer IDs carry more than one entity name). One company can also hold several
  Issuer IDs (Zillow Group is 596939 *and* 596940 under CIK 0001617640 — 16.5% of CIKs do this).
  Keying on Issuer ID alone fabricates a switch between a 10-K auditor and a 401(k) auditor, and
  hides real EY-to-Deloitte switches. This actor keys **CIK first**, then entity type, then plan
  slug, and publishes the key it used in `issuer_entity_key` so you can audit the join.
- **A negative is only asserted when it was actually checked.** `is_auditor_switch: false` means
  there *was* a predecessor and the firm did not change. Where there is no predecessor the field is
  `null`, not `false`, and `prior_source` says why. The same contract governs
  `is_new_since_last_run`.
- **The source is asserted live on every run.** Row-count floor, a freshness window on the newest
  filing date, row-width uniformity, firm and issuer breadth, and the `Latest Form AP Filing` flag
  vocabulary. A stale or truncated archive that still parses perfectly **fails the run** instead of
  quietly returning a plausible answer. Nothing is emitted and nothing is billed when it does.
- **The `Issuer Ticker` column is a trap.** Its header literally contains a newline
  (`Issuer Ticker \n(Not Available)`), so a naive split yields 21 columns instead of 62 and silently
  corrupts everything after it — and the column is empty in **0 of 155,189 rows**. It is parsed
  correctly and deliberately not emitted. Join issuers on CIK or name.

***

### Modes

| Mode | What you get |
|---|---|
| `changes` *(default)* | Auditor switches, partner rotations and first-year audits, derived from each entity's own Form AP history. Works on the very first run. |
| `new-filings` | Only Form APs this actor had **not seen on its previous run at the same filter scope**. Needs one prior run to establish a baseline; the first run fails loudly and records the baseline rather than returning a misleading empty result. |
| `engagements` | The current audit roster: who audits whom, which partner, and how long they have served. |
| `firm-rollup` | One row per audit firm: mandate wins and losses, market share, distinct partners, entity-type mix. |
| `fund-series` | One row per SEC fund series on Investment Company filings — 145,000+ series across 48,825 filings. |

#### The delta baseline

Cross-run state lives in a **named** key-value store (`pcaob-auditor-engagement-state`); Apify's
*default* store is created fresh for every run and would never persist anything. The baseline is
keyed by the filter scope that decides which rows enter it (`latestOnly`, `bankIssuersOnly`,
`issuerNameContains`), so a `bankIssuersOnly` run and a national run keep separate baselines and
never overwrite each other. `delta_scope` on every row records which baseline was used.

If the baseline could not be loaded for any reason, `is_new_since_last_run` is `null` on every row
and `baseline_status` names the reason. It is never `false`.

***

### Example input

```json
{
  "mode": "changes",
  "bankIssuersOnly": true,
  "latestOnly": true,
  "sinceFilingDate": "2026-01-01",
  "maxResults": 200
}
```

Every audit-firm change, partner rotation and first-year audit at a US bank, thrift or bank holding
company, filed since the start of 2026, newest first.

A few more:

```json
{ "mode": "new-filings", "maxResults": 500 }
```

```json
{ "mode": "firm-rollup", "latestOnly": true, "maxResults": 100 }
```

```json
{ "mode": "engagements", "issuerNameContains": "bancorp", "maxResults": 1000 }
```

```json
{ "mode": "changes", "firmNameContains": "Deloitte", "sinceFilingDate": "2025-01-01" }
```

```json
{ "mode": "fund-series", "firmNameContains": "Cohen", "maxResults": 2000 }
```

`firmNameContains` matches **either side** of a switch, so you see mandates won *and* lost.

***

### Output fields

#### Identity

| Field | Description |
|---|---|
| `issuer_name` | Audited issuer, benefit plan or investment company, as filed. |
| `issuer_cik` | SEC Central Index Key. The stable identifier — PCAOB never populates the ticker column. |
| `issuer_id` | PCAOB internal issuer ID. **Not** unique per company; see above. |
| `issuer_entity_key` | The identity this row was actually grouped under. The audit trail for the join. |
| `issuer_entity_type` | `issuer`, `employee_benefit_plan` or `investment_company`. |
| `issuer_plan_slug` | Plan type (`401k`, `esop`, `pension`, and so on) for benefit plans; `null` otherwise. |
| `issuer_has_no_cik` | PCAOB's "CIK None" flag: the filer declared the entity has no SEC CIK. |
| `is_bank_issuer` | Bank, thrift or bank holding company, matched on the issuer name. Benefit plans are never flagged. |

#### The engagement

| Field | Description |
|---|---|
| `audit_firm`, `firm_id` | Registered accounting firm. `firm_id` is stable across renames, so a rename is not reported as a switch. |
| `firm_other_name` | Alternate or former firm name, for example a pre-merger brand. |
| `firm_country`, `firm_city`, `firm_state` | The office that issued the report. |
| `engagement_partner`, `engagement_partner_id` | Lead engagement partner. |
| `engagement_partner_other_ids` | Other partner IDs the same person has filed under, typically after a firm move. |
| `secondary_partner`, `secondary_partner_id`, `secondary_partner_other_ids` | Secondary engagement partner, where disclosed (1.1% of filings). |
| `audit_report_type` | Issuer / Employee Benefit Plan / Investment Company, verbatim. |
| `fiscal_period_end`, `audit_report_date`, `filing_date` | Normalized to `YYYY-MM-DD`. |
| `is_latest_filing` | PCAOB's current-filing flag. `false` on superseded amendments. |
| `form_filing_id` | PCAOB Form AP filing identifier. |

#### Change detection

| Field | Description |
|---|---|
| `change_type` | `auditor_switch`, `partner_rotation`, `first_year_audit`, `new_issuer`, `no_change`, or `baseline`. |
| `is_auditor_switch` | `true` / `false` when a predecessor existed; **`null` when there was nothing to compare against**. |
| `is_partner_rotation` | The same contract. |
| `is_first_year_audit` | First time this entity and firm pairing appears in the filing history. |
| `prior_audit_firm`, `prior_firm_id`, `prior_partner`, `prior_partner_id`, `prior_fiscal_period_end` | The engagement this row was compared against. `null` when there was none. |
| `prior_source` | `filing_history` (an earlier Form AP in the same file) or `stored_snapshot` (state from this actor's previous run). `null` means no comparison happened. |
| `prior_match_basis` | `same_entity_key`, `cik`, `issuer_id` or `name`. A name-only match is the weakest and is used only when neither side carries anything stronger. |
| `is_baseline_run` | `true` when the run had no prior entity snapshot. |

#### Cross-run delta

| Field | Description |
|---|---|
| `is_new_since_last_run` | `true` when this Form Filing ID was absent from the previous run at the same scope. **`null`, never `false`, when no baseline could be loaded.** |
| `baseline_status` | `no_baseline`, `baseline_loaded`, `baseline_unavailable`, `baseline_scope_mismatch`, `caller_supplied_baseline`. |
| `delta_scope` | Which scoped baseline this run used. |

#### Partner and firm tenure

| Field | Description |
|---|---|
| `partner_consecutive_periods` | Consecutive fiscal periods this partner has signed for this entity at this firm. |
| `partner_first_observed_period` | First period of the current unbroken run. |
| `partner_tenure_left_censored` | `true` when the run reaches the earliest Form AP on file, so real tenure may be longer. |
| `partner_rotation_status` | `within_five_periods`, `fifth_consecutive_period`, `over_five_consecutive_periods`, `unknown_left_censored`. `null` for benefit plans and investment companies, where the issuer rotation rule does not apply the same way. |
| `firm_consecutive_periods`, `firm_first_observed_period`, `firm_tenure_left_censored` | The same, for the firm. |

#### Audit scope and component audits

| Field | Description |
|---|---|
| `is_audit_divided`, `is_audit_not_divided` | Whether responsibility was formally divided with another firm. |
| `other_participant_count` | Number of other accounting firms that participated. `null` when not disclosed — never `0`. |
| `participant_percentage`, `participant_range`, `uses_participant_range` | How much of the audit those firms performed. |
| `other_participating_firms` | Structured list: `firm_id`, `firm_name`, `country`, `city`, `state`, `percentage`, `range`. |
| `other_participating_firm_countries` | Distinct countries the participating firms worked from. The fastest read on offshore component work. |
| `divided_responsibility_firms` | The same shape, for formally divided responsibility. |
| `is_multiple_audit_period`, `audit_period_information` | When one Form AP covers several periods. |
| `is_dual_dated`, `audit_dual_date` | Dual dating for a subsequent event. |

#### Amendment lineage

| Field | Description |
|---|---|
| `is_amendment` | This Form AP amends a previously filed one. |
| `amended_sections` | Which parts changed: `audit_report`, `firm_identification`, `other_firms`, `divided_responsibility`, `participants_over_5pct`, `participants_under_5pct`, `audit_divided`, `certified_firm`, `certified_firm_info`. |
| `amends_form_filing_id` | The filing this one directly amends. |
| `original_form_filing_id` | The head of the amendment chain. |

#### Fund series (Investment Company filings)

| Field | Description |
|---|---|
| `fund_series_count` | Number of SEC fund series covered. `0` on non-fund filings. |
| `fund_series` | Structured list of `{ fund_series_id, fund_name }`. |
| `fund_series_id`, `fund_name` | Top-level columns in `fund-series` mode, one row per series. About 14% of series legitimately carry no SEC series ID (unit investment trusts) and report `null`. |

#### Who signed, and provenance

| Field | Description |
|---|---|
| `signed_name`, `signed_business_title`, `signed_capacity`, `signed_date` | The Form AP signature block, as published by PCAOB. |
| `signed_phone`, `signed_email` | Firm filing-desk contact, as published by PCAOB. |
| `source_max_filing_date` | Newest filing date anywhere in the file this row came from — the data vintage, on every row. |
| `source_row_count` | Total rows in the file this run parsed. |
| `source_url`, `retrieved_at` | Where and when. |

#### `firm-rollup` mode

`audit_firm`, `firm_id`, `firm_country`, `engagements`, `distinct_issuers`, `distinct_partners`,
`mandate_wins`, `mandate_losses`, `net_mandate_change`, `partner_rotations`, `first_year_audits`,
`bank_issuer_engagements`, `issuer_engagements`, `benefit_plan_engagements`,
`investment_company_engagements`, `amended_filings`, `divided_responsibility_engagements`,
`engagements_with_other_participants`, `engagement_share_pct`, `latest_filing_date`,
`new_filings_since_last_run`, plus the provenance fields.

***

### Use as an MCP tool

This actor is available to AI agents through [mcp.apify.com](https://mcp.apify.com). Every input and
output field carries a description, so an agent can select and chain it without extra prompting.
Useful agent phrasings:

- *"Has this company changed auditors, and to whom?"* — `mode: "changes"`, `issuerNameContains`
- *"What Form APs were filed since yesterday?"* — `mode: "new-filings"`
- *"Is the lead partner past the five-year rotation limit?"* — `mode: "engagements"`, then read `partner_rotation_status`
- *"Which audit firm is winning the most bank mandates?"* — `mode: "firm-rollup"`, `bankIssuersOnly: true`
- *"Was any of this audit performed outside the US?"* — read `other_participating_firm_countries`

***

### Pricing

**$12 per 1,000 results** (pay-per-event, Result event only — one event per dataset row). Graduated
discounts apply on paid Apify plans. There are no hidden charge events, and a failed run emits
nothing and bills nothing.

Cost control: `maxResults` is a hard cap applied *before* rows are built, so a capped run is cheap
as well as small. It **defaults to 200** — the same as the prefill — so a bare `{}` from an API or
MCP caller returns a small, cheap sample rather than a sweep nobody asked for. Raise it deliberately. A national `changes` run over the full history finds ~31,000 change events; a
scheduled `new-filings` run typically returns tens of rows a day.

***

### FAQ

**How fresh is the data?**
PCAOB refreshes `FirmFilings.zip` daily. Measured 2026-07-28: 155,189 rows, newest filing dated
2026-07-27. The actor **fails the run** when the newest filing date falls more than 21 days behind,
so a stale cached archive can never be served to you as a quiet market.

**How fast is it?**
The 93 MB CSV is decoded in 4 MiB slices straight into a streaming parser, filtered as it goes, and
pushed in batches — the full file is never held as one string. A bank-only run finishes in about
6 seconds; a full national run in about 20. Comfortably inside Apify's timeout.

**Why did my first `new-filings` run fail?**
By design. That mode answers "what is new since last time", and with no baseline the honest answer
is "not knowable yet" — a different claim from "nothing is new". The run records the baseline, fails
without billing you, and the next run at the same scope returns the real delta. Use `mode: "changes"`
if you want results immediately.

**Does an audit-firm rename show up as an auditor switch?**
No. Comparison is on `firm_id`, which PCAOB keeps stable across renames. Crowe Horwath LLP becoming
Crowe LLP is not a switch; the old name surfaces in `firm_other_name`.

**Why is a company's 401(k) plan a separate row from the company?**
Because it is a separate audit, often by a different firm. PCAOB gives both the same Issuer ID; this
actor separates them by entity type and plan slug, so a 401(k) auditor is never mistaken for a change
of the 10-K auditor.

**Can I diff against my own prior data instead of the stored baseline?**
Yes — pass `priorEngagements` as an array of `{ issuer_cik, issuer_id, issuer_name,
audit_report_type, firm_id, audit_firm, engagement_partner, fiscal_period_end }`. A caller baseline
carries no Form Filing IDs, so `is_new_since_last_run` stays `null` and `baseline_status` reads
`caller_supplied_baseline`.

**What does `latestOnly: false` do?**
Keeps superseded amendment history so you can see how a filing changed over time. Amendments of the
same engagement still dedupe to one row per issuer x firm x fiscal period, preferring the current
filing.

**Why is there no ticker field?**
PCAOB publishes the column but has never populated it — empty in 0 of 155,189 rows. Rather than emit
a permanently blank column, this actor omits it. Join on `issuer_cik`.

***

### Related actors

- **[RIA Registration Delta Monitor](https://apify.com/malonestar/ria-registration-delta-monitor)** —
  the same delta pattern over SEC investment-adviser registrations. A natural pair if you cover
  financial-services counterparties.
- **[FDIC Bank M\&A, Charter & Structure-Change Monitor](https://apify.com/malonestar/fdic-structure-change-delta-monitor)** —
  bank mergers, charter changes and failures. Combine with `bankIssuersOnly: true` here: an auditor
  change plus a pending structure change at the same bank is a far stronger signal than either alone.
- **[SBOM Vulnerability Rollup](https://apify.com/malonestar/sbom-vulnerability-rollup)** —
  if you are assembling an issuer-level risk file, the software-supply-chain layer of the same picture.

***

*Data is republished from the Public Company Accounting Oversight Board's public Form AP archive.
This actor does not add, correct or interpret PCAOB's data beyond the derived fields documented
above; `partner_rotation_status` and `is_bank_issuer` in particular are derived heuristics, not
determinations by PCAOB or the SEC.*

# Actor input Schema

## `mode` (type: `string`):

What to return. 'changes' is the event feed derived from each issuer's own Form AP history: auditor switches, engagement-partner rotations and first-year audits. 'new-filings' returns ONLY Form APs this actor had not seen on its previous run at the same filter scope, so it needs one prior run to establish a baseline. 'engagements' returns the current audit roster with partner tenure. 'firm-rollup' returns per-audit-firm mandate wins, losses and market share. 'fund-series' explodes Investment Company filings into one row per SEC fund series.

## `bankIssuersOnly` (type: `boolean`):

Keep only banks, thrifts, bank holding companies and similar depository issuers (matched on the issuer name; employee benefit plans are always excluded). Useful for bank-distress and credit screens.

## `issuerNameContains` (type: `string`):

Case-insensitive substring filter on the issuer name, for example 'bancorp' or 'Zillow'. Leave empty for all issuers. PCAOB never populates the ticker column, so issuers are matched by name and CIK only.

## `firmNameContains` (type: `string`):

Case-insensitive substring filter on the audit firm name, for example 'Deloitte' or 'RSM'. Matches either the current or the prior audit firm so both sides of a switch are visible.

## `sinceFilingDate` (type: `string`):

ISO date (YYYY-MM-DD). Drops Form AP filings filed before this date. Use it on scheduled runs to keep the feed to recent activity.

## `latestOnly` (type: `boolean`):

Keep only rows where PCAOB's 'Latest Form AP Filing' flag is 1, dropping superseded amendment history. Turn this off to inspect every amendment of an engagement.

## `maxResults` (type: `integer`):

Hard cap on the number of dataset rows this run emits, and the thing you are billed for. Defaults to 200 - the same as the prefill - so a run with no input stays small and cheap. Raise it deliberately: a national changes sweep over the full history finds about 31,000 events.

## `priorEngagements` (type: `array`):

Optional baseline for diffing without any stored run state. Each item may carry issuer\_cik, issuer\_id, issuer\_name, audit\_report\_type, firm\_id, audit\_firm, engagement\_partner and fiscal\_period\_end. When supplied, changes are computed against it.

## Actor input object example

```json
{
  "mode": "changes",
  "bankIssuersOnly": true,
  "latestOnly": true,
  "maxResults": 200
}
```

# Actor output Schema

## `results` (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 = {
    "mode": "changes",
    "bankIssuersOnly": true,
    "latestOnly": true,
    "maxResults": 200
};

// Run the Actor and wait for it to finish
const run = await client.actor("malonestar/pcaob-auditor-engagement-monitor").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 = {
    "mode": "changes",
    "bankIssuersOnly": True,
    "latestOnly": True,
    "maxResults": 200,
}

# Run the Actor and wait for it to finish
run = client.actor("malonestar/pcaob-auditor-engagement-monitor").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "mode": "changes",
  "bankIssuersOnly": true,
  "latestOnly": true,
  "maxResults": 200
}' |
apify call malonestar/pcaob-auditor-engagement-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=malonestar/pcaob-auditor-engagement-monitor",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/vi0VuUqWfNyckl8Wf/builds/AAP7OxzeBTAHGozHV/openapi.json
