Crypto Exchange Fee Comparator (Manual Data Entry)

Add or Edit Exchange Fee Information

Withdrawal Fees (Add for relevant cryptos):

Fiat Fees:


Saved Exchange Data

No exchange data saved yet for this session.

Compare Exchange Fees

Select Exchanges to Compare (Max 4):

Add exchange data on the first tab to select here.

Select exchanges and click 'Show/Refresh Comparison'.


Trading Fee Estimator

How to Use This Comparator & Understanding Fees

Using The Tool:

  1. Add Exchange Data (Tab 1):
    • Enter the name of an exchange.
    • Input its Maker and Taker trading fees (usually a percentage).
    • Note any discounts if the exchange has its own token (e.g., BNB for Binance).
    • For **Withdrawal Fees**, click "+ Add Crypto Withdrawal Fee" for each cryptocurrency you want to track. Enter the crypto symbol (e.g., BTC, ETH, USDT), the fee amount, the fee currency (e.g., 0.0005 BTC, 1 USDT), and optionally the network (e.g., ERC20, BEP20, TRC20) as this often affects fees.
    • Enter details for Fiat (e.g., USD, INR, EUR) Deposit and Withdrawal fees. These can be complex (e.g., "Free via Bank Transfer", "1.5% for Card", "5 USD fixed for Wire"), so use the text field to describe them.
    • Add any other relevant notes.
    • Click "Save Exchange Data". Repeat for all exchanges you want to compare. Your data is saved for the current browser session.
  2. Compare Fees (Tab 2):
    • Check the boxes next to the exchanges you want to compare (max 4 for readability).
    • Click "Show/Refresh Comparison" to see a side-by-side table.
  3. Estimate Trading Fees (Tab 2):
    • Enter a hypothetical trade amount and its currency (e.g., 1000 USD, 0.1 BTC).
    • Select if it's a Maker or Taker trade.
    • Click "Estimate Trading Fees" to see the calculated fee for each selected exchange.
  4. Download PDF (Tab 2): After generating a comparison, you can download it as a PDF.

Where to Find Official Fee Schedules:

Always refer to the official website of the cryptocurrency exchange for the most current and accurate fee information. Fee schedules are usually found in sections like "Fees," "Trading Fees," "Fee Structure," or in their Support/FAQ sections.

Common Types of Crypto Exchange Fees:

  • Trading Fees:
    • Maker Fee: Paid when you add liquidity to the order book by placing an order that doesn't immediately match (e.g., a limit order below current price for buy, or above for sell). Often lower than taker fees.
    • Taker Fee: Paid when you remove liquidity from the order book by placing an order that matches an existing order immediately (e.g., a market order).
    • Often tiered based on your 30-day trading volume or holdings of the exchange's native token.
  • Withdrawal Fees:
    • Charged when you move cryptocurrency out of the exchange to an external wallet or another exchange.
    • These fees are usually fixed per cryptocurrency (e.g., 0.0005 BTC) but can vary based on the specific blockchain network used (e.g., USDT on ERC20 vs. TRC20 vs. BEP20 networks will have different fees).
  • Deposit Fees:
    • Depositing cryptocurrency is usually free on most exchanges.
    • Fiat deposits (e.g., bank transfer, credit/debit card) may incur fees, which can be a percentage or a fixed amount, and vary by method and currency.
  • Fiat Withdrawal Fees: Similar to fiat deposits, withdrawing fiat currency to your bank account can have fees, varying by method and currency.

Fee structures can be complex and change often. This tool helps you organize the information YOU find. Always double-check with the exchanges directly before making trading decisions.

No exchange data saved yet for this session.

