What is missing in this recipe for Peruvian fish ceviche? I've tried fish ceviche from many Peruvian restaurants where I live (Houston TX), and they seem to taste about the same.

So I tried to recreate their secret recipe but there's something missing.

For the fish, I used mahi-mahi, although I think these restaurants use red snapper. The fish I used is not fresh, but "previously frozen". I suspect they don't use fresh fish, either.

For the marinade, I use key lime juice, Kosher salt, garlic and cilantro. And I let it marinate for about 30 minutes.

But the flavor turns out to be too acidic and unpleasant. I'm wondering if I need to dilute the key lime juice with water or perhaps add a bit of sugar.

What am I doing wrong? What secret ingredient am I missing?
In general, ceviche is marinated/cured, using citrus as the main ingredient, with other possible ingredients (onions, garlic, etc).  That initial marinade is drained off, then the ceviche is "dressed" for serving.  It sounds like you are not draining the initial marinade.  This could be causing the excess acidity.