Early look at On Holding AG (NYSE: ONON) Q2 performance
Context
One company I follow closely is On Running, also known as ON. Over the past 10 months, as a personal project, I have been collecting a lot of data from the comany’s website. ON is a rising star in the athletic wear market. The brand has quickly become a strong competitor to giants like Nike and Adidas, with a current market cap of $12.2B. It has shown impressive growth, especially in its Direct to Consumer (DTC) channel, which made up 37.5% of its total revenue in Q1'24.
As a rapidly growing brand, ON is valued at more than 80 times its P/E ratio. While the growth has been impressive so far, the market is likely to severely punish even minor slip-ups. It's difficult to determine whether ON’s popularity is just a passing trend or if the company can sustain its growth over the long term.
There is also a wider concern about a slowdown in discretionary consumer spending, highlighted by Nike's disappointing results last week. This could impact all consumer brands, including niche ones like ON.
The company is set to announce its Q2 results in August. In this week’s edition of MapeZero, I would like to share some of my findings from the data I have collected, including observations about the Q2 period. I will also discuss some aspects of the data upon which my analysis is based.
The data
Before going into my Q2 observations, I would like to discuss the strengths and weaknesses of the dataset. The data comprises SKU-level sales figures collected over the past 10 months, covering all three major markets and 48 regional e-commerce stores, although for Japan, I only started collecting data in Q2 of this year. I would like to clarify is that the web data I'm analysing focuses on DTC (Direct to Consumer) revenue, not wholesale revenue. Additionally, there are some known 'blind spots' in the data, the main one being sales generated from ON’s own physical stores. As of the end of Q1, the company owns 34 stores worldwide, most of which are located in China, with plans for further expansion. I believe that offline sales still constitute a minor portion of the total direct revenue.
SKU-level data allows to derive some very granular insights about the business. For instance, the company has reported the APAC region as the fastest growing, but the smallest territory, a trend that is supported by the data.
After adding Japan, I have observed that APAC contributed 4.23% to the overall DTC revenue in Q2, with Japan making nearly half of all DTC revenue in APAC:
Interestingly, each ON product is categorised by gender, which gives us a glimpse into the ON customers's gender demographics. The distribution between female and male product sales is nearly balanced, though it does exhibit some seasonal and regional variations. The Amercas region is selling a slightly larger share of female products, compared to EMEA and APAC.
This ratio differentiates ON from the rest of the industry. According to research, in 2023, men accounted for 54.3% of the market for athletic footwear, while women represented 45.7%.
Now let’s move on to product categories. While the brand is renowned for its footwear, the company has declared a strategic intent to expand its apparel offerings to exceed 10% of total revenue, as outlined in the company’s Long Range Plan (Source: On Investor Day 2023 presentation).
The company has reported that the apparel category contributed 3.8% of total revenue in Q1’24. During the earnings call, the management team noted that in the DTC channel, apparel has experienced a significant boost (Source). The data also indicates a higher percentage of revenue from the apparel category in the DTC channel compared to the total reported share.
However, I am not seeing any meaningful increase in apparel share of sales over the observed period, including Q2’24.
Q2 observations
Similar to the Figs example, we can analyse AUR (Average Unit Retail), a metric that measures the average price of items sold. Examining AUR is useful for evaluating promotional activities and their effect on gross profit margins. It can also serve to enhance other datasets that solely track the volume of items sold or the number of transactions.
I observed the lowest AUR during the latter half of December and the beginning of January. Looking at Q2, the AUR has increased compared to the previous two periods. The occasional spikes in AUR align with the company's launches (otherwise known as “drops”) of premium LOEWE collaboration products across various regions.
Now let’s examine the DTC revenue. At the time of writing, the combined sell-side consensus for ON’s Q2 DTC revenue is 224.8 million CHF, representing a 36.5% increase YoY on a reported currency basis. Given the limited historical data from the DTC figures I have collected, it would be premature to make any definitive forecasts at this stage. However, the preliminary data available suggests that the actual DTC numbers might be weaker than what the market is expecting.
Implementation
Unlike most websites where we have to transofrm inventory levels into sales, with On Running the quantity of items sold and stock levels are directly accessible from the website. I will reference the recent Pierluigi Vinciguerra’s post “The Lab #54: Scraping from Algolia APIs” with the technical details of how this data can be retrieved.
Having access to the SKU-level sales data greatly simplifies revenue tracking. However, there are still several nuances that need to be addressed.
The first challenge is that all sales figures are presented as a two-week rolling sum. While this format is suitable for year-over-year comparisons of trailing two-week periods, it complicates the calculation of exact revenue figures for specific fiscal periods. To overcome this, I developed a methodology to convert these rolling two-week sales numbers into daily revenue. Solving this problem was an interesting challenge. I used recursive CTEs, with which I had no prior experience. Perhaps one day I'll write about my implementation.
Secondly, I had to manage currency conversions. The company reports revenue in CHF (Swiss Francs), while pricing is available in various local currencies across several major markets and regional stores. To convert regional revenues into CHF, I used FX rates table from the Cybersyn’s 'Financial Economic Essentials' bundle on Snowflake’s Marketplace. FX rates is just one of many datasets that the company has made available. Integrating this data was very easy, as it required no ETL processes, data ingestion, or API integration.
Lastly, I’d like to share a little trick for obtaining CHF conversion rates for all currencies. It’s a trivial solution for anyone with experience, but I thought it might be helpful for those newer to data analytics. The 'FX_RATES_TIMESERIES
' table includes 55 modern currencies and rates for 126 pairs of currencies. It is not an any-to-any conversion table, however, each currency always has a quote denominated in USD as the base currency. For any-to-any currency conversions, we can use the USD rate as a proxy. By applying a self-join in our SQL query, we can generate a table with any-to-any conversion rates (including the rate for converting a currency to itself, which always equals to 1):
Now, as an example, we can use this enhanced table to directly convert Brazilian Reals into Swiss Francs, a conversion not available in the original 'FX_RATES_TIMESERIES
' table.
When I then merged the FX rates with revenues in local currencies, I faced another small challenge: the FX_RATES_TIMESERIES
table has time gaps, since there are no rates available for non-working days. This can be easily addressed with the new 'ASOF JOIN
' Snowflake feature, that can pull the most recent FX rate available on the date of the conversion.
As always, I would be happy to get readers feedback or answer any questions. I am planning to share more examples of how web data can be used to track KPIs of some publicly traded companies. I am collecting a lot of data, so please reach out if you are interested in any specific names.