SEC Schedule 13D Activist Ownership Scraper avatar

SEC Schedule 13D Activist Ownership Scraper

Pricing

Pay per event

Go to Apify Store
SEC Schedule 13D Activist Ownership Scraper

SEC Schedule 13D Activist Ownership Scraper

πŸ“ˆ Extract SEC Schedule 13D and 13D/A activist ownership filings, reporting persons, shares, percentages, CUSIPs, Item 4 purpose, and canonical links.

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

6 days ago

Last modified

Categories

Share

Turn public SEC EDGAR Schedule 13D and 13D/A filings into structured activist-ownership records.

Monitor new 5% ownership disclosures, identify reporting persons, compare amendments, and feed canonical filing links into research or compliance workflows.

The Actor uses SEC public archives directly over HTTP. It needs no browser, proxy, login, or paid data provider.

What does this SEC Schedule 13D scraper do?

It scans quarterly EDGAR master indexes or accepts specific SEC filing URLs.

For each matching filing it resolves the accession index and primary document, then normalizes filing and ownership details.

Use it for one-off research, recurring activist screens, amendment tracking, or financial-data enrichment.

Who is it for?

  • πŸ“ˆ Event-driven funds monitoring activist positions.
  • 🧭 Activist-investing researchers building target timelines.
  • πŸ›‘οΈ Compliance teams reviewing beneficial-ownership disclosures.
  • πŸ—„οΈ Financial-data teams maintaining EDGAR pipelines.
  • πŸ“° Journalists investigating ownership and control changes.

Why use this Actor?

Schedule 13D documents vary across XHTML, XML, and legacy filing layouts.

This Actor handles discovery, canonical URL resolution, bounded retries, polite request pacing, and normalized export.

Results can be downloaded as JSON, CSV, Excel, XML, or RSS through Apify datasets.

What data can you extract?

FieldMeaning
issuerNameCompany or issuer named in the filing
issuerCikSEC Central Index Key
filingTypeSC 13D or SC 13D/A
filingDateFiling date from EDGAR
accessionNumberStable SEC accession identifier
amendmentWhether the filing is an amendment
reportingPersonsNames of reporting persons
securityClassClass of securities
cusipCUSIP shown in the filing
sharesBeneficiallyOwnedAggregate beneficial shares
percentOfClassReported ownership percentage
sourceOfFundsSchedule 13D source-of-funds code
purposeOfTransactionNormalized Item 4 narrative
filingIndexUrlCanonical accession directory
documentUrlPrimary SEC document
scrapedAtExtraction timestamp

How to scrape SEC Schedule 13D filings

  1. Open the Actor input page.
  2. Keep the prefilled quarter or add quarters such as 2025/QTR4.
  3. Set a small maxItems for your first run.
  4. Optionally paste specific SEC Archives filing URLs.
  5. Keep a descriptive SEC-compliant User-Agent.
  6. Start the Actor.
  7. Export the default dataset in your preferred format.

Input

{
"quarters": ["2026/QTR2"],
"maxItems": 100,
"requestDelayMillis": 150,
"userAgent": "Your Organization contact@example.com"
}

filingUrls accepts SEC accession or primary-document URLs.

quarters uses YYYY/QTRN values and scans only SC 13D and SC 13D/A rows.

maxItems caps saved filing records across all inputs.

requestDelayMillis supports SEC fair-access pacing and cannot effectively go below 120 ms.

Output example

{
"issuerName": "Example Issuer, Inc.",
"issuerCik": "1234567",
"filingType": "SC 13D/A",
"filingDate": "2026-05-04",
"accessionNumber": "0000000000-26-000001",
"amendment": true,
"reportingPersons": ["Example Investor LLC"],
"securityClass": "Common Stock",
"cusip": "123456789",
"sharesBeneficiallyOwned": "5,547,360",
"percentOfClass": "16.6 %",
"sourceOfFunds": "WC",
"filingIndexUrl": "https://www.sec.gov/Archives/edgar/data/.../",
"documentUrl": "https://www.sec.gov/Archives/edgar/data/.../primary_doc.xml"
}

Values are preserved as filing text where numeric formatting may carry meaning.

How much does it cost to scrape Schedule 13D filings?

The Actor uses pay-per-event pricing.

A small one-time start charge covers run initialization.

Each successfully saved filing is charged as one item event.

Tier discounts reduce the per-filing rate for larger Apify plans.

You can set maxItems to establish a hard output bound before running.

