Description
WebVortex Invoices gives you full invoice management inside your WordPress admin:
- Client management with international address support (country dropdown)
- Product/service catalog with per-item VAT rates and multi-currency pricing
- Exchange rates — choose from 26 built-in currencies for your invoices
- Invoice planning — recurring invoices with six billing intervals: annual, bi-annual, quarterly, monthly, weekly, or one-time
- Manual invoice creation — multiple line items, per-item VAT, currency override
- PDF generation — built-in renderer, no external libraries required
- Automatic invoice generation — recurring plannings create draft invoices on schedule via WP-Cron; you review and send them
- HTML email templates — rich template editor with merge tags
- Payment reminders — a built-in three-stage reminder flow (first reminder, second reminder, final notice); the dashboard shows the moment one is ready, and you send it with a single click
- Customisable — default pay days, default currency, from name/email, banner image
Recurring invoices in six billing intervals, with a built-in three-stage payment reminder flow that tells you exactly when to follow up — no subscription, no transaction fees.
External services
This plugin’s premium licensing is powered by Freemius, a third-party service that handles licence activation, upgrades, and renewals.
What is sent and when: when the plugin connects (on activation, or when you choose to opt in), basic site data is shared with Freemius — site URL, WordPress/PHP version, plugin version, and an anonymised usage identifier — so that licence status can be verified and update/upgrade notices can be shown. If you purchase a premium licence, your licence key and the activating site’s URL are also sent to validate and track that activation. No client, invoice, or financial data created within this plugin (clients, invoices, catalog items, exchange rates) is ever sent to Freemius or any other external service.
This connection is only used for licensing. It does not affect the plugin’s core invoicing functionality, which works fully offline/self-hosted.
Freemius’s terms of service: https://freemius.com/terms/
Freemius’s privacy policy: https://freemius.com/privacy/
Screenshots








