Description
This plugin connects your WooCommerce store to the Pennylane accounting platform. Invoices are
issued by Pennylane, which keeps legal numbering and archiving where they belong — the plugin
never generates an invoice itself.
Create a compliant, legally numbered invoice for any order with a single click: the customer, the
invoice lines, the VAT treatment and the legal mentions are all built for you.
Features:
- One-click invoicing — a “Create invoice” button on every WooCommerce order. The invoice is
created as a draft in Pennylane, then finalized (legal numbering) automatically, and the
Factur-X PDF is retrievable from the order screen. - Customer sync — companies and individuals are created in Pennylane with their billing
details, and reused on the next order (no duplicates). - Full VAT and OSS mapping — French rates (20 %, 10 %, 5.5 %, 2.1 %), intra-EU B2B reverse
charge, intra-EU B2C (OSS), exports outside the EU. The right legal mention is written on the
invoice automatically. - EU VAT number at checkout — an optional VAT number field for business customers (classic
checkout and Checkout Blocks), format-checked, with VIES validation (the official European
Commission service) to secure the exemption. - B2B VAT exemption at checkout (optional) — charge no VAT to EU businesses with a validated
VAT number: the customer pays the net amount and the invoice carries the legal intra-Community
exemption mention. Off by default (it changes what customers pay, and intra-Community supplies
require filing the EC Sales List — check with your accountant). Whatever you choose, the
invoice always follows the money: if VAT was collected, the invoice is issued with that VAT. - OSS awareness — tell the plugin whether the store is registered for the EU One-Stop Shop:
under the €10,000 threshold, EU consumers are invoiced with French VAT codes; OSS-registered
stores get destination-country VAT codes. - Company ID (SIRET) at checkout with auto-fill — French business customers type their SIRET
and the company name and address fill in automatically (public data from data.gouv.fr). - Invoice PDF in My Account — customers can download their invoice from their account,
through a secure endpoint. - Test mode (dry run) — validate your whole configuration without sending anything to
Pennylane: payloads are built and written to the logs, nothing else. - Diagnostics tab — token check, live API permission check, decimals check, logs shortcut:
see at a glance why something would not work. - HPOS and Checkout Blocks compatible — works with the classic checkout and the block-based
checkout, with or without High-Performance Order Storage.
The free plugin is fully functional on its own and is not time-limited.
Need automation? The Pro version adds automatic invoicing on
status change, credit notes on refunds, payment reconciliation, invoice e-mailing to the customer
(your template or Pennylane’s), product mapping, bulk actions with ZIP export, backfill of past
orders, integrity checks, weekly summary, failure alerts and WP-CLI commands.
This plugin is not affiliated with, nor endorsed by, Pennylane. “Pennylane” is a trademark of its
respective owner and is used here only to describe compatibility.
External services
This plugin communicates with the following third-party services. Nothing is sent without your
configuration or the customer’s own input, and none of these calls carry marketing or tracking
data:
- Pennylane API (https://app.pennylane.com) — the purpose of the plugin. When you create an
invoice, the order data (customer billing details, invoice lines, totals, VAT) is sent to your
own Pennylane account using the API token you configured. Nothing is sent before a token is
configured and an invoice is triggered.
Terms of service: https://www.pennylane.com/fr/conditions-generales
Privacy policy: https://www.pennylane.com/fr/legal/privacy - VIES (European Commission, https://ec.europa.eu) — optional, off by default. When enabled,
the VAT number typed by a business customer at checkout (and only that number) is checked
against the European Commission’s official VAT validation service. Disabled by default: it
only runs after you switch it on in WooCommerce > Pennylane > Checkout.
Terms of use: https://ec.europa.eu/taxation_customs/vies/
Privacy policy: https://commission.europa.eu/privacy-policy_en - Recherche d’entreprises (https://recherche-entreprises.api.gouv.fr) — optional, off by
default. When enabled, the company ID (SIRET) typed by the customer (and only that) is sent to
the French government’s public company directory to retrieve the company name and address.
Disabled by default: it only runs after you switch it on in WooCommerce > Pennylane > Checkout.
Terms of use: https://www.data.gouv.fr/pages/legal/cgu/
Service documentation: https://api.gouv.fr/les-api/api-recherche-entreprises
Screenshots






Installation
- Install and activate the plugin (WooCommerce must be active).
- Go to WooCommerce Pennylane Connection and paste your Pennylane API token (in Pennylane: Settings Connectivity Developers). Required permissions: customers read/write, customer invoices read/write, products read.
- Click “Test connection”: all three permissions must be green.
- Open the Invoicing tab and review the settings. Enable test mode and create a test invoice from any order: the full payload is written to the logs (WooCommerce Status Logs, source “pennylane”) without anything being sent to your accounting.
- Happy with the payloads? Turn test mode off and invoice for real.
FAQ
-
Is this an official Pennylane plugin?
-
No. It is an independent integration built on the public Pennylane API (v2). It is not
affiliated with, endorsed by or sponsored by Pennylane. -
Do I need a Pennylane account?
-
Yes. The plugin sends invoices to your Pennylane account through the official API. Any
Pennylane plan that includes API access works. -
Does the plugin generate the invoices itself?
-
No. Invoices are created and numbered by Pennylane through its API. The plugin sends the order
data and retrieves the resulting document, so legal numbering stays in your accounting software. -
Which VAT cases are handled?
-
Domestic French sales at any legal rate, intra-EU B2B with a validated VAT number
(intra-Community supply exemption, Article 138 of Directive 2006/112/EC), intra-EU B2C (OSS —
the customer country’s rate as configured in WooCommerce), and exports outside the EU
(article 262 I of the French tax code). The matching legal mention is written on the invoice. -
What happens if VIES is down?
-
Nothing blocks. The order goes through and the VAT number is re-checked at invoicing time; a
note is added to the order so you can verify manually. If the B2B exemption option is on and
VIES cannot confirm the number at checkout, VAT is charged — and the invoice then follows what
was actually collected. -
Can EU business customers buy without VAT?
-
Yes, as an option (off by default): enable “B2B checkout — VAT exemption” in the Invoicing tab.
With a validated EU VAT number, the customer pays the net amount and the invoice carries the
intra-Community exemption mention (Article 138 of Directive 2006/112/EC). Selling VAT-free
intra-Community supplies requires filing the EC Sales List — check with your accountant first. -
Is test mode safe on a live store?
-
Yes. With test mode enabled, no write request reaches Pennylane: the API client blocks them
centrally and payloads are only written to the WooCommerce logs so you can review them before
going live. -
Where are the logs?
-
WooCommerce Status Logs, source “pennylane”. Every API error is logged with the full
response, and every order keeps its own note trail. -
Can invoices be created automatically?
-
Automatic invoicing on status change — plus credit notes, reconciliation, customer e-mailing,
bulk actions and backfill — is part of the Pro version.
Reviews
There are no reviews for this plugin.
Contributors & Developers
“UKTO Invoice Sync for Pennylane” is open source software. The following people have contributed to this plugin.
ContributorsTranslate “UKTO Invoice Sync for Pennylane” into your language.
Interested in development?
Browse the code, check out the SVN repository, or subscribe to the development log by RSS.
Changelog
1.7.1
- Links to the plugin site now open in the language of your WordPress admin, and land on the
edition comparison rather than the top of the page.
1.7.0
- First release on WordPress.org.
- Renamed to “UKTO Invoice Sync for Pennylane”; option and hook prefixes moved to
isfp_, with
a one-time migration so existing settings are preserved. - VIES validation and company-ID auto-fill are now off by default: nothing is sent to a third
party until you enable it. - Invoice locking now relies on a database uniqueness constraint, so two simultaneous requests
can no longer create two numbered invoices. - VAT numbers are format-checked before any cache write or network call.
1.6.0
- Submitted for review, never publicly released.
- One-click invoicing (draft + finalization by Pennylane) from the order screen.
- Customer sync (companies and individuals) without duplicates.
- Full VAT mapping: FR rates, intra-EU B2B reverse charge, OSS, exports — with automatic legal mentions.
- EU VAT number checkout field with VIES validation.
- Optional B2B VAT exemption at checkout (validated EU VAT number net price + legal mention).
- OSS setting: French VAT codes under the €10,000 threshold, destination codes when OSS-registered.
- Company ID (SIRET) checkout field with company auto-fill (data.gouv.fr).
- Invoice PDF download in My Account.
- Test mode (dry run), diagnostics tab, detailed logging.
- HPOS and Checkout Blocks compatibility.
- Before this public release, the plugin went through six private iterations (1.0 1.5) on a
production pilot store, including a full code review with every confirmed finding fixed.