Tips for reliable monitoring

  • Scan only newly completed quarters in scheduled runs.
  • Store accession numbers as stable deduplication keys.
  • Use filingType and amendment to separate initial positions from updates.
  • Compare percentOfClass and sharesBeneficiallyOwned across amendments.
  • Retain SEC URLs for auditability.
  • Use a real organization and contact address in userAgent.
  • Avoid unnecessary repeated historical scans.

Integrations

Connect datasets to Google Sheets for analyst review.

Send new records to Slack or email through Apify integrations.

Load CSV exports into Snowflake, BigQuery, or PostgreSQL.

Trigger the Actor daily from Apify Schedules and deduplicate by accession number.

Use webhooks to launch enrichment when a new activist filing appears.

API usage

Run the Actor from JavaScript, Python, or cURL with the examples below. Replace the token placeholder with your Apify API token and keep production limits explicit.

JavaScript API example

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/sec-schedule-13d-ownership-scraper').call({
quarters: ['2026/QTR2'],
maxItems: 100,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Python API example

from apify_client import ApifyClient
client = ApifyClient('YOUR_APIFY_TOKEN')
run = client.actor('automation-lab/sec-schedule-13d-ownership-scraper').call(run_input={
'quarters': ['2026/QTR2'],
'maxItems': 100,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)

cURL API example

curl -X POST 'https://api.apify.com/v2/acts/automation-lab~sec-schedule-13d-ownership-scraper/runs?token=YOUR_APIFY_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"quarters":["2026/QTR2"],"maxItems":100}'

Poll the returned run ID, then download records from its default dataset.

MCP and AI workflows

Use the Actor through Apify MCP:

https://mcp.apify.com?tools=automation-lab/sec-schedule-13d-ownership-scraper

Add the server in Claude Code:

$claude mcp add apify-sec-13d --transport http 'https://mcp.apify.com?tools=automation-lab/sec-schedule-13d-ownership-scraper'

Claude Desktop JSON configuration:

{
"mcpServers": {
"apify-sec-13d": {
"url": "https://mcp.apify.com?tools=automation-lab/sec-schedule-13d-ownership-scraper"
}
}
}

Example prompts showing MCP usage:

Example Claude Code prompt:

Use the Apify MCP tool to run the SEC Schedule 13D scraper for 2026/QTR2, return 100 filings, and summarize amendments above 10% ownership.

Example Claude Desktop prompt:

Through MCP, extract these SEC filing URLs and compare beneficial ownership by accession number.

MCP makes the structured dataset available to agentic research without custom scraping code.

Fair access and legality

SEC EDGAR filings are public United States government records.

Users remain responsible for lawful use, retention, redistribution, and investment or compliance decisions.

The Actor sends a descriptive User-Agent, limits request frequency, retries transient responses with backoff, and uses no identity-hiding proxy by default.

Do not use the output as the sole basis for legal or investment advice.

Limitations

Historical Schedule 13D layouts are not fully uniform.

Some filings include exhibits or combined submissions rather than a standalone primary file.

Optional normalized fields may be absent when a filing does not state them in a recognizable layout.

Quarterly indexes include accepted filings, not real-time intraday alerts.

SEC maintenance or fair-access responses can temporarily delay requests.

Troubleshooting

Why did a filing produce no record?

Check that the URL belongs to www.sec.gov/Archives/edgar/data/ and represents a Schedule 13D filing. The log names skipped malformed filings.

Why are some ownership fields missing?

Older or exhibit-heavy filings may use a nonstandard layout. Canonical document URLs remain available for review.

Why did SEC return 403 or 429?

Use a descriptive User-Agent with a contact address, keep request pacing enabled, and retry later instead of increasing concurrency.

Why are there fewer results than maxItems?

The selected quarter may contain fewer matching forms, or malformed filings may have been skipped.

Explore other Automation Lab actors for adjacent filings:

Schedule 13D records are distinct from Form D fundraising and Form 4 insider transactions.

FAQ

Does this include Schedule 13G?

No. The Actor intentionally targets activist-style Schedule 13D and 13D/A forms.

Can I scrape a specific filing?

Yes. Add its SEC Archives URL to filingUrls and set quarters to an empty list.

Can I monitor multiple quarters?

Yes. Add multiple YYYY/QTRN strings and use maxItems to bound output.

Does it require a proxy?

No. Public SEC endpoints are accessed directly with fair-access headers and pacing.

What is the deduplication key?

Use accessionNumber, which uniquely identifies an SEC submission.

Can I schedule daily runs?

Yes. Use Apify Schedules, export the dataset, and compare accession numbers against your previous run.

Support

When reporting an extraction problem, include the accession number, filing URL, expected field, and Actor run ID.

That evidence makes layout-specific fixes faster while preserving reproducibility.