Zo maak je van Google Agenda een urenstaat
Zet je je klantwerk al in Google Agenda, dan heb je het grootste deel van een urenstaat al. Wat je nog niet hebt, is een lijst met datums en duur, en totalen per klant. Google Agenda maakt die niet: de export is een agendabestand, geen tabel. Hier zijn drie manieren om er te komen, van gratis en met de hand tot volledig automatisch, en de details die totalen ongemerkt onjuist maken.
Methode 1: met de hand, in een spreadsheet
Open Google Agenda in de weekweergave, open ernaast een lege spreadsheet in Google Spreadsheets en typ één regel per afspraak: datum, begin, einde, klant. Voeg een kolom toe met =(C2-B2)*24 voor de uren, en onderaan een totaal.
Het kost niets en werkt voor een handvol afspraken per week. Daarboven kost het elke week tijd, en typfouten zie je niet: niemand vergelijkt een getypte 14:30 nog eens met de agenda.
Methode 2: een kort script in Google Spreadsheets
Google Spreadsheets kan je agenda lezen met Apps Script, de ingebouwde scripttaal van Google. Open in een nieuwe spreadsheet Uitbreidingen en dan Apps Script, plak dit, pas de twee datums aan en voer listMonth uit. Google vraagt je dan om je eigen script toegang te geven.
function listMonth() {
var cal = CalendarApp.getDefaultCalendar();
var start = new Date(2026, 9, 1), end = new Date(2026, 10, 1); // October 2026
var rows = [['Date', 'Start', 'End', 'Hours', 'Title', 'Colour']];
cal.getEvents(start, end).forEach(function (e) {
if (e.isAllDayEvent()) return;
var hours = (e.getEndTime() - e.getStartTime()) / 3600000;
rows.push([e.getStartTime(), e.getStartTime(), e.getEndTime(), hours, e.getTitle(), e.getColor()]);
});
var sheet = SpreadsheetApp.getActiveSheet();
sheet.clear();
sheet.getRange(1, 1, rows.length, rows[0].length).setValues(rows);
}
Maanden tellen in Apps Script vanaf 0, dus new Date(2026, 9, 1) is 1 oktober. Je krijgt één regel per afspraak, met de duur en het kleurnummer. Daarna geeft een draaitabel of SOM.ALS de totalen (de formules staan in Uren tellen in Google Agenda: per klant, kleur of week).
Dit is een goede gratis optie als je een beetje code niet erg vindt. Het script leest alleen je primaire agenda, en alle valkuilen hieronder blijven bestaan, tenzij je ze zelf afvangt.
Methode 3: automatisch, met een add-on
Een add-on doet hetzelfde leeswerk voor je, volgens een schema. Calendar Timesheet, dat wij maken, leest elk uur de agenda's die je kiest, koppelt elke afspraak aan een klant op basis van kleur, agenda, een woord in de titel of het e-maildomein van de gast, en houdt een blad Deze maand bij. Op de 1e sluit het de vorige maand af met één maandoverzicht per klant en stuurt het je een samenvatting per e-mail. Exporteren van elke periode is gratis; klanten, tarieven en de autopiloot horen bij Pro, met een proefperiode die duurt tot je eerste maandafsluiting.
Andere add-ons exporteren ruwe afspraken naar een spreadsheet; dat past bij wie zijn eigen rapport wil bouwen. De valkuilen hieronder maken het verschil tussen een ruwe export en een urenstaat waarmee je kunt factureren.
De valkuilen die totalen onjuist maken
Afspraken over een grens heen
Een workshop van 22:00 tot 01:00 op 31 oktober hoort bij twee maanden. Tel je hem helemaal in oktober, dan factureer je oktober te veel en november te weinig. Alleen het deel binnen de periode hoort mee te tellen.
Geweigerde en onbeantwoorde uitnodigingen
Agendascripts geven ook afspraken terug die je hebt geweigerd. Nodigt iemand je uit voor een vergadering die je hebt geweigerd, dan komt die toch in een naïeve export terecht. Filter op je eigen antwoord.
Afspraken van een hele dag en tijd op "Beschikbaar"
Vakanties, reisdagen en herinneringen zijn vaak afspraken van een hele dag of staan op "Beschikbaar". Dat is geen werktijd, en een afspraak van een hele dag die als 24 uur wordt gelezen, maakt een totaal kapot.
Dezelfde afspraak in twee agenda's
Als een klant je uitnodigt en je de afspraak ook naar je werkagenda kopieert, telt een export van beide agenda's hem twee keer. Afspraken delen een ID (iCalUID) waarmee je er één kunt bewaren.
Terugkerende afspraken met uitzonderingen
Een wekelijks gesprek dat de ene week is verplaatst en een andere week is geannuleerd, moet tellen zoals het is gebeurd, niet zoals de reeks zegt. Lees de afzonderlijke herhalingen, niet de reeks.
Tijdzones
Gebruiken je spreadsheet en een agenda verschillende tijdzones, dan verschuiven de begintijden. Gebruik één tijdzone voor de urenstaat, meestal die van de spreadsheet.
Een urenstaat die je kunt vertrouwen: de checklist
- Kies één manier om klanten te herkennen (kleur, agenda, woord in de titel of domein van de gast) en houd je eraan.
- Tel alleen het deel van elke afspraak dat binnen de periode valt.
- Laat geweigerde uitnodigingen, afspraken van een hele dag en tijd op Beschikbaar weg.
- Tel een afspraak die in twee agenda's staat één keer.
- Zet elke maand vast zodra die is gefactureerd, zodat latere wijzigingen in de agenda niet veranderen wat je hebt verstuurd.
Wil je dat dit elk uur voor je gebeurt? Calendar Timesheet regelt elk punt van deze checklist, in je eigen Google-spreadsheet, zonder account.