OrbTop

AnnualReports.com Glossy Annual Report PDF Scraper

BUSINESSOTHERDEVELOPER TOOLS

Independent tool. Trademarks referenced on this page are the property of their respective owners and are used only to identify the public website this tool reads. No affiliation or endorsement.

AnnualReports.com Glossy Annual Report PDF Scraper

Scrape and parse glossy, designer-laid-out annual report PDFs from AnnualReports.com — a free aggregator covering NYSE, NASDAQ, AMEX, OTC, TSX, TSX-V, ASX, AIM, and LSE issuers, including internationally headquartered companies. Unlike SEC EDGAR (US-only, plain-text 10-Ks), AnnualReports.com hosts the marketing-piece annual report public companies send to shareholders — CEO letters, financial-highlights infographics, segment breakdowns, and (when disclosed) ESG detail.

What it does

The actor discovers companies via one of four modes, visits each company's profile page for identity and header data (ticker, exchange, sector, industry, headquarters, employee count), then downloads and parses each qualifying report PDF to extract structured fields: CEO/CFO/chairman names (from the letter-to-shareholders signature), financial highlights (revenue, net income, diluted EPS, dividend per share), reported business segments, fiscal year end, and page count.

PDF text extraction uses pdf-parse for born-digital PDFs (the vast majority of reports on this source), with OCR fallback for the rare scanned/legacy document.

Use cases

  • Equity research — CEO/CFO changes, financial highlights, and segment mix across a ticker watchlist
  • IR / comp benchmarking — pull headquarters, employee count, and financial highlights for peer-set analysis
  • Global coverage for non-SEC issuers — companies headquartered outside the US (e.g. Ireland, UK, Australia) that don't file 10-Ks
  • Finance LLM training data — designer-laid-out, magazine-style annual reports as a distinct document shape from plain-text filings

Input

Field Type Description Default
mode string Discovery mode: by_ticker, by_sector, by_country, recent by_ticker
tickers array Stock ticker symbols to look up (mode=by_ticker) ["AAPL", "MSFT", "BRK.A"]
sectors array Sectors to crawl (mode=by_sector). One of: Basic Materials, Conglomerates, Consumer Goods, Energy, Financial, Healthcare, Industrial Goods, Non Profits, Real Estate, Services, Technology, Utilities ["Technology"]
countries array Headquarters countries to filter for (mode=by_country), matched against each company's parsed HQ location ["United States"]
yearFrom integer Earliest report year to include (inclusive) 2022
yearTo integer Latest report year to include (inclusive) 2025
includeFullText boolean Include the extracted letter-to-shareholders text (a few KB) in each record false
maxItems integer Maximum number of report records to return 15

by_country routes through the site's exchange filters when the country maps to one (United States, Canada, United Kingdom, Australia); other countries fall back to a maxItems-bounded scan since the source has no direct country filter.

Output

Each record represents one company's one report year:

Field Description
ticker Stock ticker symbol
company_name Issuer legal/trading name
exchange Primary listing exchange
sector Business sector
industry Business industry (finer-grained than sector)
country Headquarters country
report_year Fiscal/report year of this annual report
report_fiscal_year_end Fiscal year end date as stated in the report (e.g. "December 31"), when found
pdf_url Direct URL to the annual report PDF
pdf_page_count Page count of the report PDF
cover_image_url Report cover thumbnail (most recent report only) or company logo as fallback
report_type Always "annual" for this source
ceo_name CEO name, best-effort extracted from the letter-to-shareholders signature
cfo_name CFO name, best-effort extracted from the letter-to-shareholders signature
chairman_name Board chairman name, best-effort extracted (often the same person as CEO)
headquarters_address Best-effort {city, region, country} — the source does not publish full street addresses
financial_highlights Best-effort {revenue, net_income, eps_diluted, dividend_per_share, unit} parsed from the report's income statement
segments Best-effort list of reported business segment names, when disclosed in a simple list form
employee_count Employee count band from the company profile (e.g. 10000 for "10,000+ Employees")
full_letter_to_shareholders Letter-to-shareholders excerpt (only populated when includeFullText: true)

Example

{
  "mode": "by_ticker",
  "tickers": ["ETN", "WCN", "HRL"],
  "yearFrom": 2023,
  "yearTo": 2025,
  "maxItems": 20
}

Returns up to 20 report records across Eaton, Waste Connections, and Hormel Foods for report years 2023–2025.

Notes

  • Designer-laid-out, magazine-style reports have inconsistent text layout — financial-highlights infographics and multi-column pages don't always extract in reading order. ceo_name/cfo_name/chairman_name, financial_highlights, and segments are best-effort: populated when the source PDF exposes the underlying text in a recognisable shape, left empty otherwise. Measured fill rates on a 10-report sample across 4 companies: ceo_name 8/10, cfo_name 1/10 (most letters are CEO/Chairman-signed only, not CFO), segments 2/10 (most reports disclose segments in a financial-statement table rather than a simple list), full_letter_to_shareholders 5/10 when includeFullText: true (some report formats have no distinct letter section in the extracted text).
  • Ticker symbols are not globally unique across exchanges (e.g. WCN matches both a NYSE waste-management company and an unrelated ASX mining company) — by_ticker mode keeps only the profile whose own displayed ticker exactly matches what you requested.
  • Only the annual report PDF is in scope. Standalone sustainability/ESG reports and 10-K HTML filings, when the company publishes them separately from the annual report, are not included.