Analysis notebooks and articles for medium.com/@ben.g.ballard.
| 40 stories published | ~43K views | $85.44 lifetime earnings | See STATS.md for full analytics. |
| Doc | Purpose |
|---|---|
| STRATEGY.md | Growth strategy — franchise model, publishing cadence, distribution plan |
| STATS.md | Analytics dashboard — lifetime data, revenue by category, what works vs. doesn’t. Updated monthly. |
| Folder | Topic | Published Stories | Earnings |
|---|---|---|---|
cfb-data-analysis |
College football scoring (CFBD API) | CFB Talent Trends, CFB Recap, Portal P1 & P2 | $1.01 |
google-trends |
Keyword trends (pytrends) | Using Google Trends API, Mastering Google Trends | $9.23 |
maryland-car-crashes |
MD vehicle crashes + COVID | Maryland Car Crash Trends, Maryland Car Crashes | $0.08 |
whoop-health-data |
Whoop wearable health data | — (unpublished) | — |
zillow-home-values |
Zillow ZHVI forecasting | — (unpublished) | — |
oklahoma-football |
Oklahoma vs Notre Dame (R) | — (unpublished) | — |
Top earners not yet in repo (franchise opportunities):
| Story | Earnings | Views | Opportunity |
|---|---|---|---|
| Unlocking Sports Betting with Python | $32.26 | 6,700 | Sequel series + 2026 refresh |
| Analyzing NBA Data Using Python and APIs | $13.45 | 14,100 | Sequel / updated version |
| How to Analyze NBA Stats with the NBA API | $12.47 | 3,800 | Part of NBA franchise |
| Easy Live Sports Odds: A Guide to Google… | $2.86 | 1,990 | Betting franchise |
pip install -r requirements.txt
.env file in the repo root with your API keys:MEDIUM_TOKEN=your_medium_integration_token
CFBD_API_KEY=your_college_football_data_api_key
CHART_STUDIO_USERNAME=your_plotly_username
CHART_STUDIO_API_KEY=your_plotly_api_key
Get your Medium integration token at: Settings > Security and apps > Integration tokens
# Publish as draft (recommended first step)
python publish.py cfb-data-analysis
# Publish with tags
python publish.py maryland-car-crashes --tags "data science,python,maryland"
# Publish as public (use with caution - cannot edit via API after)
python publish.py zillow-home-values --status public
Medium’s API cannot edit posts after creation. Always publish as draft first, review on Medium’s editor, then manually set to public.
Medium auto-loads images from URLs in your markdown. For images generated by your notebooks, push to GitHub and reference them as raw URLs:

cp -r _template/ my-new-project/
Then do your analysis in analysis.ipynb, write the article in article.md, and publish.
Each project folder follows this layout:
project-name/
|-- <descriptive-name>.ipynb # Jupyter notebook (e.g. odds-api-2026.ipynb)
|-- article.md # Polished article for Medium
|-- README.md # Project description, status, and performance stats
|-- data/ # Data files (CSVs, etc.) - optional
+-- images/ # Generated charts/figures - optional