WordPress plugin intelligence profile

Harvify PDF Invoices for WooCommerce

PDF invoices and credit notes for WooCommerce, with numbering your accountant can actually check — and an import that continues your existing numbers.

WP PlugIndex snapshot

Current directory snapshot

Tested up to WordPress 7.1
Current version0.14.13
WordPress coverageTested up to WordPress 7.1
Minimum stackWP 6.0 · PHP 7.4
Directory statusactive
Last directory update25 Oct 20268d ago
Active installationsNewAdoption metric — not a quality score
WordPress.org ratingNo WordPress.org ratings yet
Official packageDirect from WordPress.org

Repository metrics are context, not quality scores. Active installations measure adoption and can strongly reflect a plugin’s age and historical popularity. Ratings, recent updates and “Tested up to” metadata also do not guarantee modern code, error-free operation, security, feature completeness or suitability for a particular site. Why active installs don’t tell the whole story →

WP PlugIndex currently records Harvify PDF Invoices for WooCommerce version 0.14.13 as active, updated 8d ago and tested up to WordPress 7.1.

Overview

About this plugin

Harvify PDF Invoices attaches a PDF invoice to the order emails WooCommerce already

sends, and issues a credit note whenever you refund.

The part that matters is not the PDF. It is the numbering.

Getting started

  • Go to Harvify → PDF Invoices. The Settings screen opens.
  • Under Invoice numbering, set the number format: a prefix such as INV-{year}-

and how many digits the number has.

  • Under Attach to emails, tick the WooCommerce emails that should carry the

invoice. Most shops choose the completed-order email.

  • Fill in Your tax details so they print on every invoice, then click

Save settings.

  • Open Diagnostics to confirm nothing on your server needs attention.
  • Complete an order: the invoice is attached to the email you chose, and the order

screen’s Harvify documents section opens it. Refund the order and a credit note is

issued: it goes out with WooCommerce’s refund email and is listed beside the invoice.

If you are moving from another invoicing plugin, open Import first. It continues

your existing numbers instead of starting again at 1.

Every number is accounted for

  • Numbers are allocated so that two orders placed at the same moment can never

receive the same one. The database itself enforces this, not a lucky read.

  • A number is never reused.
  • A number never silently disappears. If a document fails after its number was

allocated, that number is recorded as void — with the reason and the time —

and stays visible in your numbering audit.

That is a stronger promise than “gapless”, and unlike “gapless” it is one that

survives two customers checking out in the same second. The numbering audit

screen shows you the whole sequence, per period, with every void explained, and

exports it as CSV. It is the screen you show your accountant.

Switching from another invoicing plugin

Most people never move invoicing plugins, because restarting numbering at #1

breaks the sequence their accountant and tax authority expect.

So this one continues your existing numbers. The importer reads your current

plugin — its invoice numbers, its own counter and its settings — shows you a dry run

first — “after import your next invoice will be INV-2026-0004, the same number you

would get today” — and only then writes anything. Your historical numbers are

preserved exactly as they were. Numbers your old plugin issued for orders that have

since been deleted are never issued again. Your number format, yearly restart, the

emails that carry the invoice and your VAT number are carried over, and the old plugin

is never modified, so you can compare the two side by side or back out entirely.

Imports from WooCommerce PDF Invoices & Packing Slips, from WebToffee

(beta), or from a CSV file of order_id,invoice_number,invoice_date — so you

can move from a plugin nobody has mapped, from a spreadsheet, or from a paper book.

If any line of the file cannot be read, nothing at all is imported and every problem

is listed: a half-imported invoice history is worse than none.

The WebToffee route is marked beta because it is newly verified: we checked it

1 by having that plugin issue real invoice numbers and then

importing them, so we know it reads what WebToffee actually stores. Older WebToffee

versions we have not tested. The dry run protects you either way — it shows the

numbers you will end up with before anything is written, and the import can be

rolled back afterwards.

Dual run — try it without your customers seeing anything

Importing your history is one thing; trusting the next real order is another. Turn

on dual run and this plugin produces and numbers every document exactly as it

will in production — and attaches none of them to your customers’ emails. Your old

plugin carries on sending its own, so customers see no change at all, while you get

a side-by-side table of its invoice number and ours for every order placed since you

started.

It never ends on a timer. When the period you chose is up you are simply told;

nothing reaches a customer until you press the button yourself.

