Skip to main content
This recipe builds a term’s registers from Scoutworks. It saves one CSV file for each section. Open them in Excel, Numbers or Google Sheets. Use them to spot a young person who has stopped coming, or to check who met the attendance rule for an award. It uses Python 3.9 or later and the requests package (pip install requests).
attendance.py
Run it:
Each file has P for present, A for absent and a blank for a meeting where the young person was not on the register. The last column is their attendance for the meetings where a register was taken.

Choose the term

Change TERM_START and TERM_END at the top. TERM_END is the first moment after the term, so 2026-12-20T00:00:00Z includes every meeting up to the end of 19 December.

Switch to your group

Change api-demo.scoutworks.app to api.scoutworks.app, and set your key in the environment. read -s asks for the key without showing it, so it stays out of your shell history:
Your key needs the events:read scope only.

Notes

  • How many requests. The script makes one request for the events, then one for each meeting. A group with six sections has about 80 meetings in a term. That is below the limit of 120 a minute. If it goes over, the script waits and goes on. See Rate limits.
  • Trips and camps. The script counts meetings only. To count every event, remove the if e["type"] == "programme_meeting" line.
  • The utf-8-sig encoding makes Excel show accented names correctly.
  • The API only lists events that are published. A meeting still in draft has no register here.