Contents Lesson 17 of 17

7 min read · practitioner

Company and corporate data — course checkpoint

You started this course able to call an endpoint. You finish able to say what it returns for each instrument type, which date a corporate action is filed under, why your adjusted history keeps moving, what a calendar knows before an event, and why a $4.8 million "insider sale" was not a sale.

Unit 1 — what "fundamentals" actually returns

/fundamentals/{ticker} is four schemas behind one path, and General.Type tells you which: "Common Stock" (thirteen sections including Financials), "ETF" (ETF_Data), "FUND" (MutualFund_Data), and "INDEX" — no statements, ever, because an index has no accounts. What else an index returns is an entitlement question: General alone on one key, General plus Components and HistoricalTickerComponents on another. Count the keys on yours.

Use filter with :: to fetch narrow: Highlights::MarketCapitalization for a scalar, Financials::Balance_Sheet::quarterly::2024-06-30 for one statement on one date. The statements live at Financials::Balance_Sheet, ::Income_Statement, ::Cash_Flow, each with yearly and quarterly objects keyed by date — the same three statements the Reading Financial Statements course teaches, in exact JSON keys.

And check your units and your cross-checks. Apple's EarningsShare 8.26 × PERatio 40.7881 = 336.91, and MarketCapitalization ÷ SharesOutstanding = 336.91 — agreement. But RevenueTTM × ProfitMargin gives ~$122.6bn where EarningsShare × shares gives ~$121.3bn, about 1% apart, because they are different calculations. null is not 0.

Unit 2 — corporate actions

A dividend is four dates and two amounts. The array is keyed on date, the ex-date — the day the price responded — not paymentDate. value is split-adjusted; unadjustedValue is what was actually paid. Apple's 2020 payouts across its 4-for-1 split on 2020-08-31: 0.77 → 0.1925, 0.82 → 0.205, and after the split the two fields agree. Summing the adjusted column gives a meaningful 0.8075; summing the unadjusted column gives 2.615, which describes nothing.

A split is the string "{new}/{old}" — "4.000000/1.000000" is a factor of 4 — while /calendar/splits uses old_shares/new_shares in the mirror order. Apple's splits from June 2000 compound to 2 × 2 × 7 × 4 = 112, so $112 in 1999 shows as $1.00 adjusted; add the 1987 split and the full history is 224. A compounding factor needs a start date.

Those two endpoints are the machinery behind the adjustment problem from the Price and Trading Data course. Because every new dividend adds a factor applied to all earlier prices, a dividend payer's adjusted history changes every quarter, forever. Two vendors can disagree about 2015 and both be right. Store raw closes plus corporate actions if you need reproducibility.

Beyond dividends and splits, only the ASX gets a structured feed — dividends, splits, bonus-issues, rights-issues, buybacks, capital-returns, spp, other — with franking in _asx_extra. On BHP, A$1.0385 fully franked at 30% carries a credit of A$0.4451, grossing up to A$1.4836.

Unit 3 — what is coming

/calendar/earnings defaults to a seven-day window and to fmt=csv; symbols filters inside that window rather than replacing it, so a bare symbol query usually returns nothing at all. date is the fiscal period end, report_date is the announcement. On an unreported quarter, actual and percent are null but difference is 0 — a placeholder that will poison any surprise average you compute without filtering.

/calendar/ipos has no symbol parameter, uses code: "N/A" for unknown tickers, and uses 0 for unknown prices. /calendar/splits and /calendar/dividends share a family and almost nothing else: flat from/to versus filter[...]/page[...], csv versus json defaults, a happy default week versus a 422. Write an adapter per endpoint.

/calendar/trends requires symbols, returns JSON only, nests trends as an array of arrays, and returns every value as a string. Its real content is the spread: 42 analysts, low 6.88, high 7.93 on an average of 7.47 — 14.1% wide.

Unit 4 — ownership and scale

The flat /insider-transactions feed is thin and partly null. The Form 4 endpoint costs 10 API calls, held 597 filings for Apple, and separates non_derivative, derivative and footnotes. Read the codes: M is an RSU settling, F is tax withholding, S is a real sale, P a purchase. One filing showed +240 − 124 − 116 = 0 net change; another showed a $4,813,267.96 disposal whose own footnote reads "No shares were sold."

/historical-market-cap/{ticker} is weekly-ish, US-only, 10 API calls, and returns an object keyed by string indices — iterate the values. The snapshot and the series disagreed by $63.7 billion (1.3%) four days apart, and both were correct. Share counts move with buybacks, issuance and vesting, which is why you cannot rebuild the series from price alone.

/bulk-fundamentals/{EXCHANGE} caps limit at 500: 40,000 symbols is 80 requests instead of 40,000, a 500x reduction, with a 504 as the penalty for over-large pages. Its records are keyed by position, restarting at "0" on every page, and do carry Financials — but as quarterly_last_0..3 and yearly_last_0..3, four of each, a key shape used nowhere else. Enough to narrow a universe, not to analyse one.

The four sentences worth keeping

  1. Read General.Type before you read anything else. One path, four shapes, and the missing section is usually the API being honest about an instrument that has no such thing.
  2. Corporate actions are filed on the ex-date, and they rewrite the past. That single fact explains adjusted prices, disagreeing vendors, and why reproducibility means storing inputs rather than outputs.
  3. A calendar knows when, and at most what is provisionally on offer — never the outcome. estimate is a survey, an IPO price range is not the offer price, future dates move, and 0 in an unreported row is a placeholder, not a result.
  4. Aggregate nothing you have not read the codes for. A and D, null and 0, value and unadjustedValue — every quiet error in this course came from summing a column whose units were not what they looked like.

Before you sit it

Each of these is a minute at your desk. Any one that is not names the lesson to reopen first.

Try it now

  1. Here is one company's corporate profile from four calls: /fundamentals/AAPL.US filtered to Highlights, /div, /splits, and /calendar/earnings?symbols=AAPL.US&from=2026-01-01&to=2026-12-31&fmt=json. Write one line per table on the gotcha it carries, starting with the date window the earnings call needed. For a company of your own, open its fundamentals in the Terminal and change the symbol there.
Live API response: apple highlights ratios
Live API response: apple dividends recent
Live API response: apple split history
Live API response: apple earnings calendar

Open AAPL.US — fundamentals in the EODHD Terminal

  1. Reproduce Apple's adjusted close for 28 August 2020, the last session before its most recent split, from the raw close in the table below. Divide by the split factor, then find the dividend factor from the first post-split row. On 28 September 2026, 24 dividends had gone ex since that split: take the 24th root of the dividend factor and compare it with one minus a typical payout of about 0.24 on a price near 200. If the two roughly agree, you have understood the adjustment loop rather than memorised it.
Live API response: mda1 apple split week closes
  1. Write down, for each of the ten endpoints in this course, one sentence: what it returns and what it will never return. The second half of each sentence is what stops a support ticket.

Checkpoint quiz next, then the courses that build on this: macro, rates and credit; derivatives, FX and commodities; and news, signals and discovery. Nothing in this course recommends buying, selling or holding anything, and nothing here forecasts any price or any reported number. You have learned what the fields mean and where they lie to the careless — a data skill, not a strategy.