Quick Recipe Version (TL;DR)
Quick Ingredients
- 1 lb (454 g) ground beef (or 1/2 lb beef + 1/2 lb ground pork)
- 1 small yellow onion, grated (about 1/2 cup / 120 ml with juices)
- 2 cloves garlic, minced
- 1 slice sandwich bread (about 30 g), soaked in 1/4 cup (60 ml) milk, then squeezed dry
- 1 large egg
- 2 tbsp chopped fresh parsley
- 1 tbsp chopped fresh mint (or 1 tsp dried mint)
- 1 tsp dried oregano
- 1 1/2 tsp fine salt
- 1/2 tsp ground black pepper
- 1 tbsp red wine vinegar (or 1 tbsp lemon juice)
- 1/4 cup (30 g) all-purpose flour, for dredging
- Neutral frying oil (grapeseed/sunflower/canola), 1 to 1 1/2 cups (240–360 ml) for shallow frying
- Lemon wedges, for serving
Do This
- 1. Soak bread in milk 5 minutes; squeeze dry.
- 2. Mix meat, grated onion, garlic, bread, egg, herbs, vinegar, salt, pepper.
- 3. Chill mixture 30 minutes.
- 4. Roll into 1-inch (2.5 cm) balls (about 24).
- 5. Dredge lightly in flour; shake off excess.
- 6. Shallow-fry at 350°F (175°C) for 6–8 minutes total, turning, until browned and 160°F (71°C) inside.
- 7. Drain on paper towels; serve hot with lemon and dip.
Why You’ll Love This Recipe
- Crisp outside, juicy inside: The flour dredge plus proper oil temperature creates a crackly crust without drying the meat.
- Big Greek flavor in small bites: Grated onion, oregano, parsley, and a hint of mint make them taste bright and classic.
- Weeknight friendly: Simple pantry ingredients, fast fry time, and easy to prep ahead.
- Perfect for dipping: Serve with lemon, tzatziki, or a simple yogurt dip for an effortless spread.
Grocery List
- Produce: 1 small yellow onion, 2 garlic cloves, fresh parsley, fresh mint (optional), lemons (for wedges)
- Dairy: Milk, 1 large egg (eggs are typically categorized as dairy in many shopping lists), Greek yogurt (optional for serving)
- Meat: Ground beef (or ground beef + ground pork)
- Pantry: Sandwich bread, dried oregano, red wine vinegar (or lemon juice), all-purpose flour, neutral frying oil, salt, black pepper
Full Ingredients
For the Keftedes (Meatballs)
- 1 lb (454 g) ground beef (80/20 recommended), or 1/2 lb (227 g) ground beef + 1/2 lb (227 g) ground pork
- 1 small yellow onion, peeled and grated on the large holes of a box grater (about 1/2 cup / 120 ml including juices)
- 2 garlic cloves, minced (about 2 tsp)
- 1 slice sandwich bread (about 30 g)
- 1/4 cup (60 ml) milk
- 1 large egg
- 2 tbsp fresh parsley, finely chopped
- 1 tbsp fresh mint, finely chopped (or 1 tsp dried mint)
- 1 tsp dried oregano
- 1 tbsp red wine vinegar (or 1 tbsp fresh lemon juice)
- 1 1/2 tsp fine salt
- 1/2 tsp ground black pepper
For Coating and Frying
- 1/4 cup (30 g) all-purpose flour, for light dredging
- 1 to 1 1/2 cups (240–360 ml) neutral frying oil (sunflower, grapeseed, or canola), for shallow frying
For Serving (Choose One or More)
- Lemon wedges
- Tzatziki or plain Greek yogurt
- Sliced cucumber and tomatoes, optional
- Warm pita, optional

