Strasmore Research
Learn am Matt ConnorBy Matt Connor · Updated 2026-07-25

Stock Float vs Shares Outstanding: Wetin Dey Different?

Stock float na shares wey dey free to trade, shares outstanding minus insider stakes and restricted stock. See how low float dey look and how thin floats dey move for market.

Di float of one stock na di number of shares wey dey really available to trade for public: di shares outstanding minus insider stakes, restricted stock, and oda closely held blocks wey no fit change hands freely. Shares outstanding na di total wey one company don issue; di float na di tradable subset — e always be di same size or smaller. Most definitions stop for there; dis page dey go further — into where each count come from, how thin one "low float" be, and how thin-float names dey trade.

One detail up front: float na estimate, no be reported figure. Companies dey report shares outstanding for SEC filings every quarter; no filing line item dey report "di float." Vendors and index providers each dey compute one by deciding which holdings count as locked away, and dia answers dey differ. Our warehouse dey carry share counts straight from filings and listing records — and no float column at all.

Shares wey dey outstanding vs. float: wetin be di difference?

Three counts dey inside ladder, each one na subset of di one wey dey on top.

  1. Authorized shares — di maximum wey di charter allow, na ceiling wey only shareholder vote fit raise.
  2. Shares outstanding — every share wey dem don issue and wey investors dey hold, including insiders. Dis na di count wey dem dey report for SEC filings, and na im dey behind market capitalization and earnings per share.
  3. Float — di outstanding shares wey dey free to trade for public, di rest dey for hand wey no fit, or realistically no go, sell for any given day.

Di difference for one line: outstanding na wetin dey exist; float na wetin dey trade. Outstanding na im dem dey audit, file, e dey identical for every data source; float na im dem dey compute, dem no dey report am, e dey different for every vendor. Market cap dey use outstanding; index weights and low-float screens dey use float.

Di non-float dey sit for familiar places: founder and executive stakes, early investors wey dey inside post-IPO lock-up (wey customarily be 180 days), parent-company blocks, unvested employee shares. Shares wey company buy back dey comot from di outstanding count entirely. Forward split dey scale outstanding and float together; Reverse stock split dey shrink both by di same multiple. Wetin dey move float relative to outstanding na different traffic: lock-up expirations and insider sales dey add tradable shares, follow-on offerings dey mint new ones, buybacks dey pull shares comot.

Where share counts dey come from? SEC filings

Shares outstanding na reported fact wey get paper trail. Every 10-K and 10-Q dey carry share counts — one dated cover-page snapshot, plus di basic and diluted counts inside di income statement wey per-share earnings dey use. "Diluted" dey add di shares wey go exist if options, warrants, and convertibles turn to stock. Three megacaps, from dia latest quarterly filings:

QueryShare counts from di latest quarterly income statements wey dey record — three megacaps
The exact SQL behind every number
SELECT tk AS ticker,
       concat(formatDateTime(argMax(period_end, (filing_date, period_end)), '%b'), ' ', toString(toDayOfMonth(argMax(period_end, (filing_date, period_end)))), ', ', toString(toYear(argMax(period_end, (filing_date, period_end))))) AS period_ended,
       concat(formatDateTime(argMax(filing_date, (filing_date, period_end)), '%b'), ' ', toString(toDayOfMonth(argMax(filing_date, (filing_date, period_end)))), ', ', toString(toYear(argMax(filing_date, (filing_date, period_end))))) AS filed_on,
       round(argMax(basic_shares_outstanding, (filing_date, period_end)) / 1e9, 2) AS basic_shares_b,
       round(argMax(diluted_shares_outstanding, (filing_date, period_end)) / 1e9, 2) AS diluted_shares_b
FROM global_markets.stocks_income_statements
ARRAY JOIN tickers AS tk
WHERE tk IN ('AAPL', 'MSFT', 'NVDA')
  AND timeframe = 'quarterly'
  AND filing_date <= '2026-07-10'
  AND basic_shares_outstanding > 0
  AND diluted_shares_outstanding > 0
GROUP BY tk
ORDER BY diluted_shares_b DESC

