DEBUG: Raw major_slug = ""
DEBUG: Initial offers_url = "https://www.collegefactual.com/majors/construction-trades/carpenters/offers.json", major_slug = ""
DEBUG: After cleaning major_slug = ""
DEBUG: Before URL cleaning = "https://www.collegefactual.com/majors/construction-trades/carpenters/offers.json"
DEBUG: After TrimSuffix = "https://www.collegefactual.com/majors/construction-trades/carpenters/offers.json"
DEBUG: After HTTPS placeholder = "HTTPS_TEMP_PLACEHOLDERwww.collegefactual.com/majors/construction-trades/carpenters/offers.json"
DEBUG: After slash cleaning = "HTTPS_TEMP_PLACEHOLDERwww.collegefactual.com/majors/construction-trades/carpenters/offers.json"
DEBUG: After URL cleaning = "https://www.collegefactual.com/majors/construction-trades/carpenters/offers.json"
DEBUG: offers_url = https://www.collegefactual.com/majors/construction-trades/carpenters/offers.json
DEBUG: major_slug = ""
DEBUG: offers_url is valid, proceeding to fetch data
DEBUG: offers_data.offers found, count = 8
DEBUG: Specific major detected (cip4 = 46.02), keeping min_relevance at 0.8
DEBUG: Starting relevance filtering - min_relevance = 0.8, max_relevance = 1
DEBUG: Checking offer "Trade & Vocational Programs (Carpenter)" with relevance 1
DEBUG: ✓ Offer "Trade & Vocational Programs (Carpenter)" ACCEPTED (relevance 1)
DEBUG: Checking offer "Trade & Vocational Programs" with relevance 0.8
DEBUG: ✓ Offer "Trade & Vocational Programs" ACCEPTED (relevance 0.8)
DEBUG: Checking offer "Trade & Vocational Programs (Woodworker)" with relevance 0.8
DEBUG: ✓ Offer "Trade & Vocational Programs (Woodworker)" ACCEPTED (relevance 0.8)
DEBUG: Checking offer "MS in Management - Construction Management" with relevance 0.8
DEBUG: ✓ Offer "MS in Management - Construction Management" ACCEPTED (relevance 0.8)
DEBUG: Checking offer "Trade & Vocational Programs (Construction Trades)" with relevance 0.7
DEBUG: ✗ Offer "Trade & Vocational Programs (Construction Trades)" REJECTED (relevance 0.7)
DEBUG: Checking offer "Trade & Vocational Programs (Home Remodeling & Repair)" with relevance 0.7
DEBUG: ✗ Offer "Trade & Vocational Programs (Home Remodeling & Repair)" REJECTED (relevance 0.7)
DEBUG: Checking offer "Construction Management (I Have a HS Diploma or Associate Degree)" with relevance 0.5
DEBUG: ✗ Offer "Construction Management (I Have a HS Diploma or Associate Degree)" REJECTED (relevance 0.5)
DEBUG: Checking offer "Construction Management (I Have a Bachelors)" with relevance 0.5
DEBUG: ✗ Offer "Construction Management (I Have a Bachelors)" REJECTED (relevance 0.5)
DEBUG: relevant_offers count = 4
DEBUG: relevant_offers > 0, checking for ESYOH offers
DEBUG: ESYOH filtering - found 3 ESYOH offers with relevance >= 0.8
DEBUG: esyoh_offers count = 3
DEBUG: ESYOH offers found, rendering ESYOH widget
DEBUG: most_relevant_only = true, filtering for most relevant
DEBUG: Found 1 offers with relevance >= 1.0
2026 Best Value Carpentry Schools in Missouri
If you want to know which schools deliver the best value for the carpentry degrees they offer, see the list below.
Best Value Carpentry Schools
Ranken Technical College earned the #1 spot for value among carpentry schools in Missouri. Set in the city of Saint Louis, Ranken Technical College is a mid-sized private not-for-profit institution. Expect in-state tuition and fees of around $18,008. Typical student debt for carpentry graduates is $12,000. Carpentry graduates of Ranken Technical College earn a median of $35,975 early in their careers. Weighed against typical debt, the earnings make a compelling case for value.