📄 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
Monitor official ESG, sustainability, climate, investor relations, and SEC / EDGAR disclosure surfaces with one summary-first company digest per monitored target.
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}
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.