Inspiration

We were inspired to do this project because for us it is always hard to keep track of course schedules that are always presented in different websites for different classes. We would always have to manually enter everything into a google calendar at the beginning of a quarter to keep track of every class for the rest of the quarter. So now we decided to create this project where we will use Browser Use to automate it.

What it does

Course2Calendar automatically extracts every assignment, lab, project, exam, and quiz from your course websites and exports them as a .ics calendar file you can import directly into Google Calendar in one click. Just paste in your course URLs, hit sync, and watch the agent navigate your syllabi, scrape every deadline, and populate your calendar automatically.

How we built it

We built a full-stack pipeline with a Python/FastAPI backend and a React frontend:

  • Browser Use Cloud v3 powers two AI browser agents. One for Canvas LMS and one for arbitrary external course URLs. The agents navigate to syllabus and schedule pages, extract all deadlines, and return structured JSON.
  • Gemini 2.0 Flash (via the Gemini API) acts as a post-processing layer that cleans, deduplicates, and standardizes messy scraped text into uniform assignment records.
  • FastAPI runs the backend and streams live updates to the frontend, so users can watch the agent work in real time.
  • SQLite caches all extracted assignments locally with deduplication to avoid double-entries across syncs.
  • ICS generation — the /api/assignments/export/ics endpoint formats all stored assignments into a valid iCalendar (.ics) file that any calendar app can import, including Google Calendar.

Challenges we ran into

We ran into several challenges while building the system. Syllabus formats were inconsistent, since every professor structures their course page differently, so it took careful prompt engineering to get the browser agent to reliably find and open the syllabus instead of just scraping the homepage. Many assignments were listed as recurring (like labs due every Friday), which meant we had to teach the agent to convert those into specific ISO 8601 dates for the rest of the term. We also dealt with quirks in the Browser Use v3 API, such as polling session status, handling when sessions end, and cleaning up unused ones, all of which required careful async coordination. Finally, getting the LLM to consistently return clean JSON without extra formatting or commentary took multiple iterations on our prompts.

Accomplishments that we're proud of

We’re proud of building a fully automated system that goes from a raw course URL to a Google Calendar event with no manual input. It provides live feedback through real-time streaming as the agent works, and it can handle both Canvas LMS (including authenticated sessions with MFA) and regular public course websites in one pipeline. We also added a deduplication layer so re-syncing doesn’t create duplicate calendar events.

What we learned

We learned how to build reliable web automation agents using Browser Use Cloud v3, and how to pair a browser agent with an LLM to make data extraction more dependable. We also learned how to stream live updates from FastAPI to the frontend, and how to create calendar files using the iCalendar (.ics) format.

What's next for Course2Calendar

Next, we want to make Course2Calendar even more seamless and useful. This includes adding direct Google Calendar integration so events can be pushed automatically, keeping track of what’s already been synced across terms, and adding smart reminders before exams and deadlines. We also plan to support more LMS platforms like Gradescope and Notion, and eventually build a mobile app so students can sync their calendars on the go.

Built With

  • browser-use-cloud-v3
  • fastapi
  • gemini-2.0-flash-api
  • icalendar
  • python
  • react
  • server-sent-events-(sse)
  • sqlite
Share this project:

Updates