Dinner

Authentic Greek Meatballs Recipe (Keftedes with Tzatziki)

My yiayia never measured anything when she made keftedes, which made this recipe take me three tries to actually pin down on paper. The trick turned out to be soaking stale bread in milk instead of using dry breadcrumbs, which keeps the inside of the meatball soft even after frying.

Why You’ll Love This Recipe

  • Ready in about 35 minutes
  • The soaked bread trick keeps the meatballs tender instead of dense
  • Works as a main dish or a party appetizer with toothpicks

Ingredients You’ll Need

Ingredient Quantity Notes & Substitutions
Ground beef or lamb 1 lb A mix of both is traditional, but either works alone
Stale bread, crust removed 2 slices Soak in milk before mixing in
Milk 1/4 cup For soaking the bread
Onion, grated 1/2 small Grating instead of dicing blends it into the meat better
Garlic, minced 2 cloves
Fresh mint, chopped 2 tbsp Fresh oregano also works
Egg 1 large Binds the mixture
Olive oil For frying
Salt and pepper To taste

Pro tip: squeeze the soaked bread lightly before mixing it in. You want it moist, not dripping, or the meatball mixture gets too loose to shape.

Kitchen Tools & Equipment

  • A large skillet for frying
  • A small bowl for soaking the bread
  • A box grater for the onion

Step by Step Instructions

Step 1: Prep the Ingredients

Soak the bread in milk for a few minutes, then squeeze out the excess liquid.

Step 2: Start Cooking

Combine the soaked bread, meat, onion, garlic, mint, egg, salt, and pepper in a bowl. Mix gently, just until combined.

Step 3: Add Layers of Flavor

Shape the mixture into small balls, about the size of a golf ball.

Step 4: Bring It All Together

Heat olive oil in a skillet over medium heat. Fry the meatballs in batches, turning occasionally, until browned on all sides and cooked through, about 8 to 10 minutes, reaching a safe internal temperature per USDA guidelines.

Step 5: Serve and Enjoy!

Drain on paper towels and serve warm with tzatziki or a squeeze of lemon.

Expert Tips & Common Mistakes to Avoid

Tips:

  • Chill the shaped meatballs for 20 minutes before frying so they hold their shape better in the hot oil.
  • Fry in batches so the pan doesn’t crowd, which keeps the oil temperature steady.

Mistakes:

  • Overmixing the meat mixture, which makes the meatballs tough instead of tender.
  • Skipping the bread soak and using dry breadcrumbs instead, which leaves the inside drier.

Recipe Variations & Customizations

  • Gluten Free: use a gluten free bread for soaking, or substitute cooked rice.
  • Spicy: add a pinch of chili flakes to the mixture.
  • Protein swap: ground turkey works, though the texture is lighter than the traditional beef and lamb blend.

What to Serve With This Dish

Serve with tzatziki, a Greek salad, and warm pita. A side of Mediterranean quinoa salad rounds out the table nicely, and roasted garlic aioli works in a pinch if you’re out of tzatziki.

How to Store & Reheat Leftovers

Storage: keep in an airtight container in the fridge for up to 4 days.

Reheating: warm in a skillet over low heat, or in the oven, so they don’t dry out. The microwave works but softens the texture.

Freezing: freeze cooked meatballs for up to 3 months. Thaw in the fridge before reheating.

FAQs About This Recipe

Can I bake these instead of frying?
Yes, bake at 400 degrees for about 20 minutes, flipping halfway, though the outside won’t get quite as crisp as frying.

What if I don’t have fresh mint?
Fresh or dried oregano works as a substitute, and is actually more common in some regional versions of this recipe.

Final Thoughts

My yiayia would probably still find something to critique about my technique, but this is as close as I’ve gotten without her standing over my shoulder.

Save this one, it’s worth having on repeat.

How useful was this post?

Click on a star to rate it!

Average rating / 5. Vote count:

No votes so far! Be the first to rate this post.

As you found this post useful...

Follow us on social media!

Leave a Reply

Your email address will not be published. Required fields are marked *