I created a full-featured period tracking app using Google Sheets, Calendars, Forms, and Apps Script. Dissatisfied with existing period app options after using them for more than ten years, and wanting easy access to my data, I decided to make my own. The tracker includes all the features I used with my prior tracking app. I can:
- Easily record period days, flow, and any symptoms
- See past period dates and trends
- Anticipate upcoming periods and fertile days
- Get email alerts (for myself or anyone else)
- See past and future periods and fertile days on my Google Calendar
Crucially, I can also:
- Own and access the raw data
- Customize the tracker in any way I'd like
And you can too! If you want to get right to it, see my period tracker app. For some background, read on.
I've been tracking my period for 21 years.
Tracker v1: Ever so discreetly marking tiny baby blue gel pen circles on the wall calendar in my childhood bedroom so that nobody would notice, because gosh, that would just be humiliating.
Tracker v2: Birth control pills. The pill packs took care of the tracking themselves. I loved those little sticker strips with the days of the week that came with pill packs and I put them all over my dormitory walls.
Tracker v3: I stopped using birth control pills in 2009, about the same time I got my first iPhone. It was also a time when I thought a genuinely fun activity was to just search around for some cool apps, so I downloaded a popular iPhone period tracking app of that time.
It was useful: you could easily enter period flow and symptoms, see period days in a calendar, get predictions for future periods, and be alerted when yours was coming. (You can see screenshots from a 2009 article featuring its bubbly pre-Material design.)
And I kept using it. The generally decent UX and functionality remained the same for ten years. It wasn't stylish, but it was dependable.
Then, in late 2018, the app makers released an innocuous-looking update that changed the entire user experience, caused users to lose data, and began charging a subscription fee for existing services that had been free. Take a look at recent reviews to see scores of long-term customers utterly devastated.
I was horrified to find that ten years of precious health data were just gone. A few minutes into freaking out, I realized that I had backed up my phone a few days before. I decided to try restoring my entire phone from a backup. Miraculously, the backup included the old version of the app with my old data intact. Phew!
Until a few months ago, I was still using the old version of that app, very very carefully making sure to never click "Update all apps." Kind of silly.
I was perpetually nervous about losing the data again. See, it's critical for me to track this data, as I have a history of menstrual issues. Starting in 2013, I started having very long periods, but it was one of those things that just slowly gets worse and worse and you don't remember that things haven't always been bad.
While at the Recurse Center in 2016, while reading a basic D3 bar chart tutorial, I thought, "huh, maybe I can use my period data to try this out." I managed to download my data from iPeriod (and had to pay them $2 to download it!), and after cleaning up the messy data export, I created some charts. Not great charts from a data visualization perspective, but revelatory charts. I sent screenshots of them that day in this email to my now-husband.
Doing my own very simple data visualization, I was able to see that my periods had actually gotten markedly worse from how they used to be. Note the chart title: "Quantifying Misery."
I showed these charts to my doctor. A few months later, I had surgery to remove the fibroids that it turned out were causing this problem. And things got way better.
So, yeah, this data is important to me.
In addition to the trends, I really like knowing when my period is likely going to come. It helps me roughly plan not to be running a race or planning a beach trip on a day I might have bad cramps.
And the thought kept popping into my head: "Aliza, this is silly. You know how to work with data and build little apps. You do this on a daily basis. Why not just build your own period app? Why are you using this sketchy old app that you can't ever update again?"
First I considered writing a Node app, which I do frequently. But I thought it was very likely that I would lose the desire to maintain it, and I'd still need the data, and probably end up just exporting it to a spreadsheet. Then I'd be back at square one.
Then I thought, why not try an app that came out after 2009? I downloaded a few apps that were top rated. These were their opening screens.
I was turned off by something about each one. For Flo, it was the long bulleted list of data I was agreeing to share. Clue wouldn't let me explore the app without signing up or giving it access to one of my important accounts. And finally, chatting with an emoji-wielding chat bot on Period Tracker Period Calendar did not personally instill confidence. The main thing I wanted to know was: can I easily (and freely) download my data to a spreadsheet?
And then it hit me! Rather than being so concerned about being able to export this data to a spreadsheet, the app could just be a spreadsheet.
So that's what I did (and what you can do, too). It took some time to settle on the correct format for the data. To get the auto-updating and presentation I wanted, I was wading amongst some real spreadsheet formula deep cuts like ADDRESS
and INDIRECT
. I am both proud and somewhat confused by the formula I made that generates tiny bar charts:
=IFERROR(SPARKLINE(INDIRECT(ADDRESS(MATCH(A13,data_by_date!A:A,0),2, 1,TRUE,"data_by_date")):INDIRECT(ADDRESS(MATCH(IF(A14, A14 - 1, A13 + $T$9),data_by_date!A:A,0),2, 1,TRUE,"data_by_date")), {"charttype","column"; "empty","zero"; "nan", "convert"; "color", "#f4cccc"; "lowcolor", "#ea9999"; "highcolor", "#e06666"}),"")
I had only used Apps Script once before for a small work purpose, but was pleased by how well-documented and easy it was to use it to integrate sheets with email and calendars. I did spam myself relentlessly with emails and calendar events in the process, but I've worked that out by now.
After user testing this on myself for a few months and making revisions each month, I've very happily replaced my old, broken app. My tracker allows me to easily enter my period data, view past periods and trends, and see projections for upcoming ones. Which are all the things I wanted from my old app. (To be clear, I make no claims to any sort of medical expertise or accuracy or prediction. Questions? Ask your doctor!)
Here's why I think spreadsheets are great for this sort of thing:
- The data is right there! Once you determine how you want to record data, it is easy to transform it into any shape you need for analysis and visualization. And if you don't like how you're recording it, you can easily change your approach.
- The formulas are right there! There is no hidden code and you can see exactly how everything is working. So if you don't like the way I'm calculating something, you can just change it! And the formulas are truly reactive: whenever you enter new data, they just run and update, which is very useful for projections.
- More people can run their own app! Far more people can use and maintain a spreadsheet than host and maintain their own Node app. And I think it's great if more people are in control of their own data.
- More people could customize the app to their own needs. This was built for what I wanted: period records and projections. But you could add tracking for weight, skin, mood, favorite song, whatever. Or more excitingly, change it in some other way I haven't thought of.
It's tracking without the tracking! Well... except that I'm making heavy use of the Google ecosystem. But that ecosystem is something I use for so many purposes every day that I was comfortable storing my data there. If you're not comfortable with that, I sort of got the app to work in Excel, and I'm sure with some tweaking it could run on more open spreadsheet software. By using Google, I was able to get a few built-in benefits:
- Sharing. You can share your period data with people who might be interested. (Friends, lovers, etc.)
- I could use Apps Script to easily integrate my period data with my email and Google calendar, two tools I use dozens of times per day.
- I could bookmark a linked form to easily enter additional data from my phone.
- Built-in version control. If I mess something up in the sheets, I can go back.
To be fair, there are a few downsides to my approach:
- If I make improvements and changes to the app, it will be potentially harder for other people to update their spreadsheets accordingly.
- Formula-laden spreadsheets can be very sensitive: one bad cell entry can mess up a lot of things.
- You are more limited in the sorts of functions you can write, and the functions can get complicated and hard to read pretty fast.
I have to say, writing complicated spreadsheet formulas gets me back to my coding roots. I first became interested in programming when, after writing increasingly complicated Excel formulas to support the company I was working at, someone suggested I try learning SQL. And then once I got fluent in SQL, they said… try Python… And you all probably know how this goes…
And after the last four or so years of fighting with JavaScript builds and Python versions, I realized I'd developed a deep appreciation for the elegance of spreadsheets.
Create your own period tracker here!