Skip to contentStairlift Cost in Cleveland & Northeast Ohio
Most stairlift companies won’t tell you a price until a salesperson is sitting in your living room. We’d rather just tell you. Here’s what stairlifts actually run for homeowners from Cleveland, Shaker Heights and Parma out to Mentor, Painesville and the rest of Lake, Geauga, Ashtabula and Cuyahoga counties, and what moves the number up or down.
What a Straight Stairlift Costs
Our 2024 cost for a new, standard indoor Rave 2 straight stairlift installation averaged around $3,400. Some came in more, some less, depending on the options a homeowner picked and the quirks of their stairway.
A standard straight installation means:
- Total load under 350 lbs. (for example, a 330 lb. rider plus a bag of groceries)
- Every step has the same tread depth and riser height
- Wooden steps (carpet over them is fine)
- A run of 15 feet (180″) or less
- No doors at the top or bottom of the stairs
- A grounded 115V, 15-amp outlet at the top or bottom
If your stairs fit that list, we can usually give you a solid ballpark over the phone.
What a Curved Stairlift Costs
Curved stair lifts are custom built to fit your stairway, so they’re harder to price over the phone. Some basic curved installations start below $11,000. Text us a few photos of your stairs and we’ll give you an idea of what you’re looking at.
A standard curved installation covers everything on the straight list, plus:
- Rider capacity up to 275 lbs.
- One 90-degree bend
- A total track run of 16 feet or less
What Changes the Price
- Longer runs or a heavier rider (the Infinity can be upgraded from 275 to 350 lbs.)
- Extra bends or landings on a curved staircase
- How the rail ends at the top and bottom: an extended overrun, a nose drop, or a 90 or 180-degree bend so the rail clears a doorway or hallway
- A power swivel in place of the manual swivel lever
- Doors, uneven steps or non-wood stairs, or no outlet nearby
- Narrow stairways. We recommend at least 29″ between wall and railing. Taller riders may need more room so their knees clear the far wall.
Why Our Prices Run Lower
Big-name stairlift brands pay for TV ads, showrooms and commissioned salespeople, and then hand the install to a third-party subcontractor. All of that ends up in your price.
Ameriglide buys lifts in volume from major manufacturers and sells them factory-direct. Our Rave 2, for example, is built in the USA by Harmar, the same company behind the Harmar SL600 Pinnacle. And we’re a local family business: the same person who quotes your job installs it and handles any service afterward. More on that on our Why Choose Us page.
Get a Real Number Without a Home Visit
Call 440-596-3070 and you’ll talk to the owner, not a call center. For most straight stairways we can get you a quote in less than five minutes. No forms, no in-home sales visit. For curved stairs, text us photos and we’ll take it from there.
Help Paying for a Stairlift
- Medicare won’t cover a stairlift. It’s treated as a home remodeling expense. If you itemize, ask your tax preparer.
- Veterans who served during Korea, Vietnam, Iraq, Afghanistan or other conflicts, not necessarily in combat, should contact the VA about funding. The benefit generally extends to spouses.
- Local programs: Lakewood, Shaker Heights and the Geauga County Department on Aging have offered financial help to qualifying seniors for accessibility improvements.
- Cuyahoga County homeowners may qualify for a low-interest loan through the Housing Enhancement Loan Program, available at many Key and Huntington branches.
Used and Refurbished Stairlifts
We occasionally buy back and refurbish lightly used Rave 2 and Harmar stairlifts. When one’s in stock, it can save you a good amount. Call 440-596-3070 and ask what we have.
Common Questions About Stairlift Cost
document.addEventListener('click', function (e) {
// Only care about Elementor button anchors
var anchor = e.target.closest('a.elementor-button-link');
if (!anchor) return;// Must be inside a button widget that has data-action
var widget = anchor.closest('.elementor-widget-button[data-action]');
if (!widget) return;// If the anchor has a real link, let it behave normally
var href = anchor.getAttribute('href');
if (href && href !== '#') return;// Find the nearest Swiper this button lives in
var host = widget.closest('.swiper, .swiper-container');
var swiper = host && host.swiper;
if (!swiper) return;e.preventDefault();var action = (widget.getAttribute('data-action') || '').toLowerCase();
if (action === 'next') {
swiper.slideNext();
} else if (action === 'prev') {
swiper.slidePrev();
}
});
function openNestedAccordionByHash() {
const hash = window.location.hash.slice(1);
if (!hash) return;const details = document.getElementById(hash);
if (!details || details.tagName.toLowerCase() !== 'details') return;// Get parent accordion (the container that holds all <details>)
const accordion = details.closest('.e-n-accordion');
if (!accordion) return;// Whether the widget is configured for one-open-at-a-time
const widget = details.closest('[data-settings]');
let onlyOneOpen = false;
if (widget) {
try {
const settings = JSON.parse(widget.getAttribute('data-settings'));
onlyOneOpen = settings.max_items_expended === "one";
} catch (e) {}
}// If we're in one-open-at-a-time mode:
if (onlyOneOpen) {
const siblings = accordion.querySelectorAll('details.e-n-accordion-item');
siblings.forEach(item => {
if (item !== details) item.open = false;
});
}// Open the requested item
details.open = true;// Scroll to it
details.scrollIntoView({ behavior: 'smooth', block: 'start' });
}document.addEventListener('DOMContentLoaded', openNestedAccordionByHash);
window.addEventListener('hashchange', openNestedAccordionByHash);document.addEventListener('click', function (e) {
const link = e.target.closest('a[href^="#"]');
if (!link) return;
setTimeout(openNestedAccordionByHash, 0);
});
/**
* Toggle Collapse
*
* Wires up Elementor buttons to show/hide a target element on mobile.
*
* Setup:
* 1. Add CSS class "toggle-btn" to the Elementor button widget under Advanced → CSS Classes
* 2. Add the following custom attributes to the button under Advanced → Attributes:
* data-toggle-target | your-target-element-id
* data-show-text | Show Details
* data-hide-text | Hide Details
* 3. Add a CSS ID to the element you want to toggle under Advanced → CSS ID
*
* Notes:
* - Toggle only takes effect on mobile (max-width: 767px)
* - On desktop the target element is always visible regardless of toggle state
* - data-show-text and data-hide-text are optional, defaulting to "Show" / "Hide"
*/
document.addEventListener('DOMContentLoaded', function () {
document.querySelectorAll('.toggle-btn .elementor-button').forEach(function (btn) {
var targetSelector = btn.getAttribute('data-toggle-target');
var showText = btn.getAttribute('data-show-text') || btn.querySelector('.elementor-button-text').textContent;
var hideText = btn.getAttribute('data-hide-text') || 'View Less';
var target = document.querySelectorAll(targetSelector);btn.addEventListener('click', function (e) {
e.preventDefault();
var isHidden = target.forEach(function (el) {
el.classList.toggle('toggle-collapsed');
});
btn.querySelector('.elementor-button-text').textContent = isHidden ? showText : hideText;
});
});
});
( () => {
const lazyloadRunObserver = () => {
const lazyloadBackgrounds = document.querySelectorAll( `.e-con.e-parent:not(.e-lazyloaded)` );
const lazyloadBackgroundObserver = new IntersectionObserver( ( entries ) => {
entries.forEach( ( entry ) => {
if ( entry.isIntersecting ) {
let lazyloadBackground = entry.target;
if( lazyloadBackground ) {
lazyloadBackground.classList.add( 'e-lazyloaded' );
}
lazyloadBackgroundObserver.unobserve( entry.target );
}
});
}, { rootMargin: '200px 0px 200px 0px' } );
lazyloadBackgrounds.forEach( ( lazyloadBackground ) => {
lazyloadBackgroundObserver.observe( lazyloadBackground );
} );
};
const events = [
'DOMContentLoaded',
'elementor/lazyload/observe',
];
events.forEach( ( event ) => {
document.addEventListener( event, lazyloadRunObserver );
} );
} )();