Koofteh-ye Sooya (کوفته سویا) — Persian Soy & Vegetable Koofteh in Tomato Broth
A modern Persian-inspired koofteh made with soybeans, vegetables, and egg white, gently simmered in a ginger-tomato broth. Light yet comforting, with a tender texture and bright, aromatic sauce.

Printable Recipe Card
Servings: 4 · Total: 140 min · Difficulty: medium
Ingredients (quick list)
- 200 g Dried soybeans (soaked overnight and drained)
- 200 g Potato (peeled, cut into 2 cm cubes)
- 120 g Carrot (peeled, cut into 1 cm cubes)
- 150 g Zucchini (cut into 1 cm cubes)
- 180 g Mushrooms (finely chopped)
- 150 g Onion (grated on the fine side; squeeze out excess juice)
- 12 g Garlic (finely grated or minced)
- 60 g Egg white (from about 2 large eggs)
- 35 g Whole wheat flour (plus extra for dusting hands if needed)
- 80 ml Milk (room temperature)
- 1 tsp Ground turmeric
- 1 tsp Ground cumin
+ 10 more in the full ingredients section below.
Steps (summary)
- Soak the dried soybeans in plenty of cold water for 12–16 hours at room temperature or in the refrigerator. Drain and rinse wel…
- Cook the potato cubes in lightly salted boiling water for 10–12 minutes until just tender, then drain and let them steam-dry fo…
- In a food processor, pulse the cooked soybeans 10–15 times to a coarse mince (not a smooth paste). Transfer to a bowl. Add the…
- Chill the koofteh mixture for 20 minutes to firm up. With slightly wet hands, shape 8 koofteh (about 95–105 g each), pressing f…
- Make the broth: in a wide pot or Dutch oven, heat the oil over medium heat. Add the diced onion and cook for 8–10 minutes until…
- Add crushed tomatoes, vegetable stock, turmeric, cinnamon (if using), and salt. Bring to a gentle boil, then reduce to a steady…
+ 1 more steps in the full instructions section below.
Cultural Background
Koofteh is a long-standing family of Persian dishes centered on shaped dumplings or meatballs simmered in sauce, often served for shared meals. Modern versions may use legumes and vegetables to reflect contemporary preferences while keeping the familiar form and comforting, slow-simmered character.
Equipment
💡 Tips
- Squeeze grated onion very well; excess onion juice is the most common reason plant-based koofteh fall apart.
- Pulse soybeans coarsely rather than puréeing; a little texture helps binding and gives a more meatball-like bite.
- Keep the simmer gentle—rapid boiling can break the koofteh and cloud the broth.
- If your vegetables are very watery, sauté zucchini cubes for 3–4 minutes to evaporate moisture before mixing.
- For a richer broth without extra oil, simmer the sauce 10 minutes before adding the koofteh to concentrate flavor.
⚠️ Common Mistakes
❌ Boiling the broth vigorously after adding the koofteh
💡 Why: Aggressive bubbling knocks the koofteh around and can crack them before they set.
✅ Fix: Maintain a low, steady simmer; bubbles should be small and occasional. Use a wide pot so koofteh are not crowded.
❌ Leaving too much moisture in onions, mushrooms, or vegetables
💡 Why: Excess water weakens the bind and makes the koofteh soft and prone to breaking.
✅ Fix: Squeeze grated onion dry, sauté mushrooms until dry, and steam-dry potatoes after boiling; chill the mixture before shaping.
❌ Over-processing the soybeans into a paste
💡 Why: A smooth paste can turn gummy and dense, and it may not hold vegetable pieces well.
✅ Fix: Pulse to a coarse mince with visible bits; mix gently to avoid compacting the mixture.
❌ Turning the koofteh too early
💡 Why: They need time to set on the bottom side before being moved.
✅ Fix: Let them simmer undisturbed for 12–15 minutes, then turn once carefully with a spoon.
🧊 How to Store
Cool within 2 hours. Refrigerate koofteh and broth together in an airtight container for up to 3 days. Reheat gently at a low simmer (do not boil hard). Freeze up to 2 months; thaw overnight in the refrigerator and rewarm slowly.
📅 Make Ahead
Prepare the soybean-and-vegetable mixture up to 24 hours ahead and refrigerate tightly covered. Shape koofteh up to 12 hours ahead and keep chilled on a tray. The broth can be made 2 days ahead; reheat to a simmer before adding chilled koofteh and cooking as directed.
🍽️ Pairs Well With
- Steamed basmati rice
- Flatbread
- Fresh herb platter (mint
- basil
- radish
- cucumber)
- Pickled vegetables
Regional Variations
- Northwestern Iran (Azerbaijan region)Koofteh may be made larger and more elaborate, sometimes with a savory-sweet profile and a thicker sauce; the shaping and simmering technique remains similar even when fillings and seasonings change.
- Tehran and other large citiesHome cooks often prepare lighter, weeknight koofteh with smaller portions and a simpler tomato-based broth, reflecting modern schedules and ingredient availability.
Ingredients
- 200 gDried soybeans (soaked overnight and drained)
- 200 gPotato (peeled, cut into 2 cm cubes)
- 120 gCarrot (peeled, cut into 1 cm cubes)
- 150 gZucchini (cut into 1 cm cubes)
- 180 gMushrooms (finely chopped)
- 150 gOnion (grated on the fine side; squeeze out excess juice)
- 12 gGarlic (finely grated or minced)
- 60 gEgg white (from about 2 large eggs)
- 35 gWhole wheat flour (plus extra for dusting hands if needed)
- 80 mlMilk (room temperature)
- 1 tspGround turmeric
- 1 tspGround cumin
- 1 tspDried mint (rubbed between fingers to release aroma)
- 1.5 tspFine sea salt
- 0.5 tspBlack pepper
- 2 tbspNeutral oil (such as sunflower or canola)
- 10 gFresh ginger (finely grated)
- 30 gTomato paste
- 400 gCrushed tomatoes (canned)
- 600 mlVegetable stock (low-sodium preferred)
- 0.25 tspGround cinnamon (optional but traditional-leaning warmth)
- 1 tbspLemon juice (added at the end)
🔄 Substitutions
- Milk→ Unsweetened soy milk
- Egg white→ Aquafaba (chickpea brine), 60 g
- Whole wheat flour→ Oat flour, 35 g
Instructions
- 1
Soak the dried soybeans in plenty of cold water for 12–16 hours at room temperature or in the refrigerator. Drain and rinse well. Simmer in fresh water for 45–55 minutes until fully tender, then drain thoroughly and cool for 10 minutes so excess steam evaporates (this helps the koofteh hold together).
- 2
Cook the potato cubes in lightly salted boiling water for 10–12 minutes until just tender, then drain and let them steam-dry for 5 minutes. In a skillet over medium heat, sauté the chopped mushrooms in a dry pan for 6–8 minutes until their moisture evaporates; remove to cool so the mixture stays firm.
- 3
In a food processor, pulse the cooked soybeans 10–15 times to a coarse mince (not a smooth paste). Transfer to a bowl. Add the grated onion (well-squeezed), garlic, egg white, milk, whole wheat flour, turmeric, cumin, dried mint, salt, and pepper. Fold in the cooked potato, carrot, zucchini, and cooled mushrooms.
- 4
Chill the koofteh mixture for 20 minutes to firm up. With slightly wet hands, shape 8 koofteh (about 95–105 g each), pressing firmly so they are compact. If the mixture feels sticky, dust your palms lightly with whole wheat flour. Place the shaped koofteh on a tray and refrigerate while you start the broth.
- 5
Make the broth: in a wide pot or Dutch oven, heat the oil over medium heat. Add the diced onion and cook for 8–10 minutes until golden. Stir in garlic and grated ginger for 30 seconds. Add tomato paste and cook 2 minutes, stirring, until it darkens slightly and smells sweet. This step deepens the sauce.
- 6
Add crushed tomatoes, vegetable stock, turmeric, cinnamon (if using), and salt. Bring to a gentle boil, then reduce to a steady simmer. Carefully lower the koofteh into the broth, spacing them apart. Cover partially and simmer 25–30 minutes on low, turning once halfway, keeping bubbles gentle to prevent breaking.
- 7
Uncover and simmer 5 more minutes to slightly thicken the broth. Taste and adjust salt; stir in lemon juice off the heat for brightness. Rest the pot, covered, for 10 minutes so the koofteh set and absorb flavor. Serve hot with plenty of broth spooned over each portion.
🪪 Recipe Passport
Cultural Background
Koofteh is a long-standing family of Persian dishes centered on shaped dumplings or meatballs simmered in sauce, often served for shared meals. Modern versions may use legumes and vegetables to reflect contemporary preferences while keeping the familiar form and comforting, slow-simmered character.
Regional Variations
Researched from multiple sources and validated by the Zaffaron editorial team. Every recipe is tested for accuracy, measurements, and cultural authenticity.
Nutrition per serving
Pairs well with
If you enjoyed this recipe, here are a few related Zaffaron recipes to try next.
- Kufteh Ghelgheli Ba Morgh (کوفته قلقلی با مرغ) — Persian-Style Pan-Seared Chicken & Mozzarella Meatballs
- Kookoo-e Shir va Goosht (کوکو شیر و گوشت) — Persian Milk and Meat Frittata
- Kookoo-ye Piaz va Sib Zamini (کوکو پیاز و سیب زمینی) — Persian Onion & Potato Skillet Cakes
- Kotlet Ba Morgh (کتلت با مرغ) — Persian Chicken and Potato Cutlets
Does your family make this differently?
Every family has their own version. Maybe your grandmother adds a secret ingredient, or your aunt has a completely different technique. Preserve your family's version — with their name on it, forever.
You Might Also Like

