Title: Profit Forge for WooCommerce
Author: avakodeforge
Published: <strong>September 13, 2026</strong>
Last modified: September 13, 2026

---

Search plugins

![](https://ps.w.org/profitforge/assets/banner-772x250.png?rev=3694016)

![](https://ps.w.org/profitforge/assets/icon-256x256.png?rev=3694016)

# Profit Forge for WooCommerce

 By [avakodeforge](https://profiles.wordpress.org/avakodeforge/)

[Download](https://downloads.wordpress.org/plugin/profitforge.1.1.0.zip)

 * [Details](https://wordpress.org/plugins/profitforge/#description)
 * [Reviews](https://wordpress.org/plugins/profitforge/#reviews)
 *  [Installation](https://wordpress.org/plugins/profitforge/#installation)
 * [Development](https://wordpress.org/plugins/profitforge/#developers)

 [Support](https://wordpress.org/support/plugin/profitforge/)

## Description

Your store leaks money in cents. A coupon that stacked when it should not have. 
A refund where the goods never came back to stock. A customer charged twice because
the checkout button was clicked twice. Each one is small. A month of them is not.

**Profit Forge** scans your orders and reports what it found — with the order numbers,
the amount in dollars and the steps that stop it happening again.

#### What it reports

 * **Coupon stacking** — an “individual use only” coupon that ended up combined 
   with other coupons, and how much extra discount that gave away.
 * **Refund without restock** — money refunded, goods never returned to stock, and
   the inventory value now missing.
 * **Duplicate paid orders** — the same cart and email paid for twice within minutes,
   before the customer’s bank turns it into a chargeback.

Every finding carries the order numbers behind it. Nothing is reported that cannot
be shown on an order screen.

#### Your data stays in your store

The scan runs inside WordPress. This plugin makes **no external requests at all**—
no analytics, no phoning home, no order data sent anywhere. Nothing leaves your 
server. The one place a request can happen is the separate Pro add-on reading your
own gateway statement, and only if you give it a key — see External services below.

#### How it works

 1. Activate. No account, no key, no setup wizard.
 2. Run a scan — it processes orders in the background in batches, so a busy store 
    keeps serving customers.
 3. Read the report: total found, findings grouped by rule, evidence per finding, fix
    steps.

You choose the window: a rolling number of days, the last full calendar month, or
all the order history you have. Nothing about the scan is capped, metered or time-
limited.

#### A note on precision

A false accusation costs more than a missed leak. Every rule stays silent when it
cannot prove its case: a coupon whose settings were deleted, a refund on a product
that does not track stock, two orders from the same cart a week apart. If the report
says nothing, that means nothing was proven — not that the rule did not run. Rules
that could not run are listed with the reason.

#### Pro

A separate add-on adds nine more rules (gateway fees against your rate card, shipping
charged below label cost, single-use coupon reuse, coupon on top of a sale price,
partial refund above the line total, tax class with no matching rate, negative margin
after cost of goods, paid orders stuck on hold), a printable report, CSV export 
and a monthly email.

Those rules and screens live in the other plugin — they are not in this one, switched
off. Everything this plugin ships is on, for everyone, with no key: every rule it
has, the whole scan window, and every line of every report.

### Hooks

#### profitforge/leak_found

Fires once per scan, right after the report is saved, when the new findings
 found
by that scan add up to at least the alert threshold (Settings  “Alert threshold”,
$50 by default). One e-mail to the site admin also goes out through `wp_mail()` 
at the same time — this hook fires either way, so an integration does not depend
on outbound mail being configured on the site.

    ```
    do_action( 'profitforge/leak_found', $report_id, $total_cents, $count, $top_rule )
    ```

 * `$report_id` (int) — the id of the scan run whose report contains these findings.
 * `$total_cents` (int) — the sum of the new findings that crossed the threshold,
   in cents. Findings marked “observe” and findings already marked “Fix confirmed”
   at an equal or higher amount are not counted here.
 * `$count` (int) — how many findings that sum is made of.
 * `$top_rule` (string) — the id of the rule that contributed the largest amount(
   for example `R04`).

This is how FlowForge (or any other plugin) can route a Profit Forge leak
 into 
its own automation without parsing the e-mail. Free rules count the same as Pro 
rules here — the hook does not check which add-on found the money.

### External services

**This plugin connects to nothing.** It has no analytics, no update server of its
own, no licence check and no telemetry. Everything below is about the separate Pro
add-on, and is listed here so the answer is in one place.

#### Stripe (Pro add-on only, and only if you add a key)

The Pro add-on can check the fee Stripe kept against your rate card. To do that 
it reads your own Stripe statement.

 * **What it is:** the Stripe API, `https://api.stripe.com/v1/balance_transactions`.
 * **When it happens:** only after you paste a restricted, read-only Stripe key 
   on the Pro settings screen, and then only while a scan is running or when you
   press “Test connection”. No key, no requests — the rules fall back to what the
   Stripe payment plugin already stored on each order.
 * **What is sent:** your key, the date range being scanned and a page cursor. **
   No order, customer or product data is sent** — matching a transaction to an order
   happens on your own server, after the answer comes back.
 * **What comes back:** your own charges and refunds — amount, fee, currency, card
   country and brand.
 * **Your key:** stored encrypted (libsodium) with a secret you put in `wp-config.
   php`; without that secret the add-on refuses to store the key at all. Only the
   last four characters are ever shown.
 * Stripe’s terms: https://stripe.com/legal/ssa — Stripe’s privacy policy: https://
   stripe.com/privacy

PayPal fees are not read over the network at all; they come from the fee the PayPal
plugin records on the order, or from a statement you export yourself.

## Screenshots

[⌊The report: what the scan will check on this store, the total it found, and the
window it covers.⌉⌊The report: what the scan will check on this store, the total
it found, and the window it covers.⌉[

The report: what the scan will check on this store, the total it found, and the 
window it covers.

[⌊A finding with its evidence lines, the order numbers behind it, and the steps 
that stop it recurring.⌉⌊A finding with its evidence lines, the order numbers behind
it, and the steps that stop it recurring.⌉[

A finding with its evidence lines, the order numbers behind it, and the steps that
stop it recurring.

[⌊Duplicate paid orders — the same cart paid for twice, both order numbers, and 
what to do before the bank turns it into a chargeback.⌉⌊Duplicate paid orders — 
the same cart paid for twice, both order numbers, and what to do before the bank
turns it into a chargeback.⌉[

Duplicate paid orders — the same cart paid for twice, both order numbers, and what
to do before the bank turns it into a chargeback.

[⌊Settings: the scan window, how many orders per batch, the alert threshold, and
which rules run.⌉⌊Settings: the scan window, how many orders per batch, the alert
threshold, and which rules run.⌉[

Settings: the scan window, how many orders per batch, the alert threshold, and which
rules run.

## Installation

 1. Install and activate WooCommerce first.
 2. Install this plugin from Plugins  Add New, or upload the folder to `/wp-content/
    plugins/`.
 3. Activate.
 4. Go to **WooCommerce  Profit Forge** and press **Run scan**.

## FAQ

### Does any of my order data leave the site?

No. The free plugin makes no outbound HTTP requests. The rules run on your server
against your own database.

The Pro add-on can make one kind of request, and only if you ask it to: with a read-
only Stripe key it reads your own Stripe statement to check the fees. Even then 
no order data is sent — it asks Stripe for your transactions and matches them to
orders here. See External services above.

### Will the scan slow down my store?

The scan runs in the background through Action Scheduler in batches of 500 orders.
Nothing happens on the front end, and you can leave the page while it runs.

### Why does the report say a rule was skipped?

Because the data it needs is not there — for example the tax rate table when tax
is disabled. A skipped rule is listed with the reason, so silence is never mistaken
for “all clear”.

### It found a duplicate order that was not a duplicate. What now?

Tell us — that is a bug, not a matter of taste. Rules are held to zero false findings
on a clean test store, and a rule that cannot prove its case is supposed to stay
quiet.

### Does it change anything in my store?

No. The plugin reads orders and writes its own findings table. It never edits an
order, a refund, a coupon or a product.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“Profit Forge for WooCommerce” is open source software. The following people have
contributed to this plugin.

Contributors

 *   [ avakodeforge ](https://profiles.wordpress.org/avakodeforge/)

[Translate “Profit Forge for WooCommerce” into your language.](https://translate.wordpress.org/projects/wp-plugins/profitforge)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/profitforge/), check
out the [SVN repository](https://plugins.svn.wordpress.org/profitforge/), or subscribe
to the [development log](https://plugins.trac.wordpress.org/log/profitforge/) by
[RSS](https://plugins.trac.wordpress.org/log/profitforge/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 1.1.0

 * Before a scan runs, the screen now states what it will and will not check on 
   this store, and why — with a real example line instead of a promise. A rule that
   cannot run names the data it is missing.
 * The scan preview and the contract card now agree on how many orders are in the
   window; the two could previously quote different figures for the same scan.
 * A case reopened by a later scan keeps its “fix applied” date, and a re-test can
   no longer quietly demote a finding you already confirmed.
 * Findings and their re-test outcomes are now published in a shared format, so 
   a dashboard plugin installed alongside can read this plugin’s results without
   scraping the screen. Nothing leaves your server: this plugin still makes no external
   requests.

#### 1.0.2

 * The scan window is no longer capped. Any store can scan a rolling number of days,
   the last full calendar month, or its entire order history — the “All available
   order history” option is now always on the Settings screen.
 * Findings that share one cause are grouped into a single case for everyone.
 * The re-test outcome (“not repeated on N later orders” / “repeated on order X”)
   is now shown to everyone. It was always being calculated; now it is always displayed.
 * Nothing in this plugin is switched off pending a key, a trial or a quota.

#### 1.0.1

 * Text domain now matches the plugin slug, so translations load from translate.
   wordpress.org.
 * readme: the Contributors field names the plugin owner’s WordPress.org account.
 * Fix: switching a rule off on the Settings screen now actually switches it off(
   rule ids kept their case in one place and lost it in another).
 * Honest states: a run that skipped a rule no longer reports “every rule ran”; 
   a finding that left the report window is no longer shown as resolved; a month
   with nothing found is told apart from a month in which the scheduled scan never
   ran; a report that cannot be fetched says so instead of staying silent.

#### 1.0.0

 * First public release: coupon stacking, refund without restock and duplicate paid
   orders, each with the order numbers behind it, the amount and the steps that 
   stop it recurring.

## Meta

 *  Version **1.1.0**
 *  Last updated **1 day ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.5 or higher **
 *  Tested up to **7.1**
 *  PHP version ** 8.2 or higher **
 * Tags
 * [audit](https://wordpress.org/plugins/tags/audit/)[coupons](https://wordpress.org/plugins/tags/coupons/)
   [reconciliation](https://wordpress.org/plugins/tags/reconciliation/)[refunds](https://wordpress.org/plugins/tags/refunds/)
   [woocommerce](https://wordpress.org/plugins/tags/woocommerce/)
 *  [Advanced View](https://wordpress.org/plugins/profitforge/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/profitforge/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/profitforge/reviews/)

## Contributors

 *   [ avakodeforge ](https://profiles.wordpress.org/avakodeforge/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/profitforge/)