I'm a paying customer of https://eodhistoricaldata.com, and used it for one of my last projects to retrieve standardised, quarterly income statements, balance sheets, and cash flow statements.
Of all providers I used in the past (see list below), their coverage of companies, and the range of historically available fundamental data points are the best. Simple, and fast sign up, and fair pricing. As such data points become more and more of a commodity, we can expect the price to fall even more over the next two years.
Alternatives
iextrading
https://iextrading.com/developer/docs/#financials
- Costs: free
- Data provided: income statements, balance sheets, cash flow statements, EOD price, volume, splits, dividends
- Data format: JSON
- Data access method: RESTful API + websockets (real-time)
- Misc.: excellent documentation, very active github issue tracking
- Drawbacks: historical data goes back by only 2 years
InteractiveBrokers API
https://interactivebrokers.github.io/tws-api/fundamentals.html
Note: requires to open a trading account with them. Approval times vary.
- Costs: sign-up free.
- Data provided: everything (including dividends)
- Data format: depends on the client library (C++, Java, Python)
- Data access method: only via libraries (C++, Java, Python), no RESTful API. (personal opinion: only suitable for people with a very strong developer background).
- Misc.: documentation isn't very good.
- Drawbacks: taking approval time, and time to learn their technical nomenclature into account, I don't recommend using it for "starter" projects. It's good for professionals.
I developed software using all of the above services. eodhistoricaldata.com is my favourite so far.
Using the sec.gov free Financial Statement Data Set (https://www.sec.gov/dera/data/financial-statement-data-sets.html) is another alternative, but requires a lot of coding, and data munging.