Out of Stock

KA-15S Satin Mahogany Soprano Ukulele

Model: KA-15S SKU: KA15S2006

$69

This product is temporarily unavailable online.

Notify Me When Available

With so many ukulele options out there, how does one know what to choose? Kala, known for great quality, sound and affordability, has the best entry-level ukulele on the market, the KA-15S. This ukulele is an entry level staple for new players and a great addition for seasoned players looking to add an affordable, high-quality, attractive soprano ukulele to their collection. Anyone looking to get their money’s worth in an instrument should start with the KA-15S.

Bag and Case Information

Fits ALL Kala SOPRANO sized bags and cases.

Specs
Size: Soprano
Top: Mahogany
Back & Sides: Mahogany
Binding: N/A
Neck: Mahogany
Finish: Satin
Fingerboard: Rosewood
Headstock: Standard
Nut & Saddle: Graph Tech NuBone®
Strings: Aquila Super Nylgut®
Electronics: N/A
Strap Button: Black x1
Measurements

Scale Length: 13.625 inches, Overall Instrument Length: 21.062 inches, Body Length: 9.5 inches, Number of Frets: 12, Width at Upper Bout: 5.187 inches, Width at Lower Bout: 7.0 inches, Width at Waist: 4.467 inches, Body Depth: 2.367 inches, Fingerboard Width at Nut: 1.375 inches, Fingerboard width at neck/body joint: 1.672 inches

See More From This Collection
4.8
Rated 4.8 out of 5 stars
Based on 12 reviews
Total 5 star reviews: 10 Total 4 star reviews: 2 Total 3 star reviews: 0 Total 2 star reviews: 0 Total 1 star reviews: 0
100%would recommend this product
12 reviews
  • SS Profile picture for Sol S.
    Sol S.
    I recommend this product
    Rated 4 out of 5 stars
    1 month ago
    My very first Uke

    I’ve had this for years, and it is just heads and tails above other affordable sopranos I’ve played. It’s just fantastic.

  • M Profile picture for Mary
    Mary
    I recommend this product
    Rated 5 out of 5 stars
    11 months ago
    Five Stars is not Enough

    I bought mine secondhand. I wanted to learn to play the ukulele on a shoestring. As this is a beginner's model, I wasn't expecting much. But it has fantastic sound: beautiful tone, plus AMAZING volume and sustain for a soprano. This ukulele is no shrinking violet, it's LOUD. It's also sturdy and well-constructed, with nice mahogany and good tuners. I have several ukuleles now, but I play this one often. If you want a great beginner's ukulele that punches well above it's weight, this is the one. I highly recommend it. If you're sitting on the fence, just buy it. You will be pleasantly surprised by the sound, quality and value.

  • TF
    Teresa F.
    Verified Buyer
    I recommend this product
    Rated 5 out of 5 stars
    2 years ago
    New Ukuleles

    I love the quality of this model. It takes a few weeks of playing and tuning but then they hold their tune very well.

  • JL
    Jose L.
    Verified Buyer
    I recommend this product
    Rated 4 out of 5 stars
    2 years ago
    Materials

    The materials with which the Ukulele is made are extraordinary, I love the texture, the color and the sound. The strings don't hurt my fingers like the other brands.

  • L
    Linda
    I recommend this product
    Rated 5 out of 5 stars
    3 years ago
    5 Stars

    It’s exactly what I’m looking for in a beginner uke.