"; return; } let tableHTML = ``; savedExchangesCEFC.forEach(ex => { tableHTML += ``; }); tableHTML += `
NameMaker (%)Taker (%)Actions
${ex.name} ${ex.makerFeePercent} ${ex.takerFeePercent}
`; container.innerHTML = tableHTML; } function editExchangeCEFC(id) { const exchange = savedExchangesCEFC.find(ex => ex.id === id); if (exchange) { document.getElementById('editingExchangeIdCEFC').value = exchange.id; document.getElementById('exchangeNameCEFC').value = exchange.name; document.getElementById('makerFeeCEFC').value = exchange.makerFeePercent; document.getElementById('takerFeeCEFC').value = exchange.takerFeePercent; document.getElementById('tokenDiscountCEFC').value = exchange.tokenDiscountNotes; const wdContainer = document.getElementById('withdrawalFeesContainerCEFC'); wdContainer.innerHTML = ''; // Clear existing exchange.withdrawalFees.forEach(fee => { const rowId = `wdFeeRow_${Date.now()}_${Math.random().toString(36).substr(2, 5)}`; const newRow = document.createElement('div'); newRow.className = 'withdrawal-fee-row'; newRow.id = rowId; newRow.innerHTML = ` `; wdContainer.appendChild(newRow); }); if (exchange.withdrawalFees.length === 0) addWithdrawalFeeRowCEFC(true); // Add a blank if none document.getElementById('fiatDepositFeeCEFC').value = exchange.fiatDeposit.details; document.getElementById('fiatWithdrawalFeeCEFC').value = exchange.fiatWithdrawal.details; document.getElementById('otherNotesCEFC').value = exchange.customNotes; openToolTabCEFC(null, 'manageTabCEFC'); // Switch to edit tab document.getElementById('exchangeNameCEFC').focus(); } } function deleteExchangeCEFC(id) { if (confirm("Are you sure you want to delete this exchange data?")) { savedExchangesCEFC = savedExchangesCEFC.filter(ex => ex.id !== id); persistExchangesToLocalStorageCEFC(); renderSavedExchangesTableCEFC(); renderExchangeSelectionForComparisonCEFC(); // Update selection // Clear comparison table if the deleted exchange was part of it document.getElementById('comparisonTableContainer').innerHTML = "

Select exchanges and click 'Show/Refresh Comparison'.

"; document.getElementById('tradeFeeCalcResult').innerHTML = ""; } } function renderExchangeSelectionForComparisonCEFC() { const container = document.getElementById('exchangeSelectionForComparison'); if(!container) return; container.innerHTML = ''; if (savedExchangesCEFC.length === 0) { container.innerHTML = '

No exchanges saved. Please add data on the first tab.

'; return; } savedExchangesCEFC.forEach(ex => { container.innerHTML += ` `; }); } function renderComparisonTableCEFC() { const selectedCheckboxes = document.querySelectorAll('.exchange-compare-checkbox:checked'); const selectedIds = Array.from(selectedCheckboxes).map(cb => cb.value); if (selectedIds.length === 0) { alert("Please select at least one exchange to compare."); document.getElementById('comparisonTableContainer').innerHTML = "

Select exchanges and click 'Show/Refresh Comparison'.

"; document.getElementById('toolPdfDownloadCEFC').style.display = 'none'; return; } if (selectedIds.length > 4) { alert("Please select a maximum of 4 exchanges for optimal display."); // return; // Optionally restrict, or let it display } const exchangesToCompare = savedExchangesCEFC.filter(ex => selectedIds.includes(ex.id)); const container = document.getElementById('comparisonTableContainer'); const pdfButton = document.getElementById('toolPdfDownloadCEFC'); let tableHTML = ``; exchangesToCompare.forEach(ex => tableHTML += ``); tableHTML += ``; // Trading Fees tableHTML += `${exchangesToCompare.map(ex => ``).join('')}`; tableHTML += `${exchangesToCompare.map(ex => ``).join('')}`; tableHTML += `${exchangesToCompare.map(ex => ``).join('')}`; // Withdrawal Fees - find common cryptos or list all, can be long // For simplicity, let's just list a few common ones if present or indicate to check notes const commonCryptos = ["BTC", "ETH", "USDT"]; commonCryptos.forEach(crypto => { tableHTML += ``; exchangesToCompare.forEach(ex => { const feeInfo = ex.withdrawalFees.find(f => f.crypto.toUpperCase() === crypto); tableHTML += ``; }); tableHTML += ``; }); tableHTML += `${exchangesToCompare.map(ex => ``).join('')}`; // Fiat Fees tableHTML += `${exchangesToCompare.map(ex => ``).join('')}`; tableHTML += `${exchangesToCompare.map(ex => ``).join('')}`; tableHTML += `${exchangesToCompare.map(ex => ``).join('')}`; tableHTML += `
Fee Type${ex.name}
Maker Fee (%)${ex.makerFeePercent}
Taker Fee (%)${ex.takerFeePercent}
Token Discount Notes${ex.tokenDiscountNotes || 'N/A'}
${crypto} Withdrawal${feeInfo ? `${feeInfo.amount} ${feeInfo.currency} (${feeInfo.network || 'default'})` : 'N/A (or check notes)'}
Other Withdrawal FeesSee notes / full data
Fiat Deposit Details${ex.fiatDeposit.details || 'N/A'}
Fiat Withdrawal Details${ex.fiatWithdrawal.details || 'N/A'}
Other Notes${ex.customNotes || 'N/A'}
`; container.innerHTML = tableHTML; if(pdfButton) pdfButton.style.display = 'block'; } function calculateTradeFeesCEFC() { const selectedCheckboxes = document.querySelectorAll('.exchange-compare-checkbox:checked'); const selectedIds = Array.from(selectedCheckboxes).map(cb => cb.value); const tradeAmount = getNumValCEFC('tradeAmountCEFC'); const tradeCurrency = getStrValCEFC('tradeCurrencyCEFC'); const tradeType = getStrValCEFC('tradeTypeCEFC'); const resultDiv = document.getElementById('tradeFeeCalcResult'); if (selectedIds.length === 0) { alert("Please select at least one exchange from the list above."); resultDiv.innerHTML = ""; return; } if (isNaN(tradeAmount) || tradeAmount <= 0 || !tradeCurrency) { alert("Please enter a valid trade amount and currency."); resultDiv.innerHTML = ""; return; } let resultsHTML = "

Estimated Trading Fees:

    "; selectedIds.forEach(id => { const exchange = savedExchangesCEFC.find(ex => ex.id === id); if (exchange) { const feePercent = (tradeType === 'maker' ? exchange.makerFeePercent : exchange.takerFeePercent) / 100; const estimatedFee = tradeAmount * feePercent; resultsHTML += `
  • ${exchange.name}: ${estimatedFee.toFixed(Math.max(2, (tradeCurrency.toUpperCase()==='BTC'||tradeCurrency.toUpperCase()==='ETH'?6:2)))} ${tradeCurrency}
  • `; } }); resultsHTML += "
This is a basic estimation and doesn't include potential volume-based tier discounts or exchange token discounts unless you factor them into the base fee rates manually."; resultDiv.innerHTML = resultsHTML; } // LocalStorage Persistence function persistExchangesToLocalStorageCEFC() { try { localStorage.setItem('cryptoFeeComparatorExchanges', JSON.stringify(savedExchangesCEFC)); } catch (e) { console.warn("Could not save exchanges to LocalStorage (อาจจะเต็มหรือ private Browse):", e); // Maybe alert user if critical, or just proceed without persistence } } function loadExchangesFromLocalStorageCEFC() { try { const storedExchanges = localStorage.getItem('cryptoFeeComparatorExchanges'); if (storedExchanges) { savedExchangesCEFC = JSON.parse(storedExchanges); } } catch (e) { console.warn("Could not load exchanges from LocalStorage:", e); savedExchangesCEFC = []; // Start fresh if error } } function downloadFeeReportPDF() { const comparisonContainer = document.getElementById('comparisonTableContainer'); const tradeFeeCalcResult = document.getElementById('tradeFeeCalcResult').innerHTML; const pdfButton = document.getElementById('toolPdfDownloadCEFC'); if (!comparisonContainer.querySelector('table')) { alert("Please generate a comparison table first."); return; } if(pdfButton) pdfButton.style.display = 'none'; const { jsPDF } = window.jspdf; const pdf = new jsPDF('l', 'mm', 'a4'); // Landscape const pdfContentElement = document.createElement('div'); pdfContentElement.classList.add('pdf-content'); let html = `