Read di top row: NVDA filing for di quarter wey end Apr 26, 2026, wey dem file May 20, 2026, report 24.29 billion basic shares and 24.39 billion diluted. AAPL report 14.75 billion basic, MSFT 7.43 billion. Every figure trace to one named filing on one dated row; di most common SEC filings dey walk through those documents. No float dey appear inside dem. For one mature megacap nearly everything outstanding dey trade freely, so float estimates dey sit close to di outstanding count; for one fresh listing di two dey sit far apart.

Wetin dem dey call low float stock?

"Low float" no get any official number wey dem set, so e dey easy to just dey throw am around but e hard to pin down. Di way shares wey dey outstanding spread out dey give am floor — every US-listed company wey get recent quarterly filing, based on dia latest basic share count:

QueryShares outstanding across every company wey get recent quarterly filing — percentiles, in millions of shares
The exact SQL behind every number
WITH latest AS (
    SELECT tk AS ticker,
           argMax(basic_shares_outstanding, (filing_date, period_end)) AS shares
    FROM global_markets.stocks_income_statements
    ARRAY JOIN tickers AS tk
    WHERE timeframe = 'quarterly'
      AND filing_date >= '2025-10-01'
      AND filing_date <= '2026-07-10'
      AND basic_shares_outstanding > 0
    GROUP BY tk
)
SELECT count() AS companies,
       round(quantileDeterministic(0.10)(shares, cityHash64(ticker)) / 1e6, 1) AS p10_shares_m,
       round(quantileDeterministic(0.25)(shares, cityHash64(ticker)) / 1e6, 1) AS p25_shares_m,
       round(quantileDeterministic(0.50)(shares, cityHash64(ticker)) / 1e6, 1) AS median_shares_m,
       round(quantileDeterministic(0.75)(shares, cityHash64(ticker)) / 1e6, 1) AS p75_shares_m,
       round(quantileDeterministic(0.90)(shares, cityHash64(ticker)) / 1e6, 1) AS p90_shares_m
FROM latest

Across 6111 companies, di median carry 50.1 million shares outstanding. Di bottom decile sit for 3.9 million or less, di bottom quartile for 15.6 million or less; di top decile start from 452.6 million. Na dat one be di answer wey di phrase dey always dodge: company wey get around 15.6 million shares outstanding dey inside di thinnest quarter of di market before dem comot one insider block, and im float still dey smaller. Screens dey vary by provider; di strict ones draw dia line inside dis table bottom quarter, below di 15.6 million mark.

Low-float stocks dey really move pass?

Na dis claim every low-float screen stand on, and we fit test am. Put every company inside bucket based on di latest share count wey dem report, den measure how e trade for di 20 sessions wey reach July 10, 2026: each session high-low range as percentage of di low, plus di dollar volume wey dem trade. Share count na proxy for float, no be di float itself — but na measured one:

QueryDaily high-low range and dollar volume by shares-outstanding tier — US common stocks, regular-hours sessions, June 11 to July 10, 2026
The exact SQL behind every number
WITH latest AS (
    SELECT tk AS ticker,
           argMax(basic_shares_outstanding, (filing_date, period_end)) AS shares
    FROM global_markets.stocks_income_statements
    ARRAY JOIN tickers AS tk
    WHERE timeframe = 'quarterly'
      AND filing_date >= '2025-10-01'
      AND filing_date <= '2026-07-10'
      AND basic_shares_outstanding > 0
    GROUP BY tk
),
daily AS (
    SELECT ticker,
           toDate(toTimeZone(window_start, 'America/New_York')) AS session,
           toFloat64(max(high)) AS hi,
           toFloat64(min(low)) AS lo,
           toFloat64(argMax(close, window_start)) AS last_price,
           sum(toFloat64(volume) * toFloat64(close)) AS dollar_volume
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE window_start >= toDateTime('2026-06-11 09:30:00', 'America/New_York')
      AND window_start < toDateTime('2026-07-11 00:00:00', 'America/New_York')
      AND toHour(toTimeZone(window_start, 'America/New_York')) >= 9
      AND toHour(toTimeZone(window_start, 'America/New_York')) < 16
      AND NOT (toHour(toTimeZone(window_start, 'America/New_York')) = 9
               AND toMinute(toTimeZone(window_start, 'America/New_York')) < 30)
    GROUP BY ticker, session
    HAVING lo > 0 AND last_price >= 1
)
SELECT multiIf(l.shares < 20e6, 'under 20M shares',
               l.shares < 50e6, '20-50M shares',
               l.shares < 200e6, '50-200M shares',
               l.shares < 1000e6, '200M-1B shares',
               'over 1B shares') AS share_count_tier,
       uniqExact(d.ticker) AS companies,
       round(quantileDeterministic(0.5)(100 * (hi - lo) / lo, cityHash64(d.ticker, d.session)), 2) AS median_daily_range_pct,
       round(quantileDeterministic(0.9)(100 * (hi - lo) / lo, cityHash64(d.ticker, d.session)), 2) AS p90_daily_range_pct,
       round(quantileDeterministic(0.5)(dollar_volume, cityHash64(d.ticker, d.session)) / 1e6, 2) AS median_daily_dollar_volume_m
