SEC Form 144 Proposed Sale Scraper avatar

SEC Form 144 Proposed Sale Scraper

Pricing

Pay per event

Go to Apify Store
SEC Form 144 Proposed Sale Scraper

SEC Form 144 Proposed Sale Scraper

πŸ“„ Monitor SEC Form 144 proposed securities sales or parse exact filings into normalized, source-linked records for research and compliance.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Extract SEC EDGAR Form 144 and 144/A proposed securities sales into normalized, source-linked JSON. Monitor recent filings or parse specific EDGAR filing URLs without a browser, login, proxy, or paid data API.

A Form 144 is a notice of a proposed sale by an affiliate of an issuer or of restricted securities. It can reveal intended sales before they appear as completed insider transactions. This Actor turns the SEC filing XML into records ready for research, compliance review, spreadsheets, databases, and alerts.

  • πŸ“„ Discover recent Form 144 filings from the official SEC feed
  • 🎯 Filter issuers by CIK or stock ticker
  • πŸ’΅ Capture proposed units and aggregate market value
  • πŸ‘€ Extract seller identity and relationship to the issuer
  • 🏦 Preserve broker, acquisition history, and recent-sale details
  • πŸ” Checkpoint accessions for scheduled incremental monitoring
  • πŸ”— Keep the SEC index and source XML URL on every record

What does the SEC Form 144 scraper do?

The Actor uses the SEC's official current-filings Atom feed and filing XML documents. It deduplicates reporting-owner and subject entries that point to the same accession, validates that each document is Form 144 or 144/A, and emits one record per proposed security-sale row.

You can run it in two ways:

  1. Leave startUrls empty to scan the latest Form 144 feed.
  2. Supply one or more SEC archive index or primary XML URLs to parse exact filings, including older accessions.

The recent feed is a current window, not a complete historical search index. Use direct filing URLs when you already know an older accession.

Who is it for?

Investors and research analysts

Track disclosed sale intentions, compare proposed values, and route notable affiliate-sale notices into an investment-research workflow.

Fintech and market-data teams

Build a normalized Form 144 feed without maintaining XML namespaces, repeating sections, amendment handling, SEC pacing, or accession deduplication.

Schedule recurring checks, filter relevant issuers, and retain source URLs for review and audit trails.

Alert and automation builders

Connect Apify schedules, webhooks, Zapier, Make, Google Sheets, databases, or custom code to trigger downstream actions when new notices appear.

Why use this Actor?

Raw Form 144 filings are structured but not analysis-ready. A single filing can contain multiple proposed securities, multiple acquisition rows, multiple sales from the prior three months, broker addresses, amendment identity, remarks, and Rule 10b5-1 adoption dates.

This Actor handles those details consistently:

  • βœ… SEC Atom discovery and duplicate-accession removal
  • βœ… XML namespace handling and repeating-node normalization
  • βœ… strict 144 / 144/A form validation
  • βœ… dates normalized to YYYY-MM-DD
  • βœ… amounts and unit counts emitted as numbers
  • βœ… optional ticker-to-CIK mapping from SEC data
  • βœ… bounded retry and conservative SEC request pacing
  • βœ… failed extraction causes a failed run instead of a misleading empty success

What SEC Form 144 data can I extract?

Field groupExample fieldsWhy it matters
Filing identityaccessionNumber, formType, filedAtDedupe and timeline analysis
Amendment identityisAmendment, previousAccessionNumberConnect corrections to earlier notices
IssuerissuerName, issuerCik, secFileNumberJoin to company and security data
SellersellerName, relationshipsIdentify affiliate role and account
Proposed salesecurityClass, unitsToSell, aggregateMarketValueMeasure intended transaction size
Market contextunitsOutstanding, exchangeCompare size and venue
TimingapproximateSaleDate, noticeDateBuild event timelines
BrokerbrokerName, broker address fieldsReview execution intermediary
Acquisition historyacquisitionHistoryJsonPreserve how securities were obtained
Recent salesrecentSalesJsonSee sales reported for the prior three months
Rule 10b5-1planAdoptionDatesIdentify supplied plan adoption dates
SourcefilingIndexUrl, sourceXmlUrlVerify every result at the SEC

How much does it cost to scrape SEC Form 144 filings?

The Actor uses pay-per-event pricing. A run starts at $0.005, then charges for each proposed-sale record saved. The current BRONZE price is $0.00032553 per record, with lower unit prices on higher Apify plans and a slightly higher FREE-plan unit price.

Examples at the BRONZE price:

  • 10 records: approximately $0.0083 including the start event
  • 100 records: approximately $0.0376 including the start event
  • 1,000 records: approximately $0.3305 including the start event

