EVERY Ghost In Disney’s Haunted Mansion And Their Story (2025)

EVERY Ghost In Disney’s Haunted Mansion And Their Story (1) By Brian Delpozo
Posted on Posted on March 20, 2023

For well over 60 years, The Haunted Mansion has been one of Disney’s most beloved — and studied — attractions. Many of us have long been fascinated with the backstories of the “Grim Grinning Ghosts” featured in the ride.

EVERY Ghost In Disney’s Haunted Mansion And Their Story (2)

You’re in luck. We’ve assembled a complete guide to nearly every one of the major happy haunts who appear in the iconic attraction.

" + "

" + detail + "

" + ""; pc_confirmation.style.display = 'block'; var mp = document.querySelector('input[name="mp"]'); mp.value = '0'; } else { form.querySelector('._form-content').style.display = 'inline'; pc_confirmation.style.display = 'none'; } var hideButton = document.getElementById('hideButton'); // Add event listener to the button hideButton.addEventListener('click', function() { var submitButton = document.querySelector('#_form_93_submit'); submitButton.disabled = false; submitButton.classList.remove('processing'); var mp = document.querySelector('input[name="mp"]'); mp.value = '1'; window.location.href = window.location.href; }); const vgoAlias = typeof visitorGlobalObjectAlias === 'undefined' ? 'vgo' : visitorGlobalObjectAlias; var visitorObject = window[vgoAlias]; if (email && typeof visitorObject !== 'undefined') { visitorObject('setEmail', email); visitorObject('update'); } else if (typeof(trackcmp_url) != 'undefined' && trackcmp_url) { // Site tracking URL to use after inline form submission. _load_script(trackcmp_url); } if (typeof window._form_callback !== 'undefined') window._form_callback(id);};window._load_script = function(url, callback, isSubmit) { var head = document.querySelector('head'), script = document.createElement('script'), r = false; var submitButton = document.querySelector('#_form_93_submit'); script.charset = 'utf-8'; script.src = url; if (callback) { script.onload = script.onreadystatechange = function() { if (!r && (!this.readyState || this.readyState == 'complete')) { r = true; callback(); } }; } script.onerror = function() { if (isSubmit) { if (script.src.length > 10000) { _show_error("93", "Sorry, your submission failed. Please shorten your responses and try again."); } else { _show_error("93", "Sorry, your submission failed. Please try again."); } submitButton.disabled = false; submitButton.classList.remove('processing'); } } head.appendChild(script);};(function() { if (window.location.search.search("excludeform") !== -1) return false; var getCookie = function(name) { var match = document.cookie.match(new RegExp('(^|; )' + name + '=([^;]+)')); return match ? match[2] : null; } var setCookie = function(name, value) { var now = new Date(); var time = now.getTime(); var expireTime = time + 1000 * 60 * 60 * 24 * 365; now.setTime(expireTime); document.cookie = name + '=' + value + '; expires=' + now + ';path=/; Secure; SameSite=Lax;'; } var addEvent = function(element, event, func) { if (element.addEventListener) { element.addEventListener(event, func); } else { var oldFunc = element['on' + event]; element['on' + event] = function() { oldFunc.apply(this, arguments); func.apply(this, arguments); }; } } var _removed = false; var form_to_submit = document.getElementById('_form_93_'); var allInputs = form_to_submit.querySelectorAll('input, select, textarea'), tooltips = [], submitted = false; var getUrlParam = function(name) { if (name.toLowerCase() !== 'email') { var params = new URLSearchParams(window.location.search); return params.get(name) || false; } // email is a special case because a plus is valid in the email address var qString = window.location.search; if (!qString) { return false; } var parameters = qString.substr(1).split('&'); for (var i = 0; i < parameters.length; i++) { var parameter = parameters[i].split('='); if (parameter[0].toLowerCase() === 'email') { return parameter[1] === undefined ? true : decodeURIComponent(parameter[1]); } } return false; }; var acctDateFormat = "%m/%d/%Y"; var getNormalizedDate = function(date, acctFormat) { var decodedDate = decodeURIComponent(date); if (acctFormat && acctFormat.match(/(%d|%e).*%m/gi) !== null) { return decodedDate.replace(/(\d{2}).*(\d{2}).*(\d{4})/g, '$3-$2-$1'); } else if (Date.parse(decodedDate)) { var dateObj = new Date(decodedDate); var year = dateObj.getFullYear(); var month = dateObj.getMonth() + 1; var day = dateObj.getDate(); return `${year}-${month < 10 ? `0${month}` : month}-${day < 10 ? `0${day}` : day}`; } return false; }; var getNormalizedTime = function(time) { var hour, minutes; var decodedTime = decodeURIComponent(time); var timeParts = Array.from(decodedTime.matchAll(/(\d{1,2}):(\d{1,2})\W*([AaPp][Mm])?/gm))[0]; if (timeParts[3]) { // 12 hour format var isPM = timeParts[3].toLowerCase() === 'pm'; if (isPM) { hour = parseInt(timeParts[1]) === 12 ? '12' : `${parseInt(timeParts[1]) + 12}`; } else { hour = parseInt(timeParts[1]) === 12 ? '0' : timeParts[1]; } } else { // 24 hour format hour = timeParts[1]; } var normalizedHour = parseInt(hour) < 10 ? `0${parseInt(hour)}` : hour; var minutes = timeParts[2]; return `${normalizedHour}:${minutes}`; }; for (var i = 0; i < allInputs.length; i++) { var regexStr = "field\\[(\\d+)\\]"; var results = new RegExp(regexStr).exec(allInputs[i].name); if (results != undefined) { allInputs[i].dataset.name = allInputs[i].name.match(/\[time\]$/) ? `${window.cfields[results[1]]}_time` : window.cfields[results[1]]; } else { allInputs[i].dataset.name = allInputs[i].name; } var fieldVal = getUrlParam(allInputs[i].dataset.name); if (fieldVal) { if (allInputs[i].dataset.autofill === "false") { continue; } if (allInputs[i].type == "radio" || allInputs[i].type == "checkbox") { if (allInputs[i].value == fieldVal) { allInputs[i].checked = true; } } else if (allInputs[i].type == "date") { allInputs[i].value = getNormalizedDate(fieldVal, acctDateFormat); } else if (allInputs[i].type == "time") { allInputs[i].value = getNormalizedTime(fieldVal); } else { allInputs[i].value = fieldVal; } } } var remove_tooltips = function() { for (var i = 0; i < tooltips.length; i++) { tooltips[i].tip.parentNode.removeChild(tooltips[i].tip); } tooltips = []; }; var remove_tooltip = function(elem) { for (var i = 0; i < tooltips.length; i++) { if (tooltips[i].elem === elem) { tooltips[i].tip.parentNode.removeChild(tooltips[i].tip); tooltips.splice(i, 1); return; } } }; var create_tooltip = function(elem, text) { var tooltip = document.createElement('div'), arrow = document.createElement('div'), inner = document.createElement('div'), new_tooltip = {}; if (elem.type != 'radio' && elem.type != 'checkbox') { tooltip.className = '_error'; arrow.className = '_error-arrow'; inner.className = '_error-inner'; inner.innerHTML = text; tooltip.appendChild(arrow); tooltip.appendChild(inner); elem.parentNode.appendChild(tooltip); } else { tooltip.className = '_error-inner _no_arrow'; tooltip.innerHTML = text; elem.parentNode.insertBefore(tooltip, elem); new_tooltip.no_arrow = true; } new_tooltip.tip = tooltip; new_tooltip.elem = elem; tooltips.push(new_tooltip); return new_tooltip; }; var resize_tooltip = function(tooltip) { var rect = tooltip.elem.getBoundingClientRect(); var doc = document.documentElement, scrollPosition = rect.top - ((window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0)); if (scrollPosition < 40) { tooltip.tip.className = tooltip.tip.className.replace(/ ?(_above|_below) ?/g, '') + ' _below'; } else { tooltip.tip.className = tooltip.tip.className.replace(/ ?(_above|_below) ?/g, '') + ' _above'; } }; var resize_tooltips = function() { if (_removed) return; for (var i = 0; i < tooltips.length; i++) { if (!tooltips[i].no_arrow) resize_tooltip(tooltips[i]); } }; var validate_field = function(elem, remove) { var tooltip = null, value = elem.value, no_error = true; remove ? remove_tooltip(elem) : false; if (elem.type != 'checkbox') elem.className = elem.className.replace(/ ?_has_error ?/g, ''); if (elem.getAttribute('required') !== null) { if (elem.type == 'radio' || (elem.type == 'checkbox' && /any/.test(elem.className))) { var elems = form_to_submit.elements[elem.name]; if (!(elems instanceof NodeList || elems instanceof HTMLCollection) || elems.length <= 1) { no_error = elem.checked; } else { no_error = false; for (var i = 0; i < elems.length; i++) { if (elems[i].checked) no_error = true; } } if (!no_error) { tooltip = create_tooltip(elem, "Please select an option."); } } else if (elem.type =='checkbox') { var elems = form_to_submit.elements[elem.name], found = false, err = []; no_error = true; for (var i = 0; i < elems.length; i++) { if (elems[i].getAttribute('required') === null) continue; if (!found && elems[i] !== elem) return true; found = true; elems[i].className = elems[i].className.replace(/ ?_has_error ?/g, ''); if (!elems[i].checked) { no_error = false; elems[i].className = elems[i].className + ' _has_error'; err.push("Checking %s is required".replace("%s", elems[i].value)); } } if (!no_error) { tooltip = create_tooltip(elem, err.join('
')); } } else if (elem.tagName == 'SELECT') { var selected = true; if (elem.multiple) { selected = false; for (var i = 0; i < elem.options.length; i++) { if (elem.options[i].selected) { selected = true; break; } } } else { for (var i = 0; i < elem.options.length; i++) { if (elem.options[i].selected && (!elem.options[i].value || (elem.options[i].value.match(/\n/g))) ) { selected = false; } } } if (!selected) { elem.className = elem.className + ' _has_error'; no_error = false; tooltip = create_tooltip(elem, "Please select an option."); } } else if (value === undefined || value === null || value === '') { elem.className = elem.className + ' _has_error'; no_error = false; tooltip = create_tooltip(elem, "This field is required."); } } if (no_error && (elem.id == 'field[]' || elem.id == 'ca[11][v]')) { if (elem.className.includes('phone-input-error')) { elem.className = elem.className + ' _has_error'; no_error = false; } } if (no_error && elem.name == 'email') { if (!value.match(/^[\+_a-z0-9-'&=]+(\.[\+_a-z0-9-']+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,})$/i)) { elem.className = elem.className + ' _has_error'; no_error = false; tooltip = create_tooltip(elem, "Enter a valid email address."); } } if (no_error && /date_field/.test(elem.className)) { if (!value.match(/^\d\d\d\d-\d\d-\d\d$/)) { elem.className = elem.className + ' _has_error'; no_error = false; tooltip = create_tooltip(elem, "Enter a valid date."); } } tooltip ? resize_tooltip(tooltip) : false; return no_error; }; var needs_validate = function(el) { if(el.getAttribute('required') !== null){ return true } if(el.name === 'email' && el.value !== ""){ return true } if((el.id == 'field[]' || el.id == 'ca[11][v]') && el.className.includes('phone-input-error')){ return true } return false }; var validate_form = function(e) { var err = form_to_submit.querySelector('._form_error'), no_error = true; if (!submitted) { submitted = true; for (var i = 0, len = allInputs.length; i < len; i++) { var input = allInputs[i]; if (needs_validate(input)) { if (input.type == 'tel') { addEvent(input, 'blur', function() { this.value = this.value.trim(); validate_field(this, true); }); } if (input.type == 'text' || input.type == 'number' || input.type == 'time') { addEvent(input, 'blur', function() { this.value = this.value.trim(); validate_field(this, true); }); addEvent(input, 'input', function() { validate_field(this, true); }); } else if (input.type == 'radio' || input.type == 'checkbox') { (function(el) { var radios = form_to_submit.elements[el.name]; for (var i = 0; i < radios.length; i++) { addEvent(radios[i], 'click', function() { validate_field(el, true); }); } })(input); } else if (input.tagName == 'SELECT') { addEvent(input, 'change', function() { validate_field(this, true); }); } else if (input.type == 'textarea'){ addEvent(input, 'input', function() { validate_field(this, true); }); } } } } remove_tooltips(); for (var i = 0, len = allInputs.length; i < len; i++) { var elem = allInputs[i]; if (needs_validate(elem)) { if (elem.tagName.toLowerCase() !== "select") { elem.value = elem.value.trim(); } validate_field(elem) ? true : no_error = false; } } if (!no_error && e) { e.preventDefault(); } resize_tooltips(); return no_error; }; addEvent(window, 'resize', resize_tooltips); addEvent(window, 'scroll', resize_tooltips); var hidePhoneInputError = function(inputId) { var errorMessage = document.getElementById("error-msg-" + inputId); var input = document.getElementById(inputId); errorMessage.classList.remove("phone-error"); errorMessage.classList.add("phone-error-hidden"); input.classList.remove("phone-input-error"); }; var initializePhoneInput = function(input, defaultCountry) { return window.intlTelInput(input, { utilsScript: "https://unpkg.com/intl-tel-input@17.0.18/build/js/utils.js", autoHideDialCode: false, separateDialCode: true, initialCountry: defaultCountry, preferredCountries: [] }); } var setPhoneInputEventListeners = function(inputId, input, iti) { input.addEventListener('blur', function() { var errorMessage = document.getElementById("error-msg-" + inputId); if (input.value.trim()) { if (iti.isValidNumber()) { iti.setNumber(iti.getNumber()); if (errorMessage.classList.contains("phone-error")){ hidePhoneInputError(inputId); } } else { showPhoneInputError(inputId) } } else { if (errorMessage.classList.contains("phone-error")){ hidePhoneInputError(inputId); } } }); input.addEventListener("countrychange", function() { iti.setNumber(''); }); input.addEventListener("keydown", function(e) { var charCode = (e.which) ? e.which : e.keyCode; if (charCode > 31 && (charCode < 48 || charCode > 57) && charCode !== 8) { e.preventDefault(); } }); }; var showPhoneInputError = function(inputId) { var errorMessage = document.getElementById("error-msg-" + inputId); var input = document.getElementById(inputId); errorMessage.classList.add("phone-error"); errorMessage.classList.remove("phone-error-hidden"); input.classList.add("phone-input-error"); }; var _form_serialize = function(form){if(!form||form.nodeName!=="FORM"){return }var i,j,q=[];for(i=0;i

{ if (key !== 'hideButton') { formData.append(key, value); } //formData.append(key, value); }); let request = { headers: { "Accept": "application/json" }, body: formData, method: "POST" }; let pageUrlParams = new URLSearchParams(window.location.search); if (pageUrlParams.has('t')) { request.headers.Authorization = 'Bearer ' + pageUrlParams.get('t'); } const response = await fetch('https://cambrickyard.activehosted.com/proc.php?jsonp=true', request); return response.json(); } if (formSupportsPost) { submitForm().then((data) => { eval(data.js); }); } else { _load_script('https://cambrickyard.activehosted.com/proc.php?' + serialized + '&jsonp=true', null, true); } } return false; }; addEvent(form_to_submit, 'submit', form_submit);})();

Haunted Mansion Ghosts

Ghost Host

Arguably the most developed character on the attraction who utters the famous “Welcome, foolish mortals” line, the Ghost Host serves as the Haunted Mansion’s narrator. That’s of course in addition to his hanging corpse appearing in the stretching room, arguably the singular most iconic visual in the attraction.

Victor Geist

Victor Geist is the cape and top hat-wearing pianist who played the grand piano located in the Mansion’s grand hall.

Constance

Constance Hatchaway is the murderous bride who inhabits the Haunted Mansion’s attic, wielding her hatchet and waiting for another groom she can marry and then, well, separate their head from their body.

EVERY Ghost In Disney’s Haunted Mansion And Their Story (4)

Ezra Beane

The tallest of the three hitchhiking ghosts, who lives his afterlife as a vagabond.

Professor Phineas Plump

The most rotund of the three Hitchhiking Ghosts, Phineas was a snake oil salesman who “traveled the country hocking snake oil at train depots. He crossed over to the spirit realm while experimenting with a new miracle concoction and still keeps his trusty carpet bag by his side, eager to make another sale.”

Gus

The third and shortest of the three Hitchhiking Ghosts, Gus was a prisoner who “committed no crimes” in life, but was still cursed to wear a ball and chain in death.

EVERY Ghost In Disney’s Haunted Mansion And Their Story (5)

Rolo Rumkin

One of the singing busts who serenades guests with “Grim Grinning Ghosts” in the graveyard, Rolo Rumkin’s name is a tribute to legendary Disney Imagineer Rolly Crump.

Uncle Theodore

Uncle Theodore is another of the busts in the Haunted Mansion graveyard, with vocals and performance provided by Thurl Ravenscroft. His bust is notably the only broken one of the group, a story choice that developed as a way to fix a technical issue with the footage of Ravesncroft.

Cousin Algernon

Another of the singing busts, Cousin Algernon is recognizable as he’s the only of the busts to be wearing a hat.

Ned Nub

The fourth singing bust, Ned Nub’s vocal and projected acting performance is provided by Jay Meyer.

Phineas Pock

The fifth of the singing busts, Pock is notable for having a tombstone that reads “Here Lies Phineas Pock. Laid to Rest Beneath this Rock” outside the Disneyland version of the attraction. A character of the same name appeared on a Haunted Mansion radio ad voiced by Paul Frees.

EVERY Ghost In Disney’s Haunted Mansion And Their Story (6)

Hatbox Ghost

The iconic Hatbox Ghost was long been an urban legend amongst Disney fans, as the original animatronic was removed from the Mansion’s attic scene very shortly after opening. After decades of rumor, a new version of the figure was added back into the Disneyland version of the attraction in 2015. A backstory for the character has never been confirmed, though many speculate that he is either one of Constance’s victims or her accomplice. Given the casting of Jared Leto in the upcoming film, it’s likely that the character will be getting a backstory pretty soon.

Madame Leota

Madame Leota – AKA the floating head in the crystal ball — is one of the most recognizable and merchandised Haunted Mansion characters. Leota has had several backstories, with the Disneyland version having been a medium who performed seances, brewed potions, and cast magic spells while the Walt Disney World version presents her as a witch who served the infamous Salem Witch Trials. In addition, the Memento Mori gift shop is themed to have been her home during corporeal life.

Graves/Busts in the Haunted Mansion Cemetery

Captain Culpepper Clyne

Captain Clyne is a sea captain whose tub-shaped crypt sits outside the Walt Disney World version of Haunted Mansion, with an inscription that proclaims he “braved the seas and all her wrath, but drowned on land while taking a bath.” The character is loosely based on the painting of The Mariner that has long hung in the Mansion, which itself was based loosely on the character of Captain Gore, a holdover from Ken Anderson’s original blue sky version of the attraction known as Bloodmere Manor.

EVERY Ghost In Disney’s Haunted Mansion And Their Story (7)

Master Gracey

Master Gracey, named after Imagineer Yale Gracey, is one of the best known names amongst Haunted Mansion characters thanks to a tombstone outside the attraction which reads “Master Gracey laid to rest. No mourning please at his request.” While fan speculation — and the 2003 film — name Gracey as the master of the house, it’s never been canonically established in the attraction.

Uncle Jacob

The patriarch of the Dread family, whose poisoning at the hands of Bertie led to the deaths of the whole family. His epitaph reads, “Greed was the poison he had swallowed. He went first, the others followed.”

Bertie

Bertie Dread is one of the members of the Dread family whose tombstones are located in the crypts outside the Magic Kingdom Mansion. Big game hunter Bertie was shot to death by Florence Dread in retaliation for his use of venom from his prized snake — which is featured on his tombstone — to poison her husband Jacob Dread.

EVERY Ghost In Disney’s Haunted Mansion And Their Story (8)

Aunt Florence

Florence Dread, whose epitaph read that she “Never did a dishonorable deed, yet found face down in canary seed” was the matriarch of the Dread family. She murdered Bertie in retaliation for his murder of her husband, Jacob. Florence herself was killed by the young twins Wellington and Forsythia Dread .

The Twins

Wellington and Forsythia Dread are the young twins of the Dread family who murdered Florence Dread in order to steal her inheritance. However, they themselves would be murdered by Cousin Maude.

Cousin Maude

The final surviving member of the Dread family, Cousin Maude murdered the twins with a hammer in order to acquire the inheritance of every one of her deceased family members. She herself would perish when her home burned down — due to the matches she used as hair-pins. Maude is notable for being the only Dread family member to appear inside the Mansion, as a painting of her surrounded by flames is seen in Phineas’s bag during the Hitchhiking Ghost scene.

Francis Xavier

The epitaph for Francis Xavier reads, “Requiescat Francis Xavier. No time off for good behavior “R.I.P.” which is a tribute to Xavier “X” Atencio who wrote the script for the Haunted Mansion, and the lyrics for “Grim Grinning Ghosts.”

A Complete Guide To Haunted Mansion Funko Pops

Join the AllEars.net Newsletterto get the free list of our ranking for Magic Kingdom rides! Click here to get started!

EVERY Ghost In Disney’s Haunted Mansion And Their Story (9)

The Ultimate Guide to Haunted Mansion Loungefly Bags

So, which of these Haunted Mansion spirits is your favorite? Let us known the comments below.

EVERY Ghost In Disney’s Haunted Mansion And Their Story (2025)
Top Articles
Latest Posts
Recommended Articles
Article information

Author: Arline Emard IV

Last Updated:

Views: 6554

Rating: 4.1 / 5 (72 voted)

Reviews: 95% of readers found this page helpful

Author information

Name: Arline Emard IV

Birthday: 1996-07-10

Address: 8912 Hintz Shore, West Louie, AZ 69363-0747

Phone: +13454700762376

Job: Administration Technician

Hobby: Paintball, Horseback riding, Cycling, Running, Macrame, Playing musical instruments, Soapmaking

Introduction: My name is Arline Emard IV, I am a cheerful, gorgeous, colorful, joyous, excited, super, inquisitive person who loves writing and wants to share my knowledge and understanding with you.