When you cook for a group, you plan in dishes – but you shop in aisles. Lettuce then shows up three times in the spreadsheet, the ground meat is spread over two evenings, and in the store you end up doing sums in front of the fridge. That step can be handed off: an AI merges the ingredients, adds up the amounts and sorts them by supermarket aisle.
How much you need per person in the first place is covered in the quantities for groups. This page starts after that: the dishes are decided, now they have to become a shopping list.
Below is a complete example from a real club trip – 23 ingredient rows become 16 items in 6 aisles. The amounts are what that one group of about 50 bought: they show the method, not how much you need.
Before the AI can merge anything, it needs your dishes and their ingredients. A spreadsheet in Excel or Google Sheets works best – one row per ingredient, with a rough amount. A typed list or a note on your phone works just as well; the AI copes with messy text too. Add how many people a dish is for, and the AI scales the amounts up.
For the example on this page – a club trip with three dinners – the dishes look like this. Highlighted are the ingredients that appear in several dishes and will be merged later:
Evening 1
Evening 2
Evening 3
Highlighted are the 11 rows that collapse into 4 items – some of them even under different names (“ground meat” and “ground beef”).
Open an AI of your choice – for example ChatGPT (chatgpt.com), Gemini (gemini.google.com) or Claude (claude.ai). The free versions are enough. Start a new chat, paste the text below, add your list from step 1 underneath, and send both.
The text tells the AI not only what to add up, but also exactly how to write its answer – so you can take it over without any rework. You do not need to understand it or change anything; it is written for the AI, not for you. It also asks the AI to keep item names in the language of your recipes, so nothing gets translated along the way.
You'll get a list of dishes and their ingredients for feeding a group (a table, a list, or plain text).
Task:
1. If serving or headcount numbers are given, scale the ingredient amounts to match.
2. Merge identical ingredients across all dishes and sum up the amounts.
3. Assign each ingredient to a typical supermarket aisle (e.g. "Fruit & vegetables", "Meat & deli counter", "Cheese & dairy", "Bakery", "Pasta & dry goods", "Canned goods, sauces & oil", "Spices", "Drinks", "Household").
4. In "note", write which dishes make up the amount (e.g. "Spaghetti 1, Burgers 6").
5. Keep item and aisle names in whichever language the source material is in — do not translate them.
Reply with nothing but JSON in exactly this shape – no Markdown, no explanation.
Important: reply on a single line. No line breaks, no indentation, no alignment spaces – the answer gets copied by hand and should stay short.
{"mode":"merge","categories":[{"name":"Fruit & vegetables","emoji":"🥬","items":[{"name":"Lettuce","quantity":"9 heads","note":"Spaghetti 1, Burgers 6, Cheese 2"},{"name":"Tomatoes","quantity":"33"}]},{"name":"Meat & deli counter","emoji":"🍖","items":[{"name":"Ground beef","quantity":"4.2 kg","note":"Burgers"}]}]}
Fields:
- "mode": always give "merge". Whether the list gets added to, summed with existing amounts, or fully replaced is chosen by the person doing the import inside the app – this value is overwritten there.
- "name" (required) for each category and each item.
- "emoji" (optional) a single emoji for the category.
- "quantity" (optional) free text, e.g. "4.2 kg" or "9 heads".
- "note" (optional) extra detail.
Here is the list:Every amount appears exactly once, and the note says what it is made of. Nobody has to do sums at the counter any more – and if a dish is dropped, you know at once what changes.
Glance over the merges before you import: an AI joins what looks alike. In this example ground meat and ground beef became one line – right for this trip, where the same mince went into both dishes – while onions and red onions rightly stayed apart.
6 heads Lettuce3 rows
Spaghetti 1, Burgers 3, Spätzle 2
7 Cucumbers3 rows
Spaghetti 2, Burgers 3, Spätzle 2
23 Tomatoes3 rows
Spaghetti 4, Burgers 15, Spätzle 4
5 Onions
Spaghetti
2 Red onions
Burgers
5 Carrots
Spaghetti
6.7 kg Ground meat2 rows
Spaghetti 2.5 kg, Burgers 4.2 kg
630 g Diced bacon
Spätzle
52 slices Burger cheese
Burgers
1250 g Alpine cheese
Spätzle
3 × 150 g Parmesan
Spaghetti
5 Cream, cartons
Spätzle
47 Burger buns
Burgers
3.5 kg Spaghetti
Spaghetti
5.5 kg Fresh spätzle
Spätzle
4 l Tomato sauce
Spaghetti
The AI answers with a block full of curly brackets and quotation marks. It looks odd, but it is just a tidy way of writing the same list – you do not need to read or understand it. Select, copy, paste, done.
If something goes wrong: if the page says something is wrong with the answer, copy the message back into the chat and ask the AI to fix it. The message says exactly where something is missing – usually the second try does it.
This is exactly what the AI would write for the example above. Developers call this format JSON; for you it is simply the text you paste.
{
"mode": "replace",
"title": "Club trip",
"categories": [
{
"name": "Fruit & vegetables",
"emoji": "🥬",
"items": [
{
"name": "Lettuce",
"quantity": "6 heads",
"note": "Spaghetti 1, Burgers 3, Spätzle 2"
},
{
"name": "Cucumbers",
"quantity": "7",
"note": "Spaghetti 2, Burgers 3, Spätzle 2"
},
{
"name": "Tomatoes",
"quantity": "23",
"note": "Spaghetti 4, Burgers 15, Spätzle 4"
},
{
"name": "Onions",
"quantity": "5",
"note": "Spaghetti"
},
{
"name": "Red onions",
"quantity": "2",
"note": "Burgers"
},
{
"name": "Carrots",
"quantity": "5",
"note": "Spaghetti"
}
]
},
{
"name": "Meat & deli counter",
"emoji": "🍖",
"items": [
{
"name": "Ground meat",
"quantity": "6.7 kg",
"note": "Spaghetti 2.5 kg, Burgers 4.2 kg"
},
{
"name": "Diced bacon",
"quantity": "630 g",
"note": "Spätzle"
}
]
},
{
"name": "Cheese & dairy",
"emoji": "🧀",
"items": [
{
"name": "Burger cheese",
"quantity": "52 slices",
"note": "Burgers"
},
{
"name": "Alpine cheese",
"quantity": "1250 g",
"note": "Spätzle"
},
{
"name": "Parmesan",
"quantity": "3 × 150 g",
"note": "Spaghetti"
},
{
"name": "Cream, cartons",
"quantity": "5",
"note": "Spätzle"
}
]
},
{
"name": "Bakery",
"emoji": "🥖",
"items": [
{
"name": "Burger buns",
"quantity": "47",
"note": "Burgers"
}
]
},
{
"name": "Pasta & dry goods",
"emoji": "🍝",
"items": [
{
"name": "Spaghetti",
"quantity": "3.5 kg",
"note": "Spaghetti"
},
{
"name": "Fresh spätzle",
"quantity": "5.5 kg",
"note": "Spätzle"
}
]
},
{
"name": "Canned goods, sauces & oil",
"emoji": "🥫",
"items": [
{
"name": "Tomato sauce",
"quantity": "4 l",
"note": "Spaghetti"
}
]
}
]
}Not in a normal chat. ChatGPT and Claude write text there, but they do not reach out to other websites on their own, so they cannot put anything into your list. Hence the detour through copy and paste – it takes a few seconds and always works.
The two can still be connected: ChatGPT and Claude can control other programs through a specially set-up extension. But that is tinkering you have to set up once – and it gives the AI access to the list that it could also use to overwrite it. For one shopping trip, it is not worth it.
If you want to fill lists automatically on a regular basis – from your own script or an automation service – the import window has a time-limited access key for that. If that means nothing to you, you do not need it: pasting gets you the same result.
Name the categories after the aisles of your store and sort them in the order you walk through it. Then you work through the list once, top to bottom.
Let the AI write into each note which dishes an amount is made of. If a dish is dropped, you see at once how much less you need.
If another recipe comes along, choose “Add up amounts” when importing: known items keep their amount and get the new one added. “Add to list” would set them to the new amount instead.