Installation
- Upload the plugin folder to
/wp-content/plugins/ - Activate the plugin through the Plugins menu in WordPress
- Go to Invoices Settings to configure your defaults
- Set your default currency under Invoices Settings
- Add clients, set up your catalog, and create your first planning
FAQ
-
Does this require any external libraries for PDF?
-
No. The PDF renderer is built in and has no dependencies.
-
Can I bill in currencies other than EUR?
-
Yes. Select any of the 26 built-in currencies as your default under Invoices Settings. All invoices will use that currency.
-
My WP-Cron doesn’t fire reliably. What can I do?
-
Set up a real server-level cron job (via Plesk, cPanel, or your host’s scheduler) that calls
wp-cron.phpdirectly. This is the most reliable solution regardless of which plugin you use. -
Can I override pay days per invoice?
-
The default payment term is set in Settings and applies to all invoices.
Reviews
There are no reviews for this plugin.
Contributors & Developers
“WebVortex Invoices” is open source software. The following people have contributed to this plugin.
ContributorsTranslate “WebVortex Invoices” into your language.
Interested in development?
Browse the code, check out the SVN repository, or subscribe to the development log by RSS.
Changelog
2.6.6
- Added: a Default VAT rate (%)” setting. New invoice lines, planning lines and catalog items start with it. Until now every line started at 21%, which could only be changed line by line. The setting is 21 on every existing site, so nothing changes until you change it.
- Added: a VAT rate per catalog item. The catalog form has a VAT rate (%)” field and the list shows it. Prices are calculated with the item’s own rate (a rate of 0 is respected). Picking an item on an invoice or planning line now sets the line’s VAT percentage as well as its prices. Under the KOR exemption the line stays at 0%. Existing catalog items get 21%, the rate their prices were calculated with. Existing invoices, plannings and catalog items are not changed.
- Changed: a planning line without VAT (KOR, or a 0% rate) now generates its invoice with the same single-price rule as the invoice form. A planning line saved earlier with a 21% catalog price (6.20 excl. / 7.50 incl.) used to generate at 6.20 under KOR and now generates at 7.50, as the form does.
- Changed: the Payment link” field no longer says Mollie. It accepts a link from any provider (Mollie, Stripe, PayPal and so on); the help text and the built-in documentation say so.
- Added: Dutch translations for the new settings and the payment link help.
- Fixed: the catalog price calculation treated an empty or zero VAT rate as 21%.
2.6.5.4
- Added: a {{payment_link}} tag for the invoice email and the three reminder emails. It is replaced by the payment link of the invoice (the Payment link” field, or the link created by the Payment Bridge add-on). In the editor, make a link and use {{payment_link}} as the web address, or put the tag on a line of its own. If an invoice has no payment link, the paragraph or line that holds the tag is left out, so the client never gets a dangling Pay online:”. Reminders use the link as it is at the moment they are sent, so a link added after the invoice was sent is included.
- Changed: the default KOR exemption text on the PDF is now English (VAT exempt under the small business scheme (KOR), article 25 of the Dutch VAT Act 1968”). A text you have saved in Settings is not affected. If you left the field empty and your invoices are in Dutch, enter your own wording in Settings, VAT Exemption (KOR).
- Fixed: on the invoice PDF the Unit price column used a smaller font (7 pt) than the other columns (8 pt). It now uses the same size.
- Fixed: a line in another currency was shown as $21.00 (€ 18.76)” while a line in the invoice currency was shown with a space (€ 7.50”). Both now use the same format with a space, for example $ 21.00 (€ 18.76)”. The Unit price column is slightly wider, and a very long amount shrinks a little instead of cutting off the converted value.
2.6.5.3
- Fixed: a line without VAT could carry two different prices. Choosing a catalog item that has a VAT rate (for example 6.20 excl. / 7.50 incl. at 21%) on an invoice with the KOR exemption active filled both prices as they were, although the VAT field was locked at 0%. The form total then counted the excl. price while the saved invoice and the PDF total counted the incl. price, so the lines did not add up to the total. At 0% VAT both prices are now one amount. Under KOR the VAT-inclusive catalog price is used; on a zero-rated line outside KOR the excl. price is used. This is applied in the invoice form, in the server on save (invoices and plannings) through one shared helper, so form, database and PDF cannot disagree.
- Added: deleting an invoice that is a draft, was never sent and holds the most recently issued invoice number now hands that number back, so the next invoice does not skip a number. A number is never handed back for a sent or paid invoice, for a number that is not the latest one, or across years. The check and the counter update are a single conditional database statement.
2.6.5.2
- Fixed: when Invoices Pro let you price a line in another currency than the invoice (for example a USD line on a EUR invoice), saving the invoice silently stored that line as if it were in the invoice currency, without converting it. The USD 21.00 line came out as EUR 21.00 and the invoice total was too high. Saving now keeps each line’s own currency, converts it to the invoice currency once at that moment, and stores the original amount, the converted amount and the rate used on the line. A later change in exchange rates never alters a saved invoice; re-saving a draft uses the rate of that moment, and a sent invoice stays locked.
- Fixed: invoices generated from a planning stored the line currency as the invoice currency while keeping the original amount, so a line planned in another currency lost its currency on the generated invoice. The generated line now keeps the currency it was planned in.
- Fixed: without an add-on that supplies per-line currencies, lines now default to the invoice’s own currency instead of the site default currency.
- Changed: the Catalog help text no longer says a line never keeps its own currency, which is not true with Invoices Pro.
2.6.5.1
- Fixed: the line-item table in the invoice PDF had badly proportioned columns. The Service column was so narrow that a longer service name ran over the quantity, while the Unit price and Total columns were far wider than their content. Column widths are rebalanced, the Unit price and Total headings are now right-aligned so they sit directly above their amounts, and text that is too long for its column is shortened with an ellipsis instead of overwriting the next column.
2.6.5
- Changed: the 5-site/25-site price line under each product’s single-site price now uses a light blue instead of grey, so it reads as more options here” instead of fine print.
2.6.4
- Changed: the From …” price lines in the Pro features and More WebVortex tools tabs now show the actual 5-site and 25-site prices (confirmed at 3x and 10x the single-site price) alongside the single-site price, instead of only noting that those tiers exist.
2.6.3
- Changed: the in-plugin documentation pages (Pro features and More WebVortex tools) quoted every add-on and the WebVortex Suite bundle at one flat price. Now that licences come in single-site, 5-site and 25-site tiers, each price line is now shown as From …” with a note that the 5-site and 25-site tiers exist, instead of a single number that only ever matched the single-site price.
2.6.2
- Fixed: the plain HTML tables used by the in-plugin documentation tabs (Help & Documentation every tab) had no padding or borders defined anywhere in the stylesheet, so cells sat edge to edge with no breathing room. Same root cause as the line-item table collision fixed in Invoices Pro 1.0.44 (a table with no CSS behind it), here showing as cramped rather than overlapping since a browser renders it, not Dompdf. Added proper cell padding and borders, scoped to the documentation pages only.
2.6.1
- Fixed: sending a dunning reminder checked whether it was due, then sent the email, then recorded that it had been sent — three separate steps with no protection between them, so an overlapping automatic run and a manual Remind” click could in rare cases send the same reminder to a client twice. The stage change is now claimed atomically before anything is emailed, so only one of two overlapping attempts can ever proceed.
2.6.0
- Changed: automatically sending payment reminders (the daily task escalating a sent invoice through its three dunning stages by itself) is now a premium feature, matching what the documentation already said and what Pro’s Automatic sending” of newly generated invoices already worked like. The free plugin still tracks all three stages exactly as before and computes the moment each one is ready — you now send it yourself, with one click.
- Added: a Remind” button now works at every dunning stage (previously only the first); sending the second reminder or final notice by hand is no longer limited to the automatic task.
- Added: a Reminders ready to send” dashboard card, so it’s never silently unclear that one is waiting on you.
2.5.10
- Changed: the documentation no longer describes the daily task as sending payment reminders.
2.5.9
- Fixed: the documentation still described a catalog item’s currency as something that may differ from the invoice currency”, left over from before 2.5.5 made every invoice use exactly one currency throughout. The text now describes the field as only the item’s starting price.
2.5.8
- Fixed: after 2.5.7 gave each stored PDF an unguessable filename, that same filename was shown to clients as the attachment name on invoice and reminder emails. Email attachments now always show a clean invoice-.pdf” name, independent of the randomized filename used for storage. The admin download button already showed the clean name and was not affected.
2.5.7
- Security: invoice PDFs were stored under a predictable, sequential filename (matching the invoice number) inside the public uploads directory. The admin-side download link was already protected by a nonce and a capability check, but the file itself was still directly reachable at its exact URL with no authentication at all, on any server configuration where .htaccess rules are consulted. The stored filename now includes a random, unguessable token, and the storage directory is denied to direct web access outright rather than only having directory listing disabled.
- Security: an AJAX endpoint for reading a catalog item’s details checked its nonce but not the user’s capability, so any logged-in user of any role (not only administrators) could call it. It now requires the same access level as every other action in this plugin.
- Hardened: the sender name, sender address and recipient address used when sending an email now have any stray line break stripped immediately before the message headers are built, in addition to the existing sanitization applied when those values are saved.
2.5.6
- Fixed: an invoice generated automatically from a recurring planning always used whatever VAT rate was stored on the planning when it was last saved, ignoring the KOR VAT-exemption setting at the time the invoice was actually generated. The exemption is now re-evaluated fresh on every automatic generation, exactly as it already was for invoices created by hand.
- Fixed: the invoice numbering counter was read and written as two separate steps, so two invoices saved at nearly the same moment could in rare cases receive the same invoice number. The counter is now incremented atomically.
- Changed: removed two stray entries from the internal list of this plugin’s own options (one was a filter name that was never actually stored as an option; the other did not correspond to any setting). No user-facing effect.
2.5.5
- Fixed: an invoice line could keep a different currency than the invoice itself once the invoice’s currency was changed after lines were already added. Every line now always uses the invoice’s own currency; this is enforced when saving, not only in the browser.
- Fixed: an invoice generated automatically from a recurring planning always used the site’s default currency, ignoring the currency configured on that specific planning.
2.5.4
- Added: a Dashboard as the plugin’s new landing page, showing the open (unpaid) amount, the overdue amount, invoiced-this-month against last month, invoice counts by status, and your active recurring plannings. Existing menu items (Invoices, Invoice Planning, Clients, Catalog, Settings, Documentation) are unchanged, and everything the Invoices page could already do still works exactly as before.
- Changed: the plugin’s top-level admin menu slug is now
wvinv-dashboard(previouslywvinv-generated). The Invoices list itself keeps its ownwvinv-generatedpage and every existing link to it.
2.5.3
- Changed: the built-in documentation page is now written in English, so it matches the rest of the plugin interface. The Dutch text is moving to translate.wordpress.org, where it will be delivered to Dutch sites as a regular translation.
- Fixed: the built-in documentation still described the Payment Bridge add-on as running on WooCommerce. It uses Mollie Payment Links directly, and the text now says so.
2.5.2
- Fixed: a fresh installation created the planning table without the billing_interval and last_generated_date columns, because activation recorded the current version and the schema migrations were then skipped. Both columns are now part of the table definition, and activation runs the migrations instead of assuming the schema is current.
- Changed: the legacy prefix migration and the uninstall cleanup now work from an explicit list of this plugin’s own option names. Neither one uses a wildcard on the options table any more, so options belonging to other plugins can never be touched.
2.5.1
- Changed: all functions, classes, constants, options, transients, hooks, nonce actions, menu slugs, script handles and CSS classes now use the unique
wvinv_/WVINV_prefix, and thewv_invoice_*actions are nowwvinv_invoice_*. Existing sites migrate automatically on upgrade: options are renamed and the daily cron event is re-registered under its new name. No invoice data is touched. Add-ons must be updated to the matching release. - Changed: extension hooks receive a recursively sanitized copy of the request data instead of the raw $_POST, and any value a callback returns is sanitized again before it is written to the database.
- Changed: generated PDFs are stored in uploads/webvortex-invoices/ instead of uploads/wv-invoices/. Existing PDFs keep working from their stored path.
2.4.4
- Fixed: new Invoice Planning entries were never actually written to the database. The wvi_planned_invoices table was missing the invoice_currency column that handle_post() has saved since multi-currency planning shipped, so every insert/update silently failed on the unknown column — the form still redirected to the Planning created/saved” notice, masking the failure. Added the missing column (with automatic migration for existing sites) and handle_post() now shows the actual database error and keeps your entered data on screen instead of falsely reporting success.
2.4.3
- Added: a way to actually set the payment link on a Sent invoice. 2.4.2 added a way to view an existing link once it’s there, but not to add or change one — a Sent invoice can’t be opened for full editing (the amount is locked), so there was still no way at all to attach a link to an invoice that never got one automatically, e.g. after a temporary Payment Bridge/Mollie failure. New Add payment link” / Change link” action opens a minimal form that only ever writes payment_link_url, with its own nonce, completely separate from the locked invoice-edit form.
2.4.2
- Added: a Pay link” button in the invoice list actions whenever payment_link_url is set, since Sent/Paid invoices can no longer be opened for editing — this is otherwise the only way to find a payment link after the fact (manually set, or generated by the Payment Bridge add-on).
2.4.1
- Added: wvinv_invoice_sent action, fired the moment an invoice is marked Sent (both manual sends and invoices sent from planning). Lets extensions act at the exact point an invoice’s amount becomes final and immutable — used by Payment Bridge to create a payment link at that moment.
2.4.0
- Added: an optional Payment link (Mollie) field on each invoice. Paste a Mollie payment link created for the exact invoice amount, and the WebVortex Document Portal shows a Pay Now button linking to it for as long as the invoice is unpaid. Works standalone, no Payment Bridge add-on or payment provider integration required.
2.3.0
- Added: VAT Exemption (KOR) setting for businesses using the Dutch kleineondernemersregeling. When active, VAT is forced to 0% on every new invoice and planning line (server-enforced, not just hidden in the UI), and a configurable exemption text is printed on the PDF in place of the VAT breakdown. Existing invoices and planning lines are unaffected.
2.2.6
- Fixed: a manually-clicked Remind” action could re-send a payment reminder that the daily dunning cron had already sent (e.g. from a page loaded before that day’s automatic run), resulting in duplicate reminder emails to the client. The reminder action now re-checks server-side whether the invoice’s current reminder is still within its waiting period before sending anything.
- Improved: the invoice list’s Reminder column now shows which dunning stage was actually sent (1st reminder / 2nd reminder / final notice) with its date, instead of a single generic Sent” label.
2.2.5
- Docs: added final pricing to the Pro Features and More WebVortex Tools tabs (monthly/yearly/lifetime for Pro, Quoting, Document Portal + AFM, and Payment Bridge), plus a new WebVortex Suite bundle promo.
2.2.4
- Docs: translated the Documentation page to Dutch, consistent with the rest of the admin UI and the Document Portal client area.
Older releases are not listed here to keep this section within the readme size limit.