Step-by-Step Instructions
Step 1: Soak the bread (for tender meatballs)
In a small bowl, soak the bread slice in the milk for 5 minutes, pressing it down so it absorbs evenly. Then squeeze the bread firmly over the sink to remove excess milk. You want it moist but not dripping; this “panade” keeps the keftedes juicy and soft inside.
Step 2: Mix the meatball mixture gently
In a large bowl, add the ground meat, grated onion (including juices), minced garlic, squeezed bread, egg, parsley, mint, oregano, red wine vinegar, salt, and black pepper.
Using clean hands, mix just until evenly combined, about 30–45 seconds. Avoid over-mixing (it can make meatballs dense and tough).
Step 3: Chill to help them hold their shape
Cover the bowl and refrigerate the mixture for 30 minutes. This firms up the fat and hydrates the bread and seasonings, making the meatballs easier to roll and less likely to break while frying.
Step 4: Portion and roll into bite-sized balls
Line a plate or small tray with parchment paper. Scoop and roll the mixture into 1-inch (2.5 cm) meatballs, about 20 g each (roughly 1 heaping tablespoon). You should get about 24 meatballs.
If the mixture feels sticky, dampen your hands lightly with water between a few meatballs.
Step 5: Dredge lightly in flour
Place the flour in a shallow bowl. Roll each meatball in flour just to coat, then tap gently to shake off any excess. You’re aiming for a thin dusting, not a thick breading. The flour helps create a crisp exterior and protects the meatballs from drying out.
Step 6: Fry at the right temperature
Set a wire rack over a sheet pan (or prepare a paper towel-lined plate). In a large, heavy skillet (10–12 inches), pour in enough oil to reach about 1/2 inch (1.25 cm) depth.
Heat over medium to medium-high until the oil reaches 350°F (175°C). If you don’t have a thermometer, test with a tiny pinch of flour: it should sizzle immediately without burning.
Fry in batches (do not crowd the pan), adding meatballs carefully. Cook for 6–8 minutes total, turning every 1–2 minutes, until deeply golden-brown on multiple sides and cooked through. The center should reach 160°F (71°C) on an instant-read thermometer.
Step 7: Drain, season, and serve
Transfer cooked keftedes to the rack or paper towels to drain for 2 minutes. Taste one and add a tiny pinch of salt on top if needed.
Serve hot with lemon wedges for squeezing and your favorite dip (tzatziki, Greek yogurt, or a simple lemony yogurt sauce). They’re great alongside a crisp salad, pita, and sliced cucumber and tomatoes.
Pro Tips
- Grate the onion, don’t chop it: Grated onion melts into the mixture, adding moisture and sweetness without chunks that can make meatballs fall apart.
- Don’t skip the chill: That 30-minute rest helps the meatballs hold together and fry more cleanly.
- Keep the oil at 350°F (175°C): Too cool and they absorb oil; too hot and they brown before cooking through. Adjust heat between batches.
- Fry in small batches: Crowding drops the oil temperature and leads to greasy, pale meatballs.
- Use a rack if you can: Draining on a rack keeps the crust crisp all around (paper towels can soften the bottoms).
Variations
- Baked option (lighter): Brush or spray meatballs with oil and bake on a rack set over a sheet pan at 425°F (220°C) for 14–16 minutes, flipping halfway, until 160°F (71°C) inside. (They’ll be less crisp than fried.)
- Add feta: Mix in 2 oz (57 g) crumbled feta for tang and extra richness (reduce salt to 1 1/4 tsp to start).
- More aromatic herbs: Add 1 tbsp chopped fresh dill or 1 tsp dried dill for a different Greek taverna vibe.
Storage & Make-Ahead
Refrigerate: Store cooked keftedes in an airtight container for up to 4 days. Reheat on a sheet pan at 375°F (190°C) for 10–12 minutes (best for re-crisping), or in a skillet over medium heat with a small splash of oil.
Freeze (cooked): Cool completely, then freeze on a tray until solid and transfer to a freezer bag. Freeze up to 3 months. Reheat from frozen at 375°F (190°C) for 18–22 minutes, or until hot throughout.
Make-ahead (uncooked): Roll and flour the meatballs, arrange on a tray, cover, and refrigerate up to 24 hours before frying. Fry straight from the fridge, adding about 1–2 minutes if needed.
Nutrition (per serving)
Approximate, assuming 4 servings and shallow-frying with some oil absorption: 420 calories, 28 g protein, 28 g fat, 12 g carbohydrates, 1 g fiber, 780 mg sodium.