The SEC current feed is finite and recent, so many monitoring runs naturally return fewer than 100 records. Direct filing extraction often returns one record. You are never charged for a result that is filtered out or fails before it is saved.

How to scrape recent Form 144 filings

  1. Open the Actor input page.
  2. Leave SEC filing URLs empty.
  3. Set Maximum proposed-sale records to a small value such as 10.
  4. Keep Include Form 144/A amendments enabled if corrections matter.
  5. Optionally add issuer CIKs, tickers, or filing-date filters.
  6. Click Start.
  7. Export the dataset as JSON, CSV, Excel, XML, or another supported format.

Minimal recent-feed input:

{
"maxItems": 10,
"includeAmendments": true
}

How to parse a specific Form 144 filing

Add an SEC archive index URL or primary filing XML URL:

{
"startUrls": [
{
"url": "https://www.sec.gov/Archives/edgar/data/1730168/000197372726000041/primary_doc.xml"
}
],
"maxItems": 5,
"includeAmendments": true
}

Only SEC EDGAR archive URLs are accepted. The Actor rejects third-party hosts and rejects documents whose submission type is not 144 or 144/A.

Input parameters

InputTypeDefaultDescription
startUrlsarrayemptySEC filing index or primary XML URLs; empty uses the current feed
maxItemsinteger10Maximum proposed-sale records to save, from 1 to 1,000
includeAmendmentsbooleantrueInclude Form 144/A correction filings
cikFiltersstring arrayemptyMatch issuer CIKs; leading zeros are optional
tickerFiltersstring arrayemptyMap ticker symbols to issuer CIKs through SEC data
filedFromstringemptyRecent-feed lower date bound in YYYY-MM-DD
filedTostringemptyRecent-feed upper date bound in YYYY-MM-DD
incrementalbooleanfalseSkip accessions checkpointed in the default key-value store

CIK and ticker filters are combined as an allowed issuer set. An unknown ticker fails the run rather than silently returning unrelated companies.

Output example

{
"accessionNumber": "0001973727-26-000041",
"formType": "144/A",
"isAmendment": true,
"previousAccessionNumber": "0001973727-26-000037",
"issuerCik": "0001730168",
"issuerName": "Broadcom Inc.",
"sellerName": "H&S INVESTMENTS I LP",
"relationships": "Chairman of the Board of Broadcom",
"securityClass": "Common Stock",
"unitsToSell": 314033,
"aggregateMarketValue": 120002749.23,
"unitsOutstanding": 4757580198,
"approximateSaleDate": "2026-06-24",
"exchange": "NASDAQ",
"brokerName": "Northern Trust Securities, Inc.",
"planAdoptionDates": "2025-12-16",
"filingIndexUrl": "https://www.sec.gov/Archives/edgar/data/1730168/000197372726000041/0001973727-26-000041-index.htm",
"sourceXmlUrl": "https://www.sec.gov/Archives/edgar/data/1730168/000197372726000041/primary_doc.xml"
}

Optional fields are omitted when the filer did not supply them. Acquisition and recent-sale sections are JSON strings so they remain portable in CSV and spreadsheet exports.

Understanding one record per proposed sale

Most filings contain one securitiesInformation block, but the SEC format allows repeats. The Actor emits one dataset item for each proposed security row and repeats shared filing metadata on those items.

This makes filtering and aggregation straightforward. Count unique accessionNumber values for filing counts; count dataset rows for proposed-sale line counts.

Monitoring new accessions

Set incremental to true in a scheduled task. After a filing is processed, its accession is stored under KNOWN_ACCESSIONS in the task's default key-value store. Later runs skip that accession.

Recommended monitoring input:

{
"maxItems": 100,
"includeAmendments": true,
"incremental": true
}

Use a stable Apify task or integration that reuses the same default storage. Turning incremental mode on during one-off tests can intentionally produce no output when every current accession was already seen.

Filtering by ticker or CIK

Ticker filters are convenient for watchlists:

{
"tickerFilters": ["AVGO", "AAPL"],
"maxItems": 50
}

CIK filters avoid ticker ambiguity and are ideal for compliance systems:

{
"cikFilters": ["1730168", "0000320193"],
"maxItems": 50
}

Filters apply to the issuer CIK, not the reporting seller's CIK.

Data-quality notes

Form 144 is a notice of a proposed sale, not proof that the sale was completed. Do not treat unitsToSell as a confirmed transaction.

The Actor preserves supplied values but cannot correct filer omissions. Missing broker details, relationships, remarks, recent sales, or plan dates remain absent. Amendments can revise prior notices, so downstream systems should use previousAccessionNumber and isAmendment.

