FBA Scout UK
by VelantoHub · 2026 Fees
🇬🇧 UK Market 2026 Fees Live
🧾 Invoice Pro📊 Keepaby VelantoHub
Step 1 — Enter Amazon ASIN
🔍
⚡ Auto-fetches weight, dimensions, category & 90-day average buybox price via Keepa API. You can edit price after.
📦
📐
Product Details
📏 Detecting...
g
× ×
💡 FBA tier auto-detected. Low-Price FBA applied automatically when sell price ≤ £20.
💷
Pricing
£
✏️ Edit manually or fetch from Keepa
£
VAT Rate on Sale
20%
⚠️ Not VAT registered? Set to 0%. Standard UK VAT = 20%.
💸
Additional Costs
£
£
£
£
£
⚙️
Fee Options
Hazmat / Lithium Battery Surcharge
+£0.10 per unit (Amazon regulated dangerous goods)
Media Closing Fee
Books, Music, DVD, Video Games: +£0.50 per unit
Prime Clothing Tiered Fee (£40+)
15% up to £40, then 7% above — Prime eligible clothing only
Include VAT on Amazon Fees
VAT-registered sellers: Amazon charges 20% VAT on referral + FBA fees
Profit per Unit
£0.00
Enter product details to begin
Net Margin
ROI
Total Amazon Fees
Net Revenue
Break-Even Price
// Price data stored from Keepa let _avgPrice = null; let _bbxPrice = null; let _priceSource = 'man'; // 'avg' | 'bbx' | 'man' // ── FBA FEE TABLES (2026 UK) ────────────────────────── const FBA_STD = { lenv20:1.83, lenv40:1.93, senv60:1.97, senv80:2.13, senv100:2.19, senv210:2.24, senv460:2.56, lenv:3.14, xlenv:3.37, sp150:3.37, sp400:3.45, sp1k:4.50, sp2k:5.42, lp1k:5.50, lp2k:6.50, lp5k:8.60, lp10k:12.50 }; const FBA_LP = { lenv20:1.463, lenv40:1.500, senv60:1.516, senv80:1.670, senv100:1.703, senv210:1.731, senv460:1.875, lenv:2.418, xlenv:2.653, sp150:2.674, sp400:2.705, sp1k:3.20, sp2k:4.10, lp1k:4.20, lp2k:5.30, lp5k:7.00, lp10k:10.50 }; const TNAME = { lenv20:'Light Envelope ≤20g', lenv40:'Light Envelope ≤40g', senv60:'Std Envelope ≤60g', senv80:'Std Envelope ≤80g', senv100:'Std Envelope ≤100g', senv210:'Std Envelope ≤210g', senv460:'Std Envelope ≤460g', lenv:'Large Envelope ≤960g', xlenv:'XL Envelope ≤960g', sp150:'Small Parcel ≤150g', sp400:'Small Parcel ≤400g', sp1k:'Std Parcel ≤1kg', sp2k:'Std Parcel ≤2kg', lp1k:'Large Parcel ≤1kg', lp2k:'Large Parcel ≤2kg', lp5k:'Large Parcel ≤5kg', lp10k:'Large Parcel ≤10kg' }; function detectTier(wg,l,w,h){ const [lo,mi,sh]=[l,w,h].sort((a,b)=>b-a); if(lo<=33&&mi<=23&&sh<=2.5){ if(wg<=20) return 'lenv20'; if(wg<=40) return 'lenv40'; if(wg<=60) return 'senv60'; if(wg<=80) return 'senv80'; if(wg<=100) return 'senv100'; if(wg<=210) return 'senv210'; if(wg<=460) return 'senv460'; } if(lo<=33&&mi<=23&&sh<=4&&wg<=960) return 'lenv'; if(lo<=33&&mi<=23&&sh<=6&&wg<=960) return 'xlenv'; if(lo<=35&&mi<=25&&sh<=12){ if(wg<=150) return 'sp150'; if(wg<=400) return 'sp400'; } if(wg<=1000) return 'sp1k'; if(wg<=2000) return 'sp2k'; if(wg<=10000) return 'lp1k'; return 'lp10k'; } function getRefAmt(cat, price, isPrime){ const MIN=0.25; switch(cat){ case 'beauty': case 'baby': return Math.max(price*(price<=10?.08:.15), MIN); case 'clothing': if(isPrime&&price>40) return Math.max(40*.15+(price-40)*.07, MIN); return Math.max(price*(price<=15?.05:price<=20?.10:.15), MIN); case 'grocery': case 'pet': case 'vitamins': return Math.max(price*(price<=10?.05:.15), MIN); case 'home_products': return Math.max(price*(price<=20?.08:.15), MIN); case 'electronics': return Math.max(price*.08, MIN); default: return Math.max(price*.15, MIN); } } function getRefLabel(cat, price, isPrime){ switch(cat){ case 'beauty': case 'baby': return price<=10?'8%':'15%'; case 'clothing': if(isPrime&&price>40) return 'Prime Tiered'; return price<=15?'5%':price<=20?'10%':'15%'; case 'grocery': case 'pet': case 'vitamins': return price<=10?'5%':'15%'; case 'home_products': return price<=20?'8%':'15%'; case 'electronics': return '8%'; default: return '15%'; } } // ══════════════════════════════════════════════════════ // MAIN CALCULATE — 100% AMZ Scout formula // Revenue = Price × (1 − VAT%) // Referral = Price × rate% (on gross) // Profit = Revenue − Referral − FBA − all costs // Margin = Profit / Price × 100 // ROI = Profit / COGS × 100 // ══════════════════════════════════════════════════════ function calc(){ const price = +gi('priceI').value||0; const cogs = +gi('cogsI').value ||0; const vatPct = +gi('vatR').value; const vatR = vatPct/100; const ship = +gi('shipI').value ||0; const cpc = +gi('cpcI').value ||0; const stor = +gi('storI').value ||0; const othr = +gi('othrI').value ||0; const cat = gi('catS').value; const fbaT = gi('fbaT').value; const wg = +gi('wgtI').value ||10; const l = +gi('dL').value ||7.9; const w = +gi('dW').value ||1.5; const h = +gi('dH').value ||1.5; const haz = gi('hazI').checked; const clos = gi('closI').checked; const prime = gi('primeI').checked; const tier = detectTier(wg,l,w,h); gi('szBadge').textContent = '📏 '+TNAME[tier]; // ── AMZ Scout exact formula ── const revenue = price*(1-vatR); const vatAmt = price-revenue; const refAmt = getRefAmt(cat,price,prime); const refLbl = getRefLabel(cat,price,prime); const tbl = fbaT==='lp'?FBA_LP:FBA_STD; let fbaFee = tbl[tier]||tbl['sp400']; if(haz) fbaFee=+(fbaFee+.10).toFixed(2); if(clos) fbaFee=+(fbaFee+.50).toFixed(2); const totalFBA = refAmt+fbaFee; const profit = revenue-refAmt-fbaFee-cogs-ship-cpc-stor-othr; const margin = price>0?(profit/price)*100:0; const roi = cogs>0?(profit/cogs)*100:0; // ── Hero update ── const pa=gi('phAmt'); pa.textContent=(profit>=0?'+£':'-£')+Math.abs(profit).toFixed(2); pa.className='phamt'+(profit<0?' loss':''); gi('pBar').className='pbar'+(profit<0?' loss':''); gi('phSub').textContent = profit>=0 ? `Profit £${profit.toFixed(2)} · ${margin.toFixed(1)}% net margin` : `Loss £${Math.abs(profit).toFixed(2)} — review costs or raise price`; sm('mMgn', margin.toFixed(2)+'%', margin>=20?'g':margin>=8?'o':'r'); sm('mROI', roi.toFixed(2)+'%', roi>=50?'g':roi>=20?'o':'r'); sm('mFBA','£'+totalFBA.toFixed(2),'o'); sm('mRev','£'+revenue.toFixed(2),'b'); sm('mBEP',bep>0?'£'+bep.toFixed(2):'—',''); // ── Breakdown ── const pct=v=>price>0?(Math.abs(v)/price*100).toFixed(1)+'%':'—'; const rows=[ {sec:'Revenue'}, {n:'Sale Price (inc. VAT)', v:price, cls:'dim', dot:'#2563eb', pct:'100%'}, {n:`VAT on Sale (${vatPct}%) → HMRC`,v:-vatAmt, cls:'neg', dot:'#b45309', pct:pct(vatAmt)}, {n:'Net Revenue (ex-VAT)', v:revenue, cls:'pos', dot:'#059669', pct:pct(vatAmt)+' net', bold:true}, {sec:'Amazon Fees'}, {n:`Referral Fee (${refLbl})`, v:-refAmt, cls:'neg', dot:'#dc2626', pct:pct(refAmt)}, {n:`FBA Fulfilment (${TNAME[tier]})`,v:-fbaFee, cls:'neg', dot:'#7c3aed', pct:pct(fbaFee)}, haz ?{n:'Hazmat Surcharge', v:-.10, cls:'neg', dot:'#ef4444', pct:pct(.10)}:null, clos ?{n:'Closing Fee (Media)', v:-.50, cls:'neg', dot:'#ef4444', pct:pct(.50)}:null, {n:'Total FBA Fee', v:-totalFBA,cls:'neg', dot:'#dc2626', pct:pct(totalFBA), bold:true}, {sec:'Your Costs'}, {n:'Product Cost (COGS)', v:-cogs, cls:'neg', dot:'#475569', pct:pct(cogs)}, ship>0?{n:'Shipping Cost', v:-ship, cls:'neg', dot:'#94a3b8', pct:pct(ship)}:null, cpc>0 ?{n:'CPC / Ad Spend', v:-cpc, cls:'neg', dot:'#94a3b8', pct:pct(cpc)}:null, stor>0?{n:'Monthly Storage', v:-stor, cls:'neg', dot:'#94a3b8', pct:pct(stor)}:null, othr>0?{n:'Other Costs', v:-othr, cls:'neg', dot:'#94a3b8', pct:pct(othr)}:null, ].filter(Boolean); let bh=''; rows.forEach(r=>{ if(r.sec){bh+=`
${r.sec}
`;return} bh+=`
${r.n} ${r.pct}
${r.v>=0?'£':'-£'}${Math.abs(r.v).toFixed(2)}
`; }); bh+=`
Profit per Unit
${profit>=0?'+£':'-£'}${Math.abs(profit).toFixed(2)}
`; gi('bkL').innerHTML=bh; // ── Visual ── const vd=[ {l:'Sale Price', a:price, c:'#2563eb'}, {l:'VAT→HMRC', a:-vatAmt, c:'#b45309'}, {l:'Referral', a:-refAmt, c:'#dc2626'}, {l:'FBA Fee', a:-fbaFee, c:'#7c3aed'}, {l:'COGS', a:-cogs, c:'#475569'}, ...(ship>0?[{l:'Shipping',a:-ship,c:'#94a3b8'}]:[]), ...(cpc>0 ?[{l:'CPC', a:-cpc, c:'#94a3b8'}]:[]), ...(stor>0?[{l:'Storage',a:-stor,c:'#94a3b8'}]:[]), {l:'Profit', a:profit, c:profit>=0?'#059669':'#dc2626'}, ]; gi('visL').innerHTML=vd.map(d=>{ const pw=price>0?Math.max(0,Math.min(Math.abs(d.a)/price*100,100)):0; return `
${d.l}
${d.a>=0?'+£':'-£'}${Math.abs(d.a).toFixed(2)}
`; }).join(''); // ── VAT Detail ── const vatOnRef=refAmt*.20, vatOnFBA=fbaFee*.20; gi('vatL').innerHTML=`
VAT on Your Sale Price
Sale Price (VAT-inclusive)£${price.toFixed(2)}
VAT Rate Applied${vatPct}%
VAT Amount → HMRC-£${vatAmt.toFixed(2)}
Net Revenue (ex-VAT)£${revenue.toFixed(2)}
Amazon Charges 20% VAT on Their Own Fees
Referral Fee (base)-£${refAmt.toFixed(2)}
↳ 20% VAT on Referral-£${vatOnRef.toFixed(2)}
FBA Fulfilment (base)-£${fbaFee.toFixed(2)}
↳ 20% VAT on FBA Fee-£${vatOnFBA.toFixed(2)}
Total Fee VAT-£${(vatOnRef+vatOnFBA).toFixed(2)}
ℹ️ Non-VAT-registered sellers: set VAT rate to 0%. Your sale price is VAT-inclusive — the VAT amount is what you owe to HMRC, not additional income.
Formula (matches AMZ Scout exactly):
Revenue = Price × (1 − VAT%)
Referral = Full Price × Rate%
Profit = Revenue − Referral − FBA − All Costs
Margin = Profit ÷ Price × 100  |  ROI = Profit ÷ COGS × 100
`; } // ══ PRICE SOURCE ══════════════════════════════════════ function setPriceSource(src){ _priceSource=src; ['avg','bbx','man'].forEach(s=>{ gi('ps'+s.charAt(0).toUpperCase()+s.slice(1)).classList.toggle('active',s===src); }); if(src==='avg'&&_avgPrice!==null){ gi('priceI').value=_avgPrice.toFixed(2); gi('priceNote').textContent='📊 90-day average buybox price from Keepa'; gi('priceNote').className='price-note avg'; } else if(src==='bbx'&&_bbxPrice!==null){ gi('priceI').value=_bbxPrice.toFixed(2); gi('priceNote').textContent='🏷️ Current buybox price from Keepa'; gi('priceNote').className='price-note bbx'; } else if(src==='man'){ gi('priceNote').textContent='✏️ Manually entered price'; gi('priceNote').className='price-note'; } calc(); } function onPriceManual(){ _priceSource='man'; ['avg','bbx','man'].forEach(s=>{ const el=gi('ps'+s.charAt(0).toUpperCase()+s.slice(1)); if(el) el.classList.toggle('active',s==='man'); }); gi('priceNote').textContent='✏️ Manually entered price'; gi('priceNote').className='price-note'; calc(); } // ══ KEEPA FETCH ════════════════════════════════════════ async function fetchK(){ const asin=gi('asinI').value.trim().toUpperCase(); if(!asin||asin.length<10){showMsg('err','⚠️ Enter a valid 10-character ASIN');return} if(!KEEPA_KEY){demoFetch(asin);return} const btn=gi('fetchBtn'); btn.classList.add('ld'); hideMsg(); try{ // Request stats=1 for 90-day avg, history=1 for price history const r=await fetch(`https://api.keepa.com/product?key=${KEEPA_KEY}&domain=2&asin=${asin}&stats=90&history=0`); const d=await r.json(); if(!d.products?.length){showMsg('err','❌ Product not found. Check the ASIN.');return} applyKeepa(d.products[0]); }catch(e){ showMsg('err','❌ Keepa API error. Check your key or network connection.'); }finally{btn.classList.remove('ld')} } function applyKeepa(p){ const title=p.title||'Unknown Product'; gi('aTitle').textContent=title; // Category const catStr=(p.categoryTree?.[0]?.name||'').toLowerCase(); gi('aCat').textContent=p.categoryTree?.[0]?.name||'—'; mapCat(catStr); // Weight (grams — Keepa gives grams directly) if(p.packageWeight){ const wg=Math.round(p.packageWeight); gi('wgtI').value=wg; gi('aWgt').textContent=wg+'g'; } // Dimensions mm→cm if(p.packageLength&&p.packageWidth&&p.packageHeight){ const [l,w,h]=[p.packageLength/10,p.packageWidth/10,p.packageHeight/10].map(x=>+x.toFixed(1)); gi('dL').value=l; gi('dW').value=w; gi('dH').value=h; gi('aDims').textContent=`${l}×${w}×${h}cm`; } // ── PRICE: 90-day average buybox (primary) + current buybox (secondary) ── // Keepa stats object with stats=90: stats.avg[10] = 90-day avg buybox new (in pence) // stats.current[10] = current buybox new (in pence) _avgPrice=null; _bbxPrice=null; if(p.stats){ // 90-day average — stats.avg array, index 10 = BUY_BOX_NEW if(p.stats.avg&&p.stats.avg[10]&&p.stats.avg[10]>0){ _avgPrice=p.stats.avg[10]/100; } // Current buybox if(p.stats.current&&p.stats.current[10]&&p.stats.current[10]>0){ _bbxPrice=p.stats.current[10]/100; } } // Fallback: try min/max avg fields if(!_avgPrice&&p.stats?.avg90&&p.stats.avg90[10]>0){ _avgPrice=p.stats.avg90[10]/100; } // Set default price = 90-day average (preferred) or buybox const usePrice=_avgPrice||_bbxPrice||null; if(usePrice){ gi('priceI').value=usePrice.toFixed(2); gi('priceSourceRow').style.display='flex'; _priceSource=_avgPrice?'avg':'bbx'; if(_avgPrice){ gi('psAvg').classList.add('active'); gi('psBbx').classList.remove('active'); gi('psMan').classList.remove('active'); gi('aAvg').style.display='inline'; gi('aAvg').textContent=`📊 £${_avgPrice.toFixed(2)} 90d avg`; gi('priceNote').textContent=`📊 90-day average buybox price — edit if needed`; gi('priceNote').className='price-note avg'; } if(_bbxPrice){ gi('aBbx').textContent=`🏷️ £${_bbxPrice.toFixed(2)} Buybox`; } } // ── Product hero card ────────────────────────────── // Thumbnail in ASIN card gi('aThumb').innerHTML = '📦'; gi('aPrev').classList.add('show'); // Big product hero card gi('prodHeroTitle').textContent = title; gi('prodAmazonLink').href = `https://www.amazon.co.uk/dp/${p.asin||''}`; // Product image from Keepa (imagesCSV contains image IDs) const imgEl = gi('prodImgEl'); const imgPh = gi('prodImgPh'); if(p.imagesCSV){ const firstImg = p.imagesCSV.split(',')[0].trim(); if(firstImg){ const imgUrl = `https://images-na.ssl-images-amazon.com/images/I/${firstImg}._AC_SX180_.jpg`; imgEl.src = imgUrl; imgEl.style.display = 'block'; imgPh.style.display = 'none'; imgEl.onerror = ()=>{ imgEl.style.display='none'; imgPh.style.display='block'; }; // Also update thumb in asin card gi('aThumb').innerHTML = ``; } } // Meta grid const meta = []; if(p.packageWeight) meta.push({l:'Weight', v:Math.round(p.packageWeight)+'g', c:'var(--text)'}); if(p.packageLength && p.packageWidth && p.packageHeight){ const [l,w,h]=[p.packageLength/10,p.packageWidth/10,p.packageHeight/10].map(x=>+x.toFixed(1)); meta.push({l:'Dimensions', v:`${l}×${w}×${h}cm`, c:'var(--text)'}); } if(_avgPrice) meta.push({l:'90d Avg Price', v:'£'+_avgPrice.toFixed(2), c:'var(--green)'}); if(_bbxPrice) meta.push({l:'Buybox Price', v:'£'+_bbxPrice.toFixed(2), c:'var(--blue)'}); if(p.stats?.current?.[3]>0) meta.push({l:'BSR', v:'#'+p.stats.current[3].toLocaleString(), c:'var(--amber)'}); if(p.categoryTree?.[0]) meta.push({l:'Category', v:p.categoryTree[0].name, c:'var(--text2)'}); gi('prodMetaGrid').innerHTML = meta.map(m=> `
${m.l}
${m.v}
` ).join(''); // Rating const rating = p.stats?.current?.[16]; const reviewCount = p.stats?.current?.[17]; if(rating && rating > 0){ const stars = rating/10; const fullStars = Math.floor(stars); const halfStar = stars%1>=0.5; gi('prodStars').textContent = '★'.repeat(fullStars)+(halfStar?'½':'')+'☆'.repeat(5-fullStars-( halfStar?1:0))+` ${stars.toFixed(1)}`; if(reviewCount>0) gi('prodReviews').textContent = reviewCount.toLocaleString()+' reviews'; if(p.stats?.current?.[3]>0) gi('prodBSR').textContent = 'BSR #'+p.stats.current[3].toLocaleString(); gi('prodRating').style.display='flex'; } gi('prodHeroCard').style.display='block'; const priceInfo=_avgPrice?` · 90d avg £${_avgPrice.toFixed(2)}`:''; showMsg('ok',`✅ Loaded: ${title.substring(0,70)}${priceInfo}`); calc(); } // Demo mode (no API key) function demoFetch(asin){ const btn=gi('fetchBtn'); btn.classList.add('ld'); hideMsg(); const demos={ 'B09YQRR8WS':{t:'Ilia Beauty | Fullest Volumizing Mascara | 4ml',cat:'beauty',wg:10,l:7.9,w:1.5,h:1.5,avg:20.79,bbx:21.49}, 'B0B2WQLHBK':{t:'CeraVe Skin Renewing Night Cream 48g',cat:'beauty',wg:185,l:8.2,w:6.1,h:5.8,avg:12.49,bbx:12.99}, 'B07XVKRBDR':{t:'GuruNanda Whitening Toothbrush',cat:'beauty',wg:40,l:22,w:3,h:2,avg:4.65,bbx:4.80}, }; const d=demos[asin]||{t:`Demo Product (${asin})`,cat:'other',wg:350,l:20,w:15,h:10,avg:19.49,bbx:19.99}; setTimeout(()=>{ btn.classList.remove('ld'); gi('aTitle').textContent=d.t; gi('aCat').textContent=d.cat; gi('aWgt').textContent=d.wg+'g'; gi('aDims').textContent=`${d.l}×${d.w}×${d.h}cm`; gi('wgtI').value=d.wg; gi('dL').value=d.l; gi('dW').value=d.w; gi('dH').value=d.h; gi('catS').value=d.cat; _avgPrice=d.avg; _bbxPrice=d.bbx; _priceSource='avg'; gi('priceI').value=d.avg.toFixed(2); gi('priceSourceRow').style.display='flex'; gi('psAvg').classList.add('active'); gi('psBbx').classList.remove('active'); gi('psMan').classList.remove('active'); gi('aAvg').style.display='inline'; gi('aAvg').textContent=`📊 £${d.avg.toFixed(2)} 90d avg`; gi('aBbx').textContent=`🏷️ £${d.bbx.toFixed(2)} Buybox`; gi('priceNote').textContent=`📊 90-day average buybox price — edit if needed`; gi('priceNote').className='price-note avg'; gi('aPrev').classList.add('show'); // Show demo hero card gi('prodHeroTitle').textContent = d.t; gi('prodAmazonLink').href = `https://www.amazon.co.uk/s?k=${asin}`; gi('prodImgPh').style.display='block'; gi('prodImgEl').style.display='none'; gi('prodMetaGrid').innerHTML = [ {l:'Weight',v:d.wg+'g',c:'var(--text)'}, {l:'Dimensions',v:`${d.l}×${d.w}×${d.h}cm`,c:'var(--text)'}, {l:'90d Avg',v:'£'+d.avg.toFixed(2),c:'var(--green)'}, {l:'Buybox',v:'£'+d.bbx.toFixed(2),c:'var(--blue)'}, ].map(m=>`
${m.l}
${m.v}
`).join(''); gi('prodRating').style.display='none'; gi('prodHeroCard').style.display='block'; showMsg('ok',`✅ Demo loaded · 90-day avg £${d.avg.toFixed(2)} set as default · Add Keepa API key for live data`); calc(); },750); } function mapCat(s){ const sel=gi('catS'); if(s.includes('beauty')||s.includes('health')) sel.value='beauty'; else if(s.includes('cloth')||s.includes('fashion')) sel.value='clothing'; else if(s.includes('grocery')||s.includes('food')) sel.value='grocery'; else if(s.includes('kitchen')||s.includes('home')) sel.value='home'; else if(s.includes('electron')||s.includes('computer')) sel.value='electronics'; else if(s.includes('book')) sel.value='books'; else if(s.includes('toy')) sel.value='toys'; else if(s.includes('sport')) sel.value='sports'; else if(s.includes('pet')) sel.value='pet'; else if(s.includes('vitamin')||s.includes('supplement')) sel.value='vitamins'; else if(s.includes('baby')) sel.value='baby'; else if(s.includes('automotive')||s.includes('car')) sel.value='automotive'; } function syncVat(){const v=gi('vatR').value;gi('vatNum').textContent=v+'%';calc()} function bTab(name,btn){ document.querySelectorAll('.btab').forEach(b=>b.classList.remove('active')); document.querySelectorAll('.bpanel').forEach(p=>p.classList.remove('active')); btn.classList.add('active'); gi('bp-'+name).classList.add('active'); } function sm(id,val,cls){ const el=gi(id); el.textContent=val; el.className='mval '+(cls||''); el.classList.remove('flashed'); void el.offsetWidth; el.classList.add('flashed'); } function showMsg(t,m){const e=gi('aMsg');e.className=`amsg ${t} show`;e.textContent=m} function hideMsg(){gi('aMsg').classList.remove('show')} function gi(i){return document.getElementById(i)} // ══ MODAL CONTENT ══════════════════════════════════════ const MODALS = { privacy:{ title:'Privacy Policy', body:`

