12% still sounds a bit high, but basically on Coinbase you get charged a fee for purchasing currency with fiat, and you get charged another transaction fee for sending it to an external account.
Coinbase charges 3.99% with credit / debit transactions, and 1.49% with a USD wallet. Then, when you send it to a wallet, you need to pay a network fee to the miners for processing this transaction -- this is set dynamically and may be higher or lower at the time of the transaction --
https://support.coinbase.com/customer/en/portal/articles/815435-does-coinbase-pay-miner-fees-?b_id=13521So perhaps you were charged a particularly high network fee for sending your bitcoin.
I would still purchase through exchanges such as Coinbase and Kraken -- you can use Kraken if you have Euros -- localbitcoin charges at a premium to the market price -- someone still needs to pay the transaction fee to send bitcoin from one address to another, although it's possible that you can negotiate so that the seller pays the transaction to send it to your wallet (not sure, never purchased there) -- but generally why would you purchase bitcoin from random strangers rather than on an exchange?? They're selling at $100 - $200 premium to the market price!
Also, since you have Coinbase, you can setup a GDAX account -- GDAX is an exchange and it is free to to send coins between Coinbase and GDAX -- this is not a wallet but in case you would like to trade between the BTC, ETC, LTC, there's no need to pay any transaction fees to send to an exchange.