Keto Italian Wedding Soup
Published February 14, 2025 • Updated February 24, 2026
This post may contain affiliate links. See my disclosure policy.
I have been making Italian wedding soup for years. Before keto, it was one of my go-to comfort meals because it freezes well and the flavor actually gets better the next day. The problem was always the orzo adding 15 to 20g of carbs per serving. My boys will eat anything if there are meatballs involved, so this has been in steady rotation since I figured out the pasta swap.
Then I found lupini bean pasta. It looks like orzo once it cooks down in the broth, and the texture is close enough that my family did not notice the swap. One serving of lupini rice has only 1g net carbs compared to 20g+ for traditional orzo. I switched over completely from shirataki noodles for soups like this because the flavor and mouthfeel are so much closer to the real thing. Shirataki works in stir fry, but in broth it just floats there and never absorbs anything. Lupini softens the way pasta should.

What makes this recipe low carb?
Pork panko breadcrumbs. Instead of adding traditional breadcrumbs to the meatballs, I use ground pork rinds. They work as a binding agent with zero carbs and high protein. I tested almond flour in this recipe and the meatballs came out dense and gummy after simmering in broth for 10 minutes. Pork panko absorbs moisture without that problem.
Lower carb vegetables. Spinach and celery keep the carb count down. I add a small amount of onion and carrot for flavor and color. These are slightly higher in carbs, so you can reduce them if you are tracking closely.
Lupini bean pasta. My favorite pasta swap right now. The flavor and texture are closer to traditional noodles than anything else I have tried. Lupini rice is high protein and only 1 net carb per serving. Once it cooks in the broth, it looks exactly like orzo.
One thing I started doing with this soup (borrowed from my minestrone soup) is dropping a parmesan rind into the broth while it simmers. It melts slowly and adds this deep, savory richness that you cannot get from grated parmesan alone. Fish it out before serving. For a heartier Italian one-pot meal, my Italian beef stew reheats just as well.
If you like swapping lupini into other pasta dishes, my spaghetti uses the same approach with the noodle shape instead of rice.
How to Make Keto Italian Wedding Soup
Start by mixing the meatball ingredients: ground pork, Italian sausage, pork panko, parmesan, egg, and Italian seasoning. Roll them small, about 1 inch across. I have made these bigger and the ratio of broth to meatball gets off. Smaller ones give you more per spoonful and cook faster.
Brown the meatballs in a hot skillet until they have a crust on the outside. They do not need to be cooked all the way through since they finish in the broth. Remove them and saute celery, carrot, onion, and garlic in the same pan. The fond from the meatballs adds a layer of flavor to the vegetables.
Add chicken broth and bring to a boil, then reduce to a simmer. If you have a parmesan rind, drop it in now. Drop the meatballs back in and cook for about 15 minutes until they are fully cooked through. Add the lupini rice during the last 5 minutes so it softens without getting mushy.
Stir in fresh spinach right at the end. It wilts in about 30 seconds. Season with salt and pepper, and finish with a squeeze of lemon juice if you want a little brightness. If you want to make a larger batch of meatballs on their own, my skillet meatballs recipe covers that.
Explore 684+ keto recipe videos with step-by-step instructions, tips, and tricks to make keto easy.
Keto Meatballs Ingredients
1/2 lb ground beef (93/7)
1/2 lb ground Italian sausage
1/2 cup pork panko
1 large egg
1/3 cup grated parmesan cheese
3 cloves garlic, minced
2 tablespoons finely chopped parsley
1 teaspoon dried oregano
1 teaspoon salt
1/2 teaspoon black pepper
Keto Italian Wedding Soup Base Ingredients
3 tablespoons olive oil
1/2 medium yellow onion, chopped
1 carrot, sliced
3 stalks celery, sliced
3 cloves garlic, minced
1/2 teaspoon salt
1/2 teaspoon black pepper
8 cups chicken broth
1 cup lupini rice
3 cups baby spinach leaves
Step by Step Instructions
Step by Step Instructions
Meatball mixture
Add all ingredients for the meatballs to a large bowl and mix until combined.
- 1/2 lb ground beef (93/7)
- 1/2 lb ground Italian sausage
- 1/2 cup pork panko
- 1 large egg
- 1/3 cup grated parmesan cheese
- 3 cloves garlic, minced
- 2 tablespoons finely chopped parsley
- 1 teaspoon dried oregano
- 1 teaspoon salt
- 1/2 teaspoon black pepper
Form small meatballs
Form small meatballs by scooping up 1 heaping teaspoon of the mixture and rolling it in a ball that is about ¾-1-inch in diameter. Repeat with remaining mixture. This should make around 75-80 meatballs.
Cook the meatballs
Pour olive oil into a large pot or Dutch oven. Heat over medium heat. When oil is hot, fry the meatballs in batches, turning to brown all sides, about 3-4 minutes per batch. Transfer to a paper towel-lined plate and repeat with remaining meatballs.
- 3 tablespoons olive oil
Cook the veggies
To the Dutch oven, add the onion, carrot and celery. Cook, stirring occasionally, until the vegetables are slightly tender. Add the garlic, salt and pepper. Stir and cook until fragrant, about 1 minute.
- 1/2 medium yellow onion, chopped
- 1 carrot, sliced
- 3 stalks celery, sliced
- 3 cloves garlic, minced
- 1/2 teaspoon salt
- 1/2 teaspoon pepper
Make it a soup
Return the meatballs to the pot and add broth. Bring to a simmer over medium-high heat. Stir in lupini rice, lower the heat to a simmer and let cook for 6-8 minutes or until rice is tender.
- 8 cups chicken broth
- 1 cup lupini rice
Nutrition disclaimer
The nutrition information provided is an estimate and is for informational purposes only. I am a Doctor of Pharmacy (Pharm.D.); however, this content is not intended to be a substitute for professional medical advice, diagnosis, or treatment. Always consult your physician or other qualified health provider before making any lifestyle changes or beginning a new nutrition program.
Your Macros. Your Recipes. Calculated in 60 Seconds.
Get personalized keto macros and instantly see which recipes fit your targets. No more guessing what to eat.
Get My Macros + Recipes →Frequently Asked Questions
Can I use escarole instead of spinach?
I use escarole in my minestrone and it works there because it simmers for a long time and breaks down. In this recipe, I prefer spinach because it wilts in 30 seconds and keeps a cleaner texture in the broth. If you want to use escarole, chop it fine and add it about 5 minutes before the end instead of 30 seconds. The stems take longer than spinach leaves. I have made it both ways and my family prefers the spinach version, but escarole gives you a more traditional Italian flavor.
Can I make this in the Instant Pot or slow cooker?
I have made this both ways. For the Instant Pot, brown the meatballs using the saute function, add the broth and vegetables, and pressure cook on high for 8 minutes with a quick release. Add the lupini rice and spinach after releasing pressure and let them sit in the hot broth for 5 minutes. For the slow cooker, brown the meatballs on the stove first (you still need that crust), then add everything except the lupini rice and spinach. Cook on low for 4 to 5 hours. Stir in the rice and spinach during the last 10 minutes. The stovetop version gives you better meatball texture, but the slow cooker is what I use when I want it ready at dinner without babysitting a pot.
What can I serve with this soup?
I almost always serve this with bread for dipping because the broth is too good to leave in the bowl. Keto rolls or a slice of garlic bread work well. A simple side salad with an Italian vinaigrette rounds it out if you want a bigger meal. When I am meal prepping, I just eat the soup on its own since the meatballs and lupini rice make it filling enough. My usual serving is a big bowl with two rolls on the side.
Can I add an egg to the broth for extra richness?
I do this sometimes. It is called stracciatella, where you drizzle beaten egg into the simmering broth and stir gently so it forms thin ribbons. It adds protein and a silky texture. I beat one or two eggs with a tablespoon of grated parmesan, then pour it in a thin stream while stirring the broth in one direction. The trick is keeping the broth at a gentle simmer, not a rolling boil, or the egg breaks into tiny bits instead of ribbons. My kids think it looks cool, and it adds about 6g of protein per serving.
I can't have pork. What can I substitute?
I have made this with ground chicken and turkey sausage and it works well. Replace the pork sausage with ground chicken or turkey sausage, and use all ground beef for the meatball mixture. For the pork panko, substitute 1/4 cup almond flour or add an extra 1/4 cup of grated parmesan as a binder. The meatballs will be slightly less crispy on the outside but they hold together in the broth. I prefer the parmesan swap over almond flour here because almond flour gets gummy in liquid.
I can't find lupini pasta. What can I use instead?
Cauliflower rice is the closest texture match for the orzo shape. Hearts of palm rice works well too. I have also used shirataki rice (rinse it well first to remove the packaging smell), but I find it does not absorb flavor the way lupini does. You can also skip the pasta entirely. The soup is filling on its own with the meatballs and vegetables. Each substitution changes the carb count slightly, so recalculate if you are tracking closely.
Can I freeze this soup?
I freeze batches of this regularly. Store the broth, meatballs, and vegetables together in an airtight container for up to 3 months. Keep the lupini rice separate because it absorbs liquid and turns soft if frozen in the soup. When ready to eat, thaw overnight in the fridge, reheat on the stove, and add fresh lupini rice. I also freeze extra uncooked meatballs on a parchment-lined sheet pan. Once frozen, I transfer them to a bag and drop them directly into simmering broth from frozen (add about 5 extra minutes of cook time).
Where do the 8.3g net carbs come from?
The carbs come mainly from the vegetables. Onion, carrot, celery, and garlic contribute about 4 to 5g together. The lupini rice adds about 1g, and the remaining carbs come from the egg, parmesan, and seasonings in the meatballs. Spinach adds less than 1g. When I want to lower the count, I reduce the carrot and onion amounts, which drops it by about 1 to 2g per serving without losing much flavor.

