# Insider Purchase Cluster Monitor - SEC Form 4

Extract SEC Form 4 purchases with source evidence, ownership details and conservative insider cluster counts. Bounded watchlists, saved comparisons and CSV/JSON output.

Canonical product page: https://mayd-it.com/data-tools/actors/insider-purchase-cluster-monitor/
Public Actor: https://apify.com/maydit/insider-purchase-cluster-monitor

## Example input

```json
{
  "filingUrls": [
    "https://www.sec.gov/Archives/edgar/data/797468/000162828026045313/wk-form4_1782342238.xml"
  ],
  "maxResults": 5
}
```

## Full guide

![SEC Form 4 purchase evidence, observed insider counts and saved comparisons](https://api.apify.com/v2/key-value-stores/nemaYfVcrTgloz8Wn/records/insider-purchase-cluster-monitor-c7ac13850b5a.png?signature=gCFjjiocicbB9G3wzsze)

## Follow disclosed insider purchases

Build an issuer research timeline from SEC Form 4 purchase disclosures. See who reported a purchase, the shares and reported price, and whether multiple officers or directors appear in the inspected purchase window. Designed for analysts and research teams reviewing insider activity alongside company filings.

[Open this Actor in Console](https://console.apify.com/actors/1lDc6DDHL1Wcl3k9x/input) · [First run](#try-this-actor) · [Results](#result-preview) · [Saved comparisons](#build-a-repeatable-workflow) · [Full guide](#full-guide)

## Try this Actor

Start with one historical Occidental Petroleum purchase. The June 23, 2026 transaction reports **4,770 shares at 52.38 per share**. This fixed SEC example demonstrates the output; its date stays attached to the observation. No SEC key or paid source subscription is required.

**Inspect an SEC Form 4 purchase** — paste this input into the Console JSON editor.

```json
{
  "filingUrls": [
    "https://www.sec.gov/Archives/edgar/data/797468/000162828026045313/wk-form4_1782342238.xml"
  ],
  "maxResults": 5
}
```

Open the dataset to review the purchase and follow `sourceUrl` to the filing. Then open **Run report** or **SUMMARY** to see what was inspected. This one-insider sample does not establish a cluster.

**Read the code correctly:** SEC transaction code `P` covers an **open-market or private purchase**. It does not establish which of the two occurred.

## Result preview

One row is one purchase-coded, non-derivative transaction. The overview brings the research essentials together:

| Research question | Output fields |
| --- | --- |
| Which issuer and when? | `ticker`, `issuerName`, `transactionDate` |
| What was reported? | `shares`, `pricePerShare`, `reportedValue` |
| Who reported it? | `reportingOwners`, `ownershipNature` |
| Were other eligible insiders observed? | `observedDistinctInsiders`, `clusterDetected` |
| What changed since the saved observation? | `comparisonStatus`, `changedFields`, `previous` |
| Where is the evidence? | `sourceUrl`, `accessionNumber`, `observedAt` |

Cluster counts cover the inspected filings. The price’s currency is not inferred, and missing or nonnumeric prices remain null.

## Usage and pricing

Base result rate on the FREE tier: **$5 per 1,000 saved purchase observations**. The [Pricing tab](https://apify.com/maydit/insider-purchase-cluster-monitor/pricing) shows your plan’s result rate and the **Actor Start** charge. Set `maxResults` and a platform spending limit before running a larger watchlist. A result cap is an upper bound, not a promise of that many results.

Saved unchanged observations are billable. `onlyChanges` skips unchanged rows after a baseline; skipped rows, source errors and summary files are not dataset-item charges.

## Build a repeatable workflow

1. **Choose a small issuer watchlist.** Use the Occidental watchlist example below, then replace its CIK with your tickers or SEC CIKs. Review filing coverage before expanding the scope.
2. **Save a baseline.** Use the saved-comparison example below with `comparePrevious: true`. Keep the same input scope, `snapshotName` and named history store between runs.
3. **Review the changes.** Check `comparisonStatus`, `changedFields`, ownership details and the linked Form 4. A new accession/transaction line has its own identity.
4. **Deliver the evidence.** Export the completed dataset to your research sheet or connect it through your own workflow. Use `id` as the transaction key and retain the source link. After the baseline, `onlyChanges: true` can keep unchanged transactions out of later exports.

Run a comparison namespace sequentially. Check SUMMARY before interpreting an empty result or routing changes; source gaps cannot establish that an insider stopped buying.

## Full guide

### Choose your evidence

Use either `companies` or `filingUrls`. A specified company query never silently falls back to the historical sample. Direct documents are inspected regardless of age. Company discovery searches only the SEC’s returned recent submissions index; it does not traverse archived index files.

- `companies`: up to 10 ticker symbols or SEC CIKs.
- `filingUrls`: up to 30 raw SEC archive XML URLs. SEC XSL viewer prefixes are normalized to raw XML.
- `lookbackDays`: bounds company discovery by filing date and company-watchlist purchases by transaction date.
- `maxFilingsPerCompany`: bounds matching filings before XML inspection. A company can appear as a reporting owner in another issuer’s filing; issuer mismatches are excluded after parsing, so a narrow cap can miss matches.
- `clusterWindowDays`, `minimumInsiders` and `onlyClusters`: select the observed cluster definition and optional output filter described below.

### Field reference

| Field | Meaning |
| --- | --- |
| `issuerCik`, `issuerName`, `ticker` | Issuer identity reported in the ownership XML. Ticker may be missing or historical. |
| `transactionDate`, `transactionCode` | The transaction date and SEC code `P`. |
| `shares`, `pricePerShare`, `reportedValue` | Reported shares and price; value is shares multiplied by price, rounded to six decimals. Missing or nonnumeric price remains null. Currency is not inferred. |
| `reportingOwners` | Filing owners, CIKs, director/officer flags and officer titles. |
| `ownershipNature`, `sharesOwnedFollowing` | Direct/indirect ownership and the reported post-transaction amount. |
| `footnotes`, `remarks`, `rule10b51Flag` | Source qualifications and the filing’s plan flag when present. Footnotes apply at filing level; review the original for precise references. |
| `clusterDetected`, `observedDistinctInsiders` | Conservative count within the observed transaction window. |
| `sourceUrl`, `accessionNumber` | Raw SEC evidence and filing identifier. |
| `filingDate`, `acceptedAt`, `observedAt` | SEC discovery metadata when available, and our observation timestamp. Direct URLs have null filing/acceptance metadata; transaction dates are not publication times. |

Grants, sales, withholding, exercises, derivative transactions and holdings-only entries are excluded.

### How the cluster count works

For each purchase, the window ends on its transaction date and includes that date plus the preceding `clusterWindowDays - 1` days. Only observed purchases for the same issuer and case-insensitively matching security title are considered. Counts use distinct owner CIKs, not numbers of transactions.

A counted owner must be a director or officer, be the sole reporting owner in that filing, and report direct ownership. Joint filings, indirect ownership and institutional-only/other ownership remain visible as purchase rows but do not increase the cluster count. Separate security titles are not assumed to represent the same class.

Form 4/A amendments are excluded and recorded in the run summary to prevent counting the same acquisition again. This release does not resolve amendment chains: an original filing may later be corrected. The output exposes that limitation. It does not estimate total company insider spending or infer that an insider stopped buying.

### Saved comparison behavior

Enable `comparePrevious` and keep the same input scope, `snapshotName` and named store across scheduled runs. The first saved observation is `new`. Reobserved transactions are `changed` or `unchanged`, with previous values and changed fields. A newly filed transaction has its own accession/line identity.

`onlyChanges` skips unchanged rows and can correctly produce zero output. `onlyClusters` can also produce zero output—including the default one-insider example. Neither mode fabricates replacement rows. Saved state advances only after a row is confirmed written; spending limits do not consume unsaved history. Use one writer per comparison namespace.

### Coverage, limits and failures

Open **Run report** for the readable outcome, **SUMMARY** for source-by-source coverage, or export **JSON/CSV** from the dataset. Filings are inspected before cluster enrichment so counts use the full inspected set even when fewer rows are saved. The filing cap, recent-index boundary, excluded amendments, failed sources and transaction-date bounds all limit what a cluster can establish.

Requests identify Maydit to the SEC and are serialized at approximately one per second. Requests have bounded time and response size; temporary server errors receive one retry. Access refusals are reported without bypassing them. An upstream failure never becomes a paid data row. An all-failed run fails honestly; an empty valid purchase filter succeeds with an explicit summary.

### Three example inputs

The first exact example is [Inspect an SEC Form 4 purchase](#try-this-actor) above. The other saved examples are:

#### Review a bounded Occidental insider purchase window

Inspect up to 12 recent Form 4 filings for Occidental and extract eligible purchases within 365 days.

```json
{
  "companies": [
    "0000797468"
  ],
  "maxFilingsPerCompany": 12,
  "lookbackDays": 365,
  "maxResults": 10
}
```

#### Save an insider purchase comparison baseline

Save the documented Form 4 purchase and compare its observed cluster details on later runs. First run returns a new observation.

```json
{
  "filingUrls": [
    "https://www.sec.gov/Archives/edgar/data/797468/000162828026045313/wk-form4_1782342238.xml"
  ],
  "comparePrevious": true,
  "snapshotName": "oxy-purchase-example",
  "maxResults": 5
}
```

### Research use and sources

Use the observations to prioritize filing review, maintain issuer timelines, or combine disclosed purchases with earnings and financing evidence. The Actor does not calculate buy/sell recommendations or predict share-price moves.

[SEC ownership transaction codes](https://www.sec.gov/edgar/searchedgar/ownershipformcodes.html) · [SEC Developer Resources](https://www.sec.gov/about/developer-resources) · [SEC automated access guidance](https://www.sec.gov/about/webmaster-frequently-asked-questions)

## Help with your run

Open **Run report** in the run’s Output tab for a readable outcome and **SUMMARY** for detailed coverage and source issues. Export CSV for flat spreadsheet columns or JSON to preserve nested evidence.

For help, open this Actor’s **Issues** tab with the run URL, relevant input and expected result. Remove credentials and private information before posting.

[Explore more Mayd-It Actors](https://apify.com/maydit)