1. Information We Collect

This FBA Calculator tool does not collect, store, or transmit any personal data. All calculations are performed locally in your browser. No ASIN search data, pricing data, or product information is stored on our servers.

2. Keepa API Usage

When you use the Keepa API feature, your ASIN queries are sent directly to Keepa's servers using your own API key. We do not intercept, store, or log these requests. Please refer to Keepa's Privacy Policy for details.

3. Cookies

This tool does not use cookies or any local storage to track users. Your settings are not saved between sessions.

4. Third-Party Services

We use Google Fonts (Inter) for typography. Google may collect standard web font usage data. No advertising or tracking scripts are included.

5. Data Security

Since no data is transmitted to our servers, your product research remains entirely private. Your Keepa API key is used only in your browser and is never sent to VelantoHub servers.

6. Contact

For privacy concerns, contact us at VelantoHub.site

Last updated: March 2026 · VelantoHub.site

` }, terms:{ title:'Terms of Use', body:`

1. Acceptance of Terms

By using the FBA Scout UK Calculator ("the Tool"), you agree to these Terms of Use. If you do not agree, please do not use the Tool.

2. License

This tool is provided for personal and commercial use by Amazon FBA sellers. You may not reproduce, resell, or redistribute this tool or its code without written permission from VelantoHub.

