Skip to content

Repository files navigation

CampFinder Agent

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.


What it does

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:

  1. Uploads the camp list to a formatted Google Sheet in your Drive
  2. Writes a personalised enquiry email for every camp and saves them to your Gmail Drafts
  3. Emails you a reminder 48 hours and 24 hours before each camp's registration opens — automatically, every day, without you doing anything

Before you start

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.

Setup (do this once)

Step 1 — Download the code

Click the green Code button on GitHub → Download ZIP → unzip it → move the folder somewhere easy to find (e.g. your Desktop or Documents).

Step 2 — Open Terminal in that folder

On Mac:

  • Open Finder, navigate to the folder
  • Right-click the folder → New Terminal at Folder

Step 3 — Install dependencies

Paste this into Terminal and press Enter:

pip3 install gspread google-auth google-auth-oauthlib google-auth-httplib2 google-api-python-client pyyaml

Step 4 — Fill in your details

In 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"

Step 5 — Connect your Google account

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.


Finding camps (the Claude step)

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.


Running the tools

Open Terminal in your project folder and run these four commands in order.

1. Upload to Google Sheets

python3 google_sheets_uploader.py

A browser window opens → sign into Google → click Allow. Your sheet is created and formatted automatically. The URL is printed in Terminal.

2. Generate email drafts

python3 generate_email_drafts.py

Creates a personalised enquiry email for every camp in the list. Saved to the email_drafts/ folder.

3. Push drafts to Gmail

python3 gmail_draft_creator.py

Uploads 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.

4. Set up automatic reminders

python3 setup_reminders.py

That'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-29

You should receive an email within a few seconds.

To turn off reminders:

python3 setup_reminders.py --uninstall

File overview

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

Notes

  • 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.json file 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 .gitignore and will never be accidentally committed or shared.

Troubleshooting

"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.

About

Helps you find a summer or spring break camp for your kid, saves email to camps in your drafts, and sends a reminder 48H and 24H before camp registration opens

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages