Every Sunday night, everyone in my house asks me what we’re eating this week. I open the fridge and try to get the mayo to tell me what we’re making this week. I turn to our recipe book, and we choose 5–7 recipes we like. I write a list, check the fridge, and head to the store to stumble around looking for a can of coconut milk.
Grocery apps exist for this reason; they also charge you money, and if you’re a reader of this newsletter, you know I hate paying a monthly subscription. So I built our process into Google Sheets. I imported all the recipes we use, with their ingredients and directions. It scores recipes by how many ingredients you already have, pushes missing ingredients to either Google Tasks or Apple Reminders, and updates the pantry when I’m done shopping. It runs in a spreadsheet and in Apple Shortcuts on my phone.
How This Google Sheets Meal Planner Works
There are two ways to use this, depending on where you want to live: Google Sheets or your phone.
From the sheet: A 🛒 Grocery Helper menu appears at the top with three options: Plan This Week, Cook Tonight, and Done Shopping. These open sidebars push to Google Tasks.
From your phone: Three Apple Shortcuts — one to plan the week, one to get recipe steps, one to mark the shopping done. These talk to the web app and write to Apple Reminders.
You can use either path; the script is the same.
What You’ll Need
A Google Sheet with two tabs, Recipes and Pantry
Google Apps Script, this is where the script runs, which is attached to your Google Sheet
Google Tasks API enabled in Apps Script
Apple Shortcut, iOS/macOS only.
Note: The Apple Shortcuts side uses Apple Reminders for the grocery list. The sheet-side flow uses Google Tasks. Pick whichever fits how you shop.
Setting Up The Sheets
Recipes tab: four columns Name, Ingredients, Steps, This Week. Ingredients can be listed as a comma-separated list: 2 Cups flour, 1 egg, 200g pasta . Steps will need to be listed with each step on its own line. The “This Week” column should be set up as a checkbox and should never be touched after that. It’s what determines what you’re making this week.
Pantry tab: three columns, Item, In Stock, Quanity . The " In stock" checkbox is required, and the quantity column is optional. If you track the quantity like I do, the script subtracts the amount and unchecks the item when you run out.
I had to manually import our recipes, but I’ll give each subscriber a Google Sheet with at least five recipes. In the Google Sheet, you’ll see a custom menu called 🛒 Grocery Helper. This will give you everything you need to run the entire process.
How Recipe Scoring Works
The script reads every ingredient in each recipe, checks them against your Pantry tab, and counts how many are missing. Recipes are sorted from the fewest missing items to the most, so you always see what you can cook right now at the top. No AI involved — it's plain substring matching run against your own data.
```
Pasta Arrabbiata — need 0 items
Chicken Stir Fry — need 1 item
Thai Green Curry — need 4 items
```Generating the Grocery List
When you confirm your meal plan, the script
Marks your chosen recipes as “This Week” in the recipes tab
Collects every ingredient across all the recipes that aren’t already in your pantry
De-duplicates and combines quantities. Two recipes call for 1 cup of flour? The script combines them, so your list says 2 cups of flour.
Pushes the final list to a Groceries task list in Google Tasks.
When you click Done Shopping, the script reads your completed tasks and checks them into the Pantry tab.
Cook Tonight and Pantry Deduction
The Cook Tonight sidebar shows only the recipes marked for this week. Pick one, and the script returns the steps, removes the recipe from your" This Week” list, and deducts its ingredients from the pantry.
Deduction is “smart” about the quantities. 500g flour in the pantry, minus a recipe calling for 200g flour leaves, you are left with 300g flour. If the recipe depletes it, the item gets unchecked. If the recipe lists no quantity, just garlic, it unchecks it outright.
When units don’t match, the script unchecks the item rather than guessing at a conversion. Better to re-check something that’s still there than silently track the wrong number.
Gotchas
Why does the script fail to find my Recipes sheet?
The script looks for sheet names “Recipes” and “Pantry”. Anything else and it fails.
Why does the sheet-side flow throw a reference error?
In the Apps Script editor. Services → add Google Tasks API. Without this, the sheet-side flow throws an error immediately.
Will my grocery list sync between Apple Reminders and Google Tasks?
The shortcuts write to Apple Reminders. The Google Sheet writes to Google Tasks. These are separate lists. If you’re on Android, you can use Google Tasks, and if you’re on iOS, you can use Reminders.
What happens if recipes use different units for the same ingredient?
2 cups and 1 cup combine to 3 cups. But 200g and 1lb don’t. The script shows 200g + 1lb rather than guessing at a conversion. Pick a unit per ingredient and stick to it.
Can I manually edit the This Week column in the Recipes tab?
Don’t manually check or uncheck the boxes in this column. The script does this in the background to manage what you’re eating this week.
Sign up for the Automation Almanac newsletter to get the full working script, both sidebar HTML files, and all three Apple Shortcuts.
The Goods
Google Sheet + Apps Script: https://docs.google.com/spreadsheets/d/1Jyy0sPrExPidfOLff__zP-4fTidDPd8ZRTRSyTD9eAI/copy
Plan This Week Shortcut: https://www.icloud.com/shortcuts/28ed97d7be624213a774a6b7781a37a4
Cook Tonight Shortcut: https://www.icloud.com/shortcuts/56ee3daf474a427ab1ef04ae9466bb6c
Done Shopping Shortcut: https://www.icloud.com/shortcuts/82da84bd65ef4a3eabf2f76f436b910b
The Apple Shortcuts
If you deploy the script as a Web App, you get a URL you can hit from anywhere. The three shortcuts below map to the same three menu actions — just from your phone.
Important: Build these on your Mac, not your phone. Shortcuts on iOS is a nightmare to work with. Once they're built, they sync automatically.
Plan This Week Shortcut

The shortcut hits the web app URL, parses the JSON response, and pulls the options array, which is the same scored recipe list from the sheet. A "Choose from List" step lets you pick what you want to make. Your selections go back to the web app as a POST, which runs the meal plan, generates the grocery list, and returns an items array. The shortcut loops through the items and adds each one to an Apple Reminders list called Groceries.
One thing to note: this flow writes to Reminders, not Google Tasks. If you use both the sheet and the shortcuts, your grocery list will end up split between two apps. Pick one and stick to it.
Cook Tonight Shortcut

The shortcut hits the web app with ?mode=thisweek, which returns only the recipes you planned for this week. You pick one from the list. The shortcut hits the web app again, gets the steps value from the response, and sends it as an iMessage to yourself — so the recipe ends up in your messages where it's easy to scroll through while you cook.
The web app also marks the recipe as cooked and deducts the ingredients from the pantry, same as clicking Cook Tonight in the sheet.
Done Shopping Shortcut

The shortcut finds all completed items in your Groceries Reminders list. If there are none, it shows a notification — "You still have groceries to shop for" — and stops. Otherwise, it pulls the titles, shows them in Quick Look so you can confirm what's about to be updated, then POSTs the list to the web app to update the pantry.
This is the Reminders-side equivalent of the Done Shopping button in the sheet. Same result: pantry gets updated, completed items get cleared.
Deploying the Web App
In Apps Script, go to Deploy → New Deployment. Set it to Web App, execute as yourself, and set access to Anyone. That's what allows the Shortcuts to POST without authentication. The web app URL contains a long random token — it's not guessable or publicly indexed. Anyone with the exact URL can use it, so don't share it broadly.
Copy the URL and set it as the Text variable at the top of each shortcut.