SEC Schedule 13D Activist Ownership Scraper
Pricing
Pay per event
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
Maintained by CommunityActor 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?
| Field | Meaning |
|---|---|
issuerName | Company or issuer named in the filing |
issuerCik | SEC Central Index Key |
filingType | SC 13D or SC 13D/A |
filingDate | Filing date from EDGAR |
accessionNumber | Stable SEC accession identifier |
amendment | Whether the filing is an amendment |
reportingPersons | Names of reporting persons |
securityClass | Class of securities |
cusip | CUSIP shown in the filing |
sharesBeneficiallyOwned | Aggregate beneficial shares |
percentOfClass | Reported ownership percentage |
sourceOfFunds | Schedule 13D source-of-funds code |
purposeOfTransaction | Normalized Item 4 narrative |
filingIndexUrl | Canonical accession directory |
documentUrl | Primary SEC document |
scrapedAt | Extraction timestamp |
How to scrape SEC Schedule 13D filings
- Open the Actor input page.
- Keep the prefilled quarter or add quarters such as
2025/QTR4. - Set a small
maxItemsfor your first run. - Optionally paste specific SEC Archives filing URLs.
- Keep a descriptive SEC-compliant User-Agent.
- Start the Actor.
- 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
filingTypeandamendmentto separate initial positions from updates. - Compare
percentOfClassandsharesBeneficiallyOwnedacross 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 ApifyClientclient = 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().itemsprint(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.
Related SEC scrapers
Explore other Automation Lab actors for adjacent filings:
- SEC Form D Scraper for private offering notices.
- SEC filing actors for complementary EDGAR workflows.
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.