Decoding Writing Success on Medium
Quick Success Data Science

If you write on Medium, you're likely aware of the abundant statistics the platform provides about your stories and audience. A deep dive into these stats can reveal useful insights into your current performance and how you can enhance it going forward.
I started writing on Medium in January 2023, producing hands-on Python programming tutorials with an occasional foray into physics, the paranormal, and Data Analysis. It wasn't until the end of February 2023 that I gained 100 followers and joined the Medium Partner Program (yes, we old-timers had to beg and borrow our first 100 followers to earn income). After 15 months and 57 articles, I decided to look back and reflect on my progress.
In this article, I share my results and demonstrate how a thorough examination of Medium's story and audience metrics can help you boost your readership and income.
Key Questions
Here are the primary questions I wanted to address:
- Were basic or advanced subjects more popular?
- Which topics were most popular?
- What got boosted the most?
- How did boosting affect earnings?
- How did followers affect earnings?
- How did article length affect earnings?
- What are my expectations for the next 15 months?
- How can I improve my earnings?
Key Findings
Here are my high-level findings based on my first 15 months of writing:
- Beginner-level tutorials on popular viz libraries performed best.
- Articles accepted by a publication and boosted performed best.
- Boosting was no guarantee of success.
- Basic and advanced/niche articles got boosted at the same rate.
- Visualization articles got the most boosts.
- There was a positive correlation between earnings and an article's estimated read time.
- Successful articles often (but only sometimes) caused a surge in followers.
- The number of followers had little impact on earnings.
- My earnings can be dramatically increased by focusing on beginner-level tutorials on visualization and basic coding that take longer than 9 minutes to read.
The Dataset
The default analyses offered by Medium are inadequate for evaluating the factors influencing boosts and earnings. To compensate for this, and to address my writing style, I created a custom spreadsheet from my Story and Audience stats pages. This involved adding new categories such as an article's learning level, topic, and featured library. (For more on this process, see "Analyzing Your Own Statistics" at the end of this article).
The following sections summarize my story statistics with graphs. These were produced using Python (mainly the pandas, Matplotlib, and seaborn libraries) in JupyterLab.
The table below summarizes some of my key Medium stats:

These numbers are disappointing, but I knew the first year would be difficult. Consequently, the main goal of this project was to estimate future performance based on current trends and look for ways to improve the results.
Here's a breakdown of the types of articles and whether they represent basic (beginner-level) or advanced topics. The Tutorial category includes code along with a detailed description. The Analysis category focuses more on the results of data analysis rather than how the results were obtained.

Spoiler Alert: Basic-level articles earn more, so I am focusing on the wrong thing. Unfortunately, I greatly enjoy writing about the wrong thing.
The top three subjects I covered were Data Visualization (Viz), Data Analysis, and Natural Language Processing (NLP):

The top three Python libraries that I wrote about were Matplotlib, Plotly Express, and seaborn:

Most of my articles were published by Towards Data Science:

In general, I wrote an average of four articles per month. This is important as it means changes in earnings through time are driven by factors other than simply writing more stories.

Impact of Boosting
This section summarizes the boost status of my articles and its impact on my number of followers and earnings. Boosting is Medium's way to promote good stories by distributing them to a wide audience.
You can tell if an article has been boosted by clicking an article name on your Medium Partner Program page. Boosted articles have an "upward arrow" icon to the right of the summary line:

In addition to boosting, publishers can promote an article by adding it to their reading lists, newsletters, etc. I label this process "Curate" in the dataset.
Although it's possible to have an article curated without boosting, none of my articles fit this category so you won't see it in a chart, and I can't evaluate its impact on earnings.
Of my 57 articles, 15 (26%) were boosted:

Towards Data Science published the majority of my boosted articles. The most boosted topic was Data Visualization. Not surprisingly, this follows the distribution of articles by publisher and topic.


The next chart summarizes my total earnings per month:

