Menu Zavřít

České startupy na vlně růstu. Zaměstnávají už 160 tisíc lidí, jejichž mzdy jsou oproti průměru o desetitisíce vyšší

3. 4. 2025
Doba čtení: 3 minuty
Zakladatel StartupJobs Filip Mikschik
Autor: StartupJobs
  • České startupové prostředí v porovnání s ostatními segmenty tuzemské ekonomiky rychle roste
  • Počet nadějných mladých společností se mezi lety 2018 a 2023 navýšil o 50 procent na celkem 4,2 tisíce firem
  • V roce 2023 ve startupech pracovalo přibližně 160 tisíc lidí. Jejich mzdy byly v průměru o 23 tisíc korun vyšší než celostátní průměr

Ačkoliv Česko možná na první pohled nepůsobí jako startupová velmoc, ekonomická data ukazují, že začínajícím firmám se u nás daří. A to čím dál tím lépe. Potvrzují to i závěry nové zprávy Smart Market Report 2025, za níž stojí kariérní portál StartupJobs ve spolupráci s J&T Bankou a soutěží Nápad roku.

Asi tím nejdůležitějším zjištěním analýzy je skutečnost, že mezi lety 2018 a 2023 v Česku vzrostl počet startupů o polovinu, a to z 2,8 na 4,2 tisíce firem. Zároveň se v tomto segmentu zvýšil i počet zaměstnanců, jichž je nyní na 160 tisíc, respektive o 45 procent víc než na začátku sledovaného období. 

Outstream Placeholder

Navzdory výše řečenému nicméně zůstává celý segment i nadále doménou především menších firem, jelikož téměř dvě třetiny všech startupů mají méně než 10 pracovníků. „Český startupový trh je významný, i když si to mnoho lidí neuvědomuje. Dává práci statisícům lidí, generuje nadprůměrné příjmy a má přímý dopad na veřejné rozpočty. Smart Market Report pomáhá tento dopad kvantifikovat a zasadit do kontextu celé ekonomiky,“ prohlásil Filip Mikschik, zakladatel StartupJobs.

Mzdy startupů dosáhly 130 miliard korun

Velkým lákadlem pro práci ve startupech je pro mnoho lidí především atraktivní mzda, která převyšuje tuzemský průměr o 23 tisíc korun a medián o téměř 30 tisíc. Zatímco celorepublikově se průměrný výdělek aktuálně pohybuje kolem 43tisícové hranice, u těchto rychle rostoucích a obvykle i technologicky vyspělých firem si mohou pracovníci přijít až takřka na 66 tisíc korun. Na takové peníze přitom v Česku nedosáhne devět z deseti zaměstnanců.

Díky štědrému ohodnocení startupy v roce 2023 vyplatily svým lidem přibližně 130 miliard korun, což představuje více než pět procent všech mezd v české ekonomice. Začínající firmy se zároveň podílely přibližně šesti procenty na odvodech sociálního a zdravotního pojištění a jejich zaměstnanci tvořili až devět procent výběru daně z příjmů fyzických osob.

Největším bolehlavem českých startupů jsou zaměstnanecké akcie. Zbytečně jedeme se zataženou ruční brzdou, říká Pavlečka z Czech Founders VC
Přečtěte si také:

Největším bolehlavem českých startupů jsou zaměstnanecké akcie. Zbytečně jedeme se zataženou ruční brzdou, říká Pavlečka z Czech Founders VC

„Podle našich odhadů se startupy podílejí zhruba pěti procenty na celkovém hrubém domácím produktu České republiky. Jejich význam tedy překračuje to, jak jsou vnímány veřejností – už dávno totiž nejde jen o technologické garážové firmy,“ uvedl hlavní ekonom J&T Banky Petr Sklenář.

Nutno podotknout, že na zdejším trhu se nevedou dobře jen domácí startupy, nýbrž i zahraniční, jež navíc oproti těm českým bývají podstatně větší. Zatímco průměrný tuzemský startup zaměstnává asi třicet osm lidí, firma s mateřskou společností v cizině jich obvykle má na dvaaosmdesát. Nejčastěji přitom tyto matky sídlí ve Velké Británii, Nizozemsku, Německu a ve Spojených státech.

Investice výrazně klesly, důvěra investorů však zůstává

Ačkoliv z hlediska většiny údajů byl rok 2023 pro české začínající společnosti velmi úspěšný, je nutné zmínit, že zároveň došlo k výraznému poklesu investiční aktivity. V tuzemském startupovém prostředí se totiž předloni uskutečnilo „pouhých“ 97 investičních transakcí v celkové hodnotě 5,3 miliardy korun, což představuje snížení o 85 procent oproti rekordnímu roku 2022.