FROM daily AS d
INNER JOIN latest AS l ON d.ticker = l.ticker
GROUP BY share_count_tier
ORDER BY min(l.shares)

Di ladder dey monotone, and e dey run for di direction wey di folklore claim. Di 1093 companies wey get under 20M shares outstanding post median daily high-low range of 4.82% — against 1.68% for di 221 names wey get over 1B shares. Every step up di ladder dey narrow di typical day: 3.94%, 3.64%, 2.72%. Di tails stretch further: 90th-percentile day for di thinnest tier run 13.28%, roughly triple di 4.65% of di largest tier.

Di liquidity column show di mechanism. Di thinnest tier median session turn over 0.49 million dollars of stock; di largest tier own, 99.47 million. When one day demand meet fraction of dat depth, di price travel further to find di next seller. One caveat: small share counts dey cluster with small companies and low prices, so dis tiers differ for more ways dan one. Days wey stock trade far above im volume norm — wetin relative volume dey measure — na di days wey thin float get tested, and di sharpness dey run both ways.

How IPO dey create float?

For listing day, float dey start near one number wey person fit know: di shares wey dem really sell for di offering. Everytin wey dem no offer — founder stock, employee grants, venture stakes — na outstanding but e no dey tradable yet, and most of am dey under lock-up. Na wetin make di IPO record be rare tin: na real float measurement, wey dem take wen di tradable count sharp pass. Listing records dey store shares wey dem offer alongside shares outstanding; di ratio na di fraction of di company wey dem float. Across US common-stock IPOs of $100 million or more for di first half of 2026 (di half IPO ledger):

QueryFloat at listing: shares offered as a share of recorded shares outstanding — H1 2026 US IPOs of $100M+
The exact SQL behind every number
SELECT count() AS ipos,
       round(quantileDeterministic(0.5)(max_shares_offered / shares_outstanding, cityHash64(issuer_name)) * 100, 1) AS median_pct_offered,
       round(quantileDeterministic(0.25)(max_shares_offered / shares_outstanding, cityHash64(issuer_name)) * 100, 1) AS p25_pct,
       round(quantileDeterministic(0.75)(max_shares_offered / shares_outstanding, cityHash64(issuer_name)) * 100, 1) AS p75_pct,
       countIf(max_shares_offered / shares_outstanding <= 0.30) AS floated_30pct_or_less
FROM global_markets.stocks_ipos
WHERE listing_date >= '2026-01-01'
  AND listing_date <= '2026-06-30'
  AND ipo_status = 'history'
  AND currency_code = 'USD'
  AND security_type = 'CS'
  AND total_offer_size >= 100000000
  AND shares_outstanding > 0
  AND max_shares_offered > 0
  AND max_shares_offered < shares_outstanding

Across 39 measured listings, di median deal offer shares wey equal 30.2% of im recorded total — di float open as minority slice of di company. Di middle half float between 17.3% and 47.7%, and 19 of di 39 float 30% or less. New listing im market cap fit run several times di value of di shares wey really dey trade — dat gap na di float-versus-outstanding distinction, wey dem price. Deal by deal, di half eight largest measured offerings:

