A monthly grocery list for one person can combine an initial purchase of oats, rice, pasta, canned foods, and peanut butter with scheduled refills of milk, fruit, and other foods. The list below gives example quantities and purchase dates so you can see what belongs in each shopping trip.
A Four-Week Grocery List for One Person
This example allocates ingredients to 28 breakfasts, 24 lunches, and 24 dinners at home, plus a daily apple-and-peanut-butter snack. Eight main meals are eaten elsewhere. It assumes a stove, refrigerator, and freezer. Change the portions and meals to fit your needs; this is a purchasing example, not a prescribed diet.
Customize quantities and print your plan
| Food | Buy over 28 days if needed | Planned use | When to buy |
|---|---|---|---|
| Rolled oats | One 42 oz container, about 1.19 kg | 960 g dry | Initial trip |
| Dry rice | 3 lb total, about 1.36 kg | 1.2 kg dry | Initial trip |
| Dry pasta | Three 16 oz packages | About 1.36 kg dry | Initial trip |
| Canned beans | Twelve 15 oz cans | 2.88 kg drained; check yield | Initial trip, or split purchases |
| Canned tomatoes | Eight 14.5 oz cans | All eight cans | Initial trip |
| Peanut butter | Two 16 oz jars | About 704 g | Initial trip |
| Ready-to-eat soup | Eight 18–19 oz cans | Eight meals with toast | Initial trip |
| Boneless chicken | 6 lb total, about 2.72 kg | Sixteen portions | 3 lb initially; 3 lb on day 15. Freeze later-use portions promptly. |
| Frozen vegetables | Eight 24 oz bags | 4.8 kg | Four bags initially; four on day 15 |
| Eggs | Four dozen | 40 eggs | Two dozen initially; two on day 15 |
| Bread | Two loaves with at least 20 usable slices each | 40 slices | One initially; one on day 15 |
| Potatoes | 6 lb total, about 2.72 kg | 2.4 kg | 3 lb initially; 3 lb on day 15 |
| Milk | Four half-gallon containers | Breakfasts and planned drinks/cooking | One on days 1, 8, 15, and 22 |
| Bananas | 28 | One per breakfast | Seven on each weekly trip |
| Apples | 28 | One per daily snack | Seven on each weekly trip |
| Oil and seasonings | Add the shortfall for your chosen meals | Check recipes and current supplies | As needed |
Default dates are shopping dates, not guaranteed shelf life. The final two or three days need a separate check.
The example list is available without JavaScript. Use your browser’s print function for a copy.
Package sizes and metric conversions are examples. The totals assume none of the listed foods are already available. Add extra drinks, snacks, and any ingredients your actual meals require. Keep household supplies separate when pricing the food list.
The quantities follow this repeating week. Every breakfast includes a banana and one cup of milk:
- Four oatmeal breakfasts: 60 g dry oats and 16 g peanut butter per breakfast.
- Three egg-and-toast breakfasts: two eggs and two bread slices per breakfast.
- Four chicken-rice meals: 170 g raw chicken, 75 g dry rice, and 150 g vegetables per meal.
- Four bean-and-tomato pasta meals: 85 g dry pasta, 180 g drained beans, half a tomato can, and 100 g vegetables per meal.
- Two egg-and-potato meals: two eggs, 300 g potatoes, and 100 g vegetables per meal.
- Two soup-and-toast meals: one soup can and two bread slices per meal; choose a larger portion or another meal if needed.
Those twelve main meals can fill lunches or dinners around your schedule. Each daily apple snack uses 16 g peanut butter. Milk purchases also allow one additional cup each week for drinks or cooking.
The beans assume 240 g drained per can; the printed 15 oz weight includes liquid. Divide the month’s 2,880 g requirement by your product’s drained yield and round up to whole cans.
What to Buy First—and What to Refill
The initial trip combines pantry purchases with the first half of the chicken, frozen vegetables, eggs, bread, and potatoes. Add that week’s milk and fruit, plus any missing cooking supplies.
Then use these refill dates:
- Day 8: one half-gallon milk, seven bananas, seven apples, and confirmed shortfalls.
- Day 15: the second 3 lb chicken purchase, four vegetable bags, two dozen eggs, one loaf, 3 lb potatoes, and the weekly milk and fruit.
- Day 22: milk, fruit, and anything your remaining meals genuinely require.
Inspect what remains before each trip. If plans changed, the second purchase may need to be smaller. Keep canned foods or dry goods for later when suitable; opened or perishable food needs a timely use or appropriate storage.
If fruit will not remain usable for a week in your conditions, buy smaller amounts more often or change the fruit choice. Purchase dates do not establish shelf life. Likewise, freezing the bread you will not use soon helps this two-loaf schedule work; follow its storage instructions.
Subtract What You Have Before Buying Full Packages
Use this calculation for ingredients you already own:
Amount needed for planned meals − usable amount at home = amount still needed.
If the result is zero or negative, buy none of that ingredient.
For example, sixteen rice meals using 75 g dry rice each need 1,200 g. If you have 500 g, the gap is 700 g. One 2 lb bag contains about 907 g, leaving approximately 207 g after those meals. That replaces the default 3 lb purchase in the example list.
For a quick stock check, use this pantry inventory checklist. Count food that is usable and available for these meals, including partial packages.
Carryover is expected. With no starting stock, the example leaves roughly 230 g oats, 160 g rice, 204 g peanut butter, 640 g frozen vegetables, and eight eggs, before portion changes. Check storage and condition before using them. These leftovers reduce future purchasing needs; they do not justify rebuying the same full basket next month.
Keep Money for the Rest of the Month
Choose your food allowance before dividing it between trips. If you need a spending reference, start with this guide to setting a realistic grocery budget.
Initial-cart limit = monthly allowance − later purchases − extra-day purchases − your chosen contingency.
As a calculation example, a $360 allowance with later trips estimated at $35, $70, and $35, another $25 for days 29–31, and a $20 contingency leaves $175 for the initial cart. These hypothetical amounts are not the price of the grocery list above. Replace them with local estimates that include every planned purchase and applicable taxes or fees.
Price whole packages. A jar used across two months still costs its full price when purchased. Starting with an empty kitchen may also require oil, seasonings, or other supplies that later months will not need.
If the first cart exceeds its limit, move some suitable purchases to later trips or change meals and recalculate. Check the entire month’s total: delaying a purchase changes timing, but does not fix an overall budget shortfall.
Adjust for Extra Days, Meals Out, and Storage
Add days 29–31 without buying another full week
Count the final two or three days separately. Here is a 31-day example, assuming unchanged portions, usable carryover, and all nine extra meals plus three snacks at home:
- Days 29–30: oatmeal breakfasts, egg-rice lunches, egg-and-potato dinners, and the usual apple snacks. Each rice bowl uses two eggs, 75 g dry rice, and 150 g vegetables.
- Day 31: an oatmeal breakfast, soup-and-toast lunch and dinner, and the apple snack.
Together, these use 180 g oats, 96 g peanut butter, eight eggs, 150 g rice, and 500 g vegetables, all covered by the example’s carryover. The two potato dinners need 600 g potatoes; roughly 320 g remain, leaving about 280 g to buy.
The extra shopping list is three bananas, three apples, one quart of milk, about 280 g more potatoes, two soup cans, and one loaf with at least four usable slices. Round purchases up to available sizes. Buy the milk and fruit near day 29 and check their storage instructions. The extra bread purchase creates carryover for next month; freeze slices you will not use soon.
For a 30-day month, omit day 31’s meals and snack: buy two of each fruit, milk providing at least two cups, and the potato shortfall. No extra soup or bread is needed for that version.
Remove the ingredients for meals eaten elsewhere
The example already allows eight main meals away from home. If you remove two additional chicken-rice meals, planned use falls by about 340 g raw chicken, 150 g dry rice, and 300 g vegetables.
You may still need the same whole packages. In that case, assign the remaining food to later meals or suitable storage. Do not count the ingredient reduction as cash saved unless your checkout purchases actually change.
Split purchases when storage is limited
The default two-week freezer purchase combines about 4.1 kg of chicken and vegetables, before bread, packaging, and existing freezer contents. If that does not fit, buy approximately 1.5 lb chicken and two vegetable bags weekly instead. The overall example quantity stays the same; its purchasing schedule changes. Adjust your reserved money accordingly.
Freeze chicken portions intended for later use promptly. FoodSafety.gov’s storage chart lists raw poultry at one to two refrigerated days and cooked meat or poultry leftovers at three to four days. A month of planned meals does not mean a month of cooked food in the refrigerator.
The FDA’s food-storage guidance recommends a refrigerator at or below 40°F (4°C), a freezer at 0°F (−18°C), prompt chilling, and enough space for air circulation. Follow product storage and cooking instructions.
If you have no freezer, shorten protein purchases and use suitable fresh or shelf-stable alternatives. If you cannot make any refill trips, redesign the milk, fruit, and storage plan before using this list. You can also split pantry purchases when the first load is too heavy to carry or the money is not yet available.
Before your next trip, choose the actual shopping dates, subtract usable stock, and price the packages you still need. Keep the later-trip money separate from the first-cart allowance, and carry the food remaining at month-end into the next plan.
(function(){
'use strict';
const root=document.getElementById('fl-161-planner');
if(!root)return;
const foods=[{"name":"Rolled oats","unit":"containers","singular":"container","note":"42 oz each","qty":[1,0,0,0],"covered":!1},{"name":"Dry rice","unit":"lb","singular":"lb","note":"Dry weight","qty":[3,0,0,0],"covered":!1},{"name":"Dry pasta","unit":"packages","singular":"package","note":"16 oz each","qty":[3,0,0,0],"covered":!1},{"name":"Canned beans","unit":"cans","singular":"can","note":"15 oz each; check drained yield","qty":[12,0,0,0],"covered":!1},{"name":"Canned tomatoes","unit":"cans","singular":"can","note":"14.5 oz each","qty":[8,0,0,0],"covered":!1},{"name":"Peanut butter","unit":"jars","singular":"jar","note":"16 oz each","qty":[2,0,0,0],"covered":!1},{"name":"Ready-to-eat soup","unit":"cans","singular":"can","note":"18\u201319 oz each","qty":[8,0,0,0],"covered":!1},{"name":"Boneless chicken","unit":"lb","singular":"lb","note":"Raw boneless weight; freeze later-use portions promptly","qty":[3,0,3,0],"covered":!1},{"name":"Frozen vegetables","unit":"bags","singular":"bag","note":"24 oz each","qty":[4,0,4,0],"covered":!1},{"name":"Eggs","unit":"dozen","singular":"dozen","note":"12 eggs per dozen","qty":[2,0,2,0],"covered":!1},{"name":"Bread","unit":"loaves","singular":"loaf","note":"At least 20 usable slices per loaf","qty":[1,0,1,0],"covered":!1},{"name":"Potatoes","unit":"lb","singular":"lb","note":"Before cooking","qty":[3,0,3,0],"covered":!1},{"name":"Milk","unit":"containers","singular":"container","note":"Half-gallon each","qty":[1,1,1,1],"covered":!1},{"name":"Bananas","unit":"bananas","singular":"banana","note":"Count","qty":[7,7,7,7],"covered":!1},{"name":"Apples","unit":"apples","singular":"apple","note":"Count","qty":[7,7,7,7],"covered":!1}];
const original=JSON.parse(JSON.stringify(foods));
const q=s=>root.querySelector(s);
const select=q('#fl161-item'),check=q('#fl161-covered'),status=q('#fl161-status');
const inputs=[0,1,2,3].map(i=>q('#fl161-q'+i));
const tripDays=[1,8,15,22];
const num=n=>Number(n.toFixed(3)).toString();
const amount=(f,n)=>num(n)+' '+(n===1?f.singular:f.unit);
function label(j){
const start=q('#fl161-start').value;
if(!start)return'Day '+tripDays[j];
const date=new Date(start+'T12:00:00Z');
date.setUTCDate(date.getUTCDate()+tripDays[j]-1);
return'Day '+tripDays[j]+' · '+new Intl.DateTimeFormat('en-US',{month:'short',day:'numeric',year:'numeric',timeZone:'UTC'}).format(date);
}
function loadFood(){
const f=foods[Number(select.value)];
q('#fl161-unit').textContent='Enter '+f.unit+'. '+f.note+'.';
inputs.forEach((input,j)=>{input.value=f.qty[j];input.step=f.unit==='lb'?'any':'1';input.disabled=f.covered});
check.checked=f.covered;
}
function updateRows(){
foods.forEach((f,j)=>{
const row=q('[data-item="'+j+'"]');
const total=f.qty.reduce((a,b)=>a+b,0);
row.classList.toggle('fl161-covered',f.covered);
row.querySelector('[data-total]').textContent=f.covered?'0 to buy · covered by existing food':amount(f,total)+' · '+f.note;
row.querySelector('[data-timing]').textContent=f.covered?'Skip this purchase':f.qty.map((n,k)=>n>0?label(k)+': '+amount(f,n):'').filter(Boolean).join('; ')||'No purchase listed';
});
}
function extraLabel(){
const period=Number(q('#fl161-period').value);
const l=q('#fl161-extra-label');
l.firstChild.textContent=period===28?'Other meals or extra-day purchases':period===30?'Purchases for days 29–30':'Purchases for days 29–31';
}
select.addEventListener('change',loadFood);
inputs.forEach((input,j)=>input.addEventListener('input',()=>{
const n=Number(input.value);
if(input.value===''||!Number.isFinite(n)||n<0||!input.validity.valid){status.textContent='Use zero or a positive quantity, and whole counts for packages. The previous quantity is still in the plan.';return}
foods[Number(select.value)].qty[j]=n;updateRows();status.textContent='Shopping quantities updated.'}));inputs.forEach(input=>input.addEventListener('blur',()=>{if(!input.validity.valid||input.value==='')loadFood();}));
check.addEventListener('change',()=>{
foods[Number(select.value)].covered=check.checked;loadFood();updateRows();
status.textContent=check.checked?'This food is omitted from every shopping trip.':'This food is included again.';
});
q('#fl161-start').addEventListener('change',updateRows);
q('#fl161-period').addEventListener('change',extraLabel);
q('#fl161-form').addEventListener('submit',e=>e.preventDefault());
q('#fl161-reset').addEventListener('click',()=>{
foods.splice(0,foods.length,...JSON.parse(JSON.stringify(original)));
q('#fl161-form').reset();loadFood();updateRows();extraLabel();status.textContent='Example quantities restored.';
});
function textNode(tag,text,parent){const e=document.createElement(tag);e.textContent=text;parent.appendChild(e);return e}
let cleanup=null;
q('#fl161-print-button').addEventListener('click',()=>{
if(cleanup)cleanup();
const out=q('#fl-161-print');out.replaceChildren();
textNode('h2','My Monthly Grocery Shopping Plan',out);
const period=q('#fl161-period').value;
textNode('p',period==='28'?'28-day base.':period+' days: 28-day base plus '+(Number(period)-28)+' extra days.',out);
textNode('p','Check purchase quantities against your meals and usable stock. Shopping dates do not establish shelf life.',out);
let any=!1;
tripDays.forEach((day,j)=>{
const list=foods.filter(f=>!f.covered&&f.qty[j]>0);
if(!list.length)return;
any=!0;textNode('h3',label(j),out);
const table=document.createElement('table'),tbody=document.createElement('tbody');table.appendChild(tbody);
list.forEach(f=>{const tr=document.createElement('tr');const th=textNode('th',f.name,tr);th.scope='row';textNode('td',amount(f,f.qty[j])+' · '+f.note,tr);tbody.appendChild(tr)});out.appendChild(table);
});
if(!any)textNode('p','No package purchases currently listed.',out);
const other=q('#fl161-other').value.trim(),extra=q('#fl161-extra').value.trim();
textNode('h3','Additional purchases and notes',out);
textNode('p',other||'Check oil, seasonings, and any ingredients your chosen meals require.',out);
textNode('h3',period==='28'?'Other meals / extra-day check':'Days 29–'+period,out);
textNode('p',extra||(period==='28'?'Add extra meals if needed.':'Extra-day purchases have not been entered. Count those meals and check usable stock before shopping.'),out);
textNode('p','frugenzaliving.com',out);
const excluded=[],path=[];let current=root;
while(current&¤t!==document.body){
const parent=current.parentElement;if(!parent)break;
Array.from(parent.children).forEach(s=>{if(s!==current&&!['STYLE','SCRIPT','LINK'].includes(s.tagName)){s.classList.add('fl161-print-exclude');excluded.push(s)}});
parent.classList.add('fl161-print-path');path.push(parent);current=parent;
}
document.body.classList.add('fl161-printing');
cleanup=()=>{excluded.forEach(e=>e.classList.remove('fl161-print-exclude'));path.forEach(e=>e.classList.remove('fl161-print-path'));document.body.classList.remove('fl161-printing');window.removeEventListener('afterprint',cleanup);cleanup=null};
window.addEventListener('afterprint',cleanup);
try{window.print()}catch(e){if(cleanup)cleanup();status.textContent='Use your browser print command if the print dialog does not open.'}
});
loadFood();extraLabel();q('#fl161-controls').hidden=!1;
})();
- Proportional Bill Split Calculator for Two Incomes - October 15, 2026
- How to Split Grocery Bills With Roommates - October 14, 2026
- First Apartment Kitchen Essentials on a Budget - October 13, 2026