My nonna made wedding soup every Sunday and I stopped letting myself have it when I started keto two years ago. Made this last week. The second those little meatballs hit the Dutch oven, the kitchen smelled exactly like her house. I was so nervous about rolling them small enough but they held together better than I expected. First bowl of something that's actually brought me back.
Made this four or five times now. Lupini bean orzo holds up really well after a day in the fridge, doesn't get mushy like regular pasta. Started doubling the meatball batch and freezing half. Always have them ready, cuts assembly way down on weeknights. Soup's the same either way -- just pull them from frozen and add a few extra minutes to the simmer.
The lupini bean orzo almost talked me out of making this (keto pasta substitutes haven't been kind to me) but it held its texture in the broth way better than expected. Rest of the soup came together fast in my Dutch oven. Already doubling the meatball batch next time.
I've made probably four different keto Italian wedding soup recipes trying to find one that didn't feel like a consolation prize. The lupini bean orzo is what does it, it actually behaves like pasta in the broth and holds its shape instead of turning to mush halfway through the bowl. Italian sausage in the meatball mix gives them a depth the all-beef versions I've tried just don't have. Sticking with this one.
Consolation prize soups are the worst. The sausage is what turns it. Tried straight beef early on and couldn't figure out why it fell flat.
Made a double batch on Sunday and the meatballs hold up freaking beautifully through the week. The lupini bean orzo doesn't go mushy either, which almost never happens with soup leftovers. This is my new Sunday prep staple.
The lupini rice holds up better than anything I've found for soup. Real orzo would've dissolved by Tuesday. Double batches are basically required with this one.
My son ate every meatball first, then drank the broth straight from the bowl. That's the review.
This is probably my eighth time making it, and I think I finally figured out the meatball thing. I was rolling them too loose at first and they'd start to fall apart in the broth. Once I started packing them a little tighter, they hold up the whole way through reheating, which matters because I always make a full pot and eat it over a few days. The lupini bean orzo is still the part that surprises me every time, the texture in soup is so much closer to real orzo than I expected. Reheated a bowl this morning after a cold night and the broth had thickened up overnight in a way that made it feel even richer. This one is staying in my winter rotation for the rest of the season.
The overnight broth is the best part. I save a bowl just for the next morning. Tight pack is right, loose ones start going before the second reheat.
Threw a parmesan rind in while it simmered, pulled it out at the end, and the soup was so much richer I almost don't want to make it without one now.
Parmesan rind is one of those things that sounds fussy but isn't. I throw one in my minestrone all the time and totally forgot to mention it here. Now I can't skip it.
Italian wedding soup was the first thing I gave up when I started keto, and I stopped missing it after a few months. Made this on a snow day last week because I needed something warm and I had the ingredients. The lupini bean orzo was the part I didn't expect to work, but it pulled the whole soup together. Couldn't think of anything it was missing.
Snow day was the right call for this one. The lupini orzo is what gets people - it holds shape in the broth instead of going soft.
First time making this and I kept second-guessing the meatball size, but they held together perfectly. Kitchen smelled like Sunday dinner the whole time it simmered. Any brand of lupini bean orzo work, or do you have a favorite?
The smell is the whole thing honestly. Any brand works for the orzo, they rinse and cook the same.
One of the best soup! Our whole family loved it!!
The meatballs are what my boys ask about. They'll eat soup if there's meat in it.