NeoGrow is a free WooCommerce plugin that gives customers loyalty points for buying and for leaving photo reviews, which they spend as a discount at checkout. Everything runs on your own store — no account, no subscription, nothing metered.
Tested on 250+ of the most popular WooCommerce themes, including Astra, Kadence, Storefront, OceanWP, Blocksy, Twenty Twenty-Five and the premium WoodMart and Divi, in a real browser on a real store.
See the full theme compatibility list.
Works with Elementor, free and Pro. Four NeoGrow widgets, all free: Product Points, Product Reviews, Points Balance and Points Redemption. And on product pages built with Elementor Pro's Theme Builder, the points message appears by itself, with nothing to add.
What changes on your store
Activate it and these appear by themselves. Nothing to paste in, no block to place, no shortcode to find:
- Product pages — a line under the price: "Earn 50 points with this item."
- The review form — an Upload Photo button, a review title field, and what a review is worth in points.
- Published reviews — customer photos in a lightbox, a Helpful button, and a way to report a review.
- Cart and checkout — a panel where the customer spends points for a discount off the total. The block Cart and Checkout are covered as well as the classic ones.
- My Account — a balance, what it is worth, and a full points history.
- The order-received page — how many points that order earned.
- Your order emails — the same line, added to the emails WooCommerce already sends. NeoGrow sends no email of its own unless you switch review reminders on.
Four of those stay invisible until a customer actually has points, so a brand-new store looks quiet at first. That is correct, not broken — and
Marketing > NeoGrow > On your store lists every change, says whether it is live, and will show you each one on your own storefront using a sample balance.
NeoGrow helps a WooCommerce store sell more without cutting its prices, with the two things that actually move revenue: reviews that convince a stranger to place a first order, and points that bring that customer back for a second one.
Picture a shopper comparing your product with a cheaper one somewhere else. The cheaper page has no reviews. Yours has forty, several with photographs. Most people pay the difference, because forty strangers with nothing to gain are more persuasive than any product description you could write.
That is the whole idea. Your price can be undercut tomorrow morning. Your reputation cannot be copied at all.
What it does for your revenue
1. It gets you the reviews that do the selling.
Customers will happily photograph what they bought — they just need a reason to bother. NeoGrow pays them in points for a review, and pays more for one with a photo. Published research from Northwestern University's Spiegel Research Center found a product showing five reviews was 270% more likely to be purchased than the same product showing none, and that the lift was larger on higher-priced products than on cheap ones. Reviews are worth more to you the more you charge.
2. It gets you the second order.
Roughly a quarter of first-time customers ever come back on their own. A points balance waiting in the basket is a concrete reason to return, and once a customer has ordered twice, the odds of a third rise sharply.
3. It stops you competing on price.
Discounting takes margin off every order, permanently, and any competitor can match it. A library of real reviews takes effort once per product and cannot be copied. NeoGrow is how you build that library on purpose rather than hoping for it.
4. It costs nothing to run, at any size.
Hosted review and loyalty platforms charge by review requests sent, contacts stored, or minutes of video kept — so a good year raises your bill. NeoGrow is free and unlimited. Ten customers or ten thousand, the price is the same.
More on the research behind this, with sources: Why product reviews matter more than price in WooCommerce.
Why NeoGrow rather than a monthly subscription
Nothing sits between the review and the reward.
Elsewhere this takes two plugins wired together: one collects reviews, the other hands out points and watches for them. That join is fragile, and when it quietly breaks you find out from a customer who was promised points and never got them. NeoGrow does both jobs itself, so there is no join to break.
You keep everything if you stop.
Reviews, photos and every point balance sit in your own database. No account, no licence key, no company holding a copy — so cancelling a subscription never empties your product pages.
It gives away what you meant to give away.
Points are earned on the order subtotal, so tax and postage never inflate what you hand out, and multi-currency orders convert through the exchange rate that order actually used. Both are pinned by tests.
Built for AI-first commerce — coming soon.
Answer engines read structured data rather than pages.
NeoSEO, a separate free plugin in development, turns NeoGrow's reviews into
Review and
AggregateRating markup. NeoGrow works fully without it.
https://youtu.be/Oq2QNXUuZS4
Features
Everything below is in the free plugin, with no limits on reviews, photos, customers or points.
Loyalty points
- Points for purchases. Set a rate such as 1 point per $1 spent. Points are earned on the order subtotal — never on tax, shipping or fees — and credited when the order is marked Completed.
- Spent at checkout. The customer enters how many points to use and the discount comes off the total live, on block and classic Cart and Checkout alike. A "Max discount per order" setting caps how much points can pay for.
- Expiry. Points last 6 months, and the oldest are always spent first. Choosing your own window, or switching expiry off, is part of NeoGrow Pro.
- Correct on multi-currency stores. Points are calculated against your base currency, and the discount is shown in the currency the customer is browsing. WooPayments, CURCY and FOX work with no configuration; other switchers connect through two documented filters. If NeoGrow cannot read a switcher's rate, it tells you.
- Fast on a busy store. Points live in the plugin's own database tables, and it is fully compatible with WooCommerce's High-Performance Order Storage.
Photo reviews
- Upload Photo on your theme's own review form, with no replacement form or widget, and the size limit your server accepts shown beside the button.
- A review title field, so reviews read like reviews rather than comments.
- Points for a review, more for one with a photo. Credited when you approve the review, and never dependent on the rating given.
- Photos shown with the review, opened full size in a lightbox.
- Helpful votes, with a count on each review.
- Report a review. One report per person per review, at most ten a day, so one visitor cannot bury a review.
- A disclosure statement above the form saying customers can earn points for reviewing. Editable, accepts
{product_name}, and can be switched off.
- Moderation where you already work — WooCommerce's Product Reviews screen, with the customer's photo and a column of open reports.
Review reminders — off by default
- An email a set number of days after an order completes, listing only the products not yet reviewed, quoting what a review could earn, with a one-click opt-out.
- An ordinary WooCommerce email, edited under WooCommerce > Settings > Emails like every other one.
- A column on the Orders screen showing whether a reminder went out, with a button to send one by hand.
- Never reaches backwards. Only orders completed after you switch it on are emailed, and NeoGrow stands down where WooCommerce core already sends its own review request.
Running it
- Setup wizard. Two minutes from activation to a live programme.
- Growth dashboard. Orders needing action and reviews awaiting approval, each linked, above points issued, points spent and photo-review performance.
- On your store. Every storefront change, whether it is live, and a preview of each as a customer with a sample balance. It also flags what might hide a change: a page cache, an unreadable currency rate, a block theme, or another points plugin.
- Points log. Every point earned, spent, expired or adjusted, searchable by name, login or email.
- Manual adjustment from Users > Edit User, with a reason recorded in the log.
- Branding. Match the plugin's colours to your store.
- Explainer videos. A play button beside storefront settings opens a short clip of what that setting does.
- Site Health checks and admin notices for page-cache and currency-rate problems.
Privacy and developers
- Privacy tools. Nothing leaves your server, and helpful votes and review reports are included in WordPress's personal data export and erasure tools.
- Four shortcodes:
[neogrow_product_points] (the points message, anywhere — add id="123" for a specific product), [neogrow_points_balance], [neogrow_points] and [neogrow_cart_redemption]. They work in Divi, Bricks, Oxygen, Beaver Builder or any theme.
- Four Elementor widgets, in their own NeoGrow panel: Product Points, Product Reviews, Points Balance and Points Redemption. They work with Elementor's free version and never cache one customer's balance for another.
- A documented developer API. The
NeoGrow\API\Points class plus hooks and filters — rename "points" store-wide, change what an order earns on, or supply a membership tier.
NeoGrow Pro
NeoGrow Pro is a separate, paid add-on,
coming soon. Everything above stays free and keeps working without it. Pro adds:
- ✅ Multiple photos per review
- ✅ Video reviews
- ✅ Limits on photos and videos per review, with a size cap for each
- ✅ Extra points for a review with a video
- ✅ A media gallery at the top of the reviews tab, each photo or video opening beside its review
- ✅ Photo and video previews on the Product Reviews screen
- ✅ An Amazon-style rating breakdown bar above the reviews
- ✅ A detailed rating summary popup
- ✅ Filter reviews by star rating, by photos or video, and by verified buyers
- ✅ Sort reviews by highest rated, lowest rated, newest, oldest, with photos first, or most helpful
- ✅ Reviewer badges such as Top Reviewer and Photo Reviewer, with your own thresholds
- ✅ Green review stars in place of the default colour
- ✅ Import reviews from a WooCommerce CSV file, with a dry run and duplicate detection
- ✅ Editable review reminder emails that tell the customer what a review is worth in points
- ✅ A follow-up review reminder with its own delay, subject and wording
- ✅ Leave chosen user roles out of review reminders
- ✅ A review campaign that invites customers from past orders, with a preview before anything sends
- ✅ Choose your own points expiry window, or switch expiry off
- ✅ Points taken back automatically when an order is refunded or cancelled
- ✅ Bonus points for a customer's first purchase
- ✅ Bonus points for registering and for completing a profile
- ✅ A minimum cart total and a minimum number of points before points can be spent
- ✅ A maximum discount from points, as an amount or as a share of the order
- ✅ A Growth dashboard comparing each figure with the previous period, members against everyone else, with suggested next steps
- ✅ CSV export of dashboard reports
- ✅ Automatic updates through your WooCommerce Marketplace licence
Documentation
For setup guides, the full list of hooks and filters, and advanced configuration, please visit our official documentation:
NeoGrow documentation
1.2.21
- Fix: The points history in My Account labelled every review reward as an order ("Review Earn (Order #482)"), using the review's ID as an order number. It pointed customers at an order that did not exist, or at a different order of their own. Review rewards now name the product reviewed and link to the review; purchases and redemptions show the store's order number and link to the order.
- Fix: Event names in the points history and the admin points log can now be translated. They were built from internal keys and always appeared in English.
- Changed: The admin points log shows the order or review each entry refers to, linked to its edit screen.
- Developer: New filter
neogrow_ledger_event_types - add-ons that write their own points events name them and say what their reference ID points at. Extension API 2.4.
1.2.20
- New: An admin notice when another review plugin has taken WooCommerce's product reviews over and switched NeoGrow's review features off. It names the plugin, lists exactly what stopped and what still works, and links to the one setting that restores them. It covers Customer Reviews for WooCommerce set to its "CusRev (enhanced)" visual style, and Site Reviews with its WooCommerce integration on. Both plugins at their default settings leave NeoGrow working, and the notice stays silent. Admin only and dismissible.
1.2.19
- Performance: On stores running Elementor, NeoGrow's four Elementor widgets now load only on pages that use them. Elementor asks every add-on for its widgets on every page, including pages not built with Elementor, so 1.2.18 loaded all four on every page view. Pages with a NeoGrow widget, and the Elementor editor, are unchanged.
- Changed: Translations load the way WordPress.org recommends for hosted plugins. NeoGrow no longer loads its own translation files; WordPress installs and loads the language packs from translate.wordpress.org. Nothing changes for your store.
- Developer: New filter
neogrow_elementor_lazy_widgets - return false to register the widgets on every request, as 1.2.18 did. Extension API 2.3.
1.2.18
- New: Four Elementor widgets in a NeoGrow panel category — Product Points, Product Reviews, Points Balance and Points Redemption. Free, fully working with Elementor's free version, with style controls that start from your NeoGrow design settings. They show a sample in the editor and are never cached across customers.
- New: The
[neogrow_product_points] shortcode places the points message anywhere, for the current product or id="123". Useful in Divi, Bricks, Oxygen and custom layouts.
- Fix: The "Earn N points with this item!" message now appears on product pages built with a page builder. Elementor Pro's Theme Builder, and other builders that rebuild the product page from widgets, skip the place in the page WooCommerce normally provides for it, so the message was silently missing. It now shows directly above the add-to-cart button on those pages, and still updates when a shopper picks a variation. Themes that already showed it are unchanged.
- Fix: The "Apply Points" button label is readable on Hello Elementor and other themes that colour every button. It now always uses white text on your NeoGrow button colour, instead of the theme's own text colour.
- Developer: New filter
neogrow_product_message_fallback_hooks to move or switch off that fallback position. Extension API 2.2.
1.2.17
- Fix: A review title is no longer lost when the review form appears outside an ordinary product page - a page-builder product template, a page that embeds a product's reviews, or anywhere the photo upload field is not shown. The title used to save only alongside the upload field's security check, so wherever that field was missing the customer could type a title and it was silently dropped. The title field now carries its own check and saves wherever it appears. Product pages behave exactly as before.
1.2.16
- Fix: Reviews written on WooCommerce's own Review Order page - the page its review request email links to - now earn points. WooCommerce writes those reviews without the hooks NeoGrow listens on, and usually without a user, so an auto-approved review from that page was never paid and a held one was paid to nobody. NeoGrow now records the order's account holder against the review and pays them: at once when the review is approved automatically, or when you approve it.
- Fix: The points line NeoGrow adds to that email no longer promises the photo rate. The page it links to collects stars and text only, so the line now quotes the text reward, and only on orders that belong to an account - a guest has no balance for points to land in.
- Developer: New filter
neogrow_review_text_points_quote, the per-customer seam for the text-only quote. A review from that page can be paid to a customer whose review carries no user_id; the account holder is in the comment meta _neogrow_review_customer. Extension API 2.1.
1.2.15
- Fix: The star rating shows again in the review list on themes that keep WooCommerce's own review markup - Storefront and Twenty Twenty-Five among them. Since 1.2.7 the review layout let the stars shrink to nothing wide, so a review showed its title, text and photo but no stars. The rating was still read out to screen readers and still counted toward the product average. Astra, and other themes that wrap the stars in an element of their own, were never affected.
1.2.14
- Changed: Review rewards are simpler. A review earns the text reward, or the photo reward when a photo is attached, and nothing else changes what it pays.
- Removed: A setting and a one-time admin notice added in 1.2.13. Updating deletes the setting's stored value.
- Developer: Extension API 2.0, because a review filter added in 1.2.13 was removed.
1.2.13
- New: A play button against nine settings rows opens a short video showing what that setting does, on the screen a customer would see it on. The clips are served from this plugin's own page on WordPress.org and fetched only when you click one, so they cost nothing to a store that never opens them and add nothing to the download.
- New: Review reminders. NeoGrow can email a customer a set number of days after their order completes, asking them to review what they bought. Marketing > NeoGrow > Settings > "Review reminders", switched off by default — it is the only setting in the plugin that emails your customers, so it is the only one that does not start running on its own. The delay defaults to 14 days, counted from completion.
- New: The reminder is an ordinary WooCommerce email, so its subject, heading and styling are edited under WooCommerce > Settings > Emails alongside every other one. It lists only the products on that order the customer has not already reviewed, quotes the most a review could earn them, and carries a one-click opt-out that is honoured everywhere — including the manual send button, because it is the same commercial email either way.
- New: The Orders screen gains a column showing whether a reminder went out and when, with a button to send one by hand. Without it, a merchant fielding "why did I get this email" had nothing to look at but order meta.
- Changed: Turning reminders on does not reach backwards. The clock starts the moment you enable it, so a shop with three years of completed orders does not email its entire history. Changing "Send after (days)" does apply to orders already waiting, rather than only to orders completed afterwards.
- Changed: A queued reminder is dropped if the order is refunded, cancelled, failed, trashed or deleted before the day arrives, and everything is re-checked when the job finally runs — an order moved back to processing in the meantime is not asked to review something the shop no longer considers delivered.
- Changed: Where WooCommerce core is sending its own customer review request, NeoGrow stands down rather than email twice, and the settings screen says so instead of leaving you to work out why a ticked box sends nothing. NeoGrow still adds its points line to core's email.
- Developer: New filters
neogrow_reminder_review_url (where the email links to; block themes without the classic #tab-reviews anchor should set this), neogrow_core_owns_reminders, and a veto point for targeting rules applied on every path that sends.
- New: The disclosure statement accepts
{product_name}, replaced with the product being reviewed. The statement is one store-wide string shown on every product page, so until now a merchant who wanted it to name the thing being reviewed had no way to say so. Off a product page the tag is removed rather than left showing.
- Fixed: Reading the settings registry before WooCommerce had started its mailer was fatal, because the reminder field's help link touches a class extending WC_Email. It now falls back to the email list. Nothing on a normal page load reached this; a WP-CLI command or an add-on filtering fields early did.
1.2.12
- New: A new screen, Marketing > NeoGrow > On your store, lists every change NeoGrow makes to your storefront — where each one appears, whether it is live right now, and where to change it. It exists because most of what this plugin does is invisible on a new store: four of the seven things it adds only appear once a customer has points, so an empty shop can look as though nothing happened.
- New: You can browse your own store as a customer sees it. Three settings — a sample balance, your real balance, or a customer with no points at all — so you can see the redemption panel and the My Account card without placing an order or giving yourself points. Nothing is written to your points history, no customer can ever see it, points cannot actually be applied to an order while it is on, and it switches itself off after thirty minutes.
- New: The dashboard of a store that has not traded yet now explains what is already running instead of showing seven figures all reading zero.
- Changed: The setup wizard now finishes on the new screen rather than the dashboard, and the notice on the Plugins screen says what has already happened rather than only asking you to configure something.
- Changed: The Guide tab's Quick Start no longer lists where each feature appears. That was describing the same things as the new screen, only without your store's own figures, so it now points there instead — and keeps the two details the new screen does not carry: points for an order arrive when it is marked Completed, and points for a review are credited when you approve it. The "why is the redemption form not visible" answer now tells you to use the preview rather than leaving you to wait for a customer to earn points.
- New: NeoGrow now appears in WooCommerce's own task list, which is where WooCommerce asks extensions to put this rather than redirecting you on activation.
- New: The same screen reports what might stop a change from showing on your particular store — a page cache, a currency switcher whose rate cannot be read, a block theme taking a different render path, or another active plugin that also awards points and therefore keeps a second balance.
- Developer: New filters
neogrow_store_changes and neogrow_competing_points_plugins. Extension API 1.7.
1.2.11
- Fix: The points log now finds a customer by the name it shows you. The Customer column reads "Marcus Webb (marcus@example.test)", but searching for Marcus found nothing - the search read the login and the email address, never the name on screen. It now reads all three.
- Changed: This changelog now carries the four most recent releases, and the full history back to 1.0.0 has moved to changelog.txt, which ships with the plugin. WordPress.org displays at most 5,000 words of a changelog and ours had grown past it, so the oldest release was being cut off the listing.
1.2.10
- Fix: Searching the points log no longer reads your whole customer table twice for one page of results. On a large store the search could take seconds and got slower as the log grew; it now finds the customers first and reads only their entries, and a search matching nobody stops without touching the log at all.
- New: The dashboard leads with the two things waiting for you — how many orders need action (processing or on hold) and how many reviews are waiting for approval. The whole card is clickable, taking you straight to the screen where you deal with them. Both are read fresh every time the dashboard loads, not from the hourly cache the other figures use, so the number is never a stale to-do list.
- New: WooCommerce's Product Reviews screen now shows the photo a customer attached, beside their review, so you can approve a photo review without opening it. Clicking the thumbnail opens the full picture.
- Developer: The
neogrow_expiry_months docblock said points expire after months of "inactivity". They expire six months after they were earned — ordering again does not extend points already on the clock. The wording is corrected; the behaviour is unchanged and always was this.
Earlier versions
The full history back to 1.0.0 lives in changelog.txt, which ships with the plugin. It can also be read at
https://plugins.trac.wordpress.org/browser/neogrow-loyalty/trunk/changelog.txt