''
, * OR add it as a snippet and render it on checkout pages. * For Shopify Plus: add to checkout.liquid as well. */ (function () { 'use strict'; // --------------------------------------------------------------------------- // 1. BLOCK KNOWN EXTENSION postMessage CHANNELS // Extensions communicate via window.postMessage — intercept and drop theirs. // --------------------------------------------------------------------------- const BLOCKED_MESSAGE_PATTERNS = [ /honey/i, /joinhoney/i, /capital.?one.?shopping/i, /wikibuy/i, /retailmenot/i, /coupon.?cabi/i, /piggy/i, /karma/i, /rakuten/i, /ibotta/i, /cently/i, /coupert/i, /avast/i, /priceblink/i, /dealnews/i, /savings\.com/i, /promo\.com/i, ]; const _originalAddEventListener = window.addEventListener.bind(window); const _originalPostMessage = window.postMessage.bind(window); // Intercept incoming postMessages from extensions window.addEventListener = function (type, listener, options) { if (type === 'message') { const wrappedListener = function (event) { try { const data = typeof event.data === 'string' ? event.data : JSON.stringify(event.data || ''); if (BLOCKED_MESSAGE_PATTERNS.some((p) => p.test(data))) { console.debug('[CouponBlocker] Blocked postMessage from coupon extension.'); return; // Drop the message } } catch (_) {} listener.call(this, event); }; return _originalAddEventListener(type, wrappedListener, options); } return _originalAddEventListener(type, listener, options); }; // --------------------------------------------------------------------------- // 2. BLOCK EXTENSION-INJECTED DOM ELEMENTS // Extensions inject buttons, iframes, and overlays — remove them on sight. // --------------------------------------------------------------------------- const BLOCKED_SELECTORS = [ // Honey '[id*="honey"]', '[class*="honey"]', '[data-honey]', 'iframe[src*="honey"]', // Capital One Shopping / Wikibuy '[id*="wikibuy"]', '[class*="wikibuy"]', '[id*="capitalone"]', '[class*="capital-one"]', 'iframe[src*="wikibuy"]', 'iframe[src*="capitalone"]', // RetailMeNot / Coupons.com '[id*="retailmenot"]', '[class*="retailmenot"]', '[id*="rmn-"]', // Rakuten '[id*="rakuten"]', '[class*="rakuten"]', 'iframe[src*="rakuten"]', // Piggy '[id*="piggy"]', '[class*="piggy"]', // Karma '[id*="karma-"]', '[class*="karma-extension"]', // Coupert '[id*="coupert"]', '[class*="coupert"]', // Generic patterns 'iframe[src*="coupon"]', '[class*="ext-coupon"]', '[id*="ext-coupon"]', ]; function removeBlockedElements() { BLOCKED_SELECTORS.forEach((selector) => { document.querySelectorAll(selector).forEach((el) => { console.debug('[CouponBlocker] Removed injected element:', el); el.remove(); }); }); } // Run immediately and watch for future injections removeBlockedElements(); const domObserver = new MutationObserver(() => { removeBlockedElements(); }); domObserver.observe(document.documentElement, { childList: true, subtree: true, }); // --------------------------------------------------------------------------- // 3. GUARD THE DISCOUNT INPUT FIELD // Prevent extensions from programmatically filling and submitting the // discount code field. Only allow real user input (keyboard events). // --------------------------------------------------------------------------- const DISCOUNT_SELECTORS = [ 'input[name="discount"]', 'input[placeholder*="discount" i]', 'input[placeholder*="coupon" i]', 'input[placeholder*="promo" i]', 'input[id*="discount" i]', 'input[id*="coupon" i]', '#checkout_reduction_code', '#discount-code', ]; function guardDiscountInput(input) { if (input._couponGuarded) return; input._couponGuarded = true; let lastRealValue = input.value; let isHumanTyping = false; // Track genuine keyboard interaction input.addEventListener('keydown', () => { isHumanTyping = true; }, true); input.addEventListener('keyup', () => { isHumanTyping = false; }, true); // Use a native setter override to catch programmatic .value = '...' changes const nativeInputDescriptor = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value'); Object.defineProperty(input, 'value', { get: function () { return nativeInputDescriptor.get.call(this); }, set: function (val) { if (!isHumanTyping && val !== lastRealValue) { console.debug('[CouponBlocker] Blocked programmatic discount field change.'); return; // Silently ignore extension-driven value changes } lastRealValue = val; nativeInputDescriptor.set.call(this, val); }, configurable: true, }); // Block programmatic form submission triggered by extensions const form = input.closest('form'); if (form) { form.addEventListener('submit', function (e) { if (!isHumanTyping && input.value && input.value !== lastRealValue) { console.debug('[CouponBlocker] Blocked programmatic form submission.'); e.preventDefault(); e.stopImmediatePropagation(); } }, true); } } function guardAllDiscountInputs() { DISCOUNT_SELECTORS.forEach((sel) => { document.querySelectorAll(sel).forEach(guardDiscountInput); }); } // Guard inputs now and watch for dynamically rendered checkout fields guardAllDiscountInputs(); const inputObserver = new MutationObserver(() => { guardAllDiscountInputs(); }); inputObserver.observe(document.documentElement, { childList: true, subtree: true, }); console.log('[CouponBlocker] Active — coupon extensions are blocked on this page.'); })();