Articles in the later months benefited more from greater inclusion in publications and boosting than from an increase in the number of followers.
Boosting and Curating versus Number of Followers
The graph below plots my cumulative number of followers versus time:

As you can see, boosting and curating have the potential to increase followers, but there are no guarantees. Some boosts have a dramatic impact, causing a surge in followers. Other boosts have no effect.
After November 2023, the slope of the line increases, indicating a more rapid accumulation of followers. This is probably related to the higher number of boosts over this period versus the pre-November period.
Boosting and Curating versus Earnings
The graph below plots my cumulative number of followers and earnings versus time. In my first 10 months of writing, my earnings closely tracked my number of followers. The trends diverged in November 2023, when Demystifying Matplotlib was boosted and curated. This produced a surge in earnings.

It's clear from the two lines that boosting makes a material difference in earnings. Before November 2023, the lines for earnings and followers had similar slopes, suggesting income increases were driven, in part, by increases in followers. After this, earnings were more strongly driven by boosting.
Boosting versus Boosting and Curating
On average, boosted and curated articles earn more than boosted articles (I have no data on just curated articles). Likewise, boosted articles significantly outperform non-boosted articles.

The takeaway is that boosting is a key factor for success in the first year of writing on Medium.
Impact of Number of Followers
Does the number of followers matter to earnings? It doesn't look like it, at least not for the first year or so.
To judge the impact of the number of followers on earnings, I removed boosted articles from my dataset. Here's the result:

The regression line is positive, but not by a lot. Despite gaining almost 2,100 followers over 15 months, the earnings impact was immaterial compared to boosting.
Earnings versus Time
The following graphs show my earnings versus article number (a proxy for time). Markers are colored by different parameters and sized by boost status.
Impact of Learning Level on Earnings
Plotting earnings versus articles and coloring by learning level reveals that boosting is the key to earnings success and that basic and advanced-level stories get boosted at about the same rate. Basic-level articles, however, earn the most.

To quantify the above, the average earnings for basic-level tutorials were 8x that for advanced and niche tutorials:

Impact of Topic on Earnings
The same graph colored by topic reveals that visualization articles were boosted most, are the only ones curated, and are among the highest earners. The general "Coding" topic shows promise, as an article on Python classes is the third-highest earner.

Impact of Publisher on Earnings
The same graph colored by the publisher shows the dominance of Towards Data Science, including as a booster/curator.