Borani Esfenaj (بورانی اسفناج) — Persian Spinach and Yogurt Dip with Saffron and Walnuts
Persian · Appetizers · 40 min

Persian Smoked Torshi Liteh (ترشی لیته) — Caspian-style smoky mixed vegetable pickle
Persian · Side Dishes · 60 min

Aged Garlic Pickle (سیر ترشی) — Gilan’s seven-year-style black garlic torshi
Persian · Side Dishes · 45 min

Toad in the Hole (Toad in the Hole) — Sausages Baked in Yorkshire Pudding Batter
British · Main Courses · 65 min

Scrambled Hominy and Eggs (Mote pillo) — Ecuadorian Highland Breakfast
Ecuadorian · Main Courses · 25 min

Chicken Chygyrtma (Toyuq Çığırtması) — Azerbaijani Chicken with Eggs and Tomatoes
Azerbaijani · Main Courses · 65 min

Turkish Cağ Kebab (Cağ Kebabı) — Erzurum Slow-Roasted Charcoal Lamb Skewer
Turkish · Kebabs · 160 min

Khorak Ghalebi Sabzijat (خوراک قالبی سبزیجات) — Persian Molded Vegetable Casserole
Persian · Main Courses · 85 min
Reviews
Cooked this recipe?
Tap the stars to rate it — that's all it takes. A few words are welcome but optional.
No ratings yet. Cooked this one? Be the first to rate it — it takes one tap.