3. Intellectual Property

© 2026 VelantoHub.site — All Rights Reserved. Developed by Kashif Bilal. The FBA Scout UK branding, design, and code are proprietary to VelantoHub.

4. Accuracy Disclaimer

Fee calculations are based on Amazon UK's publicly available 2026 fee schedule and are cross-verified with AMZ Scout methodology. However, Amazon may update fees without notice. Always verify with Amazon Seller Central.

5. Prohibited Uses

6. Governing Law

These terms are governed by applicable law. Disputes shall be resolved through good faith negotiation.

Last updated: March 2026 · © VelantoHub.site

` }, disclaimer:{ title:'Disclaimer', body:`

Accuracy of Calculations

The FBA Scout UK Calculator provides profit estimates based on Amazon UK's 2026 fee schedule. While we strive for accuracy, this tool is for informational purposes only and should not be used as the sole basis for business decisions.

Fee Changes

Amazon regularly updates its fee structures. Referral fees, FBA fulfilment fees, and other charges may change with 30-days' notice. Always verify current fees in Amazon Seller Central before making purchasing decisions.

VAT

VAT calculations shown are estimates. If you are VAT-registered, consult a qualified accountant for accurate VAT accounting. Non-VAT-registered sellers should set VAT rate to 0%.

Keepa Data

Product data, prices, and dimensions fetched via Keepa API are provided by Keepa and may not always reflect real-time Amazon data. VelantoHub is not responsible for inaccuracies in Keepa's data.

No Financial Advice

This tool does not constitute financial, tax, or legal advice. Always conduct your own due diligence before sourcing products.

Limitation of Liability

VelantoHub and Kashif Bilal shall not be liable for any losses arising from reliance on calculations produced by this tool.

© 2026 VelantoHub.site · Developed by Kashif Bilal · All Rights Reserved

` } }; function openModal(type){ const m=MODALS[type]; if(!m) return; gi('modalTitle').textContent=m.title; gi('modalBody').innerHTML=m.body; gi('modal').classList.add('open'); document.body.style.overflow='hidden'; } function closeModal(){ gi('modal').classList.remove('open'); document.body.style.overflow=''; } document.addEventListener('keydown',e=>{if(e.key==='Escape') closeModal()}); window.addEventListener('load', calc);