Juicy seasoned beef over crisp romaine with avocado and cheese, at 4.6g net carbs and 29g protein, no fried shell anywhere. I whisk my own nine spice taco seasoning together, brown the beef, and I let it simmer with the seasoning and a splash of water so the spices coat every crumble. Twenty minutes, one skillet.
A restaurant version comes in a fried tortilla shell that adds 25 to 35g of carbs before you even get to the fillings. Most store-bought seasoning packets contain corn starch, sugar, and maltodextrin. I skip both problems: no shell, seasoning from scratch with nine spices, and the whole thing is on the table in 20 minutes. A reader named Jordan told me this was the first salad that actually worked as dinner, not just damage control. The seasoned beef and avocado are why.
Why Homemade Seasoning Matters
The blend is chili powder, cumin, paprika, garlic powder, onion powder, red pepper, cayenne, oregano, and salt. That is it. No corn starch, no sugar, no anti-caking agents. I use both cayenne and crushed red pepper on purpose because they build differently: cayenne hits sharp and upfront, the red pepper flakes bring a slower warmth that layers underneath. No store-bought packet does that. A typical packet also has 3 to 5g of carbs per serving from fillers alone. This version has essentially zero. I make a double or triple batch and keep it in a jar so I can season ground beef, chicken, or pork any night of the week. The same blend works in my keto taco casserole.
Building the Salad
I brown a pound of ground beef in a skillet, sprinkle the seasoning over the meat, add a quarter cup of water, and let it simmer until the liquid evaporates. That concentrated simmer step is what makes the seasoning coat every piece of meat instead of sitting on top. While the beef cooks, I shred romaine, dice the tomato and avocado, and chop the red onion and cilantro. The entire dinner is prepped and on the table before the beef finishes simmering.
A drizzle of sour cream and salsa over the top finishes it. I also stir together a quick dressing when I want something richer: two tablespoons sour cream, a squeeze of lime, and a pinch of cumin whisked until smooth. It takes 30 seconds and adds a creamy tang that plain sour cream alone does not. I have tried bottled ranch, but it buries the seasoning flavor, so I skip it.
Protein Swaps
Ground beef is my default, but I have made this with ground turkey, cilantro lime chicken, shredded rotisserie chicken, air fryer steak bites sliced thin, and pulled pork. The seasoning works on all of them. Ground turkey runs leaner, so I add a tablespoon of avocado oil to the skillet to keep it from drying out. Ground turkey and ground chicken need to reach 165 degrees, so I check with a thermometer before the meat goes on the salad. For a fast weeknight dinner when I have leftover protein, I skip the skillet entirely and toss the cold meat over the salad. The seasoning flavor holds up at room temperature.
Toppings I rotate every week
The base recipe is a starting point. Here is what I grab depending on what is in the fridge:
Low carb vegetables. Bell peppers, poblano peppers, jalapenos, green onions, sliced olives, and diced radishes for crunch.
Beans. Lupin beans are the keto option at roughly 1g net carbs per serving. They hold up well and add bulk without spiking anything.
Crunch.Cheese taco shells crushed into chips or pork rinds crumbled over the top. I rotate between the two depending on what I have.
Dressings and sauces. Sour cream with lime and cumin, salsa verde, or hot sauce. I keep it simple most nights.
What I serve alongside it
This is a full meal on its own, but I pair it with sides when I am feeding more people.
Mexican night spread. I set everything out buffet-style: seasoned beef in one dish, all the toppings in separate bowls, and let everyone build their own. Sheet pan fajitas on the side give the spread more variety without extra stovetop work. I also add keto BBQ chicken tostadas as a second protein option when I want to go bigger.
Keeping it simple. On a regular Tuesday, I just make the salad and call it dinner. The beef, avocado, and cheese provide enough protein and fat that nobody leaves the table hungry.
Chicken, turkey, and other ways I make it
Chicken version. I use salsa chicken shredded straight from the slow cooker. The salsa adds moisture and flavor that ground chicken lacks on its own. I dial back the seasoning since the salsa carries its own spice.
Ground turkey. Works well with this seasoning but runs leaner than beef. I add a tablespoon of avocado oil to the skillet and bump up the cayenne since turkey absorbs less flavor from fat. I cook it to 165 degrees before it goes on the salad.
Greek yogurt instead of sour cream. Plain full fat Greek yogurt is a direct swap. It has a tangier flavor and slightly more protein. Coconut yogurt works if you are skipping dairy entirely.
Bowl version. For a heartier option, I crisp a cheese taco shell in the oven at 400 degrees for 3 minutes and use it as the base. All the crunch of a fried shell, none of the carbs.
Deconstructed nachos. I skip the lettuce base entirely and pile the seasoned beef, cheese, and toppings over crushed pork rinds.
Why I stopped buying seasoning packets
A premade kit from the grocery store typically includes a seasoning packet with corn starch and sugar, a fried tortilla bowl, and processed cheese. That combination pushes a single serving past 40g of net carbs.
Carb control. My homemade seasoning has zero added carbs. No corn starch, no maltodextrin. I measured every spice myself and I know exactly what goes in.
Fresh toppings. I dice the avocado, red onion, and cilantro right before serving. Store-bought kits sit on shelves for days, and you can taste the difference.
No fried shell. A traditional fried flour tortilla bowl adds 25 to 35g of carbs on its own. I skip it entirely and use romaine as the base. That one change is the single biggest carb savings in this recipe.
Protein quality. I choose the beef. I use 80/20 because the fat is the seasoning delivery system. The liquid simmers off and the fat carries every spice into the meat. 90/10 always tastes flatter to me. Store-bought kits use pre-cooked, pre-seasoned meat sitting in preservatives.
Storage and meal prep
To store. I keep the seasoned beef and the salad toppings in separate airtight containers in the fridge. The beef holds for 3 to 4 days. The cut vegetables (tomato, onion) stay fresh for 1 to 2 days once chopped. I dice the avocado right before serving, since cut avocado browns fast once the flesh hits the air. Storing them separately is the key to keeping everything crisp.
To reheat. I warm the beef in a skillet with a splash of water, or in the microwave in 30 second increments until heated through. Do not reheat the lettuce or vegetables. If the beef and salad got mixed in the same container, eat it cold or pull the beef out and reheat it separately.
To meal prep. I cook a double batch of seasoned beef and portion it into containers for the week. Wash and chop the vegetables, but keep them separate and assemble right before eating. The beef reheats well, but dressed salad does not.
To freeze. The seasoned beef freezes well for up to 3 months in airtight containers. I thaw it in the fridge overnight and reheat it in a skillet with a splash of water to bring the seasoning back to life. The fresh vegetables and avocado do not freeze, so I prep those the day I eat. A fresh bowl from frozen beef takes me about 5 minutes to assemble.
How to make taco salad
This comes together in three steps.
Make the seasoning. Combine chili powder, cumin, salt, paprika, garlic powder, onion powder, crushed red pepper, cayenne, and oregano in a small bowl. Stir to combine. I do this in 30 seconds and it replaces a store-bought packet that would add hidden carbs.
Brown the ground beef. Cook a pound of ground beef in a skillet over medium high heat, breaking it into small pieces, until browned (about 5 to 6 minutes). Sprinkle the seasoning blend over the meat, pour in a quarter cup of water, and reduce heat to medium low. Let it simmer until the liquid has mostly evaporated (about 3 to 4 minutes). The water helps the spices dissolve and coat every piece of meat evenly.
Assemble. Add shredded romaine to a large bowl. Top with the seasoned beef, diced tomatoes, avocado, shredded cheddar, red onion, and cilantro. Finish with sour cream and salsa.
Key ingredients
Taco seasoning. Nine spices mixed from scratch. No corn starch, no sugar, no fillers. I make a triple batch and keep it in a jar so it is always ready to go.
Ground beef. I use 80/20 because the fat carries the seasoning flavor. The liquid simmers off and concentrates on the meat. 90/10 works but tastes flatter.
Toppings. Romaine, diced tomatoes, avocado, shredded cheddar, red onion, and cilantro. I also toss in sliced olives and green onions when I have them. Zucchini taco boats use the same seasoned beef if you want a different base.
Sauces. Sour cream and salsa (or pico de gallo) drizzled over the top. A squeeze of lime stirred into the sour cream makes a simple creamy dressing.
In a small bowl, add chili powder, ground cumin, salt, paprika, garlic powder, onion powder, crushed red pepper, cayenne pepper and oregano. Mix to combine. Set aside.
For this step
Chili powder
Cumin (ground)
Salt
Paprika
Garlic powder
Onion powder
Crushed red pepper flakes
Cayenne pepper
Oregano
2
Make taco meat
Add ground beef to a large skillet and cook over medium-high heat until browned. Add the taco seasoning and ¼ cup water. Lower the heat to medium-low, cover, and simmer until the liquid has mostly evaporated. Stir occasionally.
For this step
Ground beef
Taco seasoning (from step 1)
Water
3
Assemble salad
Layer lettuce, taco beef, tomatoes, avocado, cheese, onion, and cilantro in a large bowl. Top with sour cream and salsa or pico de gallo.
For this step
Lettuce
Taco meat (from step 2)
Cheese
Tomato
Avocado
Red onion
Cilantro
Sour cream
Salsa
Nutrition
Per serving: 1/4 of recipe
Calories
493
Fat
37.6g
Protein
29g
Total carbs
8.4g
Net carbs
4.6g
Nutrition is an estimate calculated from the ingredients listed. Brands vary, so check labels if you track closely.
Frequently Asked Questions
How many carbs and calories are in a taco salad without the shell?
One serving of my taco salad without a shell is 493 calories, 4.6g net carbs (8.4g total carbs, 3.8g fiber), 37.6g fat, and 29g protein. A fried flour tortilla bowl adds another 25 to 35g of carbs by itself, and a restaurant version with the shell, a seasoning packet, and beans or corn runs 40 to 60g of net carbs per serving.
Should the beef be warm or cold on a taco salad?
I serve the beef warm and everything else cool or at room temperature. The contrast between hot seasoned meat and cool avocado, tomato, and sour cream is part of what makes this work as dinner.
Can I make this dairy-free?
Yes. I swap the sour cream for coconut yogurt and skip the shredded cheddar. Nutritional yeast sprinkled over the top adds a savory, almost cheesy flavor if you miss the cheese, and the seasoned beef and avocado carry enough flavor that the bowl does not feel like it is missing anything.
Beef has zero carbs. I get the same reaction from people every time. The restaurant version runs 40 to 60g mostly from the fried tortilla bowl and the starch fillers in the seasoning packet.
Salting the tomatoes and letting them drain for five minutes before assembling fixed the watery mess at the bottom. That beef is too good to drown in tomato juice.
Ripe summer tomatoes need closer to eight minutes. I’ve pulled mine at five and still found liquid at the bottom. That cumin and chili blend deserves better than competing with tomato water.
Learned the hard way to leave the avocado out until you’re actually plating. Brown mush by day two if you don’t. The beef holds four days easy, and the romaine stays crisp if you store it dry and separate. Tuesday lunches sorted.
The lime trick buys a few hours max if you’ve already sliced. Easier to just wait til you plate. I roll romaine in paper towels after spinning dry. Keeps it crisp.
Cotija instead of shredded cheddar, and it works better here. The crumbles don’t melt into the warm beef and make everything muddy, so each component stays distinct.
The muddy thing is real and I never thought to fix it with cotija. Makes sense with the spice blend too, that sharper salt cuts through the beef better than cheddar does.
Seven or eight batches in now, and what keeps catching me is the cumin-to-chili ratio, it always lands right (kept expecting to tip it somehow, never have). Most homemade blends I’ve tried end up too earthy or too hot. This one doesn’t. Started doubling it just to have some on hand for eggs midweek. Twenty minutes really is twenty minutes, which is why it’s become my weeknight standby.
Taco salad was the thing I thought I had to give up when I started keto. Found this recipe, made it that same night, and that nine-spice blend just brought everything back. Checked the net carbs three times because I was convinced I misread them. Only reason it’s not five stars is I added extra cayenne on the second batch and liked it even more, so that’s on me for not starting there.
I’d written off taco night when I started keto, and then I made this with the nine-spice blend from scratch instead of reaching for a packet and I just stood there eating beef out of the skillet before I even assembled the salad. Still working on keeping the avocado from browning before I serve it, but the meat is so good I’m not sure it matters.
That skillet eating is just part of the process at this point. For the avocado, I cut it last and hit it with lime juice right when I slice it, then plate immediately.
I’ve been making taco meat for years and thought I had it down, but toasting the cumin in a dry pan for about 30 seconds before mixing it into the rest of the seasoning changed the depth of this dish noticeably. Something about blooming that spice first makes the beef taste like it simmered longer than it actually did. I also went with 93/7 ground turkey instead of beef (not the lean stuff, the fat matters) and it held up better than I expected through the whole bowl without getting dry. The nine-spice blend is genuinely better than anything that comes out of a packet, and with turkey you get a cleaner base that lets the individual spices come through more clearly. I’ve made this twice in the past ten days, and both times I finished the skillet with a small pat of Kerrygold before pulling it off the heat. That little bit of richness plays really well against the avocado. Toasted cumin, turkey, Kerrygold finish: that’s my version now.
The Kerrygold at the end is smart. I do turkey about half the time and always add fat back in, but mid-cook. Finishing with it might actually be better.
Make a triple batch of the seasoning right now and store it in a jar. I’ve made this probably eight times and that one change turned a 20-minute meal into a 10-minute meal on weeknights. Also started finishing the beef with a squeeze of lime right before I pull it off the heat, and it does something to the whole thing. Cuts through the fat, brightens everything up. No going back.
Triple the recipe and keep a jar in the cabinet. I made it weekly for two months before realizing I didn’t need to measure nine spices every time. Use it on ground turkey, chicken, eggs, whatever. The cumin ratio beats any store packet, which is why it stays on the shelf.
Nine spices is a lot to dig out on a weeknight, so I started making a triple batch and keeping it in a small jar by the stove. The whole salad comes together in the time it takes the beef to brown. Works on ground chicken too.
Never made taco seasoning from scratch before and all nine spices felt like overkill going in. It wasn’t. Giving this 4 stars because I’d dial back the cayenne a touch, but the beef had a depth no packet has ever come close to.
Yeah the cayenne is the easiest dial to turn down. Start at 1/8 teaspoon and work back up from there. And the packet thing is real – most of them are half filler anyway, which is exactly why the beef never tastes like anything.
Yes, and the carbs alone make it worth it. Most packets have corn starch and maltodextrin that add 3-5g per serving. I pre-mix mine into a small jar so it’s just one scoop after that.
Swapped ground beef for turkey (I know, sounds like a downgrade) and doubled the cayenne, and now I can’t stop noticing how much sharper the cumin hits when the heat’s up. Turkey tip: splash a tablespoon of water in right before you pull it or it’ll crumble.
I’ve been making taco bowls for years and always just grabbed the packet without thinking about it. Made this seasoning from scratch for the first time last week and the cumin comes through completely differently when it’s fresh and in the right ratio. The beef smelled incredible while it was browning, that nine-spice blend is doing real work. I assembled it over romaine with avocado and a handful of cotija I had on hand and it came together in under 25 minutes. The only thing I’d note is the cayenne adds up if you’re sensitive to heat, so I’ll dial that back a touch next time. Overall a solid 4 stars and it’s going in the regular weeknight rotation.
Cotija over romaine is a good swap. The saltiness plays off the cumin in a way cheddar doesn’t. For the cayenne, I cut to 1/8 teaspoon when I’m cooking for anyone who runs heat-sensitive.
I almost grabbed a seasoning packet because making your own from nine spices seemed like overkill for a weeknight salad. Made the full recipe anyway, and the cayenne gives the beef this slow warmth I didn’t expect from a twenty-minute meal. A salad for dinner is usually just damage control for me, but this one actually filled me up. Saving this for spring evenings when I want something fast.