After paying God knows how much in commission transferring money back and forth between the US and Spain, I finally found a solution that isn’t a complete rip-off.
(In terms of pure money exchange, the best is Interactive Brokers and charges absolutely minimal commissions. You actually trade the currency, so the price you get has no spread whatsoever. The downside is that this it is a brokerage and isn’t meant to be used as a money transfer service and there are restrictions on moving money out too quickly after moving it in)
CurrencyFair works quickly as well, and I’ve gotten exchanges within 0.1% of the current rate. The way it works is that you send the deposit to CurrencyFair via ACH or SEPA. Then you use the internal market to exchange the currency. The internal market has a built-in spread of 0.15% (however, if you put in a bid at 0%, it can get hit).
Sometimes the order book is a bit sparse and you have to wait to get a good rate (they will step in and give you a commission of 0.4-0.5% if no one else is willing). Once you’ve done your exchange, you can directly transfer the money to your US or Spanish bank account, and it arrives within a day or two.
It’s also useful even if you don’t want to do currency exchange, since some banks here charge commissions even to just accept foreign bank transfers.
Note that they don’t accept US residents, but they do accept US citizens that live in Spain with no problem.