Ik heb hier eerder ook al een userscript voor geschreven dat je heel veel opties geeft om per maand te downloaden:ironheart schreef op maandag 17 november 2025 @ 17:14:Waarom deze post?
Omdat ICS geen directe koppeling heeft met o.a. YNAB en de standaard CSV-export niet direct bruikbaar is, heb ik een simpele oplossing gemaakt die met één klik de laatste 3 maanden aan definitief geboekte ICS-transacties downloadt in het juiste CSV-formaat voor YNAB.
Alles gebeurt volledig lokaal in je browser, dus niks wordt geüpload of gedeeld.Belangrijk
- Transacties met de status “Gereserveerd” worden automatisch overgeslagen omdat dit nog niet definitief verwerkte bedragen zijn en dus later kunnen wijzigen of vervallen.
Voordelen
- Geen handmatige CSV-bewerking meer
- Geen extensies, scripts, third-party converters of uploads
- Automatisch filter: vandaag minus 3 maanden
- Werkt in elke Chromium-browser
- Volledig privacy-proof (client-side in je eigen browser)
Installatie
- Open Chrome (of andere Chromium-browser)
- Toon bladwijzerbalk (Ctrl+Shift+B)
- Voeg een nieuwe bladwijzer toe en geef hem een naam, bijv. “ICS → YNAB Export”
- Plak onderstaande code in het URL-veld
code:
1javascript:(function(){try{const m={jan:0,feb:1,mrt:2,apr:3,mei:4,jun:5,jul:6,aug:7,sep:8,okt:9,nov:10,dec:11};const now=new Date();const cut=new Date();cut.setMonth(cut.getMonth()-3);cut.setHours(0,0,0,0);const end=new Date();end.setHours(23,59,59,999);function parseDate(txt){if(!txt)return null;let t=txt.trim().toLowerCase().replace(/\./g,'');const p=t.split(/\s+/);if(p.length<3)return null;const d=parseInt(p[0],10);const monStr=p[1];const y=parseInt(p[2],10);const mon=m[monStr];if(isNaN(d)||isNaN(y)||mon==null)return null;const dt=new Date(y,mon,d);dt.setHours(0,0,0,0);return dt;}function parseAmount(txt){if(!txt)return NaN;let t=txt.trim();t=t.replace(/[€\s\u00A0]/g,'');t=t.replace(/\./g,'');t=t.replace(',', '.');t=t.replace(/[^\d\.\-]/g,'');let v=parseFloat(t);if(isNaN(v))return NaN;return Math.abs(v);}const results=[];const containers=document.querySelectorAll('.period-transactions');containers.forEach(function(container){let currentDate=null;Array.from(container.children).forEach(function(child){if(child.querySelector&&child.querySelector('.transaction-date-divider span')){const span=child.querySelector('.transaction-date-divider span');const dt=parseDate(span.textContent);if(dt)currentDate=dt;return;}const link=child.querySelector&&child.querySelector('a.transaction.no-link-style');if(!link||!currentDate)return;const date=currentDate;if(date<cut||date>end)return;const payeeEl=link.querySelector('.transaction-headline1');const amountEl=link.querySelector('.transaction-amount');if(!amountEl)return;var headline2Els=link.querySelectorAll('.transaction-headline2');var isReserved=false;Array.prototype.forEach.call(headline2Els,function(el){if(el.textContent&&el.textContent.toLowerCase().indexOf('gereserveerd')!==-1){isReserved=true;}});if(isReserved)return;const payee=(payeeEl?payeeEl.textContent:'Unknown').trim().replace(/\s+/g,' ');const rawAmount=amountEl.textContent;let amount=parseAmount(rawAmount);if(isNaN(amount))return;const isPosAttr=amountEl.getAttribute('data-is-positive');const isPos=isPosAttr==='true';if(!isPos)amount=-amount;const iso=date.toLocaleDateString('en-CA');results.push({date:iso,payee:payee,memo:'ICS import',amount:amount.toFixed(2)});});});if(!results.length){alert('No transactions found within last 3 months.');return;}function esc(v){return '"'+String(v).replace(/"/g,'""')+'"';}let csv='Date,Payee,Memo,Amount\n'+results.map(function(r){return[esc(r.date),esc(r.payee),esc(r.memo),esc(r.amount)].join(',');}).join('\n');const blob=new Blob([csv],{type:'text/csv'});const url=URL.createObjectURL(blob);const a=document.createElement('a');a.href=url;a.download='ics_ynab_'+now.toISOString().slice(0,10)+'.csv';document.body.appendChild(a);a.click();setTimeout(function(){URL.revokeObjectURL(url);a.remove();},2000);}catch(e){console.error(e);alert('Error: '+e.message);}})();Gebruik
- Log in bij ICS
- Ga naar je Transacties en klap periodes open
- Klik op de bookmarklet
- CSV wordt automatisch gedownload → importeer in YNAB
Toekomst / uitbreidingen
Extra: Ik heb hierover ook een uitgebreid engelstalig stappenartikel geschreven op Medium, voor wie meer achtergrond en uitleg wil:
- Als ICS de HTML verandert kan ik een update plaatsen
- Kan eenvoudig worden aangepast voor Firefly III, Spendee, Excel of andere budgettools
Medium
Lees-tijd en claps worden altijd gewaardeerd.
https://github.com/IeuanK/ICS-Exporter
Fijne aan een userscript vind ik de controle, met een bookmarklet moet je er vanuit gaan dat de data die je downloadt klopt, bij een userscript met een kleine pop-up zie je al om welke maand het gaat en wordt specifiek die maand gedownload. En meteen een repository erbij waar mensen issues kunnen maken als er iets fout gaat, want ICS heeft blijkbaar een hele hoop aangepaste pagina's voor verschillende banken via waar ze hun diensten aanbieden.
Ben wel benieuwd naar je artikel, heb je misschien ook een eigen blog die niet via een 3e partij met paywall loopt? Ik mag nu alleen een kort stukje van de intro lezen
/f/image/7T40aIua3BIoJo7UiDeRGfSQ.png?f=fotoalbum_large)
/f/image/OUhCUWMU56oX32NlZatSl7C3.png?f=fotoalbum_large)