What is the best way to detect if fireball has hit something?

Should I use Touched,
should I use Raycast,
or should I use something else?

This depends on how you’re rendering the fireball. A raycast would be the best option for most cases, I’d say, but you could use .Touched, if you’re using a base part or have some hitbox to represent the bounds of the fireball.

I recommend using FastCast. It allows you to easily create any sort of projectile through the use of raycasts. Here are the API docs for the module.