Deactivating plugins one at a time tells you that a plugin is involved. WP Plugin Detective tells you which one, where in its code, and what it changed — while the site carries on serving visitors normally.
FROM $49/YEAR · LIFETIME OPTION · 14-DAY GUARANTEE
“Something is converting every image I upload to AVIF and I have no idea what.”— Everyone with more than twenty plugins active
Thirty-one plugins, four of them touch images, and the only way to find out has been switching things off on a live site until it stops. WP Plugin Detective records what each plugin actually does while you reproduce the problem once, then names the one responsible. With a file, a line number, and the value it changed.
You are not configuring a profiler. You are choosing the question you want answered, and it records only what that question needs. Twelve of them ship with the plugin.
The whole media pipeline plus every file written into uploads. Start it, upload an image, and it names whatever rewrites the format — and tells you if it deleted your original.
How much memory each plugin still holds after its callbacks finish, ranked, with peak usage against your PHP limit. The answer to a host who keeps telling you to raise the limit.
Finds the plugin refusing REST authentication or short-circuiting a route. Usually a security plugin that disabled the API for logged-out users and caught editing by accident.
Every redirect with the plugin that asked for it, where it went and the status code. Redirects fire before anything renders, which is what makes them so hard to catch by hand.
Every outbound request, the plugin that asked for it and the host it went to. Frequent calls on front-end page loads are the usual cause of slowness nobody can explain.
The plugin that calls wp_mail, plus anything rewriting the from address, the content type or the SMTP settings on the way out.
Every option written during the investigation, with the plugin and the line that wrote it. When two plugins fight over one option, the last write wins — and you get to see both.
Every post, page, custom post type and term created while it runs, with the plugin responsible. For drafts nobody wrote and an importer that will not stop.
Content you did not write, tags being stripped, script attributes that keep coming back. The output filters, with the before and after of every change.
Time spent inside each plugin's own callbacks, and slow queries attributed to the plugin that ran them. Wall-clock time in their code, not time they merely waited through.
Every scheduled job mapped to the plugin that registered it, and what those jobs touch when they fire.
Every write, rename and delete across wp-content, with the plugin responsible and the line that did it. Broader than the image case, and noisier.
Ten plugins hook the_content. Nine of them pass it straight through. Most tools show you all ten and leave you to work it out.
Each registered callback is measured for whether the value coming out differs from the value going in. A filter only becomes evidence when it actually changed something — which is the difference between a suspect and a culprit.
The location comes from where the callback was written, not from whoever happened to trigger the hook. So you get the plugin's own file and line, even when WordPress core fired it.
Every file written, renamed or deleted in uploads, with a trace back to the responsible line. This is what catches a plugin writing files with raw PHP, entirely outside the WordPress media pipeline.
Some image editors write through a C library that never touches PHP. Rather than guess, it lists the files that appeared with nothing claiming them, and names any plugin that replaced the image editor. An honest gap beats a confident wrong answer.
Finding the culprit is half the job. The other half is showing the person paying you what was wrong, what you did, and why it took the time it took.
Your agency name, your logo, your brand colour and a footer note. Set once, applied to every report. Nothing on the document sells our plugin to your client.
The rendering engine ships inside the plugin. No server extension, no external service, no signup. If your host will not run it, the report still previews and emails as HTML.
Type the client's address, press send. They get the report in the body and the PDF attached. Useful the moment you are done, rather than after you have written it up.
The same case as a plain-text export for a support ticket or a handover. Support requests that arrive with evidence attached tend to get answered rather than argued with.
| What you need | WP Plugin Detective | Deactivating one by one | Query Monitor |
|---|---|---|---|
| Names the plugin responsible | ✓ With a confidence level | ◐ Eventually | ◐ You work it out |
| Shows the line of code | ✓ File and line | ✗ No | ◐ Sometimes |
| Shows what the value changed to | ✓ Before and after | ✗ No | ✗ No |
| Site stays up for visitors | ✓ Nothing switched off | ✗ No | ✓ Yes |
| Catches raw file writes | ✓ With a trace | ✗ No | ✗ No |
| Works on cron and REST | ✓ Scoped per run | ✗ Hard | ◐ Limited |
| Client-ready report | ✓ Branded PDF and email | ✗ No | ✗ No |
| Says when it is unsure | ✓ Reports the gap | ✗ n/a | ✗ n/a |
Different jobs, and they sit together happily: WP Conflict Radar finds the plugin that breaks the site by bisection. This one finds the plugin that performs an action, by watching it happen.
Every plan includes every Pro feature: branded reports, PDF, emailing the report, Markdown export and the optional AI second opinion. You are only choosing how many sites.
Up to 10 sites
25 sites · for agencies
Up to 100 sites
Up to 100 sites, forever
Prices in USD. Licence keys are domain-based, with no accounts and no phoning home. Evidence stays on your own server. VAT invoices available.
Deactivating tells you that a plugin is involved. It does not tell you what that plugin did, and it costs you a broken site in front of live visitors for as long as the test runs. This never deactivates anything. It watches the site work normally and records who did what, so at the end you have a plugin name, a file, a line number, and the before and after value it changed. On a site where the problem only happens on upload, or only for logged-in users, or only once a day on cron, bisection can take days of appointments. This takes one reproduction.
Only while an investigation is running, and only for the request types you scoped it to. The rest of the time the plugin reads one option WordPress has already loaded into memory and returns. There is no background scanning, no cron sweep and no always-on logging. Every investigation also expires by itself — fifteen minutes by default, two hours at the absolute maximum — so a site cannot be left recording because somebody forgot.
It observes and never intervenes. No plugin is deactivated, no setting is changed, no output is altered and visitors see exactly what they saw before. That is the whole design brief: the tools that find conflicts by switching things off cannot be run at 2pm on a Tuesday on a shop that is taking orders. This can.
Hook callbacks, and here it does something more useful than listing subscribers: it measures whether each callback actually changed the value passing through it, so you can tell the plugin that is merely listening from the plugin that is responsible. Alongside that it records every file written, renamed or deleted in your uploads folder with the line of code that did it, every outbound HTTP request, every email, every option write, the scheduled jobs each plugin owns, and slow database queries traced back to the plugin that ran them.
Because it would rather say so than guess. Image editors built on Imagick write files through their own C library, which never touches PHP, so no PHP tool can see the write happen. Rather than pretend, the report lists the files that appeared with nothing claiming responsibility, and separately names any plugin that replaced the image editor — which is almost always your answer. The same honest gap covers WP-CLI, system cron and anything happening at server or CDN level.
A small loader that starts recording before your other plugins load, because a plugin can do things while it is still loading and nothing that starts later can see them. It does nothing at all unless an investigation is running. You can remove it from the settings screen whenever you like and the plugin carries on working — it just starts watching a little later in the request.
That is what the branded report is for. Put your agency name, logo, brand colour and a footer note in once, and every investigation becomes a print-ready A4 document: what was investigated, what was found, the confidence level, the recommendation, and the code location behind each finding. Download it as a PDF or email it straight from the admin with the PDF attached. The PDF engine ships with the plugin, so there is nothing to install.
How strongly the evidence supports that specific conclusion, and it is deliberately not always 100. A plugin returning "image/avif" from the WordPress filter whose only purpose is choosing the output format is a confession, and scores in the mid-nineties. A plugin that merely appears somewhere in a stack trace is not, and scores far lower. Findings are ranked so the strongest sits at the top, and every one lists the events behind it so you can check the reasoning rather than take it on trust.
No, and it is switched off until you decide otherwise. Every verdict on this page is produced on your own server by rules, with no external service involved. If you want a plain-language second opinion you can add an Anthropic key, and even then nothing is sent until you press the button on a specific case — and you see the exact payload first, with your site URL, email addresses, server paths and anything key-shaped already stripped out of it.
A profiler shows you what happened. This tells you who caused it. Query Monitor is superb at showing that a hook fired and a query ran, but it leaves you to work out which of your thirty plugins is behind it. Plugin Detective starts from the plugin: it resolves every callback and every file write back to the plugin that owns the code, then reasons over that evidence and states a conclusion in a sentence you could read out to a client.
Free is the whole detective: every investigation type, the full request timeline, the hook inventory and the findings with their confidence and evidence. The part that catches culprits is not the part we hold back. Pro adds the client-facing layer — branded reports, PDF download, emailing the report, Markdown export — and the optional AI second opinion.
Order through the form and your licence key and invoice arrive by email, usually within the hour. Keys are long codes starting VPC1. so paste the whole thing into the licence box rather than typing it. Domain-based, no account, no phoning home, no lock-in.
14-day money-back guarantee, no questions. Email us and we refund you.
Order below and your licence key and invoice arrive by email, usually within the hour. Install it, start the investigation you have been putting off, and finally find out what has been doing that.
14-DAY MONEY-BACK GUARANTEE · SUPPORT BY ACTUAL HUMANS