Files
edgartools/fetch_today_filings.py
2025-12-09 12:13:01 +01:00

105 lines
3.8 KiB
Python
Executable File

#!/usr/bin/env python3
import os
import argparse
from datetime import datetime, date
# Check if virtual environment is activated
if not os.environ.get('VIRTUAL_ENV'):
print("Virtual environment is not activated.")
print("To activate: . venv/bin/activate")
print("Then run: python fetch_today_filings.py")
exit(1)
from edgar import set_identity, get_current_filings, Company
# Set your identity (required by SEC)
set_identity("your.email@example.com")
# Parse command-line arguments
parser = argparse.ArgumentParser(description="Fetch latest SEC filings")
parser.add_argument('--form', help='Form type to filter (e.g., 4, 10-K, 8-K)')
parser.add_argument('--owner', choices=['include', 'exclude', 'only'],
help='Owner filter: include, exclude, or only ownership filings')
parser.add_argument('--interactive', action='store_true', help='Enter interactive mode to select filters')
args = parser.parse_args()
# Interactive mode
if args.interactive or (args.form is None and args.owner is None):
print("Interactive mode: Select filing filters")
print("Available form types: 4 (insider trading), 8-K (current events), 10-K (annual reports), 10-Q (quarterly), 13G (ownership), or press Enter for all")
form_input = input("Enter form type (or Enter for all): ").strip()
args.form = form_input if form_input else ''
print("Owner filter options:")
print("1. include - Include all filings (default)")
print("2. exclude - Exclude ownership filings")
print("3. only - Only ownership filings")
owner_choice = input("Choose owner filter (1-3, default 1): ").strip()
if owner_choice == '2':
args.owner = 'exclude'
elif owner_choice == '3':
args.owner = 'only'
else:
args.owner = 'include'
else:
args.form = args.form or ''
args.owner = args.owner or 'include'
def fetch_today_filings(form_filter, owner_filter):
print(f"Fetching latest filings with form='{form_filter}', owner='{owner_filter}'...")
# Get current filings
current_filings = get_current_filings(form=form_filter, owner=owner_filter)
if not current_filings:
print("No current filings found.")
return
# Use current filings as latest
today_filings = current_filings
if not today_filings:
print("No latest filings found.")
return
print(f"Found {len(today_filings)} latest filings:")
print("=" * 80)
for filing in today_filings:
try:
# Get entity to access ticker
entity = filing.get_entity()
ticker = entity.tickers[0] if hasattr(entity, 'tickers') and entity.tickers else 'N/A'
# For Form 4, try to get issuer's ticker if filer's ticker is N/A
if ticker == 'N/A' and filing.form == '4':
try:
form4 = filing.obj()
if form4:
issuer = getattr(form4, 'issuer', None)
if issuer:
issuer_cik = getattr(issuer, 'cik', None)
if issuer_cik:
issuer_company = Company(issuer_cik)
if issuer_company.tickers:
ticker = issuer_company.tickers[0]
except Exception:
pass # Keep N/A if fails
type_of_filing = filing.form
summary = f"{filing.form} filing by {filing.company}"
url_link = filing.homepage_url
print(f"Ticker: {ticker}")
print(f"Type: {type_of_filing}")
print(f"Summary: {summary}")
print(f"URL: {url_link}")
print("-" * 40)
except Exception as e:
print(f"Error processing filing {filing.accession_no}: {e}")
continue
if __name__ == "__main__":
fetch_today_filings(args.form, args.owner)