← All integrations
WooCommerce → lexoffice

WooCommerce lexoffice integration

In short

A WooCommerce to lexoffice integration turns each paid WooCommerce order into the matching record in lexoffice - a sales invoice (Rechnung) or booking voucher (Beleg) with correct line items, the right taxType and taxRatePercentage per position, and a deduplicated contact (Kontakt) as the debitor. Refunds become credit notes, shipping and fees get their own lines, and EU or third-country sales carry the correct tax subtype for reverse-charge, intra-community supply, or export. Done properly it is not a nightly CSV import: it is an idempotent pipeline that keeps lexoffice in sync with your shop so your bookkeeping and Steuerberater start from clean, correctly taxed data.

What a WooCommerce to lexoffice integration actually does

WooCommerce knows everything about a sale - the line items, the tax collected per position, the coupon, the shipping, the gateway fee, the partial refund three days later. lexoffice needs all of that expressed as accounting records: a contact for the customer, an invoice or voucher with correctly taxed lines, a credit note for the refund, and posting categories that carry through to the DATEV export your Steuerberater pulls.

The gap between a WordPress shop and a German accounting system is where the work lives. A WooCommerce to lexoffice integration closes it automatically: it reads each relevant order event from WooCommerce, applies your booking logic, deduplicates the customer, and writes a clean record into lexoffice that your finance workflow can rely on without anyone re-keying figures.

What data moves

WooCommerce object / eventBecomes in lexofficeNotes
Paid order (processing / completed)Sales invoice (Rechnung) or voucher (Beleg)Model chosen per your bookkeeping; one record per order
Order billing customerContact (Kontakt / Debitor)Deduplicated on email and VAT ID, not created blindly
Order line itemslexoffice line items with unit price and quantityNet or gross per your taxType convention
Tax linestaxType + taxRatePercentage per line19% / 7% domestic, plus the correct tax subtype cross-border
Shipping lineSeparate line itemShipping is itself taxable and booked on its own position
Fee lines / gateway feesSeparate line or expense voucherKept apart from revenue so the net payout reconciles
Coupon / discountReduced line amountslexoffice has no discount object; the net is applied per line
Refund / partial refundCredit note (salescreditnote / Rechnungskorrektur)Same lines and tax keys as the original, dated to the refund

The exact posting categories, tax handling, and invoice-versus-voucher model are agreed once and encoded in the pipeline. After that, nobody maps an order by hand.

The details that break naive syncs

A directory plugin or a one-off export gets you 80% of the way and leaves the expensive 20% on your desk:

How we build and run it

We treat this as a pipeline, not a plugin. WooCommerce order and refund events are pulled on a schedule (or by webhook), validated, deduplicated against existing lexoffice contacts, transformed into your agreed lexoffice records, and written through the lexoffice Invoices or Vouchers endpoint - with throttling that respects the API rate limit and backs off cleanly on 429.

The pipeline is idempotent: every WooCommerce order carries a stable ID, so a retry or a re-run never creates a second invoice, a duplicate voucher, or a phantom contact. It runs on cloud-native, fully EU-hosted AWS infrastructure, so order and customer data never leaves the EU - which keeps your DPA/AVV and your GDPR obligations clean, and matters given lexoffice is itself a German system.

Then we keep it running. Monitoring, alerting, incident response, and watching for WooCommerce and lexoffice API changes are our responsibility under contract. Your month-end stops depending on a WordPress cron job nobody owns.

When this integration is worth building

If you process a handful of orders a month at a single VAT rate, a directory plugin or even manual entry into lexoffice is genuinely fine, and we will tell you so. The integration earns its place when volume climbs, when you sell across EU borders and need correct tax subtypes, when refunds and multiple payment gateways make reconciliation a monthly chore, or when duplicate contacts and broken invoice numbers are already costing you time your Steuerberater bills back to you. At that point a plugin on your web server is a liability, and a managed, EU-hosted pipeline with a named owner earns its keep.

Frequently asked questions

Can I not just use a WooCommerce lexoffice plugin from the WordPress directory?
For a low-volume shop on a single VAT rate, a plugin is often fine and we will say so. Plugins struggle once you have refunds, mixed tax rates, EU cross-border sales, or several payment gateways, because they run inside WordPress on the same server as your shop and share its uptime, its cron, and its failure modes. When a sync silently stops or double-creates an invoice, nobody is on the hook. The integration moves that logic off your web server into a monitored pipeline that someone actually operates.
Does it create an invoice or a booking voucher in lexoffice?
Whichever fits your bookkeeping. For shops that need a compliant customer invoice per order we create a lexoffice sales invoice (Rechnung) via the Invoices endpoint. For pure bookkeeping, where the shop or the payment provider already issued the document, we post a sales voucher (Beleg) via the Vouchers endpoint so your revenue is booked without generating a duplicate invoice number. We agree which model you need before build, so lexoffice and your DATEV export stay consistent.
How does it handle German and EU VAT correctly?
Each line carries the correct taxType and taxRatePercentage, and cross-border cases get the right tax subtype - intra-community supply for EU B2B with a valid VAT ID, third-country delivery for exports, and vatfree where the Kleinunternehmerregelung under section 19 UStG applies. The destination country and the customer's tax status drive the coding, so what lands in lexoffice is already correct rather than something your Steuerberater has to reclassify.
How are customers matched so I do not get duplicate contacts in lexoffice?
lexoffice has no native upsert, so a naive sync creates a new Kontakt for every order. We match on email and, for business customers, VAT ID against existing lexoffice contacts before deciding to link or create. That keeps one debitor per customer with a clean history instead of hundreds of near-duplicate records that break your receivables view.
Who operates it after go-live?
We do. The pipeline runs on cloud-native, fully EU-hosted infrastructure that we monitor, independent of your WordPress host. If WooCommerce or the lexoffice API changes, that is our problem to fix under contract, not something your finance team discovers at month-end. You get a named owner, alerting, incident response, and an SLA - plus a DPA/AVV so the whole flow stays GDPR-clean.

Need this integration built and permanently operated? Tell us which systems connect and what data has to move. Fixed-price scoping quote within 48 hours.

Request a scoping call