A sobering takeaway from the previous charts is that, without boosting, my articles would show no significant improvement in earnings over 15 months.
Predicting Future Earnings
In this section, I predict my future earnings based on past results. Since there's a lot of uncertainty around this, I decided to eschew a sophisticated approach and stuck with simple linear regression techniques.
As a nod to the uncertainty, I generated both optimistic and conservative outcomes. A key assumption was that I would continue to write four Python tutorials per month on average (I've already failed miserably at this for April).
The goal of this analysis is not to accurately predict what I'll make over the next 15 months, but to see what looks reasonable. For example, while I don't write for money (thank God!), I'd still like to generate about $1,000 per month writing on Medium. If this doesn't look possible, even with the optimistic case, I'll need to rethink my whole strategy.
Methodology
I used Python's statsmodels
library to estimate a robust regression where outliers are de-weighted for a conservative prediction. As my outliers represent positive outcomes, this will reduce their contribution to future earnings.
I used the ordinary least squares option, where outliers have a larger influence, to estimate the regression for a more optimistic prediction.
In the charts, the conservative regression line is labeled "Robust Linear Model." The optimistic line is labeled "Ordinary Least Squares."
Earnings versus Read Time
While I didn't have a lot of long articles, I did find a positive correlation between earnings and read times:

The average read time for my 57 articles was about 9 minutes. This chart suggests I can marginally increase my income by writing articles longer than 9 minutes.
Earnings versus Time Predictions
The following chart captures earnings growth through time. Because I am still in the early days as a writer on Medium, I think it's reasonable to assume that current trends in earnings will continue for at least another year.

I can use the formulas for the two regression lines to predict what I might earn over the next 15 months, assuming I write another 57 articles. The results are $4,300 for the conservative case and $11,500 for the optimistic case.
As a check, the optimistic model yielded total earnings of $3,765 for my first 57 articles, close to the actual earnings of $3,575. The conservative model came in much lower at $1,393.
The optimistic case yields a monthly average of $767. While this is short of my desired goal of $1,000, it also assumes no changes to my current process.
But what if I wise up and leverage these results to write more popular articles? For example, what if I stick to basic tutorials on coding and visualization? Here's the chart:

The conservative model for this filtered dataset yields about $108,000 for 15 months. That equals $7,200 per month!
In addition, I have not factored in writing longer articles, which, as my previous analysis showed, will theoretically produce even more earnings.
While I don't believe for a minute that I could earn $7,200 per month, it demonstrates plenty of room for growth in the next 15 months, and my goal of $1,000/month is attainable. I only need to write longer (> 9-minute) tutorials on beginner-level coding and visualization topics.
NOTE: There is surely a limit on how many times you can get boosted in a given year. I have not factored this into the analysis.
Some Other Stats
Here are some other interesting stats I didn't use in the analysis.
Read Ratio
The "Read Ratio" metric tries to capture the percentage of viewers who read a story, versus skimming it and moving on. The read ratio (based on Medium members) contributes to an article's earnings.
Here's the read ratio for my articles organized by topic:

These results are somewhat skewed as there was only one article in each of the physics, paranormal, and package management categories. I also suspect that programming tutorials have a lower-than-average read ratio, as they are not very accessible on a phone. I tend to skim them, add them to a list, and forget to ever look at them again.
Average Earnings per Publication
Here are my average earnings based on publication. The results are skewed because I didn't write the same number of articles for each publication (the black dot represents the number of articles by publisher).

Lost Followers
The Medium audience page includes information on both followers gained and lost. The lost category can be interesting, if not very insightful. For example, I lost a whopping 29 followers in March 2024!

This was a bit perplexing, as I don't write charged, politically sensitive articles that would drive people away. My best guess is that it was due to my Introducing Seaborn Objects story. Pythonistas are strangely passionate about their plotting libraries!
Analyzing Your Own Statistics
As I opined earlier, Medium's built-in analyses don't provide enough detail for you to evaluate what drives results like boosts and earnings. This requires a personalized spreadsheet for your writing style. You can then analyze this file using Excel, Python, R, or whatever you prefer.
To download your follower and subscriber stats, click the "Download CSV" hyperlink on your Audience Stats page.
Getting your other stats, such as story names, views, earnings, and so on, is not as straightforward. One approach is to hand-type them into a spreadsheet. Another is to use the instructions provided by others (or write your own code) to access them programmatically. I list some sources below but be aware that you'll still have to massage the results, to add the necessary granularity for analysis.
CAVEAT EMPTOR: I have not evaluated all these sources. Be aware that some of these techniques have the potential to load malicious software onto your machine.
Analyzing Medium Story Stats with Python
How to Get Medium Story Stats with 3 Lines of Python Code
Medium API (Unofficial) – Fetch your data from Medium
All the charts I showed in this article are basic types such as bar, scatter, line, and pie, and should be easy to reproduce. If this article proves popular, or if enough people request the code in the comments, I'll publish my Jupyter Notebook in another article.
Summary
Analyzing your Medium statistics can help you reach your writing goals. While Medium provides built-in tables and graphs to help with this, they lack the granularity to dig deeply enough to understand what's working and what isn't.
By exporting your metrics to a spreadsheet and adding additional columns for categories specific to your stories, you can address key questions you have about your results. Further, you can filter the dataset to specific categories to play "what if" games and predict future earnings.
Of course, this type of analysis assumes you will continue to write on the same subjects. It can't inform you about topics you haven't tackled yet. For all I know, I could quadruple my income if I only wrote about Lego Minifigures and bad vampire movies!
Thanks!
Thanks for reading and please follow me for more Quick Success Data Science articles in the future.