Everyone arrives at this the same way. You open Google Calendar, find Settings → Add calendar → From URL, and then sit there realizing you do not have a URL. What you have is a PDF the district posted in August, and a printout of it stuck to the fridge with a magnet shaped like a soccer ball.
There is no hidden setting that fixes this. Google can subscribe to a calendar feed and it can import an .ics file, but it cannot read a designed year calendar with month grids and a coded footnote list. The PDF has to become events first. That is the step everybody is missing, and it is the step below.
Once the school days exist as real events, Google subscribes to them like any other feed and they land in the same grid as practices, games, and everything else. Budget about ten minutes, most of it spent finding the PDF on your district's website.
Nothing here involves typing forty dates by hand. You hand over the file, then check its work:
Find the PDF on your district's website. It is usually filed under "Calendar," "Academic Calendar," or "District Calendar," and it is usually one PDF covering the whole year. If the only copy in the house is the one that came home in backpack mail, photograph it instead — PNG and JPG upload the same way a PDF does.
Create a free Schedule Caddie account. It takes a minute and costs nothing. The account is where the school days get stored, alongside whatever team schedules you have already brought in.
Upload the file at schedulecaddie.com/school. Drop in the PDF, PNG, or JPG, up to 10MB. Schedule Caddie reads the document and pulls out the dated entries a parent actually needs: no-school days, vacations and breaks, early releases with their dismissal times, teacher in-service days, and the first and last day of school.
Review every date before it saves. The days it found come back as a checkable list — one row each, with the date and the label it read off the page. Uncheck anything you do not want and correct anything that came out wrong. Nothing reaches your calendar until you confirm this list.
Confirm, and the school days land on your calendar. Only what you left checked gets added, color-coded as its own School category so a no-school Monday reads differently from a 6pm game.
A year calendar is dense, small-print, and often colour-coded in ways that make sense only to whoever designed it. So every date it reads comes back for approval rather than going straight onto your calendar — a misread date takes a second to catch here, instead of surfacing as a surprise in November.
No School — Labor Day
Mon, Sep 7
No SchoolFirst Day of School
Tue, Sep 8
School EventEarly Release — 12:00 dismissal
Fri, Sep 11
Early ReleaseNo School — Teacher In-Service
Mon, Sep 28
No SchoolOptional — plenty of families just use the Schedule Caddie calendar and stop here. Do this part if you would rather live inside Google Calendar and have the school days arrive there alongside everything else:
Build a subscribe link in Schedule Caddie. Open Subscribe & Share and create a calendar feed covering the kids and event types you want to see. You get back a feed URL — the same kind of link a team app hands you, except this one covers your whole family, school days included.
Open Google Calendar on a computer. This part cannot be done from the Google Calendar mobile app. Google only exposes "add by URL" on the web, so use a desktop browser once; the calendar it creates shows up on your phone afterward.
Go to Settings → Add calendar → From URL. Click the gear icon, choose Settings, then "Add calendar" in the left sidebar, then "From URL."
Paste the link and click Add calendar. Paste the feed URL from Schedule Caddie and confirm. Google fetches it and the school days appear in your grid, in whatever color you assign the new calendar.
Check your phone. The subscribed calendar syncs down to the Google Calendar app on Android and iPhone on its own. If you do not see it, open the app's calendar list and make sure the new calendar is switched on.
One honest note about how Google handles subscribed calendars: it refreshes them on its own lazy cycle, usually every 12 to 24 hours, and it will never tell you that something changed. If a practice moves or the district reissues the calendar, the event quietly becomes different and nothing draws your attention to it. That gap is exactly what Schedule Caddie's change alerts cover — we re-check every feed daily and email you what moved, so the calendar can stay the place you look rather than the place you have to audit.
Google Calendar says it cannot fetch the URL
Almost always a copy-paste problem — a trailing space, or only part of the link. Copy it again straight from Subscribe & Share and paste it without editing. The link should start with https:// and end in .ics.
The calendar was added but looks empty
Two usual causes. Either the feed you built filters out the school days — check that the School event types are included in that feed — or Google has added the calendar but has not finished its first fetch. It generally fills in within a few hours.
I added a school day in Schedule Caddie and Google has not caught up
That is Google, not you. Google refreshes external subscribed calendars on its own schedule, roughly every 12 to 24 hours, and there is no button anywhere that forces it. Schedule Caddie itself shows the change immediately, which is why we also email you when something moves rather than trusting the calendar to surface it.
My district posts the calendar as a web page instead of a PDF
Print the page and choose "Save as PDF," or screenshot the month grid and upload the image. Anything that puts the dates in front of it in readable form works.
Because "Add calendar from URL" needs a URL, and most districts never publish one. They publish a designed PDF for the year. There is no iCal feed behind it, nothing to subscribe to, and no amount of hunting through Google Calendar settings produces one. That dead end is the reason this guide exists: the PDF has to become calendar events first, and then Google can subscribe to those.
No. Google Calendar imports .ics and .csv files, and a district calendar PDF is neither — it is a designed document with month grids and a footnote list. Schedule Caddie reads the PDF, turns the dated entries into events you approve, and then hands Google a feed it can actually subscribe to.
Then use it — paste the feed link into Schedule Caddie the same way you would a team app link, and we re-check it every day and email you when something changes. Some districts and most private schools running a modern site do publish one. The PDF upload exists for the majority that do not.
You upload the new version. Schedule Caddie compares it against what you already have and shows you exactly what is different — added, changed, removed — before any of it is applied. This is a real difference from team feeds: a feed is a live URL we re-check daily, while a PDF is a document, so there is nothing for us to poll.
A calendar you subscribe to by URL is added to your own Google account, not to a shared family calendar. If you want other people to see the same days, the cleaner path is to share the Schedule Caddie feed link with them directly so each person subscribes on their own device. They do not need an account to view it.
No. Uploading the PDF, reviewing what it found, merging school days with your team schedules, and getting change-alert emails are all part of a free Schedule Caddie account.
More on how the upload reads a year calendar, what it pulls out, and what happens when the school revises it mid-year: school calendars in Schedule Caddie.
Every kid, every schedule, every app — merged, color-coded, and watched for changes.
Get Started Free