Tips for reliable SEC workflows

  • πŸ”Ž Keep accessionNumber as your primary source identity.
  • 🧩 Join issuerCik to SEC company submissions rather than fuzzy company names.
  • πŸ“… Store both filing date and approximate sale date; they describe different events.
  • πŸ“ Review remarks because amendments often explain what changed.
  • πŸ” Use incremental mode only with stable task storage.
  • 🚦 Avoid launching many parallel tasks against SEC endpoints.
  • πŸ”— Retain source URLs in every downstream warehouse or alert.

Integrations

Google Sheets and Excel

Schedule the Actor, export the default dataset, and maintain a watchlist of issuer, seller, relationship, proposed value, and sale date.

Slack, Teams, and email alerts

Use an Apify webhook or Make/Zapier flow to send a notification when aggregateMarketValue exceeds a chosen threshold or a watched issuer appears.

Data warehouses

Load JSON records into Snowflake, BigQuery, PostgreSQL, or object storage. Parse acquisitionHistoryJson and recentSalesJson when relational child tables are useful.

Compliance case management

Create a review case keyed by accession, attach the SEC filing URL, and update or supersede the case when a 144/A references the earlier accession.

Run with the Apify API in Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/sec-form-144-proposed-sale-scraper').call({
maxItems: 25,
includeAmendments: true,
tickerFilters: ['AVGO'],
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Run with the Apify API in Python

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/sec-form-144-proposed-sale-scraper').call(
run_input={
'maxItems': 25,
'includeAmendments': True,
'cikFilters': ['1730168'],
}
)
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)

Run with cURL

curl -X POST \
"https://api.apify.com/v2/acts/automation-lab~sec-form-144-proposed-sale-scraper/runs?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"maxItems":10,"includeAmendments":true}'

Fetch items after the run finishes:

$curl "https://api.apify.com/v2/datasets/DATASET_ID/items?clean=true&format=json"

Use the Actor through Apify MCP

Connect AI assistants to the Actor through Apify's MCP server.

Claude Code:

$claude mcp add --transport http apify "https://mcp.apify.com?tools=automation-lab/sec-form-144-proposed-sale-scraper"

Claude Desktop, Cursor, or VS Code MCP configuration:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=automation-lab/sec-form-144-proposed-sale-scraper"
}
}
}

Example prompts:

  • β€œExtract the latest 20 SEC Form 144 proposed sales and rank them by aggregate market value.”
  • β€œParse this SEC Form 144 XML URL and summarize the seller, issuer relationship, broker, and 10b5-1 dates.”
  • β€œReturn recent Form 144 notices for these issuer CIKs with their source links.”

Scheduling and webhooks

Create an Apify task with incremental: true, attach a schedule, and configure a run-succeeded webhook. A downstream service can read only newly saved dataset rows and create alerts.

If a run fails, inspect its log rather than treating the absence of a webhook as β€œno new filings.” The Actor deliberately fails when it cannot extract any record, preventing transport or parser errors from looking like a clean empty result.

SEC EDGAR filings are public government records. This Actor accesses official public SEC endpoints and identifies itself through its HTTP User-Agent. It does not bypass authentication, CAPTCHA, or access controls.

You are responsible for complying with SEC fair-access guidance, Apify terms, applicable laws, and your organization's data-use policies. The output is informational and is not investment, legal, or compliance advice.

Limitations

  • The current feed covers recent filings, not all historical Form 144 records.
  • Filing content reflects filer-supplied data and can be incomplete or amended.
  • Ticker mappings reflect the current SEC company ticker file.
  • Proposed sale notices do not establish that a transaction occurred.
  • Incremental checkpoints depend on reusing the same default key-value store.
  • This Actor does not provide price movement, recommendations, or insider-trading conclusions.

FAQ

Does the Actor include Form 144/A?

Yes. Amendments are included by default. Set includeAmendments to false to exclude them.

Can I scrape an older filing?

Yes. Supply its SEC EDGAR archive index URL or primary XML URL in startUrls. Date filters affect recent-feed discovery only.

Why do I see two records with one accession?

A filing can disclose more than one proposed security row. Records share accession metadata but differ in security or sale details.

Why did an incremental run return no records?

All current accessions may already be checkpointed, or no filing matched your filters. Disable incremental for a one-off replay or use a fresh default key-value store.

Why did my ticker filter fail?

Ticker symbols are validated against the SEC company ticker mapping. Check spelling and use an issuer CIK when the security is not represented there.

Does this show completed insider sales?

No. Form 144 reports a proposed sale. Use an appropriate Form 4 data source for reported insider ownership transactions.

Support

For reproducible issues, include the SEC filing URL, Actor run ID, relevant input, and expected field. Do not send private credentials; this Actor needs none.