Manual vs Webhook: What's the difference?
With manual transfer you open an order, check the data and click "create invoice". For a handful of orders a day that's fine. As volume grows it becomes a treadmill, and every forgotten order tears a gap into your bookkeeping.
A webhook is a message Shopify sends automatically to your accounting tool the moment a specific event occurs. You click nothing: the order arrives, Shopify fires the event, and the invoice is created, tagged and archived. That's the USP of true automation over plain export tools.
Which Shopify events drive your accounting?
Not every event makes a good trigger. The most common mistake is creating the invoice at order creation. Then you get invoices for orders that are never paid or cancelled immediately. Trigger on payment instead.
- orders/paid (order was paid): the ideal trigger for invoice creation.
- orders/create (new order): useful for preparation, but not for the final invoice.
- refunds/create (refund): triggers a credit note or cancellation invoice.
- orders/cancelled (cancellation): prevents or voids an invoice already created.
- orders/fulfilled (shipped): the right moment for an automatic delivery note.
Tax logic runs automatically too
The webhook doesn't just create a document, it also applies the correct tax rule. This is where good automation separates from simple export scripts: domestic delivery at 19% or 7%, EU B2C above the OSS threshold of €10,000 with the destination country's local rate, or reverse charge on EU B2B with a valid VAT ID at 0%.
Special cases run along too: the small business rule under §19 of the German VAT Act (2025 reform: prior year ≤ €25,000, current year ≤ €100,000) is issued without VAT. Encapsulating tax logic in the trigger saves you the manual mapping and reduces errors in your VAT return.
Metafield writeback: The status returns to your store
A one-way street isn't enough. After posting, the webhook writes the invoice ID, invoice number and status back as a metafield onto the Shopify order. So you see right in the store admin which order is already booked, without switching to your accounting system.
This return channel also prevents duplicate invoices: if an order already carries an invoice ID, the automation skips it on the next run. That's the technical foundation that lets you connect Shopify to sevdesk or connect Shopify to Lexware Office without risking inconsistencies.
GoBD and sequential numbering
The German GoBD require records that are unalterable, sequential and archived in an audit-proof way. Manual transfer endangers exactly that: skip an order or post it twice and you get gaps or duplicates in the number sequence. Webhooks create records deterministically in the order payments arrive.
Mandatory details under § 14 of the German VAT Act (full address, tax number, service date, tax rate) are filled by the automation from Shopify order and customer data. If you also want to create invoices automatically from Shopify and output them as an e-invoice in ZUGFeRD or XRechnung format, you benefit from the same trigger principle.
DACH: Austria and Switzerland accounted for
Selling across the entire DACH region needs automation that knows more than just German tax law. In Austria the small business threshold has been €55,000 gross since the 2025 reform; in Switzerland VAT liability kicks in above CHF 100,000 turnover with rates of 8.1%, 2.6% and 3.8%.
The advantage of a webhook-based system: this country logic is configured once in the trigger and applies automatically to every order. You don't have to decide per order which rate applies. When picking the right tool, our comparison of Shopify accounting apps helps, or take a look at our services.
