Status: Draft (파일 저장만 — 게시 금지)
Platform: Medium / LinkedIn
Target: K-pop fan developers, music streaming analysts, marketers, r/dataisbeautiful readers
Actor: https://apify.com/oxygenated_quagmire/melon-chart-scraper
Created: 2026-03-01
📝 Article Draft
Track K-pop Trends with Melon Chart Data: A Developer's Guide
How to scrape Korea's #1 music platform to build K-pop analytics, trend trackers, and recommendation systems
K-pop isn't a trend — it's a global industry.
BTS sold out Wembley Stadium. BLACKPINK broke YouTube records. NewJeans and aespa have fans in São Paulo, Lagos, and Oslo. In 2024, K-pop generated over $12 billion in global revenue, with music streaming at the core.
And at the center of Korea's music streaming universe? Melon — with 28 million+ users and real-time charts that the entire industry watches.
If you're building music analytics tools, fan dashboards, recommendation systems, or just want to explore K-pop data for a side project — Melon chart data is your goldmine. The problem? Melon doesn't offer a public API.
Until now.
1. Why Melon Data?
Melon's Position in K-pop
Melon (멜론) is Korea's oldest and largest music streaming platform, launched in 2004. It's owned by Kakao Entertainment and has a direct pipeline to Korean music consumption patterns.
Why does this matter for data analysis?
- Real-time cultural signal: Melon's TOP 100 updates continuously. When HYBE drops a new BTS track at midnight, you can watch it climb the charts in real time.
- Multiple chart dimensions: Daily, weekly, monthly, and HOT 100 charts capture both trends and longevity.
- Rich metadata: Genre, release date, album info, and full lyrics — all in one place.
- No authentication required: All chart data is publicly accessible.
K-pop's Global Data Opportunity
The K-pop fandom is uniquely data-hungry:
- Fans obsessively track chart positions ("streaming parties" coordinate to boost rankings)
- Labels monitor chart performance to gauge comeback success
- Playlist curators need real-time trending data
- Researchers study K-pop's cultural diffusion patterns
There's a massive gap between the data available and the tools to access it. That's where this guide comes in.
2. Introducing Melon Chart Scraper
The Melon Chart Scraper is an Apify Actor that extracts data from Melon's public charts and search results — no API key, no browser, no proxies needed.
What It Can Do
| Mode | What You Get |
|---|---|
top100 |
Real-time TOP 100 chart |
hot100 |
HOT 100 chart |
daily |
Daily chart rankings |
weekly |
Weekly chart rankings |
monthly |
Monthly chart rankings |
search |
Search by artist, song, or album |
The fetchDetails Power-Up
Add "fetchDetails": true to unlock:
- 🎵 Full lyrics (Korean — great for NLP or language learning projects)
- 🎸 Genre classification (댄스/발라드/R&B etc.)
- 📅 Release date (calculate chart debut timing)
- 🎧 FLAC quality info
Pricing
- $0.50 per 1,000 tracks — that's TOP 100 chart for $0.05
- Detail pages included in the price
- No minimum spend
3. Step-by-Step Guide
Step 1: Get Your Apify Account
- Sign up at apify.com — free tier available
- Navigate to the Melon Chart Scraper Actor page
- Click "Try for free"
Step 2: Configure Your Input
Basic — Grab the TOP 100:
{
"mode": "top100",
"maxResults": 100
}
Advanced — Weekly chart with full details:
{
"mode": "weekly",
"fetchDetails": true,
"maxResults": 100
}
Search for specific artist:
{
"mode": "search",
"keyword": "아이유",
"maxResults": 50
}
Step 3: Run and Extract Data
- Click "Start" in the Apify Console
- Wait ~10-30 seconds for TOP 100 (faster without
fetchDetails) - Download results as JSON, CSV, or Excel
- Or use the Apify API for automated integration:
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run_input = {
"mode": "top100",
"fetchDetails": True,
"maxResults": 100
}
run = client.actor("oxygenated_quagmire/melon-chart-scraper").call(run_input=run_input)
items = client.dataset(run["defaultDatasetId"]).iterate_items()
for item in items:
print(f"#{item['rank']} {item['title']} - {item['artist']}")
Step 4: Schedule Automated Runs
In the Apify Console, set a schedule to run daily or weekly:
- Daily chart snapshot at midnight KST
- Weekly chart every Monday morning
- Export to Google Sheets, S3, or your database
4. Real Use Cases
Use Case 1: K-pop Trend Analysis Dashboard
Goal: Visualize weekly chart movements to spot rising artists and declining tracks.
import pandas as pd
import matplotlib.pyplot as plt
# Collect weekly chart data over 4 weeks
weekly_data = []
for week in weeks:
run = client.actor("oxygenated_quagmire/melon-chart-scraper").call(
run_input={"mode": "weekly", "maxResults": 50}
)
items = list(client.dataset(run["defaultDatasetId"]).iterate_items())
for item in items:
item["week"] = week
weekly_data.extend(items)
df = pd.DataFrame(weekly_data)
# Track a specific artist's chart trajectory
ive_songs = df[df["artist"].str.contains("IVE")]
pivot = ive_songs.pivot(index="week", columns="title", values="rank")
pivot.plot(marker="o", title="IVE - Melon Weekly Chart Trajectory")
plt.gca().invert_yaxis() # Lower rank = better
plt.show()
What you can build:
- Interactive chart movement visualizations (great for r/dataisbeautiful!)
- "Longevity score" — how long does a song stay in top 10?
- Genre trend analysis over months
Use Case 2: Artist Popularity Monitor (Comeback Tracker)
Goal: Track how quickly a new album enters and climbs Melon's charts.
from datetime import datetime
import time
def monitor_comeback(artist_name, check_interval_minutes=30, duration_hours=72):
"""Monitor a K-pop comeback's chart performance in real time."""
results = []
end_time = datetime.now().timestamp() + (duration_hours * 3600)
while datetime.now().timestamp() < end_time:
run = client.actor("oxygenated_quagmire/melon-chart-scraper").call(
run_input={"mode": "top100", "maxResults": 100}
)
chart_data = list(client.dataset(run["defaultDatasetId"]).iterate_items())
artist_entries = [s for s in chart_data if artist_name in s["artist"]]
snapshot = {
"timestamp": datetime.now().isoformat(),
"entries": len(artist_entries),
"best_rank": min([s["rank"] for s in artist_entries]) if artist_entries else None,
"songs": [{"title": s["title"], "rank": s["rank"]} for s in artist_entries]
}
results.append(snapshot)
print(f"[{snapshot['timestamp']}] {artist_name}: {snapshot['entries']} songs, best rank #{snapshot['best_rank']}")
time.sleep(check_interval_minutes * 60)
return results
# Usage: Monitor TWICE comeback
monitor_comeback("TWICE", check_interval_minutes=60, duration_hours=48)
What you can build:
- Slack/Discord bot that alerts when your favorite artist enters TOP 10
- Label intelligence dashboard tracking competitor comebacks
- "First 24 hours" chart performance predictor
Use Case 3: Music Recommendation System Data Collection
Goal: Build a content-based recommendation system using Melon's rich metadata.
def build_music_dataset():
"""Collect comprehensive K-pop dataset for recommendation system training."""
all_songs = []
# Collect across multiple time periods for diversity
modes = ["top100", "weekly", "monthly"]
for mode in modes:
run = client.actor("oxygenated_quagmire/melon-chart-scraper").call(
run_input={
"mode": mode,
"fetchDetails": True, # Include genre, lyrics, release date
"maxResults": 100
}
)
songs = list(client.dataset(run["defaultDatasetId"]).iterate_items())
all_songs.extend(songs)
# Deduplicate by songId
seen = set()
unique_songs = []
for song in all_songs:
if song["songId"] not in seen:
seen.add(song["songId"])
unique_songs.append(song)
df = pd.DataFrame(unique_songs)
# Feature engineering for recommendation
df["has_lyrics"] = df["lyrics"].notna()
df["is_dance"] = df["genre"].str.contains("댄스", na=False)
df["is_ballad"] = df["genre"].str.contains("발라드", na=False)
df["chart_score"] = 101 - df["rank"].fillna(100) # Higher = better rank
return df
dataset = build_music_dataset()
print(f"Collected {len(dataset)} unique songs")
print(dataset[["title", "artist", "genre", "chart_score"]].head(20))
What you can build:
- "If you like X artist, you'll like Y" recommendation engine
- Genre-based playlist generator for Korean music
- Training data for K-pop music classification models
5. Data Structure
Here's what a full response looks like with fetchDetails: true:
{
"rank": 1,
"songId": "601237102",
"title": "BANG BANG",
"artist": "IVE (아이브)",
"albumTitle": "REVIVE+",
"albumId": "12845274",
"albumImageUrl": "https://cdnimg.melon.co.kr/cm2/album/images/128/45/274/12845274_20260223113048_500.jpg/melon/resize/120/quality/80/optimize",
"songUrl": "https://www.melon.com/song/detail.htm?songId=601237102",
"genre": "댄스",
"releaseDate": "2026.02.09",
"lyrics": "It's a new scene It's aggressive...",
"flacInfo": "Flac 16/24bit",
"chartType": "top100",
"scrapedAt": "2026-02-28T04:30:00.000000"
}
Key Fields Explained
-
rank: Chart position (null for search results) -
songId: Melon's unique song identifier — use this to track the same song across multiple scrapes -
genre: Korean genre tags (댄스=Dance, 발라드=Ballad, 힙합=Hip-hop, R&B=R&B) -
releaseDate: Format:YYYY.MM.DD -
lyrics: Full Korean lyrics — valuable for NLP, sentiment analysis, or language learning apps -
scrapedAt: UTC timestamp — important for time-series analysis
Quick Schema for Database Storage
CREATE TABLE melon_chart_snapshots (
id SERIAL PRIMARY KEY,
scraped_at TIMESTAMP,
chart_type VARCHAR(20),
rank INTEGER,
song_id VARCHAR(50),
title VARCHAR(200),
artist VARCHAR(200),
album_title VARCHAR(200),
genre VARCHAR(100),
release_date DATE,
UNIQUE(scraped_at::DATE, chart_type, song_id)
);
6. Conclusion
Melon sits at the intersection of two massive trends: the global K-pop wave and the data-driven music industry. Whether you're building fan tools, doing academic research, or trying to predict the next breakout K-pop act, Melon chart data gives you a direct window into Korea's music consumption in real time.
The Melon Chart Scraper makes this data accessible in minutes — no API negotiation, no complex authentication, no browser automation overhead.
Start exploring K-pop data today:
- 🚀 Try the Melon Chart Scraper — first run free
- 📊 Build your first chart visualization with the Python snippets above
- 💬 Share what you build — K-pop data visualizations consistently go viral on r/dataisbeautiful and K-pop fan communities
Want more K-pop data tools? Check out the full suite of Korean platform scrapers:
- Naver Place Reviews Scraper — Korean location-based reviews
- Naver News Scraper — Korean news analytics
📋 Publishing Checklist
- [ ] Final proofread
- [ ] Add 2-3 screenshots (Actor console, sample output, example visualization)
- [ ] Cross-post links prepared (Medium → LinkedIn → Reddit r/kpop + r/dataisbeautiful)
- [ ] Tags:
kpop,data-science,python,music,web-scraping,apify - [ ] CTA links verified
- [ ] Internal linking to Naver Place + Naver News guides
📊 SEO Keywords
- melon chart api
- kpop chart data python
- melon music scraper
- k-pop trend analysis
- korean music chart data
- apify kpop
🔗 Cross-posting Strategy
- Medium: Full article with code snippets
- LinkedIn: Shortened version (500 words) + link to Medium
- Reddit r/dataisbeautiful: Visualization-focused post + link
- Reddit r/kpop: Fan-friendly post focusing on comeback tracker use case
- Dev.to: Technical version focusing on Python code examples
Top comments (0)