Foreign currency conversion for international visitors to ecommerce web site?
Central banks don't generally post exchange rates with other currencies, as they are not determined by central banks but by the currency markets. You need a source for live exchange rate data (for example www.xe.com), and you need to calculate the prices in other currencies dynamically as they are displayed -- they will be changing continually, from minute to minute. For manual conversion you can use many sites, starting from google (type 30 USD in yuan) to sites like xe.com mentioned here. For programmatic conversion, you could use Google Calculator API or many other currency exchange APIs that are available. Beware however that if you do it on the real site, the exchange rate is different from actual rates used by banks and payment processing companies - while they use market-based rates, they usually charge some premium on currency conversion, meaning that if you have something for 30 dollars, according to current rate it may bet 198 yuan, but if he uses a credit card for purchase, it may cost him, for example, 204 yuan. You should be very careful about making difference between snapshot market rates and actual rates used in specific transaction. You probably can get away with only updating the exchange rates once a day and specify that any prices quoted in units other than your home currency are estimates only. If you're planning to accept more than one currency as payment, I'd (a) see about whatever regulations there are for doing so, and (b) build in a nice spread for yourself if you're allowed to, since it is a service you're providing to your customers.  If you Google currency converter the first result is just that: a currency converter.
"For the purposes of report generation, I would recommend that you present the data in the currency of the user's home country. You could present another indicator, if needed, to indicate that a specific transaction was denominated in a foreign currency, where the amount represents the value of the foreign-denominated transaction in the user's home country Currency. For example: Airfare from USA to London: $1,000.00 Taxi from airport to hotel: $100.00 (in £) In terms of your database design, I would recommend not storing the data in any one denomination or reference currency. This would require you to do many more conversions between currencies that is likely to be necessary, and will create additional complexity where in some cases, you will need to do multiple conversions per transaction in and out of your reference currency. I think it will be easier for you to store multiple currencies as themselves, and not in a separate reference currency. I would recommend storing several pieces of information separately for each transaction: This way, you can create a calculated Amount for each transaction that is not in the user's ""home"" currency, whereas you would need to calculate this for all transactions if you used a universal reference currency. You could also get data from an external source if the user has forgotten the conversion rate. Remember that there are always fees and variations in the exchange rate that a user will get for their home country's currency, even if they change money at the same place at two different times on the same day. As a result, I would recommend building in a simple form that allows a user to enter how much they exchanged and how much they got back to calculate the exchange rate. So for example, let's say I have $ 200.00 USD and I exchanged $ 100.00 USD for £ 60.00, and there was a £ 3.00 fee for the exchange. The exchange rate would be 0.6, and when the user enters a currency conversion, your site could create three separate transactions such as: USD Converted to £: $100.00 £ Received from Exchange: £ 60.00 Exchange Fee: £ 3.00 So if the user exchanged currency and then ran a balance report by Currency, you could either show them that they now have $ 100.00 USD and £ 57.00, or you could alternatively choose to show the £ 57.00 that they have as $95.00 USD instead. If you were showing them a transaction report, you could also show the fee denominated in dollars as well. I would recommend storing your balances and transactions in their own currencies, as you will run into some very interesting problems otherwise. For example, let's say you used a reference currency tied to the dollar. So one day I exchange $ 100.00 USD for £ 60.00. In this system I would still have 100 of my reference currency. However, if the next day, the exchange rate falls and $ 1.00 USD is only worth £ 0.55, and I change my £ 60.00 back into USD, I will get approxiamately $ 109.09 USD back for my £ 60.00. If I then go and buy something for $ 100.00 USD, the balance of the reference currency would be at 0, but I will still have $ 9.09 USD in my pocket as a result of the fluctuating currency values! That is why I'd recommend storing currencies as themselves, and only showing them in another currency for convenience using calculations done ""on the fly"" at report runtime. Best of luck with your site!" It's very simple.  Use USDSGD.  Here's why: Presenting profits/losses in other currencies or denominations can be useful if you want to sketch out the profit/loss you made due to foreign currency exposure but depending on the audience of your app this may sometimes confuse people (like yourself). "Does some official tell the Foreign Exchange the the new exchange rate for the yuan is 0.98 * the current exchange rate? For China (and other countries with fixed/controlled exchange rates) - that's exactly how it happens. Does it just print more? This is the way to go for fully convertible currencies (like the USD, EUR, GBP, and handful of others, there're about 20 in the world). Flood the market and as with any commodity - flooding the market leads to a price drop. Obviously ""just print more"" is much harder to do than picking up the phone and saying ""Now you're buying/selling dollars at this price and if you don't I'll have you executed""." "The solution I've come up with is to keep income in CAD, and Accounts Receivable in USD.  Every time I post an invoice it prompts for the exchange rate. I don't know if this is ""correct"" but it seems to be preserving all of the information about the transactions and it makes sense to me.  I'm a programmer, not an accountant though so I'd still appreciate an answer from someone more familiar with this topic." In the EU prices on consumer-focussed sites* are quoted inclusive of VAT. In the USA prices are  quoted exclusive of sales tax. Consumer pricing is usually driven at least partly by psychological concerns. Some pricepoints are more appealing to certain types of buyers than others.  The Euro vs dollar exchange rate has fluctuated a bit over the years but it's generally averaged somewhere around 1.2 dollars per Euro over the last decade. VAT has varied around 15%-20% in most cases. Put these things together and the same headline price points are generally appropriate in both the USA and the Eurozone. OTOH the Brisith pound has been worth substantially more than the dollar or the Euro. So it makes sense to have a lower headline price in the UK. * B2B focussed sites often quote prices exclusive of VAT, you need to be aware of this when comparing prices. Cross-listing shouldn't be an issue, as the sole reason stocks would behave differently on different exchanges would be due to exchange rates (sure, noise and time differences, but weekly data should take care most of that). If you're using MSCI World index figures in USD, you either have to convert stocks denominated in other currencies to USD at their historical fx rates, or just save a lot of time and use data from stocks listed in the US, when available. Is there not some central service that tracks current currency rates that banks can use to get currency data? Sure.  But this doesn't matter.  All the central service can tell you is how much the rate was historically.  But the banks/PayPal don't care about the historical value.  They want to know the price that they'll pay when they get around to switching, not the last price before the switch.  Beyond that, there is a transaction cost to switching.  They have to pay the clearinghouse for managing the transaction.   The banks can choose to act as a clearinghouse, but that increases their risk.  If the bank has a large balance of US dollars but dollars are falling, then they end up eating that cost.  They'll only take that risk if they think that they'll make more money that way.  And in the end, they may have to go on the currency market anyway.  If a European bank runs out of US dollars, they have to buy them on the open market.  Or a US bank might run out of Euros.  Or Yen.  Etc.   Another problem is that many of the currency transactions are small, but the overhead is fixed.  If the bank has to pay $5 for every currency transaction, they won't even break even charging 3% on a $100 transaction.  So they delay the actual transaction so that they can make more than one at a time.  But then they have the risk that the currency value might change in the meantime.  If they credit you with $97 in your account ($100 minus the 3% fee) but the price actually drops from $100 to $99, they're out the $1.   They could do it the other way as well.  You ask for a $100 transaction.  They perform a $1000 transaction, of which they give you $97.  Now they have $898 ($1000 minus the $5 they paid for the transaction plus the $3 they charged you for the transaction).  If there's a 1% drop, they're out $10.98 ($8.98 in currency loss plus a net $2 in fees).   This is why banks have money market accounts.  So they have someone to manage these problems working twenty-four hours a day.  But then they have to pay interest on those accounts, further eating into their profits.  Along with paying a staff to monitor the currency markets and things that may affect them. Take a look at Google Checkout but keep in mind that there is a different list of countries that they support as sellers vs. buyers. The buyer list is much more comprehensive, and I believe covers CIS (Russia, Ukraine and Belarus) while the seller list does not (yet) which means that your client will need to create a U.S. or U.K. based entity to accept payments, however they will be able to accept payments from buyers both in CIS and internationally.  Удачи. "I've been doing a bunch of Googling and reading since I first posed this question on travel.SE and I've found an article on a site called ""thefinancebuff.com"" with a very good comparison of costs as of September 2013: Get the Best Exchange Rate: Bank Wire, Xoom, XE Trade, Western Union, USForex, CurrencyFair by Harry Sit It compares the following methods: Their examples are for sending US$10,000 from the US to Canada and converting to Canadian dollars. CurrencyFair worked out the cheapest." "FYI, just found this (https://www.paypal.com/webapps/mpp/ua/useragreement-full#8) ""8.9 Currency Conversion Currency Conversion 2.5% added to the exchange rate The Currency Conversion spread applies whenever a currency conversion is required to complete your transaction. The exchange rate is determined by a financial institution and is adjusted regularly based on market conditions. Adjustments may be applied immediately and without notice to you. When your payment is funded by a debit or credit card and requires a currency conversion, you consent to and authorize PayPal to convert the currency in place of your debit or credit card issuer. You have the right to have your card issuer perform the currency conversion and can choose this option during checkout on your transaction review page before you complete the transaction."" 2.5%!! Can this be true?" Chinese suppliers can quote their price in CNY rather than USD (as has been typical), and thus avoid the exchange risk from US dollar volatility- the CNY has been generally appreciating so committing to receive payments in US dollars when their costs are in CNY means they are typically on the losing end of the equation and they have to pad their prices a bit.  Canadian importers will have to buy RMB (typically with CAD) to pay for their orders and Canadian exporters can take payment in RMB if they wish, or set prices in CAD. By avoiding the US dollar middleman the transactions are made less risky and incur less costs. Japan did this many decades ago (they, too, used to price their products in USD).  This is important in transactions of large amounts, not so much for the tiny amounts associated with tourism. Two-way annual trade between China and Canada is in excess of $70bn.  Of course Forex trading may greatly exceed the actual amounts required for trade- the world Forex market is at least an order of magnitude greater than size of real international trade. All that trading in currency and financial instruments means more jobs on Bay Street and more money flowing into a very vital part of the Canadian economy.  Recent article from the (liberal) Toronto Star here. I prefer to use a Foreign Exchange transfer service.  You will get a good exchange rate (better than from Paypal or from your bank) and it is possible to set it up with no transfer fees on both ends.  You can use an ACH transfer from your US bank account to the FX's bank account and then a SEPA transfer in Europe to get the funds into your bank account.  Transfers can also go in the opposite direction (Europe to USA). I've used XE's service (www.xe.com) and US Forex's service (www.usforex.com).  Transferwise (www.transferwise.com) is another popular service. US Forex's service calls you to confirm each transfer.  They also charge a $5 fee on transfers under $1000. XE's service is more convenient: they do not charge fees for small transfers and do not call you to confirm the tramsfer.  However, they will not let you set up a free ACH transfer from US bank accounts if you set up your XE account outside the US. In both cases, the transfer takes a few business days to complete. EDIT: In my recent (Summer 2015) experience, US Forex has offered slightly better rates than XE.  I've also checked out Transferwise, and for transfers from the US it seems to be a bit of a gimmick with a fee added late in the process.  For reference, I just got quotes from the three sites for converting 5000 USD to EUR: While in the UK and travelling to Europe, I heard of the FairFX euro card from the website Money Supermarket (affiliate link which waives the sign-up fee). The link also includes many other alternative prepaid euro cards which may be better suited for your uses.  The FairFX card is available in both GBP and EUR, and both products come with chip and pin. They also charge relatively little as compared to most bank cards (no currency conversion on use, $2~ withdrawal charges from ATM).  I generally had a good experience with this card, and was able to purchase items both in person as well as online using it. "My solution when I lived in Singapore was to open an account with HSBC, who at the time also had branches in the US. When I was home, I used the same debit card, and the bank only charged a nominal currency exchange fee (since it never had to leave their system, it was lower than had it left their system). Another option, though slightly more costly, is to use Paypal. A third option is to cash-out in CAD and convert to USD at a ""large"" institution - the larger your deposit/conversion balance, the better the rate you can get. To the best of my knowledge, this shouldn't be taxable - presuming you've paid the taxes on it to start with, and you've been filing your IRS returns every year you've been in Canada." Taxing citizens on global income caused by tax inversion, not the cause of tax inversion.  If yourwebsite.com makes $1mil, and you pay yourwebsite.ca $1m for rights to the name, that's inversion.  Your company, and you, as the owner, have $1m income in Canada.  All of which came from US revenue.  I'm not saying the tax system is great or anything.  There just seems to be a miss understanding.