Best Price Cash To Crypto Aggregate

This revision is from 2025/06/22 20:57. You can Restore it.

<div>

<label>Fiat:</label>

<select id="fiat">

<option>USD</option><option>EUR</option><option>GBP</option>

</select>

<label>Amount:</label>

<input type="number" id="amount" value="100" min="1" />

<label>Crypto:</label>

<select id="crypto">

<option value="bitcoin">BTC</option>

<option value="ethereum">ETH</option>

<option value="litecoin">LTC</option>

<option value="monero">XMR</option>

<option value="binancecoin">BNB</option>

</select>

<button id="refresh">Refresh</button>

</div>

<div id="results"><p class="loading">Loading…</p></div>

<script>

document.addEventListener('DOMContentLoaded', () => {

const services = [

// Original services with corrected fees

{name:'PayPal', fee:3.5}, // Updated (includes spread)

{name:'MoonPay', fee:4.5}, // Updated (varies by payment method)

{name:'Coinbase', fee:1.49}, // Verified (card fee)

{name:'Binance', fee:1.8}, // Updated (card purchases)

{name:'Binance P2P', fee:0},

{name:'Kraken', fee:0.26}, // Verified (trading fee)

{name:'Kraken P2P', fee:0},

{name:'Crypto.com', fee:2.99}, // Updated (card purchases)

{name:'OKX', fee:0.1}, // Verified

{name:'OKX P2P', fee:0},

{name:'Gemini', fee:1.49}, // Verified

{name:'Bitstamp', fee:0.5}, // Updated

{name:'KuCoin', fee:0.1},

{name:'KuCoin P2P', fee:0},

{name:'eToro', fee:1.0}, // Spread-based

{name:'Bitfinex', fee:0.2},

{name:'CoinJar', fee:1.0},

{name:'Best Wallet', fee:2.0},

{name:'MEXC', fee:0.0}, // Updated (no fee for card purchases)

{name:'Bybit', fee:0.1},

{name:'Robinhood', fee:0.0}, // Verified (spread only)

{name:'CashApp', fee:2.2}, // Updated

{name:'PayID (BitPay/Banxa)', fee:1.0},

{name:'PayPal Card', fee:3.0},

{name:'Banxa', fee:2.5}, // Updated

{name:'Transak', fee:1.99}, // Updated

{name:'Unlimit', fee:2.0},

{name:'Mercuryo', fee:3.95},

{name:'Coinbase Pay', fee:1.5},

{name:'Simplex', fee:5.0}, // Updated (min 10$ or 5%)

{name:'Paybis', fee:2.49}, // Updated

{name:'Paxful P2P', fee:0.99}, // Updated

{name:'MetaMask On-ramp', fee:0.95},// Updated (aggregator min fee)

{name:'Pionex', fee:0.05},

{name:'Margex', fee:1.0},

{name:'Uphold', fee:0.95}, // Updated verification

{name:'Bitget', fee:0.1},

{name:'CEX.IO', fee:2.99},

{name:'BYDFi', fee:0.1},

{name:'OKCoin', fee:0.2},

{name:'Huobi', fee:0.2},

{name:'OpenPeer', fee:0},

{name:'Coindirect', fee:1.5},

{name:'Hodl Hodl', fee:0.6},

{name:'WhalesHeaven', fee:0.5},

{name:'Remitano', fee:1.0},

{name:'LocalCoinSwap', fee:1.0},

{name:'Bisq', fee:0.88},

{name:'BingX', fee:0},

{name:'CoinEx', fee:0.2},

// Newly added important services

{name:'Revolut', fee:2.5}, // Standard tier

{name:'Bitpanda', fee:1.49},

{name:'Nexo', fee:0.0}, // Free fiat deposits

{name:'Bitso', fee:0.65}, // Popular in LATAM

{name:'Luno', fee:1.5}, // Popular in Africa/SEA

{name:'Gate.io', fee:0.1},

{name:'SwissBorg', fee:1.0},

{name:'BitFlyer', fee:0.15}, // Popular in Japan

{name:'LocalBitcoins', fee:1.0},

{name:'BitPay', fee:1.0}

];

const fiatEl = document.getElementById('fiat');

const amountEl = document.getElementById('amount');

const cryptoEl = document.getElementById('crypto');

const resultsEl = document.getElementById('results');

async function fetchPrice(cryptoId, fiat) {

const url = "/coingecko-proxy.php?ids=" + cryptoId + "&vs_currencies=" + fiat;

console.log("Fetching:", url);

try {

const r = await fetch(url);

if (!r.ok) throw new Error("HTTP "+r.status);

const j = await r.json();

return j[cryptoId]?.[fiat.toLowerCase()] || null;

} catch (err) {

console.error("Error fetching price:", err);

return null;

}

}

async function refresh() {

const fiat = fiatEl.value || 'usd';

const amt = parseFloat(amountEl.value) || 100;

const cryptoId = cryptoEl.value || 'bitcoin';

resultsEl.innerHTML = '<p class="loading">Loading…</p>';

const price = await fetchPrice(cryptoId, fiat);

if (!price) {

resultsEl.innerHTML = '<p>Error: could not fetch price.</p>';

return;

}

const rows = services.map(s => {

const gross = price * (1 + s.fee / 100);

return { service: s.name, amount: amt / gross };

}).sort((a, b) => b.amount - a.amount);

let html =

'<table style="width: 100%; border-collapse: collapse; margin-top: 20px;">' +

'<thead>' +

'<tr style="background: #f2f2f2;"><th style="padding: 12px; text-align: left;">Service</th><th style="padding: 12px; text-align: right;">' + cryptoId.toUpperCase() + ' Amount</th></tr>' +

'</thead>' +

'<tbody>';

rows.forEach(function(r, i) {

const bgColor = i % 2 === 0 ? '#fff' : '#f9f9f9';

html +=

'<tr style="background: ' + bgColor + ';">' +

'<td style="padding: 10px; border-bottom: 1px solid #ddd;">' + r.service + '</td>' +

'<td style="padding: 10px; text-align: right; border-bottom: 1px solid #ddd; font-family: monospace;">' + r.amount.toFixed(6) + '</td>' +

'</tr>';

});

html += '</tbody></table>';

resultsEl.innerHTML = html;

}

document.getElementById('refresh').onclick = refresh;

refresh(); // Initial load

});

</script>

  

📝 📜 ⏱️ ⬆️