QueryEight of H1 2026 biggest measured US IPOs: shares offered vs. shares outstanding at listing
The exact SQL behind every number
SELECT issuer_name AS company,
       toString(listing_date) AS listed,
       round(max_shares_offered / 1e6, 1) AS shares_offered_m,
       round(shares_outstanding / 1e6, 1) AS shares_outstanding_m,
       round(100 * max_shares_offered / shares_outstanding, 1) AS pct_of_shares_offered
FROM global_markets.stocks_ipos
WHERE listing_date >= '2026-01-01'
  AND listing_date <= '2026-06-30'
  AND ipo_status = 'history'
  AND currency_code = 'USD'
  AND security_type = 'CS'
  AND total_offer_size >= 100000000
  AND shares_outstanding > 0
  AND max_shares_offered > 0
  AND max_shares_offered < shares_outstanding
ORDER BY total_offer_size DESC
LIMIT 8

Di largest measured deal, Innio N.V., offer 90 million of im 750 million recorded shares — 12% float for listing. Two caveats per row: di offered figure na di top of each deal range, and di outstanding count cover only di listed share class, so multi-class company go read high. For brand-new float wey meet open market, see SpaceX June 2026 listing.

How dem build di IPO float measurement

Di full accounting:

QueryFrom every H1 2026 US-dollar listing down to di measured set
The exact SQL behind every number
SELECT count() AS ipos_h1_2026,
       countIf(security_type = 'CS' AND total_offer_size >= 100000000) AS large_common_stock_ipos,
       countIf(security_type = 'CS' AND total_offer_size >= 100000000
               AND shares_outstanding > 0 AND max_shares_offered > 0) AS with_both_share_counts,
       countIf(security_type = 'CS' AND total_offer_size >= 100000000
               AND shares_outstanding > 0 AND max_shares_offered > 0
               AND max_shares_offered >= shares_outstanding) AS dropped_placeholder_rows,
       countIf(security_type = 'CS' AND total_offer_size >= 100000000
               AND shares_outstanding > 0 AND max_shares_offered > 0
               AND max_shares_offered < shares_outstanding) AS measured_ipos
FROM global_markets.stocks_ipos
WHERE listing_date >= '2026-01-01'
  AND listing_date <= '2026-06-30'
  AND ipo_status = 'history'
  AND currency_code = 'USD'

184 US-dollar listings hit di tape for di half; 60 na common-stock deals of $100 million or more, and 40 carry both share counts. Rows wey record di offered count at or above di outstanding total, dem set am aside as placeholders (1 here), wey leave 39 measured listings. Missing counts dem exclude, dem never guess.

Wetin dey happen to float when lock-up expire?

One lock-up expiration na di biggest planned change wey fit happen to one young company float: insiders and investors wey buy before IPO go dey free to sell, and shares wey dey outstanding but locked go join di pool wey dem fit trade. Di normal term na 180 days. Di true limit of di data: no lock-up expiration date dey recorded for any market-data feed — e dey inside di prospectus, e dey often staggered, sometimes dem fit release am early. Wetin dem fit measure na di tape around dat mark. Medline, one December 2025 listing wey im 180th day fall for June 15, 2026, na di test case:

