Earnings Report Insights: Programmer Decodes Coca-Cola's Q1 2023 10-Q Form

Earnings Report Insights: Programmer Decodes Coca-Cola's Q1 2023 10-Q Form

⚠️ Disclaimer: It is educational content, for financial advice seek a professional licensed in your jurisdiction.

Today I will show you what I've learned from Coca-Cola's first quarter report.

Click if you need to know what 10-Q Form is.

It is a financial report, that U.S. publicly traded companies are obliged to submit to the Securities and Exchange Commission (SEC). Companies submit 10-Q in the first three quarters of the year.

Usually, they are not unaudited, but reviewed. In the last quarter another form called 10-K, must be submitted. This time audited.

I am reading quarterly reports to perform a fundamental analysis.

As a programmer, I am interested in

  • financial situation
  • trends
  • risks
  • comparison to competitors

In this article, I am looking at Coca-Cola's report. You can get Form 10-Q from their website or from SEC's EDGAR API.

Link to Coca-Cola's 2023 Q1 report

If it is the first report you see in your life, I recommend you skim over it.

In general, I read 10-Q with the following algorithm to save as much time as possible.

Note: I use the same process not only for the blue chips.

I focus mainly on Part I. Financial Information.

  1. Balance sheet
  2. Income statement
  3. Statement of cash flows
  4. Notes to consolidated financial statements (only in certain situations e.g. high debt-to-equity ratio)
  5. Management’s discussion and analysis of financial condition and results of operations (MD&A)

I read the next item only if I am happy with everything I saw. i.e. Happy with the balance sheet, continue to the income statement. If not satisfied with it, I stop reading and go to the next company.

Usually, I consume company facts only programmatically, but you can represent them visually with charts.

UI for displaying facts

The code is listed below and in a Google Colab. Explanation is after the code, please read it to get an idea of how it works.

When you are working with EDGAR API you have to set User Agent

First, we have to find the CIK(Central Index Key) of a company in the EDGAR system. You can search for it by name or a ticker. Coca-Cola's ticker is KO. We see that CIK is 21344.

Then we are going to get company facts from the API.

Please look at def get_company_facts(email, cik): function to see how we are doing it. It is important to provide 10-digit cik with leading zeroes.

(Optional): The fastest way for you to get up to speed with it is to save the output to a JSON file and inspect it.

We are getting individual facts by calling def get_fact(facts, field). Where we extract them by accessing nested objects by field name.

We are taking label, description, and ["units"]["USD"] list with history, that we convert to a dataframe. val is in dollars, so in the case of Coca-cola it makes sense to convert it to millions.

In this article, I will not explain how UI with gradio is working. It boils down to calling get_fact for each field in fields dictionary and rendering a tab with LinePlot.

For me, the most important and time-consuming part of the 10-Q report is without a doubt MD&A. In it, management talks about risks and opportunities.

Before the recent advancements in the Large Language Models area, I was reading the whole MD&A, or skipping it.

Now, I am utilizing LLMs to do summarization and question-answering.

I will show you how to do it with LangChain, OpenAI & Chroma.

To analyze MD&A we first should get it from the EDGAR API. For that, we need an accession number. In our case, it is 0000021344-23-000024

We get raw XML of the whole form in def get_raw_form(email, cik, accession_number).

Nothing stops you from loading the entire document in the LLM, but I prefer to save tokens by loading only the MD&A part.

In def get_mdna_html(form_xml): we are using BeautifulSoup to extract the 10-Q document. Then in it, we are taking everything between Item 2. and Item 3. to get all MD&A HTML. I prefer to keep the markup in case I need tables.

Note: there are more elegant ways and paid services to extract MD&A. I am sharing with you this approach because to me it is time and cost-effective.

After extracting MD&A, we have to prepare it for summarization. For that, we are using def get_documents(html): with UnstructuredHTMLLoader from LangChain.

But before we are sending it to LLM, we have to split it because models have max_tokens limit. We are doing it in def split_documents(docs, length_function):

We are using chunk_size 400 to cover both summarization and QA use cases.

In def summarize_docs(docs, openai_api_key=None): we are summarizing MD&A by calling summarize chain.

We create MdnaQA class to abstract document similarity search with Chroma and run qa_chain on the resulting docs.

Note: when you instantiate MdnaQA you are making calls to the embeddings model! If you are planning to reuse docsearch, please configure Chroma or switch to another vector store.

Again, we are using gradio to call summarize_docs and MdnaQA.ask to display the results.

Summary part

MD&A Summary:

The Coca-Cola Company announced the suspension of its business in Russia and Ukraine due to the conflict between the two countries in March 2022. The effects of the COVID-19 pandemic continued to negatively impact the Company's business during the three months ended March 2023. Unit case volume growth for the three months ended March 31, 2023 was 1%, 2%, 3%, 10%, (3%), (2%), and (1%) for Worldwide, Europe, Middle East & Africa, Latin America, North America, Asia Pacific, Global Ventures, and Bottling Investments, respectively. The Company recorded other operating charges of $111 million during the three months ended March 31, 2023. Net cash provided by operating activities decreased by $463 million, and net cash provided by investing activities decreased by $29 million during the three months ended March 31, 2023 and April 1, 2022. The Company repurchased 12.4 million shares of common stock under the share repurchase plan for a total cost of $749 million during the three months ended March 31, 2023, and paid dividends of $101 million during the same period. The Company is monitoring foreign exchange fluctuations and governmental actions closely to adopt appropriate strategies.

QA Part


Q: Why net cash provided by operating activities decreased?

A: The decrease was primarily driven by the timing of working capital initiatives, payments resulting from the buildup of inventory in the prior year to manage potential supply chain disruptions, an unfavorable impact due to foreign currency exchange rate fluctuations, and $167 million of the $275 million milestone payment for fairlife.

Q: Why net cash provided by investing activities decreased?

A: Net cash provided by investing activities decreased because purchases of investments were $739 million and proceeds from disposals of investments were $815 million during the three months ended March 31, 2023, resulting in a net cash inflow of $76 million. During the three months ended April 1, 2022, purchases of investments were $835 million and proceeds from disposals of investments were $1,323 million, resulting in a net cash inflow of $488 million.

Q: Why the Company repurchased common stock?

A: The Company repurchased common stock to offset dilution resulting from employee stock-based compensation plans.

If you are an accountant, investor, trader, or someone who's read the report.

Please help me to improve the next insights by commenting what is the most important information you got from Coca-Cola's Q1 2023 10-Q Form. e.g. P/E ratio.