Cryptocurrency Exchange Fee Comparison

`; html += `

Date: ${new Date().toLocaleDateString('en-US', { year: 'numeric', month: 'long', day: 'numeric' })}

`; html += `

This comparison is based on manually entered data. Always verify current fees on official exchange websites.


`; html += `

Fee Comparison Table:

`; html += comparisonContainer.innerHTML; // The table itself if (tradeFeeCalcResult.trim() !== "" && !tradeFeeCalcResult.includes("Please select")) { html += `

Trading Fee Estimator Results:

`; html += `
${tradeFeeCalcResult}
`; } pdfContentElement.innerHTML = html; document.body.appendChild(pdfContentElement); html2canvas(pdfContentElement, { scale: 1.2, useCORS: true, windowWidth: pdfContentElement.scrollWidth, windowHeight: pdfContentElement.scrollHeight }).then(canvas => { const imgData = canvas.toDataURL('image/png'); const pdfWidth = pdf.internal.pageSize.getWidth(); const pageHeight = pdf.internal.pageSize.getHeight(); const imgActualWidth = canvas.width; const imgActualHeight = canvas.height; const aspectRatio = imgActualWidth / imgActualHeight; const pageMargin = 10; let imgWidthInPdf = pdfWidth - (2 * pageMargin); let imgHeightInPdf = imgWidthInPdf / aspectRatio; let heightLeft = imgHeightInPdf; let currentYPos = pageMargin; pdf.addImage(imgData, 'PNG', pageMargin, currentYPos, imgWidthInPdf, imgHeightInPdf); heightLeft -= (pageHeight - (2 * pageMargin)); while (heightLeft > 0) { currentYPos = heightLeft - imgHeightInPdf - pageMargin; pdf.addPage(); pdf.addImage(imgData, 'PNG', pageMargin, currentYPos, imgWidthInPdf, imgHeightInPdf); heightLeft -= (pageHeight - (2*pageMargin)); } pdf.save('Crypto_Exchange_Fee_Comparison.pdf'); document.body.removeChild(pdfContentElement); if(pdfButton) pdfButton.style.display = 'block'; }).catch(error => { console.error("Error generating Fee Comparison PDF:", error); alert("Could not generate PDF. See console."); if(pdfButton) pdfButton.style.display = 'block'; if (document.body.contains(pdfContentElement)) { document.body.removeChild(pdfContentElement); } }); }
Scroll to Top