QueryMedline (MDLN): di 20 sessions before im 180-day mark vs. every session from am — regular-hours volume and daily range
The exact SQL behind every number
WITH ipo AS (
    SELECT concat(formatDateTime(listing_date, '%b'), ' ', toString(toDayOfMonth(listing_date)), ', ', toString(toYear(listing_date))) AS listed_on,
           round(max_shares_offered / 1e6, 1) AS shares_offered_m
    FROM global_markets.stocks_ipos
    WHERE ticker = 'MDLN'
      AND ipo_status = 'history'
      AND listing_date >= '2025-12-01'
      AND listing_date <= '2025-12-31'
    LIMIT 1
),
daily AS (
    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS session,
           toFloat64(max(high)) AS hi,
           toFloat64(min(low)) AS lo,
           sum(toFloat64(volume)) AS shares_traded
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'MDLN'
      AND window_start >= toDateTime('2026-05-15 09:30:00', 'America/New_York')
      AND window_start < toDateTime('2026-07-11 00:00:00', 'America/New_York')
      AND toHour(toTimeZone(window_start, 'America/New_York')) >= 9
      AND toHour(toTimeZone(window_start, 'America/New_York')) < 16
      AND NOT (toHour(toTimeZone(window_start, 'America/New_York')) = 9
               AND toMinute(toTimeZone(window_start, 'America/New_York')) < 30)
    GROUP BY session
    HAVING lo > 0
)
SELECT if(session < toDate('2026-06-15'), '1. 20 sessions before', '2. from the 180-day mark') AS window,
       any(listed_on) AS listed_on,
       any(shares_offered_m) AS shares_offered_m,
       count() AS sessions,
       concat(formatDateTime(min(session), '%b'), ' ', toString(toDayOfMonth(min(session)))) AS first_session,
       concat(formatDateTime(max(session), '%b'), ' ', toString(toDayOfMonth(max(session)))) AS last_session,
       round(quantileDeterministic(0.5)(shares_traded, cityHash64(session)) / 1e6, 2) AS median_daily_volume_m,
       round(quantileDeterministic(0.5)(100 * (hi - lo) / lo, cityHash64(session)), 2) AS median_daily_range_pct
FROM daily
CROSS JOIN ipo
GROUP BY window
ORDER BY window

Medline list for Dec 17, 2025 with 248.4 million shares wey dem offer. Over di 20 sessions from May 15 through Jun 12, im median day trade 8.61 million shares inside one 4.53% high-low range. Over di 18 sessions from di mark through Jul 10: 6.42 million shares, one 4.14% range — e quiet for both counts.

Dat one worth to siddon reason am, because di popular story dey go di other way. One date wey dem derive from calendar no be event: di real expiration fit be staggered, fit don pass earlier, and insiders fit just no sell. Float changes dey disclosed for documents, no be price feeds — read di prospectus, no be countdown.

Why float dey matter for index weights?

Di big US index families dey weight constituents by float-adjusted market capitalization, wey mean say dem dey count only shares wey dey available to public investors. Two companies wey get di same market cap fit carry very different index weights if one of dem float only small fraction of imself. Each provider dey publish im own float-adjustment rules — na di closest thing to official float wey stock fit get.

Stock float FAQ

Wetin be di difference between float and shares outstanding?

Shares outstanding na every share wey company don issue and investors hold, wey dem dey report for SEC filings every quarter. Float na di part wey dey free to trade for public — outstanding minus insider, restricted, and oda stock wey dem hold tight. Outstanding na wetin dey and dem don audit am; float na wetin dey trade, na estimate, and e always be di same size or smaller.

Wetin be low float stock?

Low float stock na one wey get small freely tradable shares — usually na recent IPO wey still dey inside im lock-up, company wey insider hold plenty, or small company. No official cutoff dey, but di distribution dey give reference point: di median US-listed company wey get recent quarterly filing dey report 50.1 million shares outstanding, di bottom quartile na 15.6 million or less.

Low float stocks dey move pass large-float stocks?

As dem measure am over di 20 sessions reach July 10, 2026, yes. Companies wey get under 20 million shares outstanding post median daily high-low range of 4.82%, against 1.68% for dose wey get over 1 billion shares, e dey narrow for every step between. Di thinnest tier trade median of 0.49 million dollars a day; di largest, 99.47 million.

Wetin dey happen to stock wen im lock-up expire?

Shares wey insiders and pre-IPO investors hold go become eligible to sell, wey go make di float big. Whether e go show for tape na anoda question: for Medline, di 18 sessions from im 180-day mark trade median of 6.42 million shares a day, wey dey below di 8.61 million of di 20 sessions before. Real expiration dates dey live inside di prospectus.


Every table wey dey up na stored query — expand di SQL under any panel, or pull di same counts for any ticker on di Strasmore terminal.