Meal Planner Google Sheets Template (Auto Grocery List + Macros)
A one-click Google Sheets meal planner with a recipe library, weekly dropdown picker, auto-generated grocery list, and per-day calorie and macro rollup
A working meal planner Google Sheets template needs four moving parts: a recipe library with ingredient rows, a weekly picker with dropdowns, an auto-aggregated grocery list keyed to that week's picks, and a per-day calorie and macro rollup. The template below ships an Apps Script that generates all four tabs in one click, so you can copy it, paste your first five recipes, and shop from a real list within ten minutes.
The reason I built this meal planner Google Sheets template is embarrassing. In April 2026, my wife and I were standing in the parking lot of a Nature's Basket in Indiranagar, Bangalore, arguing about whether we already owned coriander. We didn't. We also didn't own three other things in her queued recipes, but we had bought four bunches of spinach across two trips because neither of us could remember what the other had grabbed. Our April grocery bill was noticeably higher than March for zero additional meals cooked.
I had tried Paprika, Mealime, Plan to Eat, and a Notion template a friend swore by. Each worked for about eleven days. The friction was always the same: recipes lived in one app, the grocery list in another, and the moment I wanted to add a Kerala-style fish curry that wasn't in the catalogue, the whole system collapsed. I ended up back in the WhatsApp note I share with my wife, writing 'tomatoes onions rice curd' and hoping.
So I did what I always do. I opened Google Sheets. I already live in Sheets for Mursa's revenue tracker, my writing calendar, and the habit tracker I wrote up in a separate post. Sheets runs on my phone, syncs with my wife, and doesn't care whether I want to add ragi mudde or a Trader Joe's frozen pizza to next Tuesday's dinner slot. It just needed the right formulas and one Apps Script to stitch it together. This is the template that came out of three iterations across May and June 2026.
Copy the meal planner sheet
Use the live template if you want the finished version with the Apps Script already installed. It includes the recipe library, weekly meal picker, auto grocery list, and calorie/macro rollup, all wired to each other. Make a copy, run the setup script once, and paste your first recipes in.
The Multi-Tab Layout That Makes This Sheet Work
Every meal planning spreadsheet I tried failed for the same reason. It tried to do everything on one tab: dates across the top, meals down the side, and ingredients crammed into notes cells. That layout looks clean in a screenshot and becomes unusable the moment you cook from it.
This template uses four tabs, each with one job. The Recipe Library holds every dish you cook, with one row per ingredient. The Weekly Plan has seven days across and four meal slots down (breakfast, lunch, snack, dinner); each cell is a dropdown pulling from the library. The Grocery List reads the weekly plan, joins it against the library, and produces a categorized shopping list. The Nutrition tab rolls up calories, protein, carbs, and fat per day. Each tab has a different write cadence, which is why separating them matters. The Apps Script creates all four tabs, wires the dropdowns, and installs the SUMIFS and SUMPRODUCT formulas in one click.
Every meal planning template on the internet asks you to duplicate tabs, copy formulas, and manually rebuild data validation rules. That is the friction that kills adoption. The Apps Script in this template turns a blank Google Sheet into a fully-wired planner in under three seconds. If you break something, delete the tab, re-run the script, and you are back to a clean state.
The Recipe Library Is the Whole Trick
The single decision that makes this meal planner Google Sheets template work is the recipe library structure. Most templates store a recipe as one row with ingredients in a comma-separated cell. That is fine for display and useless for automation. You cannot sum comma-separated text.
In this template, the library has one row per ingredient. A recipe like Palak Paneer takes eight or nine rows. Column A is the recipe name (repeated on every row), B is the ingredient, C is quantity, D is unit (grams, tablespoons, pieces), E is category (produce, dairy, spices, protein, grains, pantry), F is estimated calories, and G-I are protein, carbs, and fat in grams. The repetition in column A looks ugly. It is also what lets a SUMIFS across column C, filtered by the week's recipes and the ingredient name, sum quantities correctly.
I seeded my library with 22 recipes across the first two weekends of May: fifteen Indian dishes my wife and I cook on rotation, four one-pot lunches I make on Mursa deadlines, and three breakfasts. Each took about four minutes to enter. The calorie and macro columns I estimate when I don't have a USDA FoodData Central number handy. Plus or minus 15% is plenty; the point is to catch a 3,200-calorie day before you queue it, not to hit 2,143 exactly.
One row per ingredient is ugly and repetitive. It is also the reason a grocery list can generate itself. Every attempt to make the recipe library 'cleaner' broke the automation.
The Weekly Meal Picker (Dropdowns Wired to the Library)
The Weekly Plan tab is a normal grid: days across (Monday through Sunday), meal slots down (Breakfast, Lunch, Snack, Dinner), 28 dropdown cells in the middle. Each dropdown uses Data > Data Validation > Dropdown (from a range), pointing at a helper column that runs =UNIQUE(A2:A) against the Recipe Library. Add a new recipe and it appears in every dropdown instantly.
I sit down on Sunday afternoon with a chai and click through the 28 cells in about seven minutes. If a meal repeats (dal on Monday and Thursday, say), I pick the same value twice and the grocery list correctly doubles the ingredients. Snack rows are optional; empty cells are handled correctly by the downstream formulas, so a half-planned week still generates a valid shopping list. Two frozen columns on the right show the day's total calories and protein, computed live against the library, so I catch imbalanced weeks before I shop for them.
How the Auto Grocery List Actually Assembles Itself
This is the tab that killed every other meal planning template I tried. Paprika made me tap through recipes one by one. Plan to Eat generated a list but did not group by aisle. Mealime hid grocery list generation behind a paywall. A meal planner without an automatic, categorized grocery list is a recipe browser, not a planner.
The Grocery List tab has three columns that matter: Ingredient, Total Quantity, and Category. The total quantity formula is =SUMIFS(RecipeLibrary!C:C, RecipeLibrary!A:A, WeeklyPlan_Recipes, RecipeLibrary!B:B, A2). WeeklyPlan_Recipes is a named range holding a flattened array of every recipe currently scheduled. Change any dropdown on the weekly plan and SUMIFS re-runs within a second. No refresh button. The category column is a VLOOKUP against the library, which is what enables aisle grouping. A saved filter view sorts by category then ingredient name, so I see all produce, dairy, and spices together at the store. My time at Nature's Basket dropped from roughly 45 minutes per trip to 22.
Every consumer meal planning app I evaluated in April 2026 either gated automatic grocery list generation behind a subscription or shipped it as a static export you couldn't edit. Google Sheets doesn't have a business model that requires holding this feature hostage. If you already pay for Google Workspace, you already own the infrastructure.
The one thing the grocery list does not do is unit conversion. If one recipe uses '200 grams of onion' and another uses '1 medium onion,' SUMIFS treats them as separate rows. I fix this by being disciplined about units when I enter a recipe: grams, milliliters, or pieces. A checkbox column at the far right lets me tick items off as I shop.
Calorie and Macro Rollup Per Day
The nutrition rollup is the tab I did not think I needed and now check every Sunday. It reads each day's four meal slots, looks the recipe up in the library, and sums calories and macros across all ingredient rows. The formula for a day's calorie total is =SUMPRODUCT((RecipeLibrary!A:A=WeeklyPlan!B2)*RecipeLibrary!F:F), repeated for lunch, snack, and dinner. SUMPRODUCT handles the distributed rows more cleanly than SUMIFS here. Macros work the same way against columns G, H, and I.
A 2017 study by Ducrot and colleagues, published in the International Journal of Behavioral Nutrition and Physical Activity, found that meal planning was associated with higher dietary quality and lower prevalence of obesity in a sample of over 40,000 French adults. The paper doesn't tell you which template to use, but it does back up the intuition that just seeing your week laid out changes what you cook. I plan differently when I can see Tuesday's protein total is 40g lower than my usual. A weekly summary row at the bottom averages calories and macros across the seven days, which I care about more than any individual day.
The nutrition tab was the feature I did not think I needed. Six weeks in, it is the tab that has quietly changed how I pick recipes on Sunday afternoon.
Running the Apps Script and Making It Yours
The Apps Script is roughly 180 lines of JavaScript with one entry function, setupMealPlanner. When you run it, it deletes any existing tabs, creates four fresh ones with the correct headers, seeds the Recipe Library with three example recipes, installs the UNIQUE helper and wires the Weekly Plan dropdowns to it, installs the SUMIFS formulas on the Grocery List, installs the SUMPRODUCT calorie and macro formulas on the Nutrition tab, and applies conditional formatting (green under target calories, amber over).
The first run asks you to authorize the script. This is normal; it only touches the sheet you launched it from. If you're uncomfortable with that, you can build the four tabs by hand using the layout above in about 40 minutes. After the script runs, delete the example recipes and paste your own. I recommend starting with five: two breakfasts, one lunch, one snack, one dinner. Plan one week, shop from the grocery list, cook. That first cycle takes about 15 minutes and immediately tells you whether the system fits how you cook.
This template is deliberately not an app. It doesn't send meal reminders, doesn't scale to a family of six with different dietary restrictions, and doesn't talk to a smart fridge. For a couple cooking most nights, it is enough. If more matters, the spreadsheet is a good place to prototype what you actually need before paying for a heavier tool.
Six weeks in, three things changed. Our June grocery spend was noticeably lower than April for the same meals cooked, mostly from not buying the third bunch of coriander. Weeknight Swiggy orders dropped from roughly three per week to one, because the 8pm 'what do we cook' decision was already made on Sunday. And my wife and I stopped the small kitchen fights about who was supposed to buy what, because the grocery list is a single shared source of truth.
If you want to see how this connects to the rest of my Sheets-based personal operations, I wrote about the free Google Sheets habit tracker template that lives in the same folder in my Drive. Copy the sheet above, run the setup script, and try one week. If it doesn't stick, you have lost 15 minutes. If it does, you have a meal planning system you'll never pay a subscription for.
Frequently Asked Questions
How do I create a meal planner in Google Sheets?
Use four tabs: a Recipe Library with one row per ingredient (columns for recipe name, ingredient, quantity, unit, category, and calories/macros), a Weekly Plan with 7 days across and meal slots down using dropdowns pulled from the library, a Grocery List that uses SUMIFS to aggregate ingredients across the week's recipes, and a Nutrition tab that rolls up calories and macros per day. The template above ships an Apps Script that builds all four tabs and installs the formulas in one click.
How does the auto grocery list work in this Google Sheets meal planner template?
The grocery list uses SUMIFS to sum the quantity column in the recipe library, filtered by (a) the recipes scheduled on the current weekly plan and (b) the ingredient name. When you change any dropdown on the weekly plan, the named range that holds this week's recipes updates, SUMIFS re-runs, and the grocery list adjusts within a second. Ingredients are then grouped by category (produce, dairy, spices, protein, grains, pantry) using a VLOOKUP against the library, so you shop by aisle.
Can this meal planner spreadsheet track calories and macros?
Yes. The Recipe Library has columns for calories, protein, carbs, and fat per ingredient row. The Nutrition tab uses SUMPRODUCT to sum these across all ingredients in each of the day's four meal slots, giving you a per-day total for calories and each macro. There is also a weekly average row at the bottom. Accuracy depends on how carefully you enter the nutrition data; USDA FoodData Central is the source I recommend for real numbers.
Do I have to use the Apps Script, or can I build the sheet by hand?
You can build it by hand. The Apps Script just automates about 40 minutes of manual tab creation, formula installation, and data validation setup. If you prefer not to authorize scripts on your Google account, the walkthrough above describes exactly what each tab should contain. If you do run the script, it only touches the sheet you launched it from and requires no external permissions.
How is this different from a paid meal planning app like Mealime or Plan to Eat?
The main difference is control and cost. Paid apps hand you a curated recipe database but often gate the auto grocery list, custom recipes, or export behind a subscription. This template ships every feature (recipe library, auto grocery list, macro rollup, categorized shopping) with no paywall, no account, and no vendor lock-in. The trade-off is that you seed your own recipe library instead of picking from a catalogue. For a home cook who already has 15-30 recipes in rotation, that is a one-time cost worth paying.