What you get

  • PDF invoices, attached to the WooCommerce emails you choose
  • Credit notes on refund — one per refund, on their own separate sequence, sent

with WooCommerce’s refund email and opened from the order screen

  • Prefix, suffix and zero-padding, with {year} and {month} tokens
  • Yearly or monthly restart — and earlier periods are never renumbered
  • Numbering audit — with CSV export
  • Numbers are immutable once issued — an order edit, a status change or a

refund never renumbers a document that has already been issued.

  • VOID tracking — a number is never reused and never silently disappears; a

failure records a VOID with its reason and timestamp.

  • Import your existing numbers — from WooCommerce PDF Invoices & Packing

Slips, WebToffee (beta) or a CSV file — with a dry run, a rollback and a

dual-run mode

  • Multiple tax rates per document, VAT number, reverse-charge note
  • Diagnostics screen — a live test render, memory headroom, storage,

numbering health, the language a given order’s document will be produced in,

and font coverage checked against your own recent orders, each with the fix

stated

  • Fonts for non-Latin invoices — one-click download of the matching Noto

font, or upload your own

  • Bulk generate and bulk ZIP download — straight from the Orders list
  • Customer self-service — your buyers download their own invoice from My

Account

  • WP-CLI — regenerate a document, export the numbering audit, check sequence

status

Pro — the Harvify Pro Bundle

  • Visual template designer — logo, colours, type sizes, page margins, the

order of the blocks on the page, and your own CSS, with a live preview that

is real PDF output rather than an HTML approximation of one. A save is only

accepted if it renders: if the candidate template throws, the save is

refused and the documents your customers receive are left exactly as they

were.

  • More document types — proforma invoices, delivery notes and

dunning (payment reminder) letters, plus packing-slip customisation:

retitle it, drop the SKU column, hide the customer note or the shipping

method, add a footer line of your own. The basic packing slip stays free. The

three new documents are deliberately unnumbered — a quotation that never

becomes a sale must not consume an invoice number, because a number is never

reused and a gap is permanent.

  • Bulk generation at scale, and automation — Pro does not raise the free

bulk limit, it queues the work on Action Scheduler, one order per job, so

nothing renders inside the request and a run across thousands of orders cannot

time out. Plus per-status auto-attach rules — choose which of

WooCommerce’s own emails carry a document for orders in a given status. Rules

are evaluated at send time, so switching one off takes effect on the very next

email rather than after a queue drains.

  • Scheduled accountant export — a weekly, monthly or quarterly package of

the numbering audit CSV and that period’s documents, delivered to an email

address or an FTP server. Consecutive delivery failures pause the

schedule and say why, on the screen and in Diagnostics — because a monthly

export bouncing off a dead mailbox for a year is exactly the sort of thing

nobody notices.

  • Multi-language documents — the language follows the customer, not the

admin. — German, French, Spanish, Italian, Dutch, Portuguese and Polish ship

with the plugin, so documents translate on a shop with nothing else installed;

WPML and Polylang are honoured when present and never required. A language is

used only if it can translate every string on the document: a page reading

“Rechnung” above “Subtotal” is worse than English throughout, so the fallback

is the whole document rather than the missing phrase. The same order produces

the same language from the order screen, from WP-CLI and from the customer’s

own My Account download.

  • Per-document-type sequences and per-country legal blocks — where your

jurisdiction requires sequentially numbered delivery notes, give that type

its own series: it starts at 1 and never draws a number from the invoice

sequence. And attach the legal wording a given billing country requires,

printed in the document’s notice box rather than buried in footer grey.

Harvify Pro Bundle

One subscription unlocks the Pro features of every Harvify plugin. Install only

the tools your store needs.

What we translate, and what we do not

The seven bundled languages cover the wording of the document itself — its

headings, its column titles, its totals and its notices. The country name in the

customer’s address and WooCommerce’s own tax labels come from the WordPress and

WooCommerce language packs, so on a shop that has never installed the German pack

they stay in English however complete our translation is. The Languages screen

tells you which packs this site has. The date is the one thing we handle

ourselves: when a pack is missing it is printed numerically, so it never appears

in the wrong language.

Non-Latin invoices are refused, not mangled

The bundled font covers Latin, Greek and Cyrillic. If an order contains Japanese,

Arabic, Hebrew, Thai or Devanagari characters, most plugins render a document full

