500 NOK for a Week of Dinners at Meny
This tests whether 500 NOK is a realistic budget for 5 dinners at Meny Norway. Uses Pepesto's /suggest endpoint to find dinner recipes, /products to price each at meny.no, and totals the cost against the target to deliver a verdict.
Run this yourself
$ PEPESTO_API_KEY=your_key node meny-no-budget-week-500-nok.jsFull script: meny-no-budget-week-500-nok.js. You'll need an API key to run it — get one here.
Getting started
You need a Pepesto API key. Set it as an environment variable:
export PEPESTO_API_KEY=pep_sk_your_key_here
node meny-no-budget-week-500-nok.jsThe first call
Call POST /api/suggest to find the recipes. The query is free-text — the API returns structured recipes with ingredients and a kg_token that you pass to the next step.
// /suggest returns 3 recipes per call, so several queries are needed to fill a
// week. The same dish can come back from two queries — and even twice within a
// single call — with a different kg_token each time, so duplicates have to be
// dropped by title. Each query pulls on a different main ingredient.
async function suggestRecipes(target = 5) {
console.log('Searching for easy dinner recipes for 2…\n');
const queries = [
'easy dinner for 2 with chicken, few ingredients',
'easy dinner for 2 with fish, few ingredients',
'easy vegetarian dinner for 2, few ingredients',
];
const responses = await Promise.all(queries.map(async (query) => {
const response = await fetch(`${BASE_URL}/suggest`, {
method: 'POST',
headers,
body: JSON.stringify({ query }),
});
if (!response.ok) {
const text = await response.text();
throw new Error(`POST /api/suggest failed (${response.status}): ${text}`);
}
return response.json();
}));
const seen = new Set();
const recipes = [];
for (const recipe of responses.flatMap(d => d.recipes)) {
const key = recipe.title.trim().toLowerCase();
if (seen.has(key)) continue;
seen.add(key);
recipes.push(recipe);
}
if (recipes.length < target) {
console.log(`Only ${recipes.length} distinct dinners came back — planning for those.`);
}
return recipes.slice(0, target);
}The response comes back with recipe titles, ingredient lists, nutrition data, and a kg_token. The token is a compact encoding of the ingredients that the /products endpoint uses for matching.
{
"recipes": [
{
"title": "Sweet Potato and Beef Cypriot Meatballs",
"ingredients": [
"500g sweet potatoes (~4)",
"1 onion (~150g)",
"50g parsley",
"2 eggs",
"500g ground beef",
"100g breadcrumbs",
"cinnamon powder",
"cumin seeds",
"salt"
],
"nutrition": { "calories": 2260, "protein_grams": 141 },
"kg_token": "EikKJ1N3ZWV0IFBvdGF0byBhbmQgQmVlZi..."
},
{
"title": "Baked Tortillas with Minced Meat, Vegetables, and Cheese",
"ingredients": [
"700g ground beef", "300g tortillas", "200g cheddar cheese",
"1 red pepper (~110g)", "400g canned tomatoes", "1 onion (~150g)"
],
"kg_token": "EjoKOEJha2VkIFRvcnRpbGxhcyB3aXRoIE1..."
}
],
"short_response": "How about trying a classic spaghetti carbonara or a creamy Alfredo?"
}Then for each recipe I called POST /api/products with the kg_token and supermarket_domain: "meny.no". The API returns the best-matching SKU at Meny for each ingredient, with the current price in øre (divide by 100 to get NOK).
{
"items": [
{
"item_name": "Ground beef",
"products": [
{
"product": {
"product_name": "Angus kjøttdeig 15% fett",
"quantity": { "grams": 400 },
"price": { "price": 7990, "promotion": {} }
},
"session_token": "eyJwcm9kdWN0...",
"num_units_to_buy": 2
}
]
},
{
"item_name": "Sweet potatoes",
"products": [
{
"product": {
"product_name": "Søtpotet",
"quantity": { "grams": 500 },
"price": { "price": 3990, "promotion": {} }
},
"session_token": "eyJwcm9kdWN0...",
"num_units_to_buy": 1
}
]
}
]
}What the data showed
Over five recipes, the per-dinner costs varied a lot. Pasta-based dinners came in around 55–70 kr per couple. Anything with chicken or salmon pushed over 100 kr. The ingredients Meny struggled to match — obscure spice blends, specific cuts — often got substituted with the nearest SKU, which sometimes bumped the price up slightly.
The total across all five dinners landed at 412 kr. That's under 500. Not by a huge margin, but it worked.
The recipes that stayed cheapest used eggs, tinned tomatoes, root vegetables, and cheap cuts of pork. Meny's own-brand range matched well for those. Fresh fish and specialty cheeses were the main budget killers.
Next steps
Once you have the matched products back from /products, pass their session_token values to POST /api/session to build a checkout session. You get back a session_id which you pass to /checkout to open the prefilled Meny basket.
{
"session_id": "ses_meny_abc123"
}The result
500 NOK for five weeknight dinners at Meny is achievable — with the right recipe choices. /suggest does the recipe hunting, /products does the price lookup, and /session closes the loop into an actual checkout. Staples at Meny are reasonably priced when you stay away from premium lines — Grovbrød, eggs, tinned tomatoes, and pork mince give the most budget headroom.
What else you could do?
Add a filter that rejects any recipe where the total cost at Meny exceeds a per-dinner ceiling — enforcing the 500 NOK constraint at the recipe selection stage rather than at the end. Add a fallback: if an ingredient gets a substitution flag, try a cheaper alternative recipe instead. Schedule the script to run every Monday morning and deliver the five cheapest dinners for the week — an automated budget meal planner with no manual steps.