[{"data":1,"prerenderedAt":254},["Reactive",2],{"case-study-/en/crypto-tax-tool":3,"case-studies-/en/crypto-tax-tool":240},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"caseStudy":10,"locale":5,"order":11,"seoTitle":12,"intro":13,"ogImage":14,"facts":15,"techs":25,"links":32,"body":36,"_type":235,"_id":236,"_source":237,"_file":238,"_extension":239},"/en/crypto-tax-tool","en",false,"","Crypto Tax Tool","The Crypto Tax Tool analyses CoinTracking exports: tax-free status with an adjustable holding period, holdings at current prices, gain and loss analysis and a transaction list. Runs entirely in the browser.",true,4,"Crypto Tax Tool: analyse your crypto portfolio and holding periods – FoxWebcraft","The Crypto Tax Tool analyses your CoinTracking trade history. It shows when purchased crypto can be sold tax-free, with any holding period you set, such as the 24 months that apply in Croatia. It also offers an overview of your holdings at current prices, the portfolio distribution, a gain and loss analysis and a filterable list of all transactions.","/projects/cryptotaxtool2.webp",[16,19,22],{"label":17,"value":18},"Project type","Own project, free to use",{"label":20,"value":21},"Timeline","October 2025 to March 2026",{"label":23,"value":24},"Role","Idea, design and development",[26,27,28,29,30,31],"React","Next.js","TypeScript","Tailwind CSS","TanStack Query","CoinGecko API",[33],{"label":34,"href":35},"cryptotaxtool.foxwebcraft.com","https://cryptotaxtool.foxwebcraft.com/",{"type":37,"children":38,"toc":222},"root",[39,48,54,59,65,70,146,151,157,164,169,175,180,186,191,197,202,208],{"type":40,"tag":41,"props":42,"children":44},"element","h2",{"id":43},"the-problem",[45],{"type":46,"value":47},"text","The problem",{"type":40,"tag":49,"props":50,"children":51},"p",{},[52],{"type":46,"value":53},"CoinTracking and similar tools calculate the tax-free status of crypto only with the German holding period of one year. In Croatia, for example, the holding period is two years. Anyone who pays taxes there cannot see in these tools which holdings are already tax-free.",{"type":40,"tag":49,"props":55,"children":56},{},[57],{"type":46,"value":58},"So the Crypto Tax Tool was built as an add-on to CoinTracking: it reads the export and uses the holding period you set yourself. It also comes with a more modern interface.",{"type":40,"tag":41,"props":60,"children":62},{"id":61},"the-solution",[63],{"type":46,"value":64},"The solution",{"type":40,"tag":49,"props":66,"children":67},{},[68],{"type":46,"value":69},"The tool is split into three areas: tax-free status, holdings and transactions.",{"type":40,"tag":71,"props":72,"children":73},"ul",{},[74,86,96,106,116,126,136],{"type":40,"tag":75,"props":76,"children":77},"li",{},[78,84],{"type":40,"tag":79,"props":80,"children":81},"strong",{},[82],{"type":46,"value":83},"Import:",{"type":46,"value":85}," Upload your trade history as a CSV export from CoinTracking. Alternatively, download a template and fill it with your own transactions. Sample data lets you try the tool without your own data.",{"type":40,"tag":75,"props":87,"children":88},{},[89,94],{"type":40,"tag":79,"props":90,"children":91},{},[92],{"type":46,"value":93},"Tax-free status per coin:",{"type":46,"value":95}," All lots still held, with purchase date, tax-free date, remaining amount and status. The holding period is set in months, the default is 12 months.",{"type":40,"tag":75,"props":97,"children":98},{},[99,104],{"type":40,"tag":79,"props":100,"children":101},{},[102],{"type":46,"value":103},"Outlook:",{"type":46,"value":105}," Which amounts become tax-free in the coming months, for 6 to 24 months ahead.",{"type":40,"tag":75,"props":107,"children":108},{},[109,114],{"type":40,"tag":79,"props":110,"children":111},{},[112],{"type":46,"value":113},"Holdings at current prices:",{"type":46,"value":115}," Amount, price and value of each coin in euros and US dollars, plus the total portfolio value. Prices come live from the CoinGecko API.",{"type":40,"tag":75,"props":117,"children":118},{},[119,124],{"type":40,"tag":79,"props":120,"children":121},{},[122],{"type":46,"value":123},"Portfolio distribution:",{"type":46,"value":125}," A chart shows each coin's share of the total value.",{"type":40,"tag":75,"props":127,"children":128},{},[129,134],{"type":40,"tag":79,"props":130,"children":131},{},[132],{"type":46,"value":133},"Gain and loss analysis:",{"type":46,"value":135}," Gains and losses per month or year, filterable by coin and period.",{"type":40,"tag":75,"props":137,"children":138},{},[139,144],{"type":40,"tag":79,"props":140,"children":141},{},[142],{"type":46,"value":143},"Transaction list:",{"type":46,"value":145}," All imported transactions, filterable by coin, exchange, group, type, year and month.",{"type":40,"tag":147,"props":148,"children":150},"case-gallery",{":images":149},"[{\"src\":\"/projects/cryptotaxtool3.webp\",\"alt\":\"Crypto Tax Tool start page with an explanation, CSV import and holding period setting\",\"caption\":\"Data import and holding period setting\"},{\"src\":\"/projects/cryptotaxtool1.webp\",\"alt\":\"Overview per coin with active lots, tax-free dates and an outlook on the next 12 months\",\"caption\":\"Tax status per lot and outlook on the coming months\"},{\"src\":\"/projects/cryptotaxtool2.webp\",\"alt\":\"Holdings overview with current prices, portfolio distribution as a donut chart and monthly gain and loss analysis\",\"caption\":\"Holdings, portfolio distribution and gain and loss analysis\"}]",[],{"type":40,"tag":41,"props":152,"children":154},{"id":153},"technical-challenges",[155],{"type":46,"value":156},"Technical challenges",{"type":40,"tag":158,"props":159,"children":161},"h3",{"id":160},"matching-sales-to-the-right-purchases",[162],{"type":46,"value":163},"Matching sales to the right purchases",{"type":40,"tag":49,"props":165,"children":166},{},[167],{"type":46,"value":168},"For the holding period, what matters is exactly when the sold amount was bought. The tool matches sales using FIFO: what was bought first counts as sold first. After a partial sale, the rest of the affected lot keeps its original purchase date. Swaps that CoinTracking marks as non-taxable keep the original purchase date.",{"type":40,"tag":158,"props":170,"children":172},{"id":171},"recognising-transfers-between-exchanges",[173],{"type":46,"value":174},"Recognising transfers between exchanges",{"type":40,"tag":49,"props":176,"children":177},{},[178],{"type":46,"value":179},"Sending coins from one exchange to another is not a sale. The tool therefore looks for a matching deposit within seven days of each withdrawal and only treats the network fee as a disposal. Deposits without a match, for example from mining, count as new purchases.",{"type":40,"tag":158,"props":181,"children":183},{"id":182},"the-cointracking-format",[184],{"type":46,"value":185},"The CoinTracking format",{"type":40,"tag":49,"props":187,"children":188},{},[189],{"type":46,"value":190},"The exports mix columns for euros and crypto, use German date formats and placeholders for empty values. The import detects for each row whether it is a purchase, sale, swap, deposit, withdrawal or interest income.",{"type":40,"tag":158,"props":192,"children":194},{"id":193},"privacy-everything-stays-in-the-browser",[195],{"type":46,"value":196},"Privacy: everything stays in the browser",{"type":40,"tag":49,"props":198,"children":199},{},[200],{"type":46,"value":201},"Transaction data is sensitive. That is why the tool runs entirely in the browser, without a server or a database. Settings are kept in the browser's local storage. Only the current prices are fetched from the public CoinGecko API, and no transaction data is sent.",{"type":40,"tag":41,"props":203,"children":205},{"id":204},"the-result",[206],{"type":46,"value":207},"The result",{"type":40,"tag":49,"props":209,"children":210},{},[211,213,220],{"type":46,"value":212},"The tool is free to use at ",{"type":40,"tag":214,"props":215,"children":218},"a",{"href":35,"rel":216},[217],"nofollow",[219],{"type":46,"value":34},{"type":46,"value":221},". As a static website without a back end, it is cheap to run and fast: Lighthouse measures a desktop performance score of 100. A notice in the tool makes clear that it is not a substitute for tax advice.",{"title":7,"searchDepth":223,"depth":223,"links":224},2,[225,226,227,234],{"id":43,"depth":223,"text":47},{"id":61,"depth":223,"text":64},{"id":153,"depth":223,"text":156,"children":228},[229,231,232,233],{"id":160,"depth":230,"text":163},3,{"id":171,"depth":230,"text":174},{"id":182,"depth":230,"text":185},{"id":193,"depth":230,"text":196},{"id":204,"depth":223,"text":207},"markdown","content:en:crypto-tax-tool.md","content","en/crypto-tax-tool.md","md",[241,246,250],{"_path":242,"title":243,"description":244,"order":245},"/en/hostcraft","Hostcraft","Hostcraft gives holiday hosts their own booking website with calendar sync to Airbnb and Booking.com. Built with Next.js, Payload CMS and Stripe.",1,{"_path":247,"title":248,"description":249,"order":223},"/en/mart","Mart App","MART is an iOS and Android app that researchers use to run surveys and collect smartphone usage data. Used in a study at FU Berlin with 1,780 participants.",{"_path":251,"title":252,"description":253,"order":230},"/en/autentik","autentik","autentik is a knowledge network built around the connections between content. Millions of entries from MusicBrainz, Wikipedia and Wikidata in Neo4j, built with Nuxt and D3.js.",1791468982197]