of empty boxes and nobody notices until a customer complains.

This one refuses to produce that document, names the script, and offers you the

ttf.

We never email your customers

Invoices reach buyers by being attached to WooCommerce’s own order emails. This

plugin has no path of its own for sending anything to a customer, so your

existing mail setup keeps working exactly as it does, and a delivery problem

stays a mail-configuration question rather than becoming ours.

There is exactly one thing this plugin sends, and it is not to a customer: the

Pro accountant export, which mails your own records to the address you type

in yourself. Nothing about what your customers receive changes.

What this does not claim

We generate invoices containing the fields commonly required for VAT and GST.

We do not claim to make you tax compliant, and you should confirm with your

accountant that the documents meet the requirements in your jurisdiction.

External services

This plugin connects to Freemius, the licensing and update service Harvify uses to

sell and deliver the Pro tier of its plugins.

Nothing is sent to Freemius unless you choose to send it. On activation you are shown

Freemius’s standard opt-in screen. Until you answer it a fresh install makes no

outbound request at all, and if you choose Skip the free tier stays fully usable

and still sends nothing. Data is transmitted only when you take one of these

actions:

  • You click “Allow & Continue” on the Freemius opt-in screen. This sends your

site address, your administrator email address, and your WordPress, PHP and active

plugin/theme details, so Harvify can provide support and know which environments to

test against. Skipping that screen sends nothing and leaves the plugin working

normally.

  • You enter a Pro Bundle licence key. This sends the key together with your site

address so the licence can be activated for that site. While a licence is active the

site also re-checks periodically that it is still valid and whether a Pro update is

available.

Service provided by Freemius, Inc. com/

com/terms/

com/privacy/

Font downloads (optional, one click per script)

Invoices render in Latin scripts using fonts bundled with the plugin. If you need

Japanese, Arabic, Hebrew, Thai or Devanagari, the Fonts screen offers to download the

matching Noto font, and that download runs only when you click install for that

specific script.

com for the font file itself. Like every

request WordPress makes, it carries WordPress’s standard User-Agent header, which

names your WordPress version and your site address, and GitHub sees your server’s

IP address. Nothing about your orders or your customers is included.

com/notofonts

com/en/site-policy/github-terms/github-terms-of-service

com/en/site-policy/privacy-policies/github-general-privacy-statement

Accountant export

The Pro accountant export can upload documents to an FTP server that you configure.

It is part of the Pro tier and is not included in this free download.

Credits

This plugin bundles the following open-source libraries. Each ships with its own

licence file inside the plugin’s vendor directory.

  • Dompdf (LGPL-2.1) — HTML to PDF rendering. https://github.com/dompdf/dompdf
  • php-font-lib (LGPL-2.1-or-later) and php-svg-lib (LGPL-3.0-or-later),

by the Dompdf project

  • Masterminds HTML5 (MIT) — HTML parsing
  • Sabberworm PHP CSS Parser (MIT) — CSS parsing
  • DejaVu Sans — bundled font, released under a permissive

Bitstream Vera / Arev derived licence

Noto fonts, offered as an optional one-click download, are published by Google

1 and are downloaded to your own server. They are

not bundled with this plugin.

WordPress.org metadata

Plugin tags

Topics listed for this plugin in the WordPress.org directory.

  • credit note
  • packing slip
  • invoice
  • pdf
  • woocommerce
Compatibility & maintenance

Compatibility & maintenance

Tested with WP 7.1

Marked as tested with the current WordPress 7.1 release.

Current WordPress releaseWordPress 7.1
WordPress.org Tested up to7.1
Minimum requirementsWordPress 6.0 · PHP 7.4
Update activity25 Oct 20268d ago

“Tested up to” is directory metadata supplied by the plugin author. WP PlugIndex does not turn an older declaration into a claim that the plugin is incompatible.

Changes recorded by WP PlugIndex

Recent tracked changes

Version0.14.110.14.13
WordPress compatibility7.1.27.1.3
Tracking & source

WP PlugIndex tracks public WordPress.org directory metadata and records selected version, compatibility and availability changes as they are detected.

Plugin watchlist

Watch this plugin

Sign in to your WP PlugIndex account or create a free account. Free accounts can watch up to 5 plugins and see what changed.

Watch limit

Watchlist limit reached

You have reached your current active watch limit.