A coastal Tunisian classic featuring delicate white fish meatballs gently poached in a fragrant tomato-harissa broth loaded with potatoes, carrots, and zucchini, all served over a mound of fluffy steamed semolina. Bright herbs, warm spices, and a touch of heat make this lighter cousin of lamb couscous deeply satisfying. Each spoonful delivers tender fish, sweet vegetables, and grains that soak up every drop of the spiced broth.
Prep Time25 mins
Cook Time45 mins
Total Time70 mins
Servings4
Yield4 servings
Nutrition Facts
Per serving (estimated)
- 495 kcalCalories
- 14 gFat
- 2.5 gSaturated Fat
- 62 gCarbs
- 7 gFiber
- 9 gSugar
- 34 gProtein
- 720 mgSodium
- 980 mgPotassium
- 115 mgCalcium
- 4 mgIron
- 42 mgVitamin C
- 320 mcgVitamin A
Ingredients
For the fish meatballs
- 1 lb (450 g) skinless white fish fillets (cod, whiting, or sea bass), finely chopped
- 1 small yellow onion, finely grated and squeezed
- 2 garlic cloves, minced
- 1/4 cup finely chopped fresh parsley
- 2 tablespoons finely chopped fresh cilantro
- 1 large egg
- 1/3 cup fine dried breadcrumbs
- 1 teaspoon ground cumin
- 1 teaspoon sweet paprika
- 1/2 teaspoon fine salt
- 1/4 teaspoon black pepper
For the spiced vegetable broth
- 3 tablespoons olive oil
- 1 large onion, finely chopped
- 4 garlic cloves, minced
- 1 red bell pepper, diced
- 2 medium tomatoes, grated (or 1 cup crushed tomatoes)
- 2 tablespoons tomato paste
- 1 tablespoon harissa paste, plus more for serving
- 2 teaspoons ground cumin
- 1 teaspoon sweet paprika
- 1/2 teaspoon ground turmeric
- 1/2 teaspoon ras el hanout
- 2 medium Yukon gold potatoes, peeled and cut into chunks
- 2 carrots, peeled and sliced into thick rounds
- 1 medium zucchini, sliced into half-moons
- 6 cups water or mild fish stock
- Salt and freshly ground black pepper, to taste
For the semolina couscous
- 2 cups (about 320 g) medium semolina couscous
- 2 cups boiling fish stock or water
- 1 tablespoon olive oil
- 1/2 teaspoon salt
- 2 tablespoons chopped fresh cilantro and parsley, for finishing
Directions
- Make the fish meatballs: in a large bowl, combine the chopped fish, grated onion, garlic, parsley, cilantro, egg, breadcrumbs, cumin, paprika, salt, and pepper. Mix gently with your hands just until evenly blended, then cover and refrigerate for 15 minutes to firm up. Roll the mixture into 20 to 24 small balls, about 1 1/2 inches across.
- Start the broth: heat the olive oil in a wide pot or Dutch oven over medium heat. Add the chopped onion and cook until translucent, about 5 minutes. Stir in the garlic, bell pepper, grated tomatoes, tomato paste, harissa, cumin, paprika, turmeric, and ras el hanout, and cook until the mixture thickens and the oil begins to separate, about 6 minutes.
- Pour in the water or fish stock and add the potatoes and carrots. Season lightly with salt and pepper. Bring to a gentle boil, then reduce the heat and simmer for 15 minutes, until the potatoes are nearly tender.
- Lower the heat so the broth is barely simmering. Carefully drop the fish meatballs into the pot in a single layer, gently nudging them under the surface. Simmer very gently for 8 to 10 minutes, without stirring, so the meatballs keep their shape.
- Add the zucchini and continue to simmer for 4 to 5 minutes more, until the zucchini is just tender and the meatballs are cooked through. Taste the broth and adjust salt, pepper, and harissa to your preferred heat level.
- Meanwhile, prepare the couscous: combine the semolina with the salt in a heatproof bowl. Pour the boiling stock and olive oil over the top, stir once, cover tightly, and let rest for 10 minutes. Fluff thoroughly with a fork, breaking up any clumps, then stir in the chopped herbs.
- Mound the fluffy couscous onto a large serving platter or shallow bowls. Arrange the fish meatballs, potatoes, carrots, and zucchini over and around the grains. Ladle the fragrant broth generously over everything.
- Serve immediately with extra harissa on the side, lemon wedges if desired, and a sprinkle of fresh herbs.
Cook’s Notes
- Use a firm, lean white fish like cod, whiting, or hake; very fresh fish gives the cleanest flavor and best texture in the meatballs.
- Chilling the fish mixture before shaping helps the meatballs hold together during simmering, so don't skip the rest in the refrigerator.
- For the most traditional texture, steam the couscous three times in a couscoussier over the simmering broth, fluffing between each pass.
- Keep the broth at a bare simmer once the meatballs are added; a rolling boil will break them apart.
- Tunisian harissa varies wildly in heat, so start with a small amount and build up to taste; a spoonful of mild rose harissa is a good starting point for beginners.