CIF25

Podle odborníků za to může především absence velkých investičních kol a celkový globální útlum investiční aktivity. „Pokles venture kapitálových investic ve světě v roce 2023 se promítl rovněž do českého prostředí, nicméně startupům se i v těchto zhoršených podmínkách podařilo získat kapitál. To svědčí o jejich odolnosti a důvěře investorů v jejich dlouhodobý potenciál,“ vysvětlil Martin Kešner, zakladatel soutěže Nápad roku.

České startupy brzdí administrativa i vysoké daně, shodují se lidé z oboru. Inspiraci je třeba hledat v Estonsku či Dánsku
Přečtěte si také:

České startupy brzdí administrativa i vysoké daně, shodují se lidé z oboru. Inspiraci je třeba hledat v Estonsku či Dánsku

Podle autorů zprávy je každopádně pro zachování prosperity českých startupů nutné, aby se stát tomuto specifickému sektoru o něco více přizpůsobil. Týká se to především různých regulací, a to třeba v oblasti pracovního trhu, daňového systému nebo širších legislativních rámců. Jinými slovy, aby mohly startupy dále úspěšně růst, měl by stát alespoň částečně upravit některá dosud platná pravidla a politiky.

  • Našli jste v článku chybu?
'; document.getElementById('outstream-iframe').onload = function () { setupIframe(); } replayScreen = document.getElementById('iinfoOutstreamReplay'); iinfoOutstreamPosition = document.getElementById('iinfoOutstreamPosition'); outstreamContainer = document.getElementsByClassName('outstream-container')[0]; setupReplayScreen(); } function setupIframe() { outstreamDocument = document.getElementById('outstream-iframe').contentWindow.document; let el = outstreamDocument.createElement('style'); outstreamDocument.head.appendChild(el); el.innerText = "#adContainer>div:nth-of-type(1),#adContainer>div:nth-of-type(1) > iframe { width: 99% !important;height: 99% !important;max-width: 100%;}#videoContent,body{ width:100vw;height:100vh}body{ font-family:'Helvetica Neue',Arial,sans-serif}#videoContent{ overflow:hidden;background:#000}#adMuteBtn{ width:35px;height:35px;border:0;background:0 0;display:none;position:absolute;fill:rgba(230,230,230,1);bottom:-5px;right:25px}"; videoContent = outstreamDocument.getElementById('contentElement'); videoContent.style.display = 'none'; videoContent.volume = 1; videoContent.muted = false; if ( location.href.indexOf('rejstriky.finance.cz') !== -1 || location.href.indexOf('finance-rejstrik') !== -1 || location.href.indexOf('firmy.euro.cz') !== -1 || location.href.indexOf('euro-rejstrik') !== -1 || location.href.indexOf('/rejstrik/') !== -1 || location.href.indexOf('/rejstrik-firem/') !== -1) { outstreamDirectPlayed = true; soundAllowed = true; iinfoVastUrlIndex = 0; } if (!outstreamDirectPlayed) { console.log('OUTSTREAM direct'); setUpIMA(true); } else { if (soundAllowed) { const playPromise = videoContent.play(); if (playPromise !== undefined) { playPromise.then(function () { console.log('OUTSTREAM sound allowed'); setUpIMA(false); }).catch(function () { console.log('OUTSTREAM sound forbidden'); renderBanner(); }); } } else { renderBanner(); } } } function getWrapper() { let articleWrapper = document.querySelector('.rs-outstream-placeholder'); // Outstream Placeholder from RedSys manipulation if (articleWrapper && articleWrapper.style.display !== 'block') { articleWrapper.innerHTML = ""; articleWrapper.style.display = 'block'; } // Don't render OutStream on homepages if (articleWrapper === null) { if (document.querySelector('body.p-index')) { return null; } } if (articleWrapper === null) { articleWrapper = document.getElementById('iinfo-outstream'); } if (articleWrapper === null) { articleWrapper = document.querySelector('.layout-main__content .detail__article p:nth-of-type(6)'); } if (articleWrapper === null) { // Euro, Autobible, Zdravi articleWrapper = document.querySelector('.o-article .o-article__text p:nth-of-type(6)'); } if (articleWrapper === null) { articleWrapper = document.getElementById('sidebar'); } if (!articleWrapper) { console.error("Outstream wrapper of article was not found."); } return articleWrapper; } function setupDimensions() { outstreamWidth = Math.min(iinfoOutstreamPosition.offsetWidth, 480); outstreamHeight = Math.min(iinfoOutstreamPosition.offsetHeight, 320); } /** * Sets up IMA ad display container, ads loader, and makes an ad request. */ function setUpIMA(direct) { google.ima.settings.setDisableCustomPlaybackForIOS10Plus(true); google.ima.settings.setLocale('cs'); google.ima.settings.setNumRedirects(10); // Create the ad display container. createAdDisplayContainer(); // Create ads loader. adsLoader = new google.ima.AdsLoader(adDisplayContainer); // Listen and respond to ads loaded and error events. adsLoader.addEventListener( google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, onAdsManagerLoaded, false); adsLoader.addEventListener( google.ima.AdErrorEvent.Type.AD_ERROR, onAdError, false); // An event listener to tell the SDK that our content video // is completed so the SDK can play any post-roll ads. const contentEndedListener = function () { adsLoader.contentComplete(); }; videoContent.onended = contentEndedListener; // Request video ads. const adsRequest = new google.ima.AdsRequest(); if (direct) { adsRequest.adTagUrl = directVast; console.log('Outstream DIRECT CAMPAING advert: ' + directVast); videoContent.muted = true; videoContent.volume = 0; outstreamDirectPlayed = true; } else { adsRequest.adTagUrl = iinfoVastUrls[iinfoVastUrlIndex]; console.log('Outstream advert: ' + iinfoVastUrls[iinfoVastUrlIndex]); videoContent.muted = false; videoContent.volume = 1; } // Specify the linear and nonlinear slot sizes. This helps the SDK to // select the correct creative if multiple are returned. // adsRequest.linearAdSlotWidth = outstreamWidth; // adsRequest.linearAdSlotHeight = outstreamHeight; adsRequest.nonLinearAdSlotWidth = 0; adsRequest.nonLinearAdSlotHeight = 0; adsLoader.requestAds(adsRequest); } function setupReplayScreen() { replayScreen.addEventListener('click', function () { iinfoOutstreamPosition.remove(); iinfoVastUrlIndex = 0; outstreamInit(); }); } /** * Sets the 'adContainer' div as the IMA ad display container. */ function createAdDisplayContainer() { // We assume the adContainer is the DOM id of the element that will house // the ads. outstreamDocument.getElementById('videoContent').style.display = 'none'; adDisplayContainer = new google.ima.AdDisplayContainer( outstreamDocument.getElementById('adContainer'), videoContent); } function unmuteAdvert() { adVolume = !adVolume; if (adVolume) { adsManager.setVolume(0.3); outstreamDocument.getElementById('adMuteBtn').innerHTML = ''; } else { adsManager.setVolume(0); outstreamDocument.getElementById('adMuteBtn').innerHTML = ''; } } /** * Loads the video content and initializes IMA ad playback. */ function playAds() { // Initialize the container. Must be done through a user action on mobile // devices. videoContent.load(); adDisplayContainer.initialize(); // setupDimensions(); try { // Initialize the ads manager. Ad rules playlist will start at this time. adsManager.init(1920, 1080, google.ima.ViewMode.NORMAL); // Call play to start showing the ad. Single video and overlay ads will // start at this time; the call will be ignored for ad rules. adsManager.start(); // window.addEventListener('resize', function (event) { // if (adsManager) { // setupDimensions(); // adsManager.resize(outstreamWidth, outstreamHeight, google.ima.ViewMode.NORMAL); // } // }); } catch (adError) { // An error may be thrown if there was a problem with the VAST response. // videoContent.play(); } } /** * Handles the ad manager loading and sets ad event listeners. * @param { !google.ima.AdsManagerLoadedEvent } adsManagerLoadedEvent */ function onAdsManagerLoaded(adsManagerLoadedEvent) { // Get the ads manager. const adsRenderingSettings = new google.ima.AdsRenderingSettings(); adsRenderingSettings.restoreCustomPlaybackStateOnAdBreakComplete = true; adsRenderingSettings.loadVideoTimeout = 12000; // videoContent should be set to the content video element. adsManager = adsManagerLoadedEvent.getAdsManager(videoContent, adsRenderingSettings); // Add listeners to the required events. adsManager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, onAdError); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED, onContentPauseRequested); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED, onContentResumeRequested); adsManager.addEventListener( google.ima.AdEvent.Type.ALL_ADS_COMPLETED, onAdEvent); // Listen to any additional events, if necessary. adsManager.addEventListener(google.ima.AdEvent.Type.LOADED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.STARTED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.COMPLETE, onAdEvent); playAds(); } /** * Handles actions taken in response to ad events. * @param { !google.ima.AdEvent } adEvent */ function onAdEvent(adEvent) { // Retrieve the ad from the event. Some events (for example, // ALL_ADS_COMPLETED) don't have ad object associated. const ad = adEvent.getAd(); console.log('Outstream event: ' + adEvent.type); switch (adEvent.type) { case google.ima.AdEvent.Type.LOADED: // This is the first event sent for an ad - it is possible to // determine whether the ad is a video ad or an overlay. if (!ad.isLinear()) { // Position AdDisplayContainer correctly for overlay. // Use ad.width and ad.height. videoContent.play(); } outstreamDocument.getElementById('adContainer').style.width = '100%'; outstreamDocument.getElementById('adContainer').style.maxWidth = '640px'; outstreamDocument.getElementById('adContainer').style.height = '360px'; break; case google.ima.AdEvent.Type.STARTED: window.addEventListener('scroll', onActiveView); // This event indicates the ad has started - the video player // can adjust the UI, for example display a pause button and // remaining time. if (ad.isLinear()) { // For a linear ad, a timer can be started to poll for // the remaining time. intervalTimer = setInterval( function () { // Example: const remainingTime = adsManager.getRemainingTime(); // adsManager.pause(); }, 300); // every 300ms } outstreamDocument.getElementById('adMuteBtn').style.display = 'block'; break; case google.ima.AdEvent.Type.ALL_ADS_COMPLETED: if (ad.isLinear()) { clearInterval(intervalTimer); } if (outstreamLastError === 303) { if (isBanner) { renderBanner(); } else { replayScreen.style.display = 'flex'; } } break; case google.ima.AdEvent.Type.COMPLETE: // This event indicates the ad has finished - the video player // can perform appropriate UI actions, such as removing the timer for // remaining time detection. if (ad.isLinear()) { clearInterval(intervalTimer); } if (isBanner) { renderBanner(); } else { replayScreen.style.display = 'flex'; } break; } } /** * Handles ad errors. * @param { !google.ima.AdErrorEvent } adErrorEvent */ function onAdError(adErrorEvent) { // Handle the error logging. console.log(adErrorEvent.getError()); outstreamLastError = adErrorEvent.getError().getErrorCode(); if (!loadNext()) { renderBanner(); } } function renderBanner() { if (isBanner) { console.log('Outstream: Render Banner'); iinfoOutstreamPosition.innerHTML = ""; iinfoOutstreamPosition.style.height = "330px"; iinfoOutstreamPosition.appendChild(bannerDiv); } else { console.log('Outstream: Banner is not set'); } } function loadNext() { iinfoVastUrlIndex++; if (iinfoVastUrlIndex < iinfoVastUrls.length) { iinfoOutstreamPosition.remove(); outstreamInit(); } else { return false; } adVolume = 1; return true; } /** * Pauses video content and sets up ad UI. */ function onContentPauseRequested() { videoContent.pause(); // This function is where you should setup UI for showing ads (for example, // display ad timer countdown, disable seeking and more.) // setupUIForAds(); } /** * Resumes video content and removes ad UI. */ function onContentResumeRequested() { videoContent.play(); // This function is where you should ensure that your UI is ready // to play content. It is the responsibility of the Publisher to // implement this function when necessary. // setupUIForContent(); } function onActiveView() { if (outstreamContainer) { const containerOffset = outstreamContainer.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight/1 && containerOffset.bottom > 0.0) { if (outstreamPaused) { adsManager.resume(); outstreamPaused = false; } return true; } else { if (!outstreamPaused) { adsManager.pause(); outstreamPaused = true; } } } return false; } let outstreamInitInterval; if (typeof cpexPackage !== "undefined") { outstreamInitInterval = setInterval(tryToInitializeOutstream, 100); } else { const wrapper = getWrapper(); if (wrapper) { let outstreamInitialized = false; window.addEventListener('scroll', () => { if (!outstreamInitialized) { const containerOffset = wrapper.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight / 1 && containerOffset.bottom > 0.0) { outstreamInit(); outstreamInitialized = true; } } }); } } function tryToInitializeOutstream() { const wrapper = getWrapper(); if (wrapper) { const containerOffset = wrapper.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight / 1 && containerOffset.bottom > 0.0) { if (cpexPackage.adserver.displayed) { clearInterval(outstreamInitInterval); outstreamInit(); } } } else { clearInterval(outstreamInitInterval); } } }
OSZAR »