Descripción
Shopproof helps WooCommerce shops that sell across EU borders keep track of consumer rules for Austria, Germany, France, Italy and the Netherlands, plus the rules that apply EU-wide.
What this version does:
- Adds a WooCommerce > Shopproof page in tabs (Overview, Withdrawal button, Returns, Product safety, Registration numbers, Rules). The Overview tab opens first, with a short setup checklist and one status card per feature that links to where you fix it. A small «Set up Shopproof» notice on the Plugins screen and the dashboard reminds you until setup is done, and you can hide it.
- «Why is this needed?» fold-outs on the Withdrawal button and Product safety tabs and at the guarantee notice name the law, the date it applies from and link to the official text.
- Lists the rules Shopproof tracks for each region on the Rules tab, with the version of the rules list in use.
- Ships with the rules list, so it works without contacting any server. You can download newer lists when you choose, by hand or once a day.
- Keeps the copy you have if a download fails, so the page never goes blank.
- Shows only rules that have passed our review. Rules still being checked are left out.
- Adds a withdrawal button: a page with an accessible withdrawal form (one click creates it), and a «withdraw from contract» link in the site footer, the customer account, order details and order emails.
- One-tap withdrawal: the link in order emails and on the customer’s order page is signed for that order, so the form opens with name, email, order number and date already filled in. The customer checks them and confirms.
- The order number is optional: without one, the withdrawal is matched to the customer’s latest order for that email address, and both emails say so.
- Checks where the withdrawal link appears: the Shopproof page shows your own shop pages (home, a product, shop, cart, account, withdrawal page) as shoppers see them, at desktop and phone width, with the link outlined. It checks that the link is there and visible, that nothing covers it, that its text contrast meets WCAG 2.2 AA, that nothing floats over your theme’s content, and that no second withdrawal button shows. It runs in your browser on your own pages. Nothing leaves your site; only the counts of pages that passed or need a look are saved, for the Overview tab.
- Saves each withdrawal with its date and time, sends the customer an acknowledgement by email, sends you a copy, and adds a note to the matching order. If the acknowledgement cannot be sent, the withdrawal says so with a button to send it again, and the customer’s confirmation on the page lists what they sent, to save or print.
- The withdrawal emails are WooCommerce emails: edit their subject, heading, intro and closing text under WooCommerce > Settings > Emails. The withdrawal details, date, time and reference are always included. Two optional emails tell the customer when you set a withdrawal to «Return arrived» or «Refund sent», once each.
- Withdrawal options: a longer withdrawal period than 14 days, a contact email for withdrawals, the footer link on every page or only on shop pages, the My Account link on or off, a required order number or order date, an optional or required «Additional information» field, and product types or categories you exclude from withdrawal (for example made-to-order goods), with your own explanation.
- Choose the words on the withdrawal link and the confirm button: Automatic (the country’s legal wording, the default), another reviewed wording, or your own text, which is used only after you tick «I understand» under a warning that quotes the legal wording.
- Lets customers tick the items they send back, with each product’s photo, once they enter their order number and email address. The list comes from your own shop, shows only names, quantities and photos, and the form still works with a text field when the order is not found.
- Gives each customer a status page, linked from the acknowledgement email, that shows when the withdrawal was received, when the return arrived and when the refund was sent. You move the status on the withdrawal’s screen; a WooCommerce refund of the whole matched order sets «Refund sent» by itself.
- Lists received withdrawals under WooCommerce > Withdrawals, and includes them in the WordPress personal data export and erase tools.
- Shows a deadline clock on every withdrawal: whether it arrived inside the withdrawal window (14 days, or the longer period your shop gave when it arrived), and the date the refund is due, with a reminder above the list when a refund is due within three days or overdue. It counts from the delivery date you enter, or from the day the order was marked complete, and reads refunds from the WooCommerce order: a refund of part of the order shows as «Partly refunded, check» and keeps the reminder running. Technical help, not legal advice.
- Connects to your returns tool, for example Sendcloud, Returnless, 8returns, AfterShip or ReturnGO: add your returns portal link to the customer’s acknowledgement email, and send each withdrawal to a webhook address you choose, signed with a secret, so your returns tool or Zapier, Make or n8n can create the return.
- Shows the button label in the customer’s language for Austria, Germany, France, Italy and the Netherlands.
- Adds product safety details (EU General Product Safety Regulation): enter the manufacturer and the EU responsible person once for the shop, change them per product or for many products at once (bulk edit and CSV import), add identifiers and warnings, and show them on the product page: by default as one line near the Add to cart button that opens to the full details, or in a «Product safety» tab. Products without details show nothing, and there is no «Powered by» credit. Headings follow the page language for English, German, French, Italian and Dutch.
- Shows hazard labelling for hazardous chemicals sold online (CLP Regulation, Article 48a): tick the hazard pictograms, choose the signal word and enter the hazard and precautionary statement codes from the label. The product page shows the pictograms and the official statement texts in the shopper’s language (English, German, French, Italian or Dutch), always visible. The pictograms are served from your own site.
- Shows the official EU legal guarantee notice (Regulation (EU) 2025/1960) on product pages when you turn it on, unedited, in English, German, French, Italian or Dutch, with a text version for screen readers. The images ship with the plugin, so no outside service is contacted. Shortcode: [shopproof_guarantee_notice].
- Shows the EU durability label «GARAN» (Regulation (EU) 2025/1960) before the add to cart button on products whose producer offers a free durability guarantee of more than two years: enter the years, brand and model identifier in the product’s «Durability label» panel. The official label is shown with your values, in full or as a small strip that opens the full label. The images and fonts ship with the plugin. Shortcode: [shopproof_durability_label].
- Shows your registration numbers (WEEE, batteries, packaging, the French IDU, textiles or your own label) and how customers return old batteries and electrical devices, in English, German, French, Italian or Dutch: on product pages (all, or only products you mark as electrical equipment or with batteries), as a line in the footer, or anywhere with the [shopproof_registrations] shortcode. You enter your own numbers; Shopproof checks no registers.
- Keeps a proof log under WooCommerce > Proof log: a daily, dated record of what your withdrawal button, guarantee notice, product safety details and registration numbers showed, plus every withdrawal received. Each entry is linked to the one before by a hash, so a later change to any entry shows up. Check the chain and download the full log as CSV at any time. The log stays in your own database; no outside service is contacted.
- Works with WooCommerce order storage (HPOS) and the block cart and checkout.
- Removes its settings when you delete the plugin. Withdrawal records, the proof log, product safety details and durability label details are kept, because you may need them; add define( ‘SHOPPROOF_REMOVE_ALL_DATA’, true ); to wp-config.php before deleting to remove them too.
Shopproof gives technical help. It is not legal advice.
Everything in this plugin is free and stays free: no locked features, no trial periods and no limits on products. An optional paid add-on, Shopproof Pro, is sold separately at https://shopproof.app/pro/. It adds researched country rules, emails when a rule changes and outside proof of your log. This plugin works fully without it.
External services
Shopproof works without contacting any server. It ships with a copy of the Shopproof rules list, a JSON data file listing the EU and national consumer rules it shows (no code is downloaded or run). Because these rules change, you can choose to download newer copies of the list from the Shopproof rules service, run by Apex Point Consulting GmbH, the makers of this plugin. No account is needed.
- When: only after you ask for it under WooCommerce > Shopproof > Rule updates, either by pressing «Check for rule updates now» or by turning on «Check for rule updates automatically once a day». Nothing is downloaded when you install or activate the plugin, and automatic updates are off until you turn them on.
- What is sent: a plain HTTPS request for the file. No shop data, customer data or personal data is sent. Like any web request, your server’s IP address is visible to the host.
- Where: https://d3jn3nfc6dj1sm.cloudfront.net/rules/v1/rules.json, the Shopproof rules service, served through Amazon CloudFront.
- Privacy policy: https://shopproof.app/privacy
- Terms: https://shopproof.app/terms
If you enter a webhook address under WooCommerce > Shopproof > Returns, your shop sends each withdrawal (customer name and email, order number, order date, items, country, language, date and time, and the withdrawal reference) to that address when it arrives. You choose the address, for example your returns tool or an automation service such as Zapier, Make or n8n; that service’s own terms and privacy policy apply, so name it in your privacy policy. Nothing is sent to Shopproof, and nothing is sent while the field is empty.
Capturas






