A teacher ends a class and Google or Zoom hands them a spreadsheet of who showed up. The next class is another file. By the end of the week the register is still being copied by hand: find the email, add the minutes, guess who was late. This page does that join. Drop every attendance CSV from the batch. You get one row per person, how many of the sessions they were in, the percent, the total minutes, how often they were late, how often they left early, and a status of Present, Late, Left early, or Absent from some.
Google Meet Help says the attendance report includes first name, last name, email, time joined, time exited and duration. The organiser receives it as a sheet. When that sheet is saved as a CSV, the headers are sometimes Name and Email Address instead. Both are read. Meet also says that if someone joins and leaves more than once, the report keeps a single joined and exited pair and puts the real time on the call in Duration. When that duration is much shorter than the span from time joined to time exited, the register uses the duration, not the span.
Zoom's participants export, from the meeting history report, lists the name, the user email, join time, leave time, duration in minutes and whether the person was a guest. A guest often has a name and a blank email. People with an email are matched on the email, even across a Meet file and a Zoom file. People with no email are matched on the name, which is how a guest stays one row. If Zoom gives you two rows because someone left and came back, and the times do not overlap, the minutes add. If two files are the same class (the clocks overlap), the minutes are counted once.
Late uses the first join in that session as the bell. With the default of 5, a person who joins exactly 5 minutes after that first join is not late. One second later, they are. Left early means they left before the session length had passed, counted from that same first join. The default length is 50 minutes. Leaving at that mark is not early. Absent from some means they were missing from at least one session in the batch, and that status wins over late or left early. The late and left-early counts are still in the row. A minimum above 0 drops a short visit from the present count. The minutes stay visible so you can see why.