Italian meatballs with courgetti is a straightforward weeknight dinner: lean beef meatballs seasoned with rosemary and oregano, simmered in a mushroom-tomato sauce, and served over spiralized zucchini instead of pasta. The swap keeps the meal genuinely filling without the post-dinner slump, and the whole thing is done in 40 minutes. If you want a complete, protein-forward plate that doesn’t require much cleanup, this delivers.
The technique that matters
Browning the meatballs properly before they go into the sauce is the step most people rush — and it’s the one that determines texture. Work in batches if needed; crowding the pan drops the temperature and you get steaming instead of browning. A good crust on the outside holds the meatball together when it finishes cooking in the sauce, so you don’t end up with a crumbled mess. The second thing worth getting right is moisture in the courgetti. Zucchini is mostly water. If you add it straight to a wet sauce without a quick sauté first, it releases liquid and thins everything out. A dry pan on medium-high heat for two to three minutes before combining is all it takes.
Ingredient notes
- Ghee: Used here for cooking both the meatballs and the sauce base. It handles higher heat without burning, which is exactly what you need for browning meatballs. Clarified butter works the same way. Regular butter will smoke and burn before the meatballs are properly browned — skip it for this step.
- Chestnut mushrooms: These have a firmer texture and slightly earthier flavor than white button mushrooms, so they hold up in the sauce rather than going mushy. Cremini mushrooms are the same thing under a different name in the US.
- Two cartons chopped tomatoes: That’s 800g / roughly 28 oz total. Don’t reduce this — the meatballs need enough liquid to finish cooking through to a safe internal temperature of 160°F (71°C).
- Fresh rosemary: Finely chop it. Rosemary is tough and waxy; coarse pieces stay chewy inside the meatball and don’t distribute flavor evenly. Take the extra minute to chop it small — skip the garnish of whole sprigs on top, not worth the extra dish.
Common problems and fixes
- Meatballs fall apart in the pan: The egg is the binder — if the mixture felt very wet before shaping, the beef may have had high water content. Chill the shaped meatballs in the fridge for 15 minutes before cooking. They’ll firm up and hold their shape better when they hit the hot pan.
- Sauce is watery: Courgetti released moisture into the sauce. Next time, sauté the spiralized zucchini separately in a dry pan first. If it’s already happened, remove the lid and simmer the sauce on medium heat for five minutes before serving to reduce it back down.
- Meatballs are dense and rubbery: Overmixing compacts the protein. Mix just until the egg and herbs are evenly distributed — stop there. The mixture should look combined, not paste-like.
- Center of meatballs still pink after browning: Browning only colors the outside. The meatballs need to finish in the simmering sauce, covered, for at least 10 minutes to reach 160°F (71°C) at the center. Use an instant-read thermometer if you’re unsure — ground beef must not be served undercooked.
- Sauce tastes flat: Canned tomatoes vary a lot in acidity and sweetness. Add salt in small increments and taste as you go. A pinch of sugar can balance an overly acidic batch of tomatoes without changing the flavor profile.

Italian Meatballs with Courgetti (Ready in 40 Minutes)
Equipment
Ingredients
- 1 pound lean ground beef - minced beef, about 450g
1 medium egg
2 tablespoons rosemary - fresh, finely chopped
1 tablespoon dried oregano - or 2 tablespoons fresh oregano, finely chopped- 2 tins chopped tomatoes - 400g (14oz) each
- 6-8 medium chestnut mushrooms - sliced, about 150g / 5oz
1 medium white onion - finely diced
4 cloves garlic - crushed through a garlic crusher- 10-12 pieces fresh basil leaves - finely chopped, about 2 tablespoons
- 4-5 medium fresh plum tomatoes - halved, optional — adds thickness to the sauce
1 pinch salt - to taste
1 pinch ground black pepper - to taste
2-3 tablespoons ghee - for cooking, 30-45g
3-4 medium courgettes - spiralized, about 600g / 1.3 lbs
Instructions
- Prepare the meatballs. Break the egg into a large bowl and beat it. Then, add the beef mince, rosemary, oregano and a pinch of salt and pepper. Mix this thoroughly using your hands (it’s not too gross, really!).1 pound lean ground beef, 1 medium egg, 2 tablespoons rosemary, 1 tablespoon dried oregano, 1 pinch salt, 1 pinch ground black pepper
- Heat 1 tablespoon of ghee in a large non-stick frying pan over medium-high heat. Shape the meatball mixture into balls about 1.5 inches (4cm) in diameter — you should get 16-20 meatballs. Place gently into the pan, leaving space between each (work in two batches if needed to avoid crowding). Cook for 8-10 minutes, turning every couple of minutes until evenly browned on all sides.2-3 tablespoons ghee
- In a separate pan over medium heat, add 1 tablespoon of ghee. Cook the diced onion for 3-4 minutes until softened, then add the sliced mushrooms and crushed garlic. Cook for a further 3-4 minutes until the mushrooms have released their liquid and started to brown.2-3 tablespoons ghee, 1 medium white onion, 6-8 medium chestnut mushrooms, 4 cloves garlic
- Pour in the chopped tomatoes and halved plum tomatoes (if using). Stir well and season with salt and pepper to taste. Bring to a gentle simmer, then carefully add the browned meatballs. Let everything simmer for 8-10 minutes until the meatballs are cooked through (160°F / 71°C internal temperature). Stir in the fresh chopped basil in the final minute of cooking.2 tins chopped tomatoes, 4-5 medium fresh plum tomatoes, 1 pinch salt, 1 pinch ground black pepper, 10-12 pieces fresh basil leaves
- While the meatballs simmer, prepare the courgetti using a spiralizer or julienne peeler. Heat half a tablespoon of ghee in a clean pan over medium-high heat. Add the courgetti and toss for 2-3 minutes until just wilted but still retaining a slight bite — do not overcook or it will release too much water and become mushy. Season lightly with salt.3-4 medium courgettes, 2-3 tablespoons ghee, 1 pinch salt
Notes
Nutrition
FAQ
Can I use ground turkey instead of beef?
Yes, ground turkey works as a direct swap. Keep in mind that ground poultry must reach 165°F (74°C) internally — not 160°F — so let the meatballs simmer in the sauce a little longer and check with a thermometer before serving.
Do I need a spiralizer, or is there another way to make courgetti?
A julienne peeler does the job fine and costs a fraction of a spiralizer. You can also use a standard box grater on the coarse side for a rougher, ribbon-style cut — it won’t look as neat but it eats the same way.
How do I know when the meatballs are fully cooked through?
The most reliable method is an instant-read thermometer inserted into the center of the largest meatball — it should read 160°F (71°C). If you don’t have one, cut a meatball open: no pink, and the juices run clear.
Can I make the meatballs ahead and refrigerate them?
Yes. Shape the raw meatballs, place them on a lined tray, cover, and refrigerate for up to 24 hours before cooking. Cooked meatballs in sauce also keep well in the fridge for three days and reheat in a covered pan on low heat.
Is this recipe gluten-free?
As written, yes — there’s no breadcrumb filler in the meatballs and no flour in the sauce. Just check the label on your canned tomatoes, since some brands add modified starch.
The recipe serves 4 — is this enough protein per serving?
One pound of lean ground beef across four servings gives roughly 28–30g of protein per portion before accounting for the egg, which adds a few grams more. That’s a solid main-course amount. If you’re feeding people with bigger appetites, scale the beef to 1.5 lb and adjust the egg to two.
Try these next
- Spicy Beef Stuffed Peppers
- Hearty Beef Cauliflower Bake
- Olive Beef Polpette Perfection
- Hearty Beef Mushroom Stroganoff










