Underground. You have to dig at dig spots to find them, among other things.
You can find them on Luvdisks in Pokemon Emrald and Ruby and Sapphire, and you find them underground in Pokemon diamond
i do not think you can but you can take Pokemon to the heartscale guy and see if that move is compatible with any of your Pokemon you give him a heartscale that you find under ground he collects them
Dig for it underground. Its rare but it is possible to dig one up
Heres some ways to get some: In Derfitwel city, in one of the houses, show this girl a move she wants to see and she will give you a heartscale. Using your dowsing machine, have it on alout and you can find hidden heartscales. Use thief on wild Luvdisk you find on route 13 and you might find a heartscale.
You can find some in the north of Cianwood City, just use Rock Smash on the rocks there and you might find a Heart Scale!!
eat hearts
go underwater and dive then look on a dark spot and click a. You haave now obtained a heart scale.
you mine under ground but its small and looks like a rainbow
By going underground and digging.
They are usually found on the ground by using the Itemfinder/Dowsing Machine.
go to the move maniac in pastroia city with a heartscale
get dive in mossdeep city. then go find dark water you can dive in the water. there will be some rocks. get in front of them and press a. there will be a item. somtime it will be a heartscale.