No place in Google Checkout to set international tax rates. Do we owe? How to Pay?

by Shane Isbell » Thu, 22 Apr 2010 00:59:30 GMT

Sponsored Links

The EU passed a law back in 2003 that requires US based companies selling
digital goods to collect VAT tax on sales to the EU (typically 15-25%). This
was done to try to level the playing field with EU based companies that were
subject to VAT.

In the Google agreement, it passes back responsibility for paying taxes to
the developer. This would require getting the billing addresses of all
customers in the EU and calculating the taxes owed. You'd need to register
your company with the EU and wire them the money (the transfer costs
possibly being more than you actually owe) each quarter. Given that you are
a US based company, they could potentially ban you from selling into the EU
for violation, but if you are big enough to care about, I think that is a
good problem to have.

Of course, no small company or individual delivering digital goods could
survive trying to figure out all the global tax laws. Even if you comply
with the EU, you may be in violation in other countries like Australia or
China. So it's up to you if you want to be in full compliance around the
world (and just close up shop due to the maintenance and legal costs) or if
you'd rather just muddle along the best you can.

Even properly collecting state sales taxes can be beyond the means for many
small companies. For example, in the state of Washington, they have
different sales taxes based on zip-code and county. If I were to sell an app
through Android Market, I'd need 5K in CPA assistance and another 2-3K to
hire a company to manage the systems. Or I could just collect the highest
sales tax for the whole state and hope that an individual buying the app
doesn't sue me for charging them an extra penny or two in sales tax.

As developers in this rising app market phenomenon, I don't think the tax
laws in most places take into account individuals operating a business
having such a global reach for the selling of small amounts of digital


No place in Google Checkout to set international tax rates. Do we owe? How to Pay?

by Paul » Thu, 22 Apr 2010 19:18:17 GMT

 Thanks Shane, that's pretty much what I thought. I did see some web
pages mention that the EU law would only apply to companies that had
sales of over 100,000 Euros, but it didn't seem definitive and I
couldn't find legal text supporting the 100,000 limit.

Google Checkout also makes it challenging to identify EU sales at all.
If I "download data to spreadsheet" from Google Checkout, the
transactions show amounts in US dollars and do not identify the
country. If I check off "Include more buyer and order information
columns", then I can get the country information, but results are
limited to 500 rows. Since I have sales of 200+ per day, it's a pretty
cumbersome process.

I think the EU law is pretty restrictive for smaller companies, so I
hope they make some changes in the future. If anyone can clarify the
100,000 limit that would be good to know.


Sponsored Links

Other Threads

1. JUnit Test error

When defining a junit test using the static suite method android
assumes that the name of each test is also the name of a method. If
this is not the case then the test runner fails to run. The following
test class works correctly using the standard eclipse junit runner:

public class CustomTest extends TestCase

    public CustomTest(String testName)

    protected void runTest() throws Throwable
    {"Test failed");

    public static Test suite()
        TestSuite suite = new TestSuite();
        suite.addTest(new CustomTest("test1"));
        return suite;

however running using the android test runner says that test1 passes!
I have managed to trace this down to the following code in
            try {
                // Look for TimedTest annotation on both test class
and test method
                    mIsTimedTest = true;
                    mIncludeDetailedStats =
                } else if
(test.getClass().isAnnotationPresent(TimedTest.class)) {
                    mIsTimedTest = true;
                    mIncludeDetailedStats =
            } catch (SecurityException e) {
                throw new IllegalStateException(e);
            } catch (NoSuchMethodException e) {
                throw new IllegalStateException(e);
The thrown IllegalStateException doesn't seem to be caught or reported
anywhere which is I think why the eclipse plugin incorrectly reports
the tests have passed. As this code is called before the test is run
the test code is never called.


2. android cdma

Hi, all

Now i want to build eclair for a cdma device,but if i set
"ro.telephony.default_network = 4" in the system.prop , it occured a error
"The" has stopped unexpectedly, please try again" in the
home screen .

I want to know how to build eclair for a cdma device?



D/AT      (  685): AT> ATE0Q0V1
D/AT      (  685): AT< OK
D/AT      (  685): AT> ATE0Q0V1
D/AT      (  685): AT< OK
D/AT      (  685): AT> ATS0=0
D/AT      (  685): AT< OK
D/AT      (  685): AT> AT+CMEE=1
D/AT      (  685): AT< OK
D/AT      (  685): AT> AT+CREG=1
D/AT      (  685): AT< OK
D/AT      (  685): AT> AT+CCWA=1
D/AT      (  685): AT< OK
D/AT      (  685): AT> AT+CMUT=0
D/AT      (  685): AT< OK
D/AT      (  685): AT> AT+CLIP=1
D/AT      (  685): AT< OK
D/AT      (  685): AT> AT+CLIR=1
D/AT      (  685): AT< OK
D/AT      (  685): AT> AT+CMGF=1
D/AT      (  685): AT< OK
D/AT      (  685): AT> AT+CSQ
D/AT      (  685): AT< +CSQ: 99,99
D/AT      (  685): AT< OK
D/AT      (  685): AT> AT+CFUN?
D/AT      (  685): AT< +CFUN: 4
D/AT      (  685): AT< OK
I/PHONE   (  780): Network Mode set to 4
I/PHONE   (  780): Cdma Subscription set to 1
I/RILJ    (  780): Connected to 'rild' socket
I/RILC    (  685): libril: new connection
I/RILC    (  685): RIL Daemon version: android reference-ril 1.0
D/RILB    (  780): Notifying: radio available
D/RILJ    (  780): [0000]> SCREEN_STATE: true
D/RIL     (  685): onRequest: SCREEN_STATE
D/RILJ    (  780): [0000]< SCREEN_STATE error: RADIO_NOT_AVAILABLE
D/PHONE   (  780): mDoesRilSendMultipleCallRing=true
D/PHONE   (  780): mCallRingDelay=3000
D/CDMA    (  780): [CdmaDataConnection] DataConnection.clearSettings()
D/CDMA    (  780): [CdmaDataConnection] CdmaDataConnection <constructor>

Best wishes



3. change margin of a view after it has been rendered

4. native AudioTrack resources never freed..

5. Need Help--- Regarding Creating Database and Tables

6. Spica , logo !

7. How to get current UTC time