SEC & ESG Report Scraper
Pricing
from $10.00 / 1,000 results
SEC & ESG Report Scraper
Extract climate disclosures and sustainability reports directly from SEC EDGAR filings and corporate investor relations web pages.
ESG Disclosure Tracker API
Automate the extraction of critical corporate governance details with this specialized web scraper. Designed for compliance teams, financial analysts, and risk managers, this tool directly monitors official investor relations pages alongside SEC and EDGAR surfaces for the latest ESG (Environmental, Social, and Governance) disclosures. Instead of manually checking target websites for regulatory filings, you can schedule regular automated runs to track sustainability reporting updates across hundreds of public companies. The scraper automatically navigates the browser through your provided URLs, identifying exact changes on monitored pages using persistent snapshot keys. This diff-tracking ensures your scraped data only highlights newly published climate disclosures, saving you time and drastically reducing manual review bandwidth.
Every run produces structured, analytics-ready results. Outputs feature a summary-first company digest, timestamped rows for time-series analysis, and direct URLs to updated SEC filings. You can extract full text from newly published sustainability reports, proxy statements, and corporate responsibility PDFs. Whether you are searching for specific environmental policies, tracking social impact metrics, auditing governance records, or building a compliance dashboard, this scraper collects the exact details you need. By feeding these scraped results into your internal database, analysts can quickly spot shifts in corporate climate strategies, diversity mandates, or supply chain sustainability commitments without ever opening a web browser.
Store Quickstart
- Start with
input.local.jsonfor a fixture-safe baseline / changed proof. - Move to
store-input.example.jsonfor a single-company official-source starter. - Keep the same
snapshotKeyon reruns so the actor can tell you which monitored disclosure surfaces changed.
Key Features
- 💹 Real-time market signals — Pulls current prices/rates from authoritative public APIs
- 📊 Historical-ready output — Timestamp every row for downstream time-series analysis
- 🌍 Multi-asset support — Handles dozens of symbols/pairs per run
- 📡 Webhook alerts on threshold — Push to Slack when prices cross user-defined bands
- 🔄 Cron-friendly — Idempotent runs with persistent state for scheduled monitoring
Use Cases
| Who | Why |
|---|---|
| Developers | Automate recurring data fetches without building custom scrapers |
| Data teams | Pipe structured output into analytics warehouses |
| Ops teams | Monitor changes via webhook alerts |
| Product managers | Track competitor/market signals without engineering time |
Input
| Field | Type | Default | Description |
|---|---|---|---|
| companies | array | prefilled | One monitored company per output row. Use official disclosure pages and SEC / EDGAR company submissions where possible. |
| requestTimeoutSeconds | integer | 30 | Timeout for each disclosure page or SEC / EDGAR request. |
| maxChars | integer | 30000 | Upper bound for extracted page text per monitored disclosure surface. |
| delivery | string | "dataset" | dataset writes results to the Apify dataset. webhook posts the digest JSON. email is a placeholder for later delivery ex |
| datasetMode | string | "changes_only" | changes_only emits only changed companies. all emits every company row. action_needed limits results to higher-severity |
| webhookUrl | string | — | POST target for webhook delivery. Leave empty for dataset runs. |
| notifyOnNoChange | boolean | false | When false, webhook delivery is skipped if no company changed. |
| snapshotKey | string | "esg-disclosure-tracker-snapshots" | Stable key used to persist disclosure snapshots between recurring runs. |
Input Example
{"companies": [{"id": "microsoft","name": "Microsoft","criticality": "high","owner": "ESG Program Office","peerGroup": "mega-cap-software","tags": ["software","scope-3","climate"],"disclosurePacks": {"sustainability": [{"id": "msft-sustainability-report","name": "Microsoft Sustainability Report","url": "https://www.microsoft.com/en-us/corporate-responsibility/sustainability/report","includePatterns": ["sustainability report","annual report","scope 1","scope 2","scope 3","net zero"],"staleAfterDays": 430}],"sec_filings": [{"id": "msft-sec-10k","name": "Microsoft SEC climate watch","sourceType": "sec_edgar","cik": "789019","formTypes": ["10-K","10-Q","8-K"],"staleAfterDays": 430}]}}],"requestTimeoutSeconds": 30,"maxChars": 30000,"delivery": "dataset","datasetMode": "changes_only","notifyOnNoChange": false,"snapshotKey": "esg-disclosure-tracker-snapshots","diffMode": "line_summary","summaryMaxLines": 12,"concurrency": 2,"batchDelayMs": 500,"dryRun": false}
Input Examples
Example: Single-target audit
{"targets": ["example-target-1"],"maxResultsPerTarget": 30}
Example: Bulk portfolio
{"targets": ["target-1","target-2","target-3"],"maxResultsPerTarget": 50,"snapshotKey": "esg-disclosure-tracker-state"}
Example: Recurring delta watch
{"targets": ["target-1"],"snapshotKey": "esg-disclosure-tracker-state","emitChangedOnly": true}
Output
| Field | Type | Description |
|---|---|---|
meta | object | |
recurringDigest | object | |
actionNeeded | array | |
results | array | |
actionNeeded[].companyId | string | |
actionNeeded[].companyName | string | |
actionNeeded[].owner | string | |
actionNeeded[].severity | string | |
actionNeeded[].status | string | |
actionNeeded[].reason | string | |
actionNeeded[].peerComparison | object | |
actionNeeded[].recommendedActions | array | |
actionNeeded[].executiveSummary | string |
Output Example
{"meta": {"generatedAt": "2026-04-05T13:28:06.026Z","now": "2026-03-25T12:00:00.000Z","input": {"companyCount": 2,"surfaceCount": 5,"delivery": "dataset","datasetMode": "all","diffMode": "line_summary","summaryMaxLines": 12,"concurrency": 2,"batchDelayMs": 0,"dryRun": false},"snapshot": {"key": "local-esg-disclosure-proof","loadedFrom": "local","savedTo": "local"},"warnings": [],"totals": {"companies": 2,"monitoredSurfaces": 5,"changedCompanies": 1,"initialCompanies": 1,"unchangedCompanies": 0,"partialCompanies": 0,"errorCompanies": 0,"actionNeededCompanies": 1,"changedSurfaces": 0,"initialSurfaces": 5,"unchangedSurfaces": 0,"errorSurfaces": 0,"staleSurfaces": 2,"missingSurfaces": 0,"newDisclosureSurfaces": 0},"severityCounts": {"critical": 0,
API Usage
Run this actor programmatically using the Apify API. Replace YOUR_API_TOKEN with your token from Apify Console → Settings → Integrations.
cURL
curl -X POST "https://api.apify.com/v2/acts/taroyamada~esg-disclosure-tracker/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \-H "Content-Type: application/json" \-d '{ "companies": [ { "id": "microsoft", "name": "Microsoft", "criticality": "high", "owner": "ESG Program Office", "peerGroup": "mega-cap-software", "tags": [ "software", "scope-3", "climate" ], "disclosurePacks": { "sustainability": [ { "id": "msft-sustainability-report", "name": "Microsoft Sustainability Report", "url": "https://www.microsoft.com/en-us/corporate-responsibility/sustainability/report", "includePatterns": [ "sustainability report", "annual report", "scope 1", "scope 2", "scope 3", "net zero" ], "staleAfterDays": 430 } ], "sec_filings": [ { "id": "msft-sec-10k", "name": "Microsoft SEC climate watch", "sourceType": "sec_edgar", "cik": "789019", "formTypes": [ "10-K", "10-Q", "8-K" ], "staleAfterDays": 430 } ] } } ], "requestTimeoutSeconds": 30, "maxChars": 30000, "delivery": "dataset", "datasetMode": "changes_only", "notifyOnNoChange": false, "snapshotKey": "esg-disclosure-tracker-snapshots", "diffMode": "line_summary", "summaryMaxLines": 12, "concurrency": 2, "batchDelayMs": 500, "dryRun": false }'
Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run = client.actor("taroyamada/esg-disclosure-tracker").call(run_input={"companies": [{"id": "microsoft","name": "Microsoft","criticality": "high","owner": "ESG Program Office","peerGroup": "mega-cap-software","tags": ["software","scope-3","climate"],"disclosurePacks": {"sustainability": [{"id": "msft-sustainability-report","name": "Microsoft Sustainability Report","url": "https://www.microsoft.com/en-us/corporate-responsibility/sustainability/report","includePatterns": ["sustainability report","annual report","scope 1","scope 2","scope 3","net zero"],"staleAfterDays": 430}],"sec_filings": [{"id": "msft-sec-10k","name": "Microsoft SEC climate watch","sourceType": "sec_edgar","cik": "789019","formTypes": ["10-K","10-Q","8-K"],"staleAfterDays": 430}]}}],"requestTimeoutSeconds": 30,"maxChars": 30000,"delivery": "dataset","datasetMode": "changes_only","notifyOnNoChange": false,"snapshotKey": "esg-disclosure-tracker-snapshots","diffMode": "line_summary","summaryMaxLines": 12,"concurrency": 2,"batchDelayMs": 500,"dryRun": false})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
JavaScript / Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });const run = await client.actor('taroyamada/esg-disclosure-tracker').call({"companies": [{"id": "microsoft","name": "Microsoft","criticality": "high","owner": "ESG Program Office","peerGroup": "mega-cap-software","tags": ["software","scope-3","climate"],"disclosurePacks": {"sustainability": [{"id": "msft-sustainability-report","name": "Microsoft Sustainability Report","url": "https://www.microsoft.com/en-us/corporate-responsibility/sustainability/report","includePatterns": ["sustainability report","annual report","scope 1","scope 2","scope 3","net zero"],"staleAfterDays": 430}],"sec_filings": [{"id": "msft-sec-10k","name": "Microsoft SEC climate watch","sourceType": "sec_edgar","cik": "789019","formTypes": ["10-K","10-Q","8-K"],"staleAfterDays": 430}]}}],"requestTimeoutSeconds": 30,"maxChars": 30000,"delivery": "dataset","datasetMode": "changes_only","notifyOnNoChange": false,"snapshotKey": "esg-disclosure-tracker-snapshots","diffMode": "line_summary","summaryMaxLines": 12,"concurrency": 2,"batchDelayMs": 500,"dryRun": false});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Tips & Limitations
- Use Apify Schedules to run this every N minutes and build your own historical dataset.
- Threshold alerts work best with webhook delivery — pipe into PagerDuty/Slack for ops visibility.
- For trading applications, note that public APIs have 5–15 minute lag. Don't use for HFT.
- Combine with
weather-forecast-fetcherorsec-edgar-filings-monitorfor cross-signal strategies. - Source APIs are free — this actor has no subscription cost beyond Apify compute.
FAQ
What's the data source?
Authoritative public APIs (e.g., ECB, Federal Reserve, SEC EDGAR, exchange official APIs). See actor-specific docs for the full list.
How do I backtest historical data?
Schedule this actor daily and accumulate Apify Dataset rows — you build your own history over time.
Are there rate limits?
Source APIs rate-limit at their level. This actor respects those with built-in backoff.
How fresh is the data?
Typically 1–15 minutes behind real-time, depending on the source API. Check each actor's meta.dataAge field.
Can I use this for trading automation?
For backtesting/research yes. For live trading, use a paid real-time feed — this actor prioritizes reliability over sub-second latency.
Related Actors
Market Data & Financial APIs cluster — explore related Apify tools:
- 💱 Exchange Rate Monitor — Monitor 160+ foreign exchange rates with automatic change detection.
- 💰 Crypto Price Tracker — Track cryptocurrency prices, market caps, 24h volumes, and price changes for 10,000+ coins via CoinGecko API.
- 🌤️ Weather Forecast API — Fetch weather forecasts for any location worldwide via free Open-Meteo API.
- 📊 SEC EDGAR Monitor — Monitor SEC EDGAR filings for US public companies by ticker or CIK.
- Competitive Pricing Monitor - SaaS & Ecommerce Plan Tracker — Monitor competitor SaaS and ecommerce pricing pages for plan changes, price increases/decreases, new/removed tiers, and packaging shifts.
Cost
Pay Per Event:
actor-start: $0.01 (flat fee per run)dataset-item: $0.003 per output item
Example: 1,000 items = $0.01 + (1,000 × $0.003) = $3.01
No subscription required — you only pay for what you use.
⭐ Was this helpful?
If this actor saved you time, please leave a ★ rating on Apify Store. It takes 10 seconds, helps other developers discover it, and keeps updates free.
Bug report or feature request? Open an issue on the Issues tab of this actor.