You sell online from Geneva (or are about to start) and you feel that "it's working", but the VAT + payments + accounting part looks like a plate of spaghetti? That's normal. E-commerce is not just a shop. It's a chain of flows: order, payment, invoice, shipping, return, credit note, dispute, commission, currency exchange, and at the end... your closing.
Here is a hands-on, operational guide for 2026. We talk Swiss VAT (8.1%, 2.6%, 3.8%), CHF 100,000 threshold, export/import, marketplaces, and above all: how to avoid costly mistakes when the SFTA or the auditor asks questions.
Understanding e-commerce sales flows in Switzerland (direct shop, marketplace, dropshipping)
Before talking VAT, we need to talk reality. Because VAT is decided on a simple fact: who sells what, to whom, from where to where, and who collects the money.
Direct shop (Shopify, WooCommerce, custom site): you are the seller
You sell in your own name. The customer pays on your checkout. You ship from your stock (Geneva, Vaud, neighboring France, doesn't matter) or via a logistics provider.
Concretely, this means:
- the invoice (or receipt) is in your name
- the payment arrives to you (often via a PSP: Stripe, PostFinance Pay, etc.)
- VAT is your responsibility, not the platform's
Classic trap: confusing "the shop is on Shopify" with "Shopify manages VAT". No. Shopify sometimes collects, but VAT responsibility remains yours.
Marketplace (Galaxus, Ricardo, Amazon): you sell... but not always as you think
On a marketplace, there are three mixed models:
- You sell to the end customer (the marketplace is an intermediary)
- You sell to the marketplace (it then resells)
- The marketplace is considered the VAT supplier on certain flows (and you become the "supplier to the marketplace")
Result? Two sellers "on Amazon" can have completely different VAT entries.
Field observation: many Geneva SMEs discover this at closing time, when they compare the "displayed" turnover on the marketplace and the amount actually paid out. And then, panic: "12% is missing". No, those are commissions, fees, withholdings, sometimes refunds.
Dropshipping: you sell, but you don't touch the stock
Dropshipping is often sold as "simple". Fiscally and customs-wise, it's rarely simple.
Three questions that change everything:
- Where is the stock at the time of sale? (Switzerland, EU, Asia)
- Who is the official importer? (you, your supplier, the customer)
- Who invoices the end customer?
If the Swiss customer receives an imported parcel, there is an import. And an import means import VAT, customs clearance, and sometimes surprises for the customer experience (fees on delivery).
Table 1 — E-commerce flows and their accounting/VAT implications
| Model | Who collects? | Who invoices the customer? | Swiss VAT: point of attention | Accounting: point of attention |
|---|---|---|---|---|
| Direct shop | You (via PSP) | You | Correct rate, export = 0% if conditions met | PSP fees, split payments, returns |
| Marketplace (intermediary) | Marketplace then payout | Often you (depending on conditions) | Who is the VAT supplier? | Commissions, withholdings, disputes |
| Sale to marketplace | Marketplace | Marketplace | You invoice B2B to the marketplace | B2B invoices, delivery conditions |
| Dropshipping import | Often you | You | Import, import VAT, proof | Margin tracking, hidden costs |
VAT obligations for Swiss e-commerce in 2026: thresholds, rates, export/import cases, marketplaces (Chf 100,000, 8.1%, 2.6%, 3.8%)
Let's get straight to the point.
VAT registration threshold: CHF 100,000
In Switzerland, VAT registration depends on worldwide turnover from taxable services, with a threshold of CHF 100,000.
Two fiduciary notes:
- The threshold is managed. If you are at CHF 95,000 in October, you must already anticipate.
- Many e-merchants underestimate the "marketplace + shop + B2B" effect: you add up.
Swiss VAT rates to know (and set up properly)
Since 2024, the rates are:
- 8.1% (standard rate)
- 2.6% (reduced rate)
- 3.8% (special accommodation rate)
In e-commerce, you mainly use 8.1% and 2.6%. The 3.8% is for accommodation; unless you sell overnight stays (vouchers, packages), it's not your daily business.
B2C Switzerland: the simple rule... until it isn't
If you sell to an individual in Switzerland and delivery is in Switzerland, you invoice Swiss VAT at the correct rate.
It gets complicated when:
- you deliver from abroad
- you do click & collect
- you sell bundles (product + service)
Export: VAT at 0%... but only if you can prove it
Exporting (delivering outside Switzerland) can be invoiced at 0%. But the keyword is proof.
What is expected in practice:
- proof of export (transport documents, customs proof as applicable)
- consistency between invoice, delivery address, tracking
Field anecdote: a Geneva SME sells watch accessories. It invoices "export 0%" to the EU, but sometimes ships to a Swiss address "as a gift". Result? Mixed proof, and during an internal audit, impossible to justify some 0% sales. We had to reclassify and correct.
Import: VAT doesn't disappear, it changes timing
If you import goods into Switzerland, you will have:
- import VAT (collected via customs)
- VAT on sales in Switzerland (if you are registered)
The painful point: if you don't properly recover import VAT (declaration, documents), you effectively pay twice.
For e-commerce import/export cases, refer to practical customs cases (source: Import/export e-commerce Switzerland (B2C/B2B case study)).
Marketplaces: who is really the VAT supplier?
The question is not "I sell on Galaxus". The question is:
- Who is considered the supplier on the customer invoice?
- Who sets the price and conditions?
- Who collects and who bears the credit risk?
Depending on the model, you can:
- invoice the end customer (VAT with you)
- invoice the marketplace (B2B)
If you don't clarify this, you will:
- declare a false VAT turnover
- mishandle commissions (and sometimes VAT on commissions)
Checklist 1 — E-commerce VAT: what I want to see before your first closing
- List of sales channels (shop, marketplaces, B2B) and start dates
- CHF 100,000 threshold tracked monthly (simple table)
- 8.1% / 2.6% / 3.8% rates set up in ERP and shop
- Clear export rules (0%) + proof file (transport/customs)
- Documented returns/credit note process (who validates, when, how)
- Accounting mapping: gross sales vs commissions vs PSP fees
- "VAT on commissions" check according to received invoices (marketplace/PSP)
Payment fees and marketplace commissions: 2026 overview (Twint, Stripe, PostFinance, Galaxus, Ricardo, Amazon, returns/credit notes, disputes)
You look at your Shopify dashboard: CHF 100,000 in sales. You look at your bank: CHF 92,000. And you think: "Was I robbed?" No. You just discovered e-commerce.
PSP (Twint, Stripe, PostFinance): what you really pay
Fees vary by contract, volume, card, country. I won't make up percentages. But I can tell you what always comes up in accounting:
- per transaction fee (commission)
- refund fee (sometimes)
- chargeback fee (card dispute)
- currency exchange differences (if you collect in EUR/USD)
- payout delay (D+2, D+7...)
Twint: often highly appreciated in Switzerland for conversion rate. But beware of reconciliations: depending on the acquirer and contract, bank labels are not always "clean".
Stripe: great for automation, but you must handle payouts, fees, and split payments correctly.
PostFinance: robust, but exports and formats must be well integrated into your ERP.
Marketplaces (Galaxus, Ricardo, Amazon): commissions, penalties, and withholdings
On marketplaces, you rarely have "one commission". You have a layer cake:
- sales commission
- logistics fees (if fulfillment)
- marketing fees (placements, ads)
- withholdings for disputes
- adjustments on returns
And sometimes, separate invoices, sometimes direct deductions from the payout.
Returns, credit notes, disputes: the triangle that breaks reconciliations
Three typical situations:
- Simple return: you refund, period.
- Credit note: you don't refund, you credit.
- Dispute/chargeback: the money leaves without your accounting team seeing a classic "refund".
If you don't structure this, you will:
- overstate your turnover
- underestimate your costs (dispute fees)
- waste time "matching" manually
For a reminder of best practices for returns/disputes from a consumer and management perspective, see (source: Management of disputes, returns and credit notes in Swiss e-commerce).
Table 2 — What lands in your bank account (and how to classify it)
| Flow | Concrete example | Where it appears | Expected accounting treatment |
|---|---|---|---|
| Gross sale | Order CHF 120 incl. VAT | Shopify/marketplace | Product + VAT collected |
| Marketplace commission | -CHF 18 | Deducted from payout or invoice | Expense (with VAT if applicable per invoice) |
| PSP fee | -CHF 2.90 | PSP report | Financial/commission expense |
| Customer refund | -CHF 120 | PSP + bank | Sale cancellation + VAT (credit note) |
| Chargeback | -CHF 120 + fee | PSP | Expense + turnover/VAT correction as applicable |
| Currency difference | +/- CHF 1.35 | PSP | Currency gain/loss |
Automated accounting reconciliation and flow management in Odoo/Shopify (invoicing, QR-invoice, bank reconciliation, multi-currency, split payments)
Let's be concrete: if you do your reconciliations manually, you'll last... up to 200 orders per month. After that, it breaks.
What you must decide before automating
- Your source of truth: Odoo or Shopify?
- Your level of accounting detail: one entry per order, or per day (sales journal)?
- Your invoicing strategy:
- systematic invoice
- invoice on request
- ticket/receipt
In Switzerland, the QR-invoice is mainly useful in B2B or for certain deferred payments. In B2C e-commerce, it's often immediate payment, but you may have "invoice at 30 days" cases (public entities, schools, companies).
Odoo + Shopify: flows to lock down
You want these objects to be consistent:
- order
- payment (authorized / captured)
- invoice
- delivery
- refund
Classic trap: the shop marks "paid", but the payout arrives later, and accounting confuses "customer payment" and "bank receipt". It's not the same.
Bank reconciliation: rules, imports, and discipline
Automatic reconciliation works if:
- your bank labels are stable
- you import statements correctly
- you have clearing accounts (Stripe, Twint, marketplace)
In practice, we often create:
- a clearing account per PSP (e.g. Clearing Stripe)
- a clearing account per marketplace (e.g. Clearing Galaxus)
Then:
- the sale credits turnover and VAT, and debits clearing
- the bank payout debits the bank and credits clearing
- fees are accounted for separately
For reconciliation logic and import rules, see (source: Automated reconciliations in Odoo (official documentation)).
Multi-currency: if you sell in EUR, you have a currency issue (even if you ignore it)
You can display prices in EUR, collect in EUR, then receive CHF. In between, there is:
- a conversion rate
- fees
- a currency difference
If you don't account for it, you'll have "unexplained" discrepancies.
Ark Fiduciaire
Need help with this topic?
Our experts are available for personalised guidance. First consultation free, no commitment.
Split payments: card + credit note, or Twint + invoice
Real case:
- customer pays CHF 80 by card
- uses a CHF 20 credit note
- total CHF 100
Your system must be able to:
- allocate the payment
- settle the invoice
- track the credit note
Otherwise, you'll have "partially paid" invoices lingering, and your automatic reminders become ridiculous.
Setting up a clean accounting scheme (without shooting yourself in the foot)
I'll be direct: the "minimalist" e-commerce chart of accounts always ends up costing more. Because you spend your time explaining discrepancies.
Accounts that really simplify life
- Swiss e-commerce sales (8.1%)
- Swiss e-commerce sales (2.6%)
- Export sales (0%)
- Clearing Stripe
- Clearing Twint
- Clearing PostFinance
- Clearing Marketplace A / B
- Marketplace commissions
- PSP fees
- Dispute/chargeback fees
- Currency gains/losses
You can group, yes. But at least keep the separation "sales" vs "commissions/fees" vs "clearing". Otherwise, you'll never see your real margin.
Credit note policy: you want traceability, not tinkering
A credit note must:
- reference the original invoice
- use the correct VAT rates
- be correctly dated
Typical tinkering: "we refund via Stripe and make a manual entry at month-end". It works... until you have 120 returns and 15 disputes.
Case study (Geneva) — Shopify shop + Galaxus sales + EU export
Company: Geneva LLC, sports accessories, VAT registered. Period: March 2026.
Monthly data
- Shopify B2C Switzerland
- 300 orders
- Total collected incl. VAT: CHF 96,000
- Products at 8.1% rate only
- Stripe fees (deducted from payouts): CHF 2,112
- Customer refunds (returns): CHF 3,240 incl. VAT
- Galaxus
- Displayed sales incl. VAT: CHF 40,500
- Returns handled by marketplace: CHF 2,700 incl. VAT
- Commission + various fees (deducted): CHF 6,480
- Net payout received in bank: CHF 31,320
- EU Export (B2C)
- 25 orders
- Total invoiced: CHF 7,500
- Invoiced at 0% (export)
- Shipping proof available for 23 orders, missing for 2
What this gives in accounting logic (simplified)
A) Shopify Switzerland (8.1%) — VAT calculation on net of returns
- Sales incl. VAT: 96,000
- Returns incl. VAT: -3,240
- Net incl. VAT: 92,760
VAT included (8.1%) on 92,760:
- Net base = 92,760 / 1.081 = CHF 85,809.44
- VAT = CHF 6,950.56
Stripe fees: CHF 2,112 (expense), offsetting clearing Stripe.
B) Galaxus — beware of "turnover vs payout" reading
- Sales incl. VAT: 40,500
- Returns incl. VAT: -2,700
- Net incl. VAT: 37,800
VAT included (8.1%) on 37,800:
- Net base = 37,800 / 1.081 = CHF 34,967.62
- VAT = CHF 2,832.38
Commission/fees: CHF 6,480 (expense). The net payout (31,320) is not your turnover, it's your cash after deductions.
C) EU Export
- Export sales: CHF 7,500 at 0%
- Problem: 2 orders without proof.
In our opinion, the best approach remains simple: you put these 2 orders in "export to regularize" and set an internal rule: if proof is not obtained within X days, reclassify as taxable sale (or block the 0%). Otherwise, you're playing with fire.
Step by step — Getting your e-commerce in order in 30 days (Swiss SME)
Want a clear action plan? Here it is.
Week 1: map the flows (without touching the tech)
- List all channels (Shopify, WooCommerce, Galaxus, Ricardo, Amazon, B2B)
- For each channel: who invoices, who collects, who ships
- List payment methods (Twint, Stripe, PostFinance, invoice)
- List delivery countries (Switzerland, EU, rest of world)
Deliverable: one A4 page. If you can't do it, your system is already too vague.
Week 2: decide on the accounting model
- Choose your source of truth (often Odoo)
- Decide on the level of detail (per order vs daily)
- Create clearing accounts (PSP + marketplaces)
- Validate VAT rates and product categories
Week 3: integrate and test
- Connect Shopify → Odoo (orders, customers, taxes, payments)
- Import a real bank statement
- Test 5 scenarios:
- Swiss sale 8.1%
- Swiss sale 2.6% (if applicable)
- export 0%
- return + refund
- dispute/chargeback
Week 4: lock down internal procedures
- Who validates a refund?
- Who issues the credit note?
- Where is export proof stored?
- Who monitors the CHF 100,000 threshold?
- What monthly check on clearing discrepancies?
You finish with a simple, repeatable process, and above all, one that can be handed over when someone goes on holiday.
3 costly mistakes for Geneva LLCs (and how to fix them)
We see them all the time.
Mistake 1: declaring the bank payout as turnover
Symptom: your accounting turnover matches the bank, not sales.
Consequence: wrong VAT, wrong margin, and you don't understand your commissions.
Correction:
- record gross sales (per invoices/orders)
- record commissions/fees as expenses
- use a clearing account to bridge to the payout
Mistake 2: handling returns "by feel"
Symptom: Stripe refunds without credit note, or credit note without refund.
Consequence: VAT collected too high, inconsistent customer accounts.
Correction:
- a return = a document (credit note) + a financial flow (refund or offset)
- systematic reconciliation of PSP refunds
Mistake 3: applying 0% export without proof file
Symptom: "we ship abroad, so 0%".
Consequence: risk of VAT reassessment + interest.
Correction:
- export file (proof of export/transport)
- internal rule for reclassification if proof missing
Checklist 2 — Monthly check (45 minutes) to avoid nasty surprises
- Balance of each clearing (Stripe/Twint/marketplace) explained and justified
- Gross sales = Shopify/marketplace reports (after returns) consistent with accounting
- Returns: credit notes issued = refunds made (or offset)
- Export: list of 0% shipments + proof archived
- VAT: quick check of rates applied on 10 random orders
- Multi-currency: currency gains/losses accounted for (not "somewhere")
- CHF 100,000 threshold: tracking updated
nFADP and customer data: the topic we postpone... until it hurts
In 2026, the new Swiss Data Protection Act (nFADP) is part of the landscape. In e-commerce, you handle:
- addresses
- emails
- purchase history
- sometimes indirect sensitive data (habits, health if specific products)
Two very concrete points:
- Access: who in the company can export the customer database?
- Subcontractors: PSPs, marketing tools, Shopify apps, marketplaces... you must know who processes what.
If you have Odoo + Shopify + 12 apps, you have 12 potential subcontractors. And yes, it must be documented.
What I recommend to SMEs: a simple (and sustainable) architecture
In our opinion, the best approach remains:
- Shopify (or WooCommerce) for sales
- Odoo for accounting + invoicing + stock (if relevant)
- a clearing account per collection channel
- automated bank reconciliation rules
You don't need a monster. You need a system that produces reliable figures by the 10th of the month, without sacrificing weekends.
To build SME skills, there are useful continuing education courses (source: Training and best practices for SME e-commerce (2026)).
Swiss e-commerce FAQ (difference VAT shop/marketplace, handling returns, which flows to automate in Odoo, GDPR/nFADP compliance, common SME pitfalls and errors, training tools and official resources)
1) VAT: what's the difference between selling via my shop and via a marketplace?
The difference is not "technical", it's contractual: who is the supplier on the sale to the end customer. On your shop, it's almost always you. On a marketplace, it depends on the model (intermediary, resale, specific rules). You must read the terms and see who appears on the documents given to the customer.
2) How to properly handle a return: refund or credit note?
Accounting-wise, a return must generate a document (often a credit note) that cancels all or part of the original invoice with the correct VAT rates. The refund (Stripe/Twint/bank) is the financial flow that settles. If you refund without a credit note, you leave VAT and turnover inflated.
3) Which flows to automate first in Odoo when doing e-commerce?
Field priority:
- import of sales (orders/invoices)
- clearing accounts per PSP/marketplace
- import of bank statements + reconciliation rules
- returns/credit notes + refunds Stock and logistics come after, unless you have many SKUs.
4) nFADP vs GDPR: what should I do if I sell from Geneva?
If you target customers in Switzerland, nFADP applies. If you also target the EU (marketing, delivery, tracking), GDPR may also apply. Concretely: map your subcontractors (PSP, apps, email marketing), limit access, document your processing, and keep a realistic data retention policy.
5) What are the most common pitfalls in SME e-commerce?
The top three:
- confusing payout and turnover
- handling returns "by hand" without documents
- applying 0% export without proof Add a fourth if you sell in multiple currencies: ignoring currency differences.
6) Which official resources are useful for import/export and disputes?
For e-commerce import/export and B2C/B2B cases, customs resources are valuable (source: Import/export e-commerce Switzerland (B2C/B2B case study)). For returns/disputes management in e-commerce, there are practical guides (source: Management of disputes, returns and credit notes in Swiss e-commerce). And for Odoo, the documentation on automated bank reconciliation helps structure things properly (source: Automated reconciliations in Odoo (official documentation)).