Instalación
- Install and activate WooCommerce.
- Install and activate Shopproof.
- Open WooCommerce > Shopproof.
FAQ
-
Open WooCommerce > Shopproof and press «Create the withdrawal page». You can also place the form on any page with the [shopproof_withdrawal_form] shortcode, and a link with [shopproof_withdraw_link].
-
Where do I enter product safety details?
-
Shop-wide defaults are under WooCommerce > Shopproof > Product safety. Per product, open the product editor and use the «Product safety» panel. Under WooCommerce > Shopproof > Product safety you also choose where the block goes: one line near the Add to cart button (default) or a «Product safety» tab. You can also place the details anywhere with the [shopproof_product_safety] shortcode; add layout=»compact» for the one-line version.
For many products at once, select them in Products, choose Edit under Bulk actions and fill in the Product safety fields; empty fields change nothing. You can also use WooCommerce’s product CSV export and import: the file has a column for each product safety field.
-
Where do I enter my registration numbers?
-
Under WooCommerce > Shopproof > Registration numbers. Choose the kind of registration and its country, enter the number, and tick whether you sell batteries or electrical equipment to show the take-back information. Mark products on the General tab of the product editor with «Electrical equipment» or «Contains batteries». The crossed-out wheeled bin symbol ships with the plugin.
-
Where does the legal guarantee notice come from?
-
The images in assets/guarantee are the official notices published in the Official Journal of the European Union (Implementing Regulation (EU) 2025/1960, Annex I), unchanged. Reuse of EU documents is allowed under Commission Decision 2011/833/EU.
-
Where does the durability label come from?
-
The images in assets/durability are the official label and nested display from the Official Journal (Implementing Regulation (EU) 2025/1960, Annex II), unchanged. Only the placeholder words are covered and replaced with your guarantee years, brand and model identifier, as the regulation allows. The text is set in Inter, the font the regulation asks for, Copyright 2016 The Inter Project Authors, licensed under the SIL Open Font License 1.1 (assets/durability/OFL.txt).
-
Where is the storefront script’s source?
-
The file assets/js/shopproof-widgets.js is shipped unminified. It is built from the Shopproof storefront widgets source and needs no build step to read or change.
-
Does it work with Germanized or German Market?
-
Yes. When Germanized, German Market or the EU Order Withdrawal Button adds its own withdrawal button, Shopproof adds no withdrawal links of its own, so customers never see two. Its product safety block stays hidden in the same way. You can choose to use Shopproof’s instead: the withdrawal button under WooCommerce > Shopproof > Withdrawal button, the product safety block under WooCommerce > Shopproof > Product safety. Shopproof never changes those plugins’ settings or your WooCommerce settings.
-
How do I connect my returns tool?
-
Open WooCommerce > Shopproof > Returns. Paste the link to your returns portal, and customers get it in their withdrawal acknowledgement. To create returns automatically, paste the address your returns tool gives you (or one from Zapier, Make or n8n) under «Send withdrawals automatically», save, and press «Send a test withdrawal». Each request is a JSON POST with the event name in the X-Shopproof-Event header and an X-Shopproof-Signature header (t=,v1=.» with your security key>). If the address does not answer with a 2xx status, Shopproof tries again after 5 minutes, 1 hour and 6 hours, then emails you. Each withdrawal shows whether it was sent.
-
What does Shopproof Pro add?
-
Shopproof Pro is a separate, paid add-on (https://shopproof.app/pro/). It emails you when a rule that affects your shop is added or changed, covers researched rules such as packaging and electrical goods registrations and the countries Spain, Poland and Belgium, keeps a calendar of the dates that matter, makes a proof pack PDF and stamps your proof log once a day outside your shop. Agencies get one dashboard for all their client shops. You do not need Pro: nothing in this plugin is locked, limited or time-limited. This plugin mentions Pro only on its own pages and its row on the Plugins screen, and the mentions go away when Pro is installed and active.
-
Is this legal advice?
-
No. Shopproof gives technical help to show the information EU rules ask for. For legal questions, please ask a lawyer in your country.
Reseñas
No hay valoraciones para este plugin.
Colaboradores y desarrolladores
«Shopproof» es un software de código abierto. Las siguientes personas han colaborado con este plugin.
ColaboradoresTraduce «Shopproof» a tu idioma.
¿Interesado en el desarrollo?
Revisa el código , echa un vistazo al repositorio SVN o suscríbete al registro de desarrollo por RSS.
Registro de cambios
0.23.0
- New: a Settings link on the Plugins screen.
- New: short mentions of the separate Shopproof Pro add-on, only on Shopproof’s own pages (end of the Rules tab, one line on the Overview tab that you can hide, one line on the proof log page) and as a link on its row on the Plugins screen. They are plain links to shopproof.app, send nothing, and go away when Pro is active. Nothing in this plugin is locked.
0.22.0
- First release on WordPress.org.
- New: if the withdrawal acknowledgement email cannot be sent, the confirmation on the page says so and lists the details the customer sent, so they can save or print it.
- New: when the order number is optional, the withdrawal form says so under the field.
- Changed: rules 0.10.0 bundled (single-use drink deposit rules for Austria, Germany and the Netherlands).
- Changed: each withdrawal keeps the withdrawal period that applied when it arrived, so changing the period later does not move its deadlines.
- Changed: the «Return arrived» and «Refund sent» emails go out once per withdrawal, also when you move the status back and forward again.
- Fixed: the one-line product safety block shows an open and close arrow in every theme, and hazard pictograms keep their size in themes that stretch images.
- Fixed: a link check that could not open any page no longer counts as a done setup step.
- Fixed: the proof log card warns when the newest daily entry is more than two days old (for example when WP-Cron does not run) instead of saying «Recording every day».
- Fixed: with your own button wording already in use, changed texts are only used while «I understand» is ticked.
- Fixed: shops with more than 200 product categories no longer lose exclusions on save.
- Fixed: deleting the plugin also removes the settings of its four WooCommerce emails.
0.21.0
- New: «Why is this needed?» fold-outs on the Withdrawal button and Product safety tabs and at the guarantee notice. Each names the law, the date it applies from and links to the official text.
- Changed: the withdrawal page is shown by its name, with View and Edit links, instead of its web address.
0.20.0
- New: choose the words on the withdrawal link and the confirm button. Automatic stays the default. You can also pick another reviewed wording, for example the second Dutch wording «hier de overeenkomst herroepen» with «herroeping bevestigen».
- New: you can write your own button text. A warning explains the legal risk, and the text is only used after you tick «I understand».
- Changed: rules 0.9.1 bundled (the second Dutch wording).
0.19.0
- New: an Overview tab opens first. It shows a short setup checklist and one status card per feature (withdrawal button, withdrawals, product safety, guarantee notice, registration numbers, proof log, rules), each with a link to where you fix it.
- New: the link check saves how many pages passed, so the Overview tab can show it. Only the counts are kept, on your own site.
- New: a short «Set up Shopproof» notice on the Plugins screen and the dashboard until setup is done. You can hide it.
- New: short answers in the WordPress Help panel on the Shopproof page.
- Changed: plain English texts on the Product safety, Registration numbers, Returns, Rules and Proof log screens and in the product editor, written for shop owners whose first language is not English.
- Changed: the Registrations and take-back tab is now called Registration numbers.
0.18.0
- New: the withdrawal emails are now WooCommerce emails. Edit their subject, heading, intro and closing text in WooCommerce > Settings > Emails, and choose plain text or HTML. The withdrawal details, date, time and reference are always included.
- New: two optional emails tell customers when you set a withdrawal to «Return arrived» or «Refund sent». Both are on by default; turn them off in WooCommerce > Settings > Emails.
- New: Withdrawal options on the Shopproof page. Set a longer withdrawal period (at least 14 days), a contact email for withdrawals, footer link on every page or only shop pages, the My Account link on or off, a required order number or order date, and an optional or required «Additional information» field.
- New: exclude product types or categories from withdrawal, for example made-to-order goods. The item picker still lists these items, marked with your explanation, and your copy of the withdrawal names them.
- Changed: the shop copy of each withdrawal goes to the contact email when you set one, and customer emails use it as Reply-To.
0.17.0
- Changed: the WooCommerce > Shopproof page is split into tabs: Withdrawal button, Returns, Product safety, Registrations and take-back, and Rules. Each tab saves only its own settings, and after saving you come back to the same tab.
- Changed: the legal guarantee notice and the choice to show Shopproof’s product safety block next to another plugin’s moved to the Product safety tab.
- Changed: the link placement check now runs only when the Withdrawal button tab is open, so the other tabs load faster.
0.16.2
- Fixed: on sites that run WordPress on SQLite, such as WordPress Playground, the proof log showed «Chain broken at entry 1» after the first entry although nothing had changed. The database stores the entry time in another form; the check now reads it back in the form it was hashed in.
0.16.1
- Fixed: the deadline clock counted any refund on the order, even a small one made before the withdrawal, as the refund being paid. Only a refund of the whole order now counts as paid; a partial refund made after the withdrawal shows «Partly refunded, check» and the refund still counts as due or overdue.
- Fixed: the customer status page now moves to «Refund sent» by itself only when the whole order is refunded in WooCommerce.
- Fixed: the reminder above the Withdrawals list now counts every withdrawal whose refund is not yet sent, not only those from the last 30 days.
- Fixed: a withdrawal page without the withdrawal form was accepted silently. The Shopproof page now shows an error and offers to create the page, and the daily proof log records the page as not live.
- Fixed: when the acknowledgement email to the customer cannot be sent, the withdrawal now says so in the list and on its screen, with a button to send it again, and the shop copy says so instead of claiming it was sent.
- Fixed: the shop copy’s Reply-To header now holds only the customer’s email address, so names with commas or quotes no longer break it.
- Fixed: rules with status pending_check, low confidence or unverified are never shown, even when the rules file does not mark them for review.
- Fixed: the customer status page no longer shows «Order .» when no order number was given.
0.16.0
- New: item picker. After entering the order number and email address, customers tick the items they are returning, with product photos and quantities, instead of typing them.
- New: status page for customers, linked from the acknowledgement email: received, return arrived, refund sent. Set the status on the withdrawal’s screen; WooCommerce refunds on the matched order set «Refund sent» automatically.
0.15.0
- New: one-tap withdrawal. The withdrawal link in order emails, on the My Account order page and on the order received page opens the form with the order already filled in. The link is signed for that order; the details are loaded by the form, so page caches never store them.
- New: the order number is optional. Without one, the withdrawal is matched to the latest paid or on-hold order for the email address, and the customer and shop emails say which order was used, or that none was found.
0.14.0
- New: placement check with live preview on the WooCommerce > Shopproof page. See where the withdrawal link appears on your pages at desktop and phone width, and whether anything covers it or floats over your theme.
0.13.0
- New: compact product safety block. By default the product page shows one line under the Add to cart button («Product safety (manufacturer: …)») that opens to the full details. Choose the «Product safety» tab instead under WooCommerce > Shopproof > Product safety.
- New: hazard labelling for hazardous chemicals (CLP Article 48a): hazard pictograms, signal word, hazard and precautionary statements per product, with the official texts in the shopper’s language. Also in the product CSV export and import.
- New: shortcode option [shopproof_product_safety layout=»compact»].
0.12.0
- Added: deadline clock on each withdrawal under WooCommerce > Withdrawals. It shows whether the withdrawal arrived inside the 14-day window and when the refund is due, and you can enter the delivery date and a refund paid outside WooCommerce.
0.11.0
- Changed: the plugin ships with the rules list and no longer downloads anything when it is activated. Rule updates are downloaded only when you press «Check for rule updates now» or turn on daily updates under WooCommerce > Shopproof. Daily updates are off until you turn them on.
- Changed: the durability label’s styles are loaded with the WordPress style functions.
0.10.0
- New: registration numbers and take-back information for batteries and electrical equipment, on product pages, in the footer and with the [shopproof_registrations] shortcode. Included in the proof log’s daily snapshot.
0.9.0
- New: returns tools. Add your returns portal link to the customer’s acknowledgement email, and send each withdrawal to a signed webhook for your returns tool, Zapier, Make or n8n, with retries and a test button.
0.8.1
- New: the proof log can hold daily stamps from Shopproof Pro, which keeps a copy of your latest chain hash outside your shop.
0.8.0
- New: proof log. A daily snapshot of what your compliance features show and a record of each withdrawal, linked by hashes so later changes are visible. Chain check and CSV download under WooCommerce > Proof log.
0.7.0
- New: set product safety details for many products at once with bulk edit in the products list.
- New: product safety columns in WooCommerce’s product CSV export and import.
0.6.0
- New: works alongside Germanized, German Market and the EU Order Withdrawal Button without showing a second withdrawal button or safety tab.
- New: the withdrawal form links your privacy policy next to the confirm button.
- New: the shop gets one email if the form receives an unusual number of withdrawals in an hour, and the form pauses above 100 an hour.
- Changed: the customer email confirms receipt and says the shop will check the withdrawal.
0.5.0
- New: EU durability label «GARAN» with per-product guarantee years, brand and model identifier, and the [shopproof_durability_label] shortcode.
0.4.0
- New: EU legal guarantee notice on product pages and with the [shopproof_guarantee_notice] shortcode.
0.3.0
- New: product safety details with shop defaults, per-product values and a «Product safety» tab.
0.2.0
- New: withdrawal button with withdrawal form, footer, account and email links, customer acknowledgement email, shop copy and order note.
- New: received withdrawals list, personal data export and erase.
0.1.0
- First release: rules overview page with daily rules download.
