Caribbean Business RankingsData Storage · 5 Regional Exchanges
● Connecting…
Caribbean Business Rankings
Live data from local data storage · All figures in US$ at Dec 31 central bank rates ·
Connecting to database…
Market Cap by Exchange (US$B)
Skin Index Grade Distribution
Top CEOs · Personal stake %
Revenue vs Net Profit — Top Companies (US$M)
Top 100 · Market Capitalisation
Ranked by US$ Market Cap · Dec 31 central bank conversion rates
Rank
Company
Exchange
Sector
Local Mkt Cap
US$ Mkt Cap
YoY
Loading…
Top 100 · Gross Revenue
Ranked by US$ Gross Revenue · Dec 31 central bank conversion rates
Rank
Company
Exchange
Sector
Local Revenue
US$ Revenue
YoY
Loading…
Top 100 · Net Profit After Tax
Ranked by US$ Net Profit After Tax · Dec 31 central bank conversion rates
Rank
Company
Exchange
Sector
Local Net Profit
US$ Net Profit
YoY
Loading…
Power CEO Performance Index
Ranked by % Change in Net Profit After Tax · Year-over-year
Loading…
Businessuite Skin In The Game Index
Annual measure of CEO personal shareholding commitment · Top Caribbean Companies
★ Annual Skin In The Game Index
Measures and gauges the extent to which Caribbean Top 50 CEOs use their own money to buy stock in the company they run — and whether they are supported by like-minded board members who share a personal stake in the business.
"We like to see the people who run businesses showing confidence in them by committing their own capital. And directors are well aware their trading is closely watched by investors, so they often buy stock when they're allowed to." — Warren Buffett
Source: Main Stock Exchange last trading price · Calendar year-end
FX: Central Bank US$ selling price · 30 December
Holdings: December quarterly financials / Annual Report
Note: Connected party holdings included where noted
Scoring Methodology
1
Personal direct shareholding valued at the exchange's last trading price for the calendar year, converted to US$ at the Central Bank selling rate as at 30 December.
2
Connected party holdings (spouse, children, family trust, associated companies) added where disclosed in quarterly financials or most recent annual report.
3
Skin Score = CEO's total personal stake as a % of company's total market capitalisation.
A ★
>10% Stake
Exceptional personal commitment to the business
B
3% – 10%
Strong alignment with shareholders
C
0.5% – 3%
Moderate personal capital at risk
D
<0.5%
Low alignment or no disclosed holding
Loading…
Rankings By Exchange
Top companies per exchange · Revenue and Net Profit
Jamaica Main Market
Jamaica Junior Market
Trinidad & Tobago
Guyana
Eastern Caribbean
Barbados
Admin Overview
Lightsail data storage
All changes made through this admin panel are saved to your Lightsail server and reflected on the public site after save.
Manage Companies
Add, edit or remove companies · changes persist immediately
Add New Company
✓ Saved
Company Registry
ID
Company
Ticker
Exchange
Sector
CEO
Actions
Loading…
Update Financial Data
Enter figures in local currency — US$ auto-calculated from FX rates
All entries save immediately to your Lightsail data storage. Enter YoY % change manually or leave as 0.
Enter / Update Financials
✓ Saved
Skin In The Game Data Entry
CEO shareholding records · persisted to Lightsail data storage
★ Data Rules: Enter shares × last trading price (Dec 31). Connected party = spouse, family trust, associated entity. Skin Score = Total US$ ÷ Market Cap. FX uses Central Bank Dec 30 rate.
Enter / Update CEO Shareholding
Spouse, family, trust, associated entity
Direct (US$)
—
Connected (US$)
—
Total (US$)
—
Skin Score
—
✓ Saved
Skin Index Records
Rank
CEO
Company
Exch
Direct (US$)
Connected (US$)
Total (US$)
Skin %
Grade
Actions
Loading…
FX Rate Manager
Central bank Dec 31 rates · saved · rankings auto-recalculate
Always update FX rates before publishing a new fiscal year. Use the official central bank rate as of December 31st.
Exchange Rates — US$1 = Local Currency
ows.push({fiscal_year:yr,currency_code:c.code,currency_name:c.name,exchange_name:c.exch,rate_to_usd:rate}); }); await saveCSV('fx.csv',allFXRows,['fiscal_year','currency_code','currency_name','exchange_name','rate_to_usd']); await init(); toast('FX rates saved'); }
function calcSkinEntry(){ var co=companyById(val('sk-co')), fx=allFX[val('sk-cur')||co.currency]||1, d=num('sk-dsh')*num('sk-sp')/fx, c=num('sk-csh')*num('sk-sp')/fx, t=d+c, mc=num('sk-mc')/fx, pct=mc>0?t/mc*100:0; if(el('sk-prev-d'))el('sk-prev-d').textContent=fm(d); if(el('sk-prev-c'))el('sk-prev-c').textContent=fm(c); if(el('sk-prev-t'))el('sk-prev-t').textContent=fm(t); if(el('sk-prev-s'))el('sk-prev-s').textContent=pct.toFixed(2)+'%'; }
async function saveSkinEntry(){ var id=val('edit-skin-id')||uid('skin'); var rec={id:id,company_id:val('sk-co'),fiscal_year:parseInt(val('sk-yr'))||curYear,ceo_name:val('sk-ceo'),direct_shares:num('sk-dsh'),connected_shares:num('sk-csh'),connected_description:val('sk-cdesc'),share_price_local:num('sk-sp'),mkt_cap_local:num('sk-mc')}; var rows=(await getCSV(API.skin)); var i=rows.findIndex(function(r){return r.id===id;}); if(i>=0)rows[i]=rec; else rows.push(rec); await saveCSV('skin.csv',rows,['id','company_id','fiscal_year','ceo_name','direct_shares','connected_shares','connected_description','share_price_local','mkt_cap_local']); clearSkinForm(); await init(); toast('Skin index saved'); }
function editSkinRow(id){ var r=allSkin.find(function(x){return x.id===id;}); if(!r)return; ['edit-skin-id','sk-co','sk-ceo','sk-yr','sk-dsh','sk-sp','sk-cur','sk-csh','sk-cdesc','sk-mc'].forEach(function(x){}); if(el('edit-skin-id'))el('edit-skin-id').value=r.id; if(el('sk-co'))el('sk-co').value=r.company_id; if(el('sk-ceo'))el('sk-ceo').value=r.ceo_name; if(el('sk-yr'))el('sk-yr').value=r.fiscal_year; if(el('sk-dsh'))el('sk-dsh').value=r.direct_shares; if(el('sk-sp'))el('sk-sp').value=r.share_price_local; if(el('sk-cur'))el('sk-cur').value=r.currency; if(el('sk-csh'))el('sk-csh').value=r.connected_shares; if(el('sk-cdesc'))el('sk-cdesc').value=r.connected_description; if(el('sk-mc'))el('sk-mc').value=r.mkt_cap_local; calcSkinEntry(); showAd('adm-skin'); }
function clearSkinForm(){ ['edit-skin-id','sk-co','sk-ceo','sk-dsh','sk-sp','sk-csh','sk-cdesc','sk-mc'].forEach(function(id){if(el(id))el(id).value='';}); calcSkinEntry(); }
function renderAdmSkin(){ var tb=el('adm-skin-tb'); if(!tb)return; tb.innerHTML=allSkin.map(function(r){return '
'+r.rank+'
'+esc(r.ceo_name)+'
'+esc(r.companyName)+'
'+et(r.exch)+'
'+fm(r.directUSD)+'
'+fm(r.connectedUSD)+'
'+fm(r.totalUSD)+'
'+r.skinPct.toFixed(2)+'%
'+gradeHtml(r.grade)+'
';}).join(''); }
function exportCSV(kind){ var rows=kind==='skin'?allSkin:(kind==='ceo'?tData.ceo:tData[kind]); if(!rows)return; var headers=Object.keys(rows[0]||{}); var blob=new Blob([toCSV(rows,headers)],{type:'text/csv'}); var a=document.createElement('a'); a.href=URL.createObjectURL(blob); a.download='businessuite_'+kind+'_'+curYear+'.csv'; a.click(); URL.revokeObjectURL(a.href); }
// ── NAV / AUTH ───────────────────────────────────────────────────────────────
function showPg(id){ document.querySelectorAll('#pub-pages .pg').forEach(function(p){p.classList.remove('on');}); if(el('pg-'+id))el('pg-'+id).classList.add('on'); document.querySelectorAll('#pnav .ni').forEach(function(n){n.classList.remove('on');}); if(el('np-'+id))el('np-'+id).classList.add('on'); }
function showAd(id){ document.querySelectorAll('#adm-pages .pg').forEach(function(p){p.classList.remove('on');}); if(el('pg-'+id))el('pg-'+id).classList.add('on'); document.querySelectorAll('#anav .ni').forEach(function(n){n.classList.remove('on');}); if(el('na-'+id))el('na-'+id).classList.add('on'); }
function switchMode(m){ curMode=m; if(el('pub-pages'))el('pub-pages').style.display=m==='public'?'block':'none'; if(el('adm-pages'))el('adm-pages').style.display=m==='admin'?'block':'none'; if(el('pnav'))el('pnav').style.display=m==='public'?'block':'none'; if(el('anav'))el('anav').style.display=m==='admin'?'block':'none'; if(el('pbtn'))el('pbtn').classList.toggle('on',m==='public'); if(el('abtn'))el('abtn').classList.toggle('on',m==='admin'); }
function reqAdmin(){ var l=el('login'); if(l)l.style.display='flex'; }
function doLogin(){ if(val('lu')===ADMIN_USER && val('lp')===ADMIN_PASS){ if(el('login'))el('login').style.display='none'; switchMode('admin'); } else if(el('lerr')) el('lerr').style.display='block'; }
function setYear(y){ curYear=parseInt(y)||2024; loadFXRates().then(loadFinancials).then(loadSkinData).then(function(){buildRankings();renderDash();renderAllTables();renderSkinIndex();renderCEOIndex();}); }
window.addEventListener('DOMContentLoaded', init);