Overture
Music education, much like the rest of the country, has changed dramatically over the past decade. Using data pulled from the U.S. Department of Education's College Scorecard API, this comprehensive analysis examines emerging enrollment and financial trends within five of the most prestigious music conservatories in the United States from 2012 to 2022. This specific date range was chosen as it is the most recent 10-year span with complete data sets for all five institutions.
The schools selected for this study were Berklee College of Music, The Juilliard School, New England Conservatory, Manhattan School of Music, and the Curtis Institute of Music. Each of these institutions has reached the peak of at least one aspect of classical and/or contemporary music education while maintaining a unique identity and focus.
Through interactive visualizations and data-driven insights, this report seeks to illuminate the complex relationships between hyper-competitive admissions practices, retention, graduation outcomes, and financial accessibility at the pinnacle of music education. These findings offer valuable perspectives for anyone truly invested in the future of American conservatories.
Table of Contents
1. Introduction & Methodology
As previously stated, this analysis uses the U.S. Department of Education's College Scorecard API to examine longitudinal trends across five elite music conservatories. The specific metrics below were chosen to provide an unbiased representation of how costs and enrollment have changed from 2012 to 2022.
Data Collection
I used a Python script (api_to_csv.py) to extract the following data for all five institutions. I also included another script (api_to_sql.py) to extract the data and store it in a SQLite database. You can view the code for both scripts by clicking the buttons below.
- Acceptance Rate: The percentage of applicants who were admitted in a given year (admissions.admission_rate.overall).
- Retention Rate: The share of first-time, full-time undergraduates who return the following year (student.retention_rate.four_year.full_time).
- Graduation Rate: The proportion of full-time, first-time undergraduates who complete a degree within 6 years (completion.completion_rate_4yr_150nt).
- Tuition: The published in-state tuition and fees for full-time undergraduates (cost.tuition.in_state).
- Average Net Price: The average annual cost of attendance for full-time undergraduates after grants and scholarships (cost.avg_net_price.private).
- Total Enrollment: The number of students enrolled for credit at the institution across all programs (student.size).
π api_to_csv.py
import os
import requests
import pandas as pd
from datetime import datetime
from dotenv import load_dotenv
load_dotenv()
API = "https://api.data.gov/ed/collegescorecard/v1/schools"
API_KEY = os.getenv("SCORECARD_API_KEY")
# DOE Unit Identification Numbers
UNITIDS = [164748, 192110, 167057, 192712, 211893]
YEARS = range(2012, 2022 + 1)
NAME_MAP = {
164748: "Berklee College of Music",
192110: "The Juilliard School",
167057: "New England Conservatory",
192712: "Manhattan School of Music",
211893: "Curtis Institute of Music",
}
FIELD_MAP = {
"enrollment_total": "student.size",
"admission_rate": "admissions.admission_rate.overall",
"retention_rate_ft": "student.retention_rate.four_year.full_time",
"grad_rate_150": "completion.completion_rate_4yr_150nt",
# Published tuition + required fees only (no room/board)
"tuition_fees": "cost.tuition.in_state",
# What families actually pay:
# (Tuition + Room/Board + Books + Personal) - (Federal + State + Institutional grants)
"avg_net_price": "cost.avg_net_price.private",
}
# Convert decimal values (0-1) to percentages (0-100) and round to 2 decimal places
# If values are already in percentage format (>1 or <0), just round them
def normalize_percentages(df: pd.DataFrame, percentage_fields=None) -> pd.DataFrame:
if percentage_fields is None:
percentage_fields = ["admission_rate", "retention_rate_ft", "grad_rate_150"]
# c = column
# s = series
out = df.copy()
for c in percentage_fields:
if c in out.columns:
s = pd.to_numeric(out[c], errors="coerce")
if s.notna().any():
valid = s[s.notna()]
if len(valid) > 0 and valid.max() <= 1.0 and valid.min() >= 0:
# Convert decimals to percentages
out[c] = (s * 100).round(2)
else:
# Already in percentage format, just round
out[c] = s.round(2)
return out
# Build a filename with year range and timestamp
# Accepts optional datetime for testing
def build_filename(years, now=None) -> str:
if now is None:
now = datetime.now()
year_range = f"{min(years)}_{max(years)}"
timestamp = now.strftime("%Y%m%d")
return f"music_school_data_{year_range}_{timestamp}.csv"
def fetch_year(institution_ids, year):
fields = ["id", "school.name"]
fields += [f"{year}.{f}" for f in FIELD_MAP.values()]
params = {
"api_key": API_KEY,
"id__in": ",".join(map(str, institution_ids)),
"fields": ",".join(fields),
"per_page": 100,
}
# res = response
# ex = exception
try:
res = requests.get(API, params=params, timeout=30)
res.raise_for_status()
js = res.json()
except requests.exceptions.RequestException as ex:
print(f"Error fetching data for year {year}: {ex}")
return pd.DataFrame()
except ValueError as ex:
print(f"Error parsing JSON response for year {year}: {ex}")
return pd.DataFrame()
results = js.get("results", [])
if not results:
print(f"Warning: No data returned for year {year}")
return pd.DataFrame()
rows = []
for item in results:
row_id = item.get("id")
if not row_id:
continue
row = {
"institution": NAME_MAP.get(row_id, item.get("school.name", "Unknown")),
"unitid": row_id,
"year": year,
}
for metric, field_suffix in FIELD_MAP.items():
row[metric] = item.get(f"{year}.{field_suffix}")
rows.append(row)
return pd.DataFrame(rows)
def main():
frames = []
failed_years = []
for y in YEARS:
df = fetch_year(UNITIDS, y)
if not df.empty:
frames.append(df)
else:
failed_years.append(y)
if not frames:
raise SystemExit("Error: No data retrieved for any years. Check API key and network connection.")
if failed_years:
print(f"Warning: Failed to retrieve data for years: {failed_years}")
long_df = pd.concat(frames, ignore_index=True)
long_df = normalize_percentages(long_df)
sorted_df = long_df.sort_values(['institution', 'year']).reset_index(drop=True)
filename = build_filename(YEARS)
sorted_df.to_csv(filename, index=False)
print(f"Saved data: {filename} ({len(sorted_df)} rows, {len(sorted_df['institution'].unique())} institutions)")
return sorted_df
if __name__ == "__main__":
try:
main()
except KeyboardInterrupt:
print("\nOperation cancelled by user.")
except Exception as ex:
print("Error: Operation failed. Check your API key and network connection.")
raise SystemExit(1)
π api_to_sql.py
import os
import sqlite3
import requests
import pandas as pd
from datetime import datetime
from dotenv import load_dotenv
load_dotenv()
API = "https://api.data.gov/ed/collegescorecard/v1/schools"
API_KEY = os.getenv("SCORECARD_API_KEY")
# DOE Unit Identification Numbers
UNITIDS = [164748, 192110, 167057, 192712, 211893]
YEARS = range(2012, 2022 + 1)
NAME_MAP = {
164748: "Berklee College of Music",
192110: "The Juilliard School",
167057: "New England Conservatory",
192712: "Manhattan School of Music",
211893: "Curtis Institute of Music",
}
FIELD_MAP = {
"enrollment_total": "student.size",
"admission_rate": "admissions.admission_rate.overall",
"retention_rate_ft": "student.retention_rate.four_year.full_time",
"grad_rate_150": "completion.completion_rate_4yr_150nt",
# Published tuition + required fees only (no room/board)
"tuition_fees": "cost.tuition.in_state",
# What families actually pay:
# (Tuition + Room/Board + Books + Personal) - (Federal + State + Institutional grants)
"avg_net_price": "cost.avg_net_price.private",
}
# Convert decimal values (0-1) to percentages (0-100) and round to 2 decimal places
# If values are already in percentage format (>1 or <0), just round them
def normalize_percentages(df: pd.DataFrame, percentage_fields=None) -> pd.DataFrame:
if percentage_fields is None:
percentage_fields = ["admission_rate", "retention_rate_ft", "grad_rate_150"]
# c = column
# s = series
out = df.copy()
for c in percentage_fields:
if c in out.columns:
s = pd.to_numeric(out[c], errors="coerce")
if s.notna().any():
valid = s[s.notna()]
if len(valid) > 0 and valid.max() <= 1.0 and valid.min() >= 0:
# Convert decimals to percentages
out[c] = (s * 100).round(2)
else:
# Already in percentage format, just round
out[c] = s.round(2)
return out
# Build a database filename with timestamp
# Accepts optional datetime for testing
def build_db_filename(now=None) -> str:
if now is None:
now = datetime.now()
timestamp = now.strftime("%Y%m%d")
return f"music_schools_{timestamp}.db"
def create_database(db_path="music_schools.db"):
conn = sqlite3.connect(db_path)
cursor = conn.cursor()
# Schools dimension table
cursor.execute("""
CREATE TABLE IF NOT EXISTS schools (
school_id INTEGER PRIMARY KEY AUTOINCREMENT,
unitid INTEGER UNIQUE NOT NULL,
institution_name TEXT NOT NULL)""")
# Main metrics table (long format)
cursor.execute("""
CREATE TABLE IF NOT EXISTS school_metrics (
school_id INTEGER NOT NULL,
year INTEGER NOT NULL,
enrollment_total INTEGER,
admission_rate REAL,
retention_rate_ft REAL,
grad_rate_150 REAL,
tuition_fees REAL,
avg_net_price REAL,
PRIMARY KEY (school_id, year),
FOREIGN KEY (school_id) REFERENCES schools(school_id))""")
# Indexes for common query patterns
cursor.execute(
"CREATE INDEX IF NOT EXISTS idx_metrics_year ON school_metrics(year)")
cursor.execute(
"CREATE INDEX IF NOT EXISTS idx_metrics_school ON school_metrics(school_id)")
# Schools & Metrics View
cursor.execute("""
CREATE VIEW IF NOT EXISTS v_school_metrics AS
SELECT s.institution_name,
s.unitid,
m.school_id,
m.year,
m.enrollment_total,
m.admission_rate,
m.retention_rate_ft,
m.grad_rate_150,
m.tuition_fees,
m.avg_net_price
FROM school_metrics m
JOIN schools s ON m.school_id = s.school_id""")
# YoY Comparisons View
cursor.execute("""
CREATE VIEW IF NOT EXISTS v_metrics_yoy AS
SELECT s.institution_name, s.unitid, m.school_id, m.year,
m.enrollment_total,
m.enrollment_total - LAG(m.enrollment_total)
OVER (PARTITION BY m.school_id ORDER BY m.year) AS enrollment_change,
m.tuition_fees,
m.tuition_fees - LAG(m.tuition_fees)
OVER (PARTITION BY m.school_id ORDER BY m.year) AS tuition_change,
m.avg_net_price,
m.avg_net_price - LAG(m.avg_net_price)
OVER (PARTITION BY m.school_id ORDER BY m.year) AS net_price_change,
m.admission_rate, m.retention_rate_ft, m.grad_rate_150
FROM school_metrics m
JOIN schools s ON m.school_id = s.school_id""")
# School Stats Summary View
cursor.execute("""
CREATE VIEW IF NOT EXISTS v_school_summary AS
SELECT s.institution_name, s.unitid,
COUNT(m.year) AS years_of_data,
MIN(m.year) AS first_year,
MAX(m.year) AS last_year,
ROUND(AVG(m.enrollment_total), 0) AS avg_enrollment,
ROUND(AVG(m.admission_rate), 2) AS avg_admission_rate,
ROUND(AVG(m.retention_rate_ft), 2) AS avg_retention_rate,
ROUND(AVG(m.grad_rate_150), 2) AS avg_grad_rate,
ROUND(AVG(m.tuition_fees), 2) AS avg_tuition,
ROUND(AVG(m.avg_net_price), 2) AS avg_net_price
FROM schools s
LEFT JOIN school_metrics m ON s.school_id = m.school_id
GROUP BY s.school_id, s.institution_name, s.unitid""")
conn.commit()
return conn
def insert_schools(conn):
cursor = conn.cursor()
for unitid, name in NAME_MAP.items():
cursor.execute("""
INSERT OR IGNORE INTO schools (unitid, institution_name)
VALUES (?, ?)""",
(unitid, name),)
conn.commit()
def get_school_id(conn, unitid):
cursor = conn.cursor()
cursor.execute("SELECT school_id FROM schools WHERE unitid = ?", (unitid,))
result = cursor.fetchone()
return result[0] if result else None
def fetch_year(institution_ids, year):
fields = ["id", "school.name"]
fields += [f"{year}.{f}" for f in FIELD_MAP.values()]
params = {
"api_key": API_KEY,
"id__in": ",".join(map(str, institution_ids)),
"fields": ",".join(fields),
"per_page": 100,
}
# res = response
# ex = exception
try:
res = requests.get(API, params=params, timeout=30)
res.raise_for_status()
js = res.json()
except requests.exceptions.RequestException as ex:
print(f"Error fetching data for year {year}: {ex}")
return pd.DataFrame()
except ValueError as ex:
print(f"Error parsing JSON response for year {year}: {ex}")
return pd.DataFrame()
results = js.get("results", [])
if not results:
print(f"Warning: No data returned for year {year}")
return pd.DataFrame()
rows = []
for item in results:
row_id = item.get("id")
if not row_id:
continue
row = {
"institution": NAME_MAP.get(row_id, item.get("school.name", "Unknown")),
"unitid": row_id,
"year": year,
}
for metric, field_suffix in FIELD_MAP.items():
row[metric] = item.get(f"{year}.{field_suffix}")
rows.append(row)
return pd.DataFrame(rows)
# Insert metrics data into the school_metrics table
def insert_metrics(conn, df):
cursor = conn.cursor()
# Add school_id to dataframe for sorting
df["school_id"] = df["unitid"].map(lambda x: get_school_id(conn, x))
df_sorted = df.sort_values(["school_id", "year"])
for _, row in df_sorted.iterrows():
school_id = row["school_id"]
if not school_id:
continue
try:
cursor.execute("""
INSERT OR REPLACE INTO school_metrics
(school_id, year, enrollment_total, admission_rate, retention_rate_ft,
grad_rate_150, tuition_fees, avg_net_price)
VALUES (?, ?, ?, ?, ?, ?, ?, ?)""",
(
school_id,
row["year"],
row.get("enrollment_total"),
row.get("admission_rate"),
row.get("retention_rate_ft"),
row.get("grad_rate_150"),
row.get("tuition_fees"),
row.get("avg_net_price"),
),
)
except sqlite3.Error as err:
print(
f"Error inserting data for school_id {school_id}, year {row['year']}: {err}"
)
conn.commit()
def main():
print("Creating Database...")
print("=" * 60)
db_path = build_db_filename()
conn = create_database(db_path)
insert_schools(conn)
failed_years = []
all_data = []
for year in YEARS:
print(f"\nFetching data for {year}...")
df = fetch_year(UNITIDS, year)
if not df.empty:
df = normalize_percentages(df)
all_data.append(df)
else:
failed_years.append(year)
print(f" No data available for {year}")
if all_data:
combined_df = pd.concat(all_data, ignore_index=True)
insert_metrics(conn, combined_df)
print(f"\nInserted {len(combined_df)} records into school_metrics table")
if failed_years:
print(f"\nWarning: Failed to retrieve data for years: {failed_years}")
conn.close()
print(f"\nDatabase saved as: {db_path}")
print("\nAvailable views for easy querying:")
print(" - v_school_metrics : All data with school names")
print(" - v_metrics_yoy : Year-over-year changes")
print(" - v_school_summary : Summary statistics per school")
print(f"\nExample query:")
print(f' sqlite3 -header -column {db_path} "SELECT * FROM v_school_metrics;"')
if __name__ == "__main__":
try:
main()
except KeyboardInterrupt:
print("\nOperation cancelled by user.")
except Exception as ex:
print(f"Error: {ex}")
raise SystemExit(1)
Note: Most of the above metrics focus on undergraduate programs as they represent the bulk of the student population at music schools. For the purposes of this analysis, retention and graduation rates track first-time, full-time undergraduate students, and net price calculations are also based on undergraduate costs.
Institutional Profiles
πΈ Berklee College of Music
A pioneer in contemporary music education, Berklee is a powerhouse that specializes in jazz, rock, pop, modern music production, and traditional classical studies.
π The Juilliard School
Fueled by its notoriously selective admissions process, Juilliard is arguably the most well-known traditional conservatory in classical music, dance, and drama.
π» New England Conservatory
Aside from being the first conservatory to establish a fully accredited jazz studies program with Gunther Schuller in 1969, NEC is a historic institution that blends classical tradition with contemporary innovation.
πΊ Manhattan School of Music
From Harry Connick Jr. to Lady Gaga, MSMβs exceptional programs across all genres of music position it well to be a major player in music education for decades to come.
πΉ Curtis Institute of Music
With an ultra-selective admissions process that gives every accepted student a scholarship, Curtis proves that even smaller schools can have a tremendous impact on the industry.
2. Student Outcomes
Unlike traditional liberal arts institutions, elite music schools must balance artistic development with academic rigor. Music being an inherently individual pursuit means students will spend a significant amount of time studying and practicing on their own compared to students at more traditional colleges and universities. This solitude, combined with the fact that a studentβs most important class is an hour-long weekly 1-on-1 lesson with their primary professor, creates a unique, high-pressure environment. This sustained pressure, exacerbated by the minimal prospects for economic stability after graduation (when compared to other degree programs), leads to increased volatility across retention and graduation metrics.
Key Findings Overview
- Acceptance rates vary dramatically and are influenced significantly by reputation, application demand, and institutional philosophy.
- Despite trends in acceptance rates being fairly stagnant across the board, all percentages are trending up in recent years. This coupled with flat or even declining enrollment (more on that later) indicates a possible downtrend in demand for elite music degrees.
- Retention rates are very consistent for all schools, but there is a strong correlation between a low acceptance rate and high retention rate. To put it simply, the harder it is to get in, the more likely students are to come back.
- Graduation rates are all over the place with smaller schools having a wider variance. For example, Curtis went from a 100% graduation rate in 2013 to a 53.85% graduation rate in 2014.
- The 2022 snapshot provides further evidence that as acceptance rates go lower, retention and graduation rates go up.
π Acceptance Rates Analysis
π Retention Rates Analysis
π Graduation Rates Analysis
Student Outcomes in 2022
The following dashboards show a snapshot of each school's acceptance rate, retention rate, and graduation rate for 2022.
Key Observations About Each School
- Berklee: Large student populations can negatively affect outcome metrics even when an institution has a massive market share.
- Juilliard: Extremely selective admissions practices yield exceptional retention and graduation outcomes.
- Curtis: Even with ultra-selective admissions processes and guaranteed scholarships, small schools are still prone to wide swings in outcome metrics.
- NEC & MSM: Mid-sized conservatories with reasonable admissions standards have the most stable and consistent outcome trends.
π Acceptance Rates 2022
π Retention Rates 2022
π Graduation Rates 2022
3. Cost Comparisons
The financial landscape of American music education faces unique challenges compared to other specialized colleges. Music schools rely heavily on donations and require significant investment into individual instruction, specialized facilities, and performance opportunities to support their students. Given the high variance in ROI on music degrees, conservatories are especially susceptible to inflation and weakening macroeconomic conditions.
Key Findings Overview
- Before 2012, tuition costs for NEC, MSM, and Juilliard were all under $40,000. By 2022, all were well above $50,000.
- Scholarship-heavy models show that tuition costs can be mitigated, but this only works for smaller schools with substantial donor support.
- Even with a subsidized tuition approach like Curtis's, high net prices for all schools reveal that studying music in major cities is becoming prohibitively expensive.
- Tuition increases are outpacing both inflation and career prospects across the industry. If this trend continues, music education will be considered even more of a luxury than it already is.
π Tuition Trends Analysis A
π Tuition Trends Analysis B
π Net Price Analysis
Cost Comparisons in 2022
The following dashboards show a snapshot of each school's tuition cost and average net price for 2022.
Key Observations About Each School
- Berklee: Despite market dominance and substantial growth, large institutions can choose to keep tuition prices accessible.
- Juilliard: Elite programs with strong brand recognition can command premium prices for now, but tuition growth of $35,140 to $52,500 over 10 years like Juilliard's necessitates career outcome transparency.
- Curtis: Guaranteed scholarships are an effective solution to rising tuition costs, but their efficacy is limited by the rampant cost of living crisis affecting major cities across the United States.
- NEC: Even with 45% tuition growth over ten years, larger conservatories like NEC can choose to take steps to lower net prices for their students.
- MSM: Violent swings in average net price caused by unforeseen events like the COVID-19 pandemic will continue to worsen until a sustainable model is widely adopted. For example, MSM's average net price dropped from $54,902 in 2019 to just $19,111 in 2020.
π Tuition Cost 2022
π Average Net Price 2022
4. Enrollment Analysis
Like student outcomes and tuition costs, enrollment for American music schools has its fair share of eccentricities. Rather than discuss the strong implications of the enrollment data here, I'll save those insights for my overall conclusions presented in the next section. Besides, the final visualization comparing the enrollment numbers for all five institutions in 2022 is genuinely hilarious... and I'd hate to delay your enjoyment of that any longer than necessary.
Key Findings Overview
- One of these things is not like the others...
π Enrollment Analysis A
π Enrollment Analysis B
π Total Enrollment 2022
5. Conclusions & Implications
Before discussing the implications of my findings, I want to reiterate that the main goal of this report was to objectively examine any emerging enrollment and financial trends within five of America's elite music conservatories. While I suspected the financial data in particular would not paint a flattering picture of the music education landscape, shedding light on this uncomfortable truth was not my prime directive. That said, let's dive into what all these numbers actually mean.
There is an Active Financial Crisis in Music Education
The key word here is active. This is no longer a looming, possible, or potential issue. The majority of the financial data clearly shows unsustainable growth in tuition costs happening in real time. In just 10 years:
- New England Conservatory's tuition grew from $38,455 to $55,910 (+45.4%)
- Juilliard's tuition grew from $35,140 to $52,500 (+49.4%)
- MSM's tuition grew from $35,140 to $52,550 (+49.5%)
If these trends continue, by 2032:
- New England Conservatory's tuition will be $81,293
- Juilliard's tuition will be $78,435
- MSM's tuition will be $78,562
What makes these increases so concerning is that they're not driven by improved career prospects or measurable increases in ROI for graduates. Even Berklee's tuition grew from $36,490 to $48,330 (+32.4%) during that same period, but that is problematic for a different reason - one that I'll discuss momentarily.
The one inarguable source of optimism in the tuition data is the success of Curtis's financial model. Their guaranteed scholarship approach demonstrates a truly viable alternative to funding music education at the elite level. However, even with Curtis providing full scholarships, the net price data reveals a critical insight: total education costs are skyrocketing due to unprecedented living expenses in America's major cities.
After dropping from $11,546 in 2012 to $2,584 in 2013, Curtis's average net price increased by $25,362 (+981.5%) to a value of $27,946 in 2022.
Curtis's net price fluctuations unfortunately confirm that even heavily subsidized education is not enough to fully address the growing financial accessibility problem in music education.
Market Evolution and Institutional Divergence
There's something particularly ironic about publishing this report the day after the Bureau of Labor Statistics announced a downward revision of 911,000 jobs for the reporting period of April 2024 to March 2025. It ties perfectly back into my criticisms of rising tuition costs without improved career prospects discussed in the previous section. Music students are already under enough pressure as it is. Unless institutions are actively working towards improving their career services and student support, rising tuition costs feel more like exploitation than "competitive pricing". Thankfully, there is at least one school that seems to be taking this problem seriously.
Berklee's explosive growth is a direct result of the growing surge in the current market's appetite for contemporary music education. This should hardly be a surprise to anyone paying close attention to the music industry over the past decade, but part of the reasoning is remarkably simple. The democratization of music production in recent years has resulted in an unfathomable amount of new music. In fact, according to an article from MusicTech.com, more music was released daily in 2024 than in all of 1989 combined.
Even if you don't end up being a performer or teacher, Berklee's emphasis on transferable, technical skills opens doors to A/V production jobs as well as other related fields. This is reflected in their domination of the enrollment market share and confirms that careers in music are skewing heavily towards modern tastes.
On the other end of the spectrum, traditional conservatories face declining enrollment as classical music careers offer limited practical applications beyond teaching. The COVID-19 pandemic accelerated these trends by disrupting live performance opportunities that are crucial components of classical training. Large-scale productions like operas, which require semester-long preparation for just a few performances, became almost impossible to sustain. This further highlights the vulnerability of traditional classical education models compared to contemporary programs that are both more adaptable and affordable.
Before wrapping up, I want to draw special attention to why Berklee's tuition growth, despite being relatively less dramatic than NEC, MSM, and Juilliard, remains concerning. First of all, the number of students enrolled at Berklee in 2022 was a staggering 7,395. This is a massive increase of 2,948 (+66.3%) compared to the 2012 enrollment total of 4,447, but the enrollment growth alone doesn't tell the whole story. When you factor in the tuition costs of attending Berklee in both 2012 and 2022, that jump in enrollment translates to an eye-popping $195,129,320 increase in gross tuition revenue.
At this point, you're probably wondering what could possibly necessitate such an enormous increase in funding. It has to be something along the lines of technological infrastructure improvements or facility maintenance right? It's certainly possible, but I do know exactly where $1,717,413 of it went.
I'm sure it's quite stressful being the president of the Berklee School of Music. However, I'm skeptical that the actions of any conservatory president warrant compensation approaching $1 million, let alone $2 million.
Final Thoughts
The music education landscape appears to be crystallizing into two distinct models:
- Large contemporary institutions like Berklee (and to a lesser extent MSM & NEC) that embrace modern genres and support consistent career pathways.
- Small, elite conservatories like Curtis and Juilliard that maintain traditional excellence through extremely selective admissions processes.
Schools caught in between these two models will undoubtedly struggle to survive the economic uncertainty of the near future. They will need to either develop their own survival strategies or partner with a larger institution. Fortunately, successful affiliation agreements like those between Boston Conservatory and Berklee, as well as Longy and Bard College, show that academic mergers can be mutually beneficial.
For prospective students, the message is clear: follow the money. I'm not saying that you shouldn't have a "dream school" or anything like that, but the economic factors in choosing where to study are now the most important things to consider. If you get a scholarship to your second or third choice school, that is where you should go.
For educators and administrators, I'd imagine I'm preaching to the choir here. You are likely already aware of the accessibility crisis and financial issues plaguing music education. The best thing you can do is continue to advocate for more affordable tuition and better career support for your students. The louder your voice, and the more data you have backing your claims, the more likely you are to be heard.
Again, the current trend of extreme cost increases without significant improvements in career prospects is unsustainable and borderline exploitative. Until sweeping changes are adopted across the country, enrollment will continue to decline or skew towards institutions focusing on solutions to these modern problems.
Like John F. Kennedy famously said in his remarks at Amherst College in 1963:
βThe life of the arts, far from being an interruption, a distraction, in the life of a nation, is very close to the center of a nationβs purpose... and is a test of the quality of a nationβs civilization.β
I still believe that at its core, America is a civilized nation of great quality.
Let's hope I'm right.
Date Published: September 10, 2025
Last Edited: February 24, 2026
Author: Sean Currlin