Shopify invoices as e‑invoices, with DATEV export
Shopify sends order confirmations, but no invoices that meet German law. Rechnungskit automatically turns every order into an e-invoice, which becomes mandatory for business customers in Germany from 2027.
- Every order becomes an e-invoice (ZUGFeRD), with the shipping date as the date of supply (Leistungsdatum)
- Shopify Payments payouts split into sales, fees and refunds
- GoBD archive and DATEV export for your tax advisor, every month
Shopify sells. The invoice is your job.
Shopify gives you orders, but no German bookkeeping. Invoicing under § 14 UStG (the German VAT Act), GoBD archiving, DATEV export and the OSS return stay your job.
- Order confirmation instead of an invoice under § 14 UStG
- Invoice apps usually deliver just a PDF, not an e-invoice
- Shopify Payments pays out as a lump sum
- No GoBD archive, no DATEV export
- E-invoice under EN 16931 (ZUGFeRD) from every order
- Discounts, shipping costs and gift cards line by line
- Every payout broken down to the individual fee
- GoBD archive with checksum, DATEV export at the push of a button
Four steps from payment to booking.
- 01ConnectConnect your Shopify store in a few minutes. No code needed.
- 02ImportRechnungskit imports every Shopify order and matches its payment.
- 03ErzeugenEvery order becomes a validated e-invoice under EN 16931.
- 04ArchiveThe invoice is archived to GoBD standards and is ready for the DATEV export.
Every format Shopify doesn't deliver.
How the Shopify integration works
Rechnungskit connects two data sources: the payment from your payment provider (Shopify Payments, Stripe, Mollie, PayPal or Unzer (German)) and the order from Shopify (German). One setting matters for automatic matching: in Rechnungskit you choose Shopify as the provider's matching source, so the payment looks for its order in the right place. If your payment app also passes the Shopify order number (for PayPal as invoice_id, for Unzer as the order ID), matching runs on that. For PayPal, Rechnungskit also manages without this field (see below). Rechnungskit shows right on the connection whether the latest payments match with these settings. The order supplies what the payment alone does not know: line items, VAT rates per item, discounts, shipping costs and the shipping date.
Together, they produce a validated e-invoice in ZUGFeRD format with the correct date of supply (Leistungsdatum) (German): shipped goods are invoiced on the shipping date, not the payment date. That sounds like a detail, but it decides whether you have a formally correct invoice or a document your tax advisor (Steuerberater) has to explain at the next tax audit. Customers with a Leitweg-ID, such as public authorities or universities, receive the same invoice as XRechnung 3.0.
- OrderCustomer buys and pays in the storeRechnungskit reads the order and payment through the Shopify API
- ShippingE-invoice in ZUGFeRD formatLine items, VAT rates, discounts and shipping costs from the orderDate of supply = shipping date
- PayoutLump sum broken downSales, fees and refunds matched individually, ready for the DATEV export
How to connect your store
The most direct way to start is in Rechnungskit: create an account, enter your store domain under Connections, Connect and confirm the access in Shopify. Alternatively, install the app from the Shopify App Store and link it to your Rechnungskit account there. Both ways deliver the same data. The app installs nothing in your theme or checkout; it reads order, payment and product data through the Shopify API. Step-by-step setup instructions are in the Shopify help (German).
Every payment method, a matching route
How the invoice is created depends on how your customer pays. Rechnungskit matches online payments through Shopify Payments, PayPal or Klarna (German) automatically. With prepayment by bank transfer (Vorkasse) (German) there is no payment provider, so the order status in Shopify serves as the payment signal. For new connections, Rechnungskit does not invoice point-of-sale sales through Shopify POS by default, because your POS app with TSE is responsible for those.
Refunds, returns and store credit
If you refund individual items in Shopify, Rechnungskit carries exactly those line items into the cancellation invoice. The original invoice stays unchanged, as the GoBD require. Which correction route fits which case is explained in the article on invoice correction (German). If you give store credit instead of money, Rechnungskit distinguishes between a return and a goodwill gesture; details are on the page about Shopify Store Credit (German).
Already using an invoice app?
Shopify's own Order Printer app designs printable PDF documents. It does not deliver an e-invoice under EN 16931, a GoBD archive or a DATEV export. If a second invoice app is running alongside Rechnungskit, it is best to deactivate it so no conflicting documents are created. What Shopify can do itself and what will be missing from 2027 is in the guide Creating Shopify invoices (German). Direct comparisons with popular Shopify apps are at Rechnungskit or Order Printer Pro (German), Rechnungskit or Sufio (German) and Rechnungskit or Pathway Solutions (German). When you have to send e-invoices is explained in the article on the e-invoicing mandate.
Discounts, shipping costs and gift cards, correctly assigned
Shopify orders often include discount codes, tiered shipping costs and redeemed gift cards. Rechnungskit takes over this data line by line: discounts reduce the right line item, shipping costs are charged at the right VAT rate (German), including in a mixed cart, and vouchers (German) are treated correctly for VAT. A sold Shopify gift card (German) gets a purchase receipt without VAT, and when it is redeemed it appears on the invoice as a payment.
Matching direct PayPal payments
If you use PayPal directly alongside Shopify Payments, a lot depends on a single field. For some payments, the PayPal field invoice_id contains the order number, and Rechnungskit reads the match straight from it. For the rest, it contains an internal checkout session key with no order number behind it. If you only evaluate PayPal's payment data, you find nothing for these payments.
So Rechnungskit asks the other side: the Shopify order. The PayPal transaction ID is stored there, and it connects order and payment unambiguously, even though PayPal does not know the order number. Matching runs on the transaction ID instead of an estimate from amount and time, which can easily produce an invoice for the wrong order. There is nothing to set up. The existing Shopify connection is enough. Fees and refunds keep running through the PayPal integration (German).
This also works retroactively: payments that were left unmatched so far are picked up the same way.
Payouts that add up
Shopify Payments pays out in bundles. Your bank statement shows one total, and behind it are dozens of sales, fees and refunds. Rechnungskit splits every payout back into its components and matches them to the individual payments, so your books add up.
Rechnungskit checks every line item, not only the final total. If something does not fit, you see a task to resolve instead of a silent rounding, because a difference usually means a transaction is missing, recorded twice or valued incorrectly. Refunds are tricky because Shopify books them under a separate transaction ID that does not match the original payment. They are therefore resolved through the order that Shopify supplies with them. If the order dates from before your Belegstart (the date Rechnungskit takes over invoicing), the line item stays quiet: the transaction belongs in your previous system and there is nothing to resolve.
The same principle applies to PayPal and Klarna. Neither pays out through Shopify Payments; both pay out from their own account. Rechnungskit fetches payments, fees and payouts directly from there as soon as you also connect PayPal (German) and Klarna (German), and keeps each provider on its own transit account.
EU sales automatically in the OSS return
If you sell through Shopify to other EU countries, Rechnungskit monitors the 10,000-euro delivery threshold and groups your EU sales by country in the quarterly OSS return (German), with the applicable VAT rate per product category and destination country.
- OrderA private customer in Vienna buys a coffee grinderYour EU sales to private customers are already above 10,000 euros this year
- Invoice20% Austrian VATThe rate comes from the VAT matrix for Austria and the product categoryDestination country rate
- Quarter endOSS returnSales per country and VAT rate, ready to file with the BZSt
Several markets and legal entities, invoiced separately
If you use Shopify Markets (Shopify Plus) and bill different markets through different legal entities, for example the EU through your German GmbH and Switzerland through a separate Swiss company, you can control the connection per market. When you connect, Rechnungskit detects that your store has several markets and offers a market filter.
This lets you limit a connection to the markets that belong to this legal entity. Either you choose "All except these", for example to ignore the Swiss market here because another system invoices it, or "Only these" for a specific selection. Orders from excluded markets are not invoiced by this connection.
If you want to bill a second market separately in Rechnungskit, connect the same store from a second account or project and filter the other way round there. Each legal entity then gets its own number range and its own documents, all with a single Shopify app.
Shopify and e-invoicing: FAQ
Connect Shopify, e-invoicing done.
Create an account, connect your store, check everything in free test mode. Billing starts when you go live.
Start for free