Find kids' camps in any city, generate personalised enquiry emails, track everything in Google Sheets, and get automatic reminders before registration opens — all from your computer.
You tell Claude which city and which child. Claude searches the web for camps and saves the results. Then you run four short commands and the tool:
- Uploads the camp list to a formatted Google Sheet in your Drive
- Writes a personalised enquiry email for every camp and saves them to your Gmail Drafts
- Emails you a reminder 48 hours and 24 hours before each camp's registration opens — automatically, every day, without you doing anything
You need three things:
| What | Where to get it |
|---|---|
| Python 3 | Already on every Mac. Type python3 --version in Terminal to check. |
| A Google account | The same account you use for Gmail and Google Drive. |
| A Claude account | claude.ai — free tier is fine for the research step. |
Click the green Code button on GitHub → Download ZIP → unzip it → move the folder somewhere easy to find (e.g. your Desktop or Documents).
On Mac:
- Open Finder, navigate to the folder
- Right-click the folder → New Terminal at Folder
Paste this into Terminal and press Enter:
pip3 install gspread google-auth google-auth-oauthlib google-auth-httplib2 google-api-python-client pyyamlIn the project folder, find the file config.example.yaml. Make a copy of it and name the copy config.yaml.
Open config.yaml in any text editor (TextEdit works fine) and fill in your details:
child:
name: "Maya Smith" # Your child's full name
dob_display: "March 15, 2020" # Their date of birth (written out)
dob_iso: "2020-03-15" # Same date in YYYY-MM-DD format
next_school_year: "Grade 1" # What grade they're starting in September
search:
season: "Summer" # "Summer" or "Spring"
cities:
- "Burnaby"
- "New Westminster"
year: 2026
camp_months: "July and August" # Which months you want camps for
reminders:
to_email: "you@gmail.com" # Where reminder emails get sent
sheets:
spreadsheet_name: "Camps 2026 — Burnaby" # Name for your Google Sheet
files:
camps_csv: "camps_2026.csv" # Name for the data file Claude will create
email_drafts_dir: "email_drafts"Follow the guide in SETUP_GOOGLE_SHEETS.md to give the tool permission to access your Google Drive and Gmail. It takes about 10 minutes and you only do it once.
Open claude.ai and paste this prompt — edit the parts in [brackets] to match your config:
I need you to find [Summer/Spring] [year] camps for a child aged [AGE] in [CITY/CITIES].
The child is [NAME], DOB [DOB], entering [GRADE] in September [year].
For each camp, find:
- Camp name and website URL
- Contact email and phone number
- Type of activity
- Age range accepted
- Cost per week (if listed on the website)
- Registration open date
- Whether registration is currently open
Save the results as a CSV file named [camps_csv from config] with these exact column headers:
Registration_Open_Date, City, Camp_Name, Website_URL, Contact_Email,
Contact_Phone, Type_of_Activity, Age_Range, Cost_Per_Week,
Registration_Status, Notes
Only include camps that accept children aged [AGE].
Sort rows by Registration_Open_Date earliest first; put any TBD rows at the bottom.
Save the file to [full path to your project folder].
Claude will search the web, compile the results, and save the CSV file directly into your project folder.
Open Terminal in your project folder and run these four commands in order.
python3 google_sheets_uploader.pyA browser window opens → sign into Google → click Allow. Your sheet is created and formatted automatically. The URL is printed in Terminal.
python3 generate_email_drafts.pyCreates a personalised enquiry email for every camp in the list. Saved to the email_drafts/ folder.
python3 gmail_draft_creator.pyUploads all drafts to your Gmail Drafts folder so you can review and send them. Before sending each one, fill in your name, phone, and email where you see the [Your Name] placeholders.
For camps that only have a contact form (no email address), the draft is still created — just copy the text and paste it into their website form.
python3 setup_reminders.pyThat's it. From this point on, your Mac will automatically email you at 8am whenever a camp's registration is opening in the next 48 or 24 hours. No manual action needed ever again.
To test it's working:
# Pick a camp from your sheet and use a date 2 days before its registration opens
python3 registration_reminder.py --date 2026-04-29You should receive an email within a few seconds.
To turn off reminders:
python3 setup_reminders.py --uninstall| File | What it is |
|---|---|
config.yaml |
Your personal settings — fill this in first (not shared) |
config.example.yaml |
Blank template — copy this to make your config.yaml |
SETUP_GOOGLE_SHEETS.md |
Step-by-step Google account connection guide |
google_sheets_uploader.py |
Uploads your camp list to Google Sheets |
generate_email_drafts.py |
Writes a personalised email for each camp |
gmail_draft_creator.py |
Sends those drafts to your Gmail Drafts folder |
registration_reminder.py |
The daily reminder script (runs automatically) |
setup_reminders.py |
One-time setup for the daily reminders |
requirements.txt |
List of Python packages needed |
- Your Mac needs to be on at some point each day for reminders to send. If it was asleep at 8am, the reminder runs automatically when it wakes up.
- Reminders won't repeat. A
reminders_sent.jsonfile tracks what's been sent so you never get the same email twice. - Your personal data stays local. Your
config.yaml, credentials, camp data, and email drafts are all listed in.gitignoreand will never be accidentally committed or shared.
"No such file or directory" when running a script
Make sure Terminal is open in the project folder. Type ls and you should see files like config.yaml, google_sheets_uploader.py, etc. If not, see Step 2 of Setup above.
Browser opens but says "Access blocked" You need to add your Google email as a test user. See the note in SETUP_GOOGLE_SHEETS.md under Step 3.
Script runs but no email arrives
Check reminder_error.txt in the project folder for error details.