For three years, I published into the dark.

I’d spend two days on a 3,000-word roundup. Research every product. Write every comparison. Hit publish at 2 AM. And then — nothing. Silence. No way of knowing whether a single human being ever read it.

At the end of the month Amazon would show me a number. $180. $340. Whatever it was that month. And I’d sit there staring at it thinking the same thing every single time: which article did this? I had over two hundred posts. Amazon told me I’d earned money. It never once told me who earned it for me.

So I guessed. For years, I guessed. I updated the posts I felt were working. I added links to the pages I assumed were getting traffic. I let articles that were quietly making money go stale, and I poured entire weekends into articles nobody had visited in four months. I was flying a plane with the instruments switched off — and the worst part is I didn’t even know the instruments existed.

Then I installed NicheOwl.

I still remember the first hour. Someone in Ohio, 9:47 PM their time, reading my cordless drill roundup on a Windows PC. They stayed four minutes. They scrolled to 92% of the page. And then they clicked the third Amazon link and went off to buy.

A real person. After years of writing for an abstraction, there was a human being on the other end of it — and I could see them.

The first week hurt. I found out that my highest-traffic article — the one I was proudest of, 268 visitors a month — contained no affiliate links at all. Not one. It had been earning me nothing for eleven months. I found another post pulling 96 visitors with zero clicks, because the links had silently broken during an edit I’d long forgotten making. I’d been leaking money in places I would never have thought to look.

Within a month, I stopped guessing entirely.

Now I know which article to fix on Monday morning, because the dashboard tells me which one dropped 82% overnight. I know which of my new posts Google still hasn’t found, because there’s a badge with a number sitting right there. I know that 45% of my clicks come from the bottom third of the page — so that’s where the comparison table goes now, on every post I write.

That’s the real shift. Not “more data.” The end of guessing.

And if you’re not an Amazon affiliate at all, don’t close this tab. I run Google AdSense and Ezoic on some of my sites, and I’ll admit I almost skipped this plugin because it had “Amazon” written all over it. That was a mistake, and it cost me months.

Here’s the thing nobody says out loud about display ads: AdSense and Ezoic pay you for sessions and for time on page. That’s it. That’s the whole game. And your Ezoic dashboard will happily tell you your RPM to two decimal places — but it will never tell you which article to write next. It won’t tell you which post is quietly dying. It won’t tell you that the thing you published nine days ago still hasn’t been found by Google. It won’t tell you that one page holds a reader for six minutes while another loses them in eleven seconds.

Be clear about what this plugin is: it does not show you your ad earnings — that’s what your Ezoic and AdSense dashboards are for. What it shows you is the machinery that produces those earnings. Most Engaging tells me the article format that actually holds readers, so I write more of those. Low Engaging tells me which high-traffic pages are bleeding sessions in under thirty seconds — every one of those is RPM I’m throwing away. Publish Tracker tells me whether my newest post has been discovered yet. Gone Quiet tells me what died while I wasn’t looking. Winners & Losers tells me what’s climbing, so I can double down while it’s still climbing.

More sessions, longer sessions, faster indexing. That’s an ad-revenue strategy whether your money comes from Amazon, from AdSense, from Ezoic, or from all three at once — which, for most of us, it does.

And then I looked at the price, and honestly thought I’d misread it.

Every serious analytics tool I’d considered before this wanted a subscription — monthly, priced per site, with the reports I actually needed sitting behind the tier above the one I could afford. I run more than one site. I’d done that arithmetic before and walked away from it every single time.

NicheOwl is a one-time payment. Lifetime. Unlimited sites. Pay once, install it on every site you own right now, and on every site you build after this. No per-site fee. No monthly bill arriving in your inbox forever. No locked tier where the one report you need is the one you can’t reach. I have paid more than this for a single month of a tool that told me less.

If you publish Amazon affiliate content, hear this one thing clearly: this plugin cannot show you last year. It starts recording the day you install it. Every visitor before that moment is gone forever, and no tool on earth can get them back. Every day you wait is a day of data you will never see.

I’m not going to pretend it does everything — there’s an honest section further down listing exactly what it can’t do, and I’d rather you read that before you decide. But I’ll tell you this much: I have never taken it off a site, and I never will.

Stop guessing which article makes you money

One-time payment. Install it on every site you own — today’s and tomorrow’s.

Get NicheOwl →

Lifetime deal · Unlimited sites · Instant download · No monthly fee

What follows is the complete walkthrough. NicheOwl has around thirty separate report views, and I’ve gone through every single one — what it shows, how it’s calculated, and when you’d actually open it. Screenshot for each.

NicheOwl at a glance

Version reviewed 3.16.8
What it does Amazon affiliate link-click tracking + full visitor analytics + publish, campaign and indexing tracking
Requirements WordPress 5.0+, PHP 7.0+, MySQL
Footprint One PHP file (~9,100 lines), 5 custom database tables, no build step, no external SaaS
Report views ~30, grouped into 9 top-level sections
Third-party calls Optional only — country lookup (country.is), IndexNow/Bing submission, daily link checks
Price one-time lifetime deal, unlimited sites, no monthly fee (see it on Gumroad)
Licence Lifetime Licence code; the NicheOwl™ name and branding are reserved, and builds are individually fingerprinted
Best for Amazon Associates publishers, and any AdSense or Ezoic blogger who needs to grow sessions and time on page

Installation, and how the tracking actually works

It installs like any normal plugin — Plugins → Add New → Upload Plugin, activate, and a NicheOwl menu appears. Activation creates its five tables and schedules its cron jobs. No account, no API key required to start, and no tracking script loaded from someone else’s server.

On first run you get a three-step welcome checklist: turn on SubID, open one of your articles in a logged-out tab, come back to Overview. The box removes itself the moment your first real visitor is recorded.

The mechanism is worth understanding before you look at any report, because everything downstream depends on it. NicheOwl hooks the_content and rewrites every Amazon link it finds — short amzn.to and a.co links as well as full amazon.* URLs. Each becomes an internal tracking URL carrying a signed, cache-stable page token. Click it, the plugin records the click and 302-redirects to Amazon. Three details make this sturdier than the usual JavaScript click handler:

  • It works without JavaScript. Because the token is rendered server-side into the link itself, clicks are still recorded on archive pages, with visit tracking off, and for readers with scripts blocked. The browser only adds an optional session key on top, for exact per-page correlation.
  • Rapid double-clicks don’t inflate your numbers. Deduplication runs through MySQL named locks with a database-mutex fallback, plus fixed-window rate limits — 120 clicks per minute per IP, 5,000 per minute site-wide.
  • Prefetched and hidden pages don’t create phantom visits. Nothing is recorded until the page is actually visible, and back/forward-cache restores restart tracking exactly once.

On the monetisation side the rewriter can add rel="nofollow sponsored", force new-tab opening, append a unique ascsubtag SubID so Amazon’s own reports show which page produced a sale, and route each visitor to their country’s Amazon store using per-marketplace tracking IDs — a OneLink-style redirect that works whenever the product’s ASIN is readable.

One upgrade note: coming from 3.16.2 or older, purge your full-page or CDN cache once. The tracking script is signed now, and cached pages will keep serving the old one until you flush.

Section 1 of 9

📊 Overview — the live visitor log

The default screen is a live feed of who is on your site right now. It refreshes every 15 seconds, the newest row gets a teal accent bar, and anyone still active shows a pulsing green Online badge instead of a duration.

NicheOwl Overview dashboard showing the live visitor log with country, article, source, device, dual timezone columns and a world visitors map
Overview — live visitor log on top, visitors map below. The header carries Period, Source, live search and three counters.

Each row gives you country with flag, landing article, new versus returning, traffic source, device, and time stayed. The column that separates this from every other analytics tool is the double clock: the visitor’s own local time and your dashboard time, side by side. When you publish from one timezone for readers in another, that removes an entire category of mental arithmetic — you can see immediately that your spike is happening at 9 PM in the US, not at some abstract UTC hour.

You can change the display timezone from a dropdown in the panel header, and every time column and every export follows it. Worth knowing: the display timezone is yours to choose, but the plugin’s period boundaries (what counts as “today”) are anchored to Asia/Dhaka.

Below the log sits a visitors map — dot size scales with visitor count, countries with someone reading right now pulse green, and the ten biggest countries appear as chips underneath. It’s a grid projection rather than a real world map, so it reads as a distribution chart, but it does show where your audience clusters.

Traffic sources are unusually well categorised. Alongside the expected search engines and social networks, NicheOwl separately detects AI assistants — ChatGPT, Perplexity, Gemini, Claude, Copilot, Grok, Poe, You.com and Phind. If you’ve wondered how much traffic now arrives from an AI answer rather than a blue link, this is the plugin that tells you, and there’s a dedicated AI option in the Source filter to isolate it. UTM tags win when present, and utm_medium is evaluated before source-brand matching so paid and email traffic can’t contaminate your Organic numbers.

Section 2 of 9

📚 Articles — twelve reports about your content

This is the biggest section, and the one most worth learning properly. Twelve views, each answering a different question about the same body of content. They share the top Period and Source filters unless noted.

📈 Most Visited

Most Visited Article report listing every article by visitor count with average time, top country, top source, clicks and CTR
Most Visited — the plain traffic ranking, with clicks and CTR attached to every row.

The straightforward one: every article ranked by visitors, with average time on page, top country, top source, Amazon clicks and CTR. What makes it more useful than a standard “top pages” list is that the money columns sit right there. You can see at a glance that your number-one article by traffic is not your number-one by clicks, which is the entire point of installing this plugin.

🔥 Most Hot

Most Hot Articles report ranked by visits with ties broken by average time on page
Most Hot — same population as Most Visited, but ties are broken by engagement rather than arbitrarily.

Almost the same list, with one deliberate difference: when two articles have identical visit counts, the one with the higher average time on page ranks first. On a small site that rarely matters. On a site with hundreds of articles sitting at similar traffic levels, it stops the ranking being arbitrary and surfaces the better page of the pair.

🔍 Google Traffic

Google Traffic view with Google visitor counts, Google share percentage and Amazon clicks made by Google visitors
Google Traffic — per-article Google share, and how well Google visitors specifically convert.

Per-article Google search visitors set against all-source visitors, with a Google share percentage, average time, average scroll, and — the column that earns it a place — Amazon clicks made specifically by Google visitors. Five summary cards up top give you site-wide Google visitors, all visitors, share, clicks from Google and Google CTR.

This view always reports Google sessions no matter what the Source dropdown says, deliberately, so the number never changes meaning under you. It’s how you find out whether your search traffic converts as well as your other traffic. On most affiliate sites it doesn’t, and knowing the size of the gap is the start of fixing it.

📈📉 Winners & Losers

Winners and Losers report comparing each article's visits and clicks against the previous equal period with trend badges
Winners & Losers — this period against the previous equal period, for visits and clicks, with a trend badge per row.

Every article’s visits and clicks for the current period set against the previous equal period, with the raw change and a badge: 📈 +262%, 📉 −41%, 🆕 New, 💤 Stopped, or ➖ Same. Choose “Last 30 days” and it compares against the 30 days before that; choose “Last 7 days” and it compares against the previous 7.

It’s the momentum view. Most Visited tells you what’s big; this tells you what’s moving — which matters more, because a page that has doubled in three weeks deserves attention that a flat evergreen page doesn’t. The 💤 Stopped badge is your early warning that something got deindexed or lost a ranking.

📅 Today vs Previous Days

Today vs Previous Days grid showing each visited article with side-by-side day columns and a status badge
Today vs Previous Days — one column per day for eight days, the selected day highlighted, and a status per article.

This is the one people underestimate. Pick a day tab (Today, Yesterday, 3rd Day through 8th Day) and you get every article visited on that day, with side-by-side columns showing how many visits it had on each of the other seven days. The selected day is highlighted with a teal tint so your eye tracks along the right column.

The status column classifies each row: Running Daily (visited yesterday too), Back After N Days, Back After More Than 7 Days, or New Today. That single column separates your reliable earners from your one-off flukes, which no traffic total can do.

Three sort orders are available: 🔝 Most Traffic, 🔻 Low Traffic, and — only on the Today tab — 🟢 Live Visiting, which puts articles with someone reading right now at the top and marks them with a live badge. Switch to a past day and it falls back to Most Traffic automatically, because “live” is meaningless in the past. This view ignores the global Period filter (it has its own day tabs), so the Period control hides itself while you’re here.

Read these two together. Most Engaging and Low Engaging are the same measurement pointed in opposite directions, and the pair is more informative than either alone: one shows you the format and depth that holds your readers, the other shows you which pages fail to. Compare a top row from each and the structural difference is usually obvious.

⏱️ Most Engaging

Most Engaging Articles ranked by average time on page with average scroll depth alongside
Most Engaging — ranked by average time on page, with scroll depth as the supporting column.

Every article ranked by average time on page, with average scroll depth beside it, plus visitors, top country, top source, clicks and CTR. The scroll column is the check on the time column: six minutes at 91% scroll means people genuinely read it; six minutes at 30% scroll usually means a slow page or a distracted tab.

Practically, this is your template list. The articles at the top of this report are the ones whose structure, intro and formatting you should be copying into new posts.

🐢 Low Engaging

High Traffic Low Engagement view with mode toggle, time thresholds and articles ranked by visitors
Low Engaging in “By Most Visitors” mode — the biggest audiences being lost fastest, weakest first.

Two rankings behind one toggle, and choosing correctly matters:

  • 🐢 By Weakest Time — the classic list, sorted by the worst average time on page. Useful, but it will hand you a page with nine visitors and a two-second average, which isn’t worth your afternoon.
  • 🚨 By Most Visitors — the same qualifying threshold, but ranked by how many visitors the page gets. This surfaces the articles leaking the most readers, so you fix the expensive problems first.

The threshold is switchable between 10, 30 and 60 seconds, and the button labels say “30s or less” rather than a vague “low”, which matches the actual maths. Every value and the qualifying average use only the selected period and source — the plugin explicitly recalculates from raw visits rather than mixing a recent window into a longer one, and there’s a note under the table saying so. That precision came from a real bug fix, and stating it openly is a good sign.

Read the top row of “By Most Visitors” as an emergency. An article sitting high on that list is telling you something very specific: it is ranking. Google is sending it real traffic, the keyword is won, the hard part is already done — and then readers land on it and leave in under thirty seconds.

That is the most expensive kind of failure on a content site, because you cannot buy your way to a ranking but you can fix a page. Every one of those visitors is an AdSense or Ezoic session ending early, an Amazon link nobody scrolled far enough to see, and a bounce signal going straight back to Google. Nothing you write next month will be worth as much as fixing the article that is already ranked and already being wasted. These are the pages you fix first — this week, not eventually.

When you open one, look at the scroll column beside the time column, because together they name the problem. Low time and low scroll usually means the intro failed — wrong search intent, slow load, or a wall of preamble before the answer. Low time with decent scroll means people skimmed to the bottom, didn’t find what they wanted, and left; that’s usually a content-depth or comparison-table problem. Either way you now know which end of the article to rewrite, which is a far better starting point than “this post underperforms.”

🚀 Publish Tracker

Publish Tracker listing recently published posts with status badges, first-visit timing, visit counts and a Still No Traffic filter
Publish Tracker — every post in a chosen publish window, with how long it took to get its first visitor.

Pick a publish window (today through last 30 days, or a custom range) and you get every post from that window with its top source and country, published date with a “4 days ago” note, when the first visitor arrived, how many days after publishing that took, total visits, last visit, and a status in plain words: Getting Traffic, First Visit Same Day, Just Got First Visit, No Visit Yet, Traffic Stopped.

Four filter buttons switch the population: ✅ Got Visits, 🚫 No Visit Yet, 📋 All Posts, and the one that earns its keep — ⚠️ Still No Traffic, published three or more days ago with zero visitors ever, carrying a live count badge. On a site publishing several articles a week, that badge is your indexing problem expressed as a single number. Seven sort orders are available, from newest published to no-visits-first.

🌱 First Visits

First-Time Visits report showing each article's very first visit ever with days to first visit, country, source and device
First Visits — each article appears once, the moment it gets its very first visitor ever, then never again.

An article appears here on the day it receives its first visitor in its entire life, and then never appears again. Alongside it you get the published date, days to first visit, the exact first-visit timestamp in both timezones, and the country, source and device of that first reader.

It sounds like a novelty. It isn’t — it’s your discovery log. When a post that has sat untouched for six weeks suddenly gets its first visit from Google, that’s the moment it entered the index, and this is the only view that records it. Watching which source delivers first visits (Google versus Bing versus an AI assistant) also tells you where new content actually gets discovered on your site.

💤 Gone Quiet

Gone Quiet view listing previously popular articles with no recent visits, sorted by lifetime visits
Gone Quiet — pages that used to perform and have since gone silent, biggest lifetime traffic first.

Articles that were getting visitors and then stopped, over a 7, 15 or 30 day window, sorted by lifetime visits so your formerly-best pages appear first. That sort order is the point: a page with 1,800 lifetime visits going silent is a completely different problem from one with 12. Columns are total visits, last visited, and an amber “idle for” counter in days.

Like Publish Tracker, this view has its own 7/15/30 day buttons, so the global Period selector hides while you’re on it. It does obey the Source filter, and the heading tells you which source you’re looking at — so you can ask “has this gone quiet on Google specifically?” rather than only site-wide.

Good News tab showing articles that were quiet and then received a comeback visit, with was-quiet-for and visited-again-after columns
The 🎉 Good News tab — the same view inverted. Every row is an article that came back from the dead.

That second tab is the part most people miss, and it’s the reason this view is worth checking weekly rather than monthly. 🎉 Good News lists articles that were quiet for at least your chosen window and then received a fresh visit. Two extra columns tell the story: was quiet for (amber) and visited again after (green), both counted in Dhaka days, with tooltips showing the exact quiet-since and comeback dates.

An article leaves Gone Quiet automatically the moment it appears here — a comeback visit resets its idle timer, so the two lists never contradict each other. Sorting is newest comeback first, with a 365-day lookback.

Why it matters practically: this is your feedback loop for content refreshes. You update a dead post on Monday; if it worked, it shows up in Good News with the exact number of days it took to come back. Recovery tracking is genuinely rare in analytics tooling, and without it you’re left guessing whether a refresh did anything — which is the exact problem this plugin exists to end.

🔎 Visit Filters

Eight one-click questions about your archive, each with a live count badge so you can see the size of a problem before you click into it. It’s split into two groups that work completely differently, and understanding the difference is what makes this view powerful.

Visit Filters showing the Never Visited lifetime filter with articles that have zero visits ever and no last-visit date
Lifetime group — 🚫 Never Visited. Zero lifetime visits, “Never” in the last-visit column, and a dash in the window column because lifetime filters don’t use one.

The lifetime group — Never Visited, Visited Once, Visited 2 Times, Visited 3 Times — counts every visit ever recorded for that article. Never Visited genuinely means nobody, ever, has opened that page. The reason this view can show you that at all is a technical decision worth appreciating: the query starts from every published post and left-joins the visit data onto it, rather than starting from the visits table and working backwards. Analytics tools that begin with recorded sessions are structurally incapable of showing you a page nobody has visited, because there’s no session to start from. This is the report that finds the content your site has effectively lost.

Visited Once, Twice and Three Times are the near-misses — pages that got a trickle and then nothing. Those are often better refresh candidates than a never-visited page, because a single visit proves the page is at least indexed and reachable.

Visit Filters showing the No Visits 15 Days rolling window with high-lifetime-visit articles listed first and zero visits inside the window
Rolling-window group — No Visits · 15 Days. Note the column header changes to “Visits · last 15d”, and articles with the biggest lifetime totals now sit at the top.

The rolling-window group — No Visits in 7, 10, 15 or 30 days — asks a different question entirely. It looks only inside an exact rolling window ending right now, not a calendar month. An article with 1,841 lifetime visits still appears here if it got none in that window, and the column header changes to match the window you picked.

The sort order flips too, deliberately. Lifetime filters list newest published first. Window filters put the biggest all-time articles first, because an article with 1,841 lifetime visits that has gone silent for 21 days is an emergency, while a 12-visit page going quiet is noise. Your worst problem is always the top row.

Two behaviours to internalise. First, lifetime totals ignore the Period filter at the top completely — they’re absolute facts about an article, not period measurements. Second, the counts always include every traffic source regardless of the Source dropdown, which is why the Source control hides itself on this view. “Never visited” would be quietly meaningless if it actually meant “never visited by organic search.”

Columns across both modes: article, published date, lifetime visits, visits inside the window, last visit and days since last visit — with an idle counter in amber so long gaps jump out. Empty states are written properly too, naming the filter you’re on rather than showing a blank table.

Visit Filters or Gone Quiet? They look similar and answer opposite questions. Visit Filters starts from every published post, so it finds content that was never visited at all — and it’s the only place with a 10-day window. Gone Quiet starts from articles that were being visited and then stopped. Never-discovered versus formerly-popular. The plugin cross-references them in a note on each view so you don’t end up in the wrong one.

🕳️ Monetization Gaps

Monetization Gaps report showing articles getting visitors but containing no Amazon links, with an Add links shortcut
Monetization Gaps — traffic with nothing to click. Each row has a one-click jump into the editor.

Articles that are getting real visitors and contain no Amazon links at all. Sorted by visitors, with average time and average scroll so you can judge whether the audience is engaged enough to be worth monetising, and an ✏️ Add links shortcut straight into the post editor on every row.

This is the single highest-return report in the plugin for most sites. An informational post pulling 268 visitors a month with zero affiliate links is free money sitting on the table, and it will never show up in any report that starts from “articles with Amazon links”.

Section 3 of 9

💰 Amazon — eight reports about links and products

🎯 Most Clicked Links

Most Clicked Amazon Links report ranking individual links by click count with the article each sits in
Most Clicked Links — a site-wide leaderboard of individual links, plus a second panel breaking clicks down by article.

A ranked leaderboard of individual Amazon links across the whole site, with the article each one sits in and a “+N more” marker when the same link appears in several posts. A second panel underneath, Clicked Any Amazon Links, pivots the same data by article and adds top country and top source per link.

Note the export controls on this one: it offers two different exports — the ranked summary, and full click details (Dhaka time, visitor local time, article, article URL, Amazon link, country, source, device). If you want raw click-level data for a spreadsheet, that second pair of buttons is where it lives.

💰 Best Amazon Articles

Best Performing Amazon Articles ranked by visitors among articles that received at least one Amazon click
Best Amazon Articles — only articles that have earned at least one click, ranked by visitors.

The population here is deliberately narrow: only articles that received at least one Amazon click in the period, ranked by visitors. That filter is what makes it useful — it’s your proven-monetising content, and the CTR column tells you which of those proven pages still has headroom.

It’s positioned directly beside Low Amazon Clicks in the navigation, which is a genuinely good piece of information design: best and worst in the same place, so you can compare what the winners do differently.

🟠 Low Amazon Clicks

Low Amazon Clicks view with summary cards, CTR threshold buttons and articles ranked weakest first
Low Amazon Clicks — articles with links and traffic but weak click-through, weakest first, with a direct edit shortcut.

Articles that have at least one tracked Amazon link, cleared a minimum visitor count, and are still converting below a CTR threshold. Both controls are adjustable in the view (2/3/5/10% CTR, 5/10/25/50+ visitors), so you can tighten it as your traffic grows. Three summary cards tell you how many articles need attention, how many of those have zero clicks, and how many visitors are reaching them — that last number is your loss, quantified.

The ordering is smarter than a plain sort: weakest CTR first, then largest wasted audience. An article with 250 visitors and zero clicks outranks one with 12 visitors and zero clicks, because that’s the order you should fix them in. CTR is shown to two decimals specifically so a row included under “below 2%” can’t round up and display as 2%.

🛍️ Articles with Amazon Links

Amazon Link Article Visits report showing visited articles containing Amazon links, with link count, visitors, clicks and CTR
Articles with Amazon Links — every visited article carrying a link, whether or not anyone clicked.

Every visited article that contains Amazon links, clicks not required. The extra column here is Amazon links — how many tracked links that article actually holds.

That column is the reason to open this view rather than Best Amazon Articles. Nine links and two clicks is a different diagnosis from three links and two clicks: the first is a placement or relevance problem, the second may simply be under-linked. It’s also the report that catches an article where your links silently broke during an edit.

🛒 Top Products

Top Products report grouping clicks by ASIN across the site with editable product name fields
Top Products — clicks grouped by ASIN across the whole site, with an inline field to name each product.

Clicks grouped by product rather than by link, so the same item promoted across nine roundups aggregates into one row. Each row has a small inline form to give the ASIN a friendly name, and once named that name is used everywhere the ASIN appears.

Naming your top twenty ASINs is a fifteen-minute job that pays back permanently, because after that every report reads “DeWalt 20V MAX Cordless Drill” instead of “B0C7KJ4M1V”.

The limitation is stated in the view itself and you should take it seriously: grouping requires a readable ASIN, which means full /dp/ URLs. If your articles use amzn.to shortlinks everywhere, this report will be thin. That’s worth knowing before you settle on a linking style.

📍 Link Positions

Link Positions report with top, middle and bottom share cards and per-link position badges
Link Positions — the share of clicks going to the top, middle and bottom third of your articles.

Three cards at the top give the site-wide split between the top, middle and bottom third of your articles. Underneath, every tracked link with its position bucket and click count. Position is captured as the plugin rewrites content, so it reflects the real order links appear in the post; articles with a single link get a “Single link” label rather than a misleading “Top”.

This is the closest thing NicheOwl has to a conversion-optimisation tool. If 45% of your clicks come from the bottom third, your readers are getting to the end before deciding — which argues for a comparison table down there, not a bigger button at the top. If the top third dominates, your intro is doing the selling and the rest of the article is decoration.

🥇 First Clicks

First-Time Clicks report showing the first ever click on each Amazon link with country and source
First Clicks — the moment each link, or each article, earned its very first Amazon click.

Two modes behind a toggle. By product shows the first-ever click on each Amazon link. By article shows the first-ever Amazon click an article received, along with which product got clicked first.

“By article” is the more interesting of the two: the first product a reader clicks on a new page tells you what they actually came for, which is often not the item you positioned as the top pick. Each mode has its own export.

🩺 Link Health

Link Health report with status badges for each tracked Amazon link including broken, unreachable, redirect and OK
Link Health — every tracked link with a colour-coded status from the daily automatic check.

Every tracked Amazon link with a status badge from the daily automatic check: OK, Broken (404), Unreachable, Redirect (301), Indeterminate (503) or Not checked. If you haven’t enabled the daily check in Settings, the view tells you so and explains that statuses will fill in within a day of turning it on.

The Indeterminate badge deserves credit — rather than calling a 503 “broken”, the plugin admits it doesn’t know. Amazon blocks automated requests often enough that this honesty matters; confirm a flagged link by hand before you go editing. Broken links also feed the Alerts page and can trigger an email the same day.

Section 4 of 9

🎯 Campaigns — measure a specific push

This is the section that changes how you use the plugin. Everything else in NicheOwl reports on your site as a whole. Campaigns lets you draw a box around a specific set of articles and links for a specific number of days, and report on just that.

Campaign creation form with name, days and a paste box for article and Amazon links, plus a list of running and finished campaigns
Starting a campaign — name it, set the days, paste links. Running campaigns show a live badge.

Creating one takes three fields: a name, a number of days (1 to 90), and a paste box. Into that box go article URLs, Amazon product links, or bare ASINs — mixed together is fine.

The clever part is what happens when you paste a product link. The campaign automatically follows that product in every article on your site that uses it. One paste can therefore pull in several links and several articles. If that’s more than you wanted, ✏️ Edit lets you untick anything — and campaigns stay editable while running, so you can rename, extend or shorten the days, drop an article, or add more links mid-flight.

Your campaigns list shows each one with a live badge or a finished badge, days, article count, link count, and Report / Edit / Delete actions.

Campaign live report with seven summary cards, a full visitor detail log, day-by-day table, per-article and per-link breakdowns and country, source and device grids
The campaign report — seven cards, a per-visit log, day-by-day rows, article and link breakdowns, and three distribution grids.

The report is the deepest single view in the plugin. Seven summary cards: visitors, Amazon clicks, CTR, average time, average scroll, new versus returning, and countries reached. Then, in order:

  • 🧾 Full Visitor Details — one row per visit, up to the latest 500: time, article, anonymous visitor ID, country, source, referrer, device, new/returning, time stayed, scroll depth, Amazon clicks made, which link was clicked and when. Filter to All visits, 🛒 Clicked Amazon or No click. Clicks are matched to visits by exact page session, not guessed from IP — which is what makes the “this specific reader clicked this specific link” claim trustworthy.
  • 📅 Day by day — visitors, clicks and CTR for each day of the campaign, so you can see whether a push decayed or built.
  • 📄 Articles in this campaign — per-article visitors, new/returning split, average time, average scroll, clicks, CTR, top country and top source.
  • 🛒 Product links clicked — which links inside the campaign actually earned clicks.
  • Three distribution grids — countries, sources and devices for the campaign’s traffic only.

Campaigns obey the top Source filter throughout — every card, row and breakdown — with a clear “no data for selected source” message rather than a misleading zero. And the whole report exports to CSV or Excel during or after the run.

Concretely: you refresh five kitchen roundups and want to know if it worked. Paste the five URLs, set 14 days, and at the end you have visitors, clicks, CTR, engagement, day-by-day decay and per-article performance for exactly those five posts — separated from the rest of your site. That’s an answer you cannot assemble from a normal analytics tool without building a segment by hand.

Every report you’ve seen so far is in one plugin

No tiers. No locked reports. No per-site licence to renew every year.

Get NicheOwl — Lifetime →

Remember: it can only record from the day you install it

Section 5 of 9

Trends and Insights view with visitor and click cards, a daily bar chart, a day-and-hour heatmap, and device, country and source breakdowns
Trends & Insights — period-over-period cards, daily visitors versus clicks, a posting-time heatmap, three breakdowns.

Three summary cards compare the current period against the equal period before it, so a 23% rise is shown as a rise rather than a bare number. The daily chart plots visitors and Amazon clicks as paired bars, which makes divergence obvious — a day where the teal bar grows and the amber bar doesn’t is a day something went wrong on the page, not with your traffic.

The heatmap answers “when should I publish?” by plotting visits across day of week and hour, darker meaning busier. Underneath, three breakdown columns cover devices, top countries and traffic sources with proportional bars. Standard analytics, done properly, and filtered by the same Period and Source controls as everything else.

Section 6 of 9

🔍 Checker — the debugging tool

URL and Link Checker with pasted article URLs, a results summary table and an expandable deep visit history
The Checker — two paste boxes, up to 20 items each, with expandable full history on every result.

Two boxes, and they work in opposite directions.

Paste article URLs (up to 20, one per line) and you get visits, average time, average scroll, Amazon clicks, CTR and last visit for each — plus an expandable Deep details panel with the individual visit history: time in both zones, an anonymous visitor ID, country, source, referrer, device, new/returning, time stayed and scroll percentage.

Paste Amazon links, ASINs or tracking IDs into the other box and you get the reverse lookup: every article that uses that link, plus its complete click history — click time, visitor ID, article, product link, ASIN, tracking tag, country, source, referrer and device. When you’ve placed the same product across fifteen roundups and need to know which placement actually works, this is the answer in one paste.

Everything respects the active Period and Source filters. Zero-click rows are hidden and “last click” means the last click inside the period, with a clear message when nothing happened rather than a misleading dash. Both directions have their own Deep details exports.

There’s also a live global search in the dashboard header, available from any view: start typing and a dropdown shows matching articles with their visits and clicks, and matching Amazon links with click counts. Click any result and it opens in the Checker.

Section 7 of 9

🔔 Alerts

Alerts view with Needs attention and Good news lists plus separate traffic drop and zero clicks sections
Alerts — one window picker, eight counters, then separate scannable sections for each kind of change.

Alerts compares today against yesterday, yesterday against the day before, or the last 7 days against the previous 7. Two headline lists — 🔴 Needs attention and 🟢 Good news — are written as full sentences rather than metric rows, so you read “X is losing visitors — 4 today, had 22 yesterday ▼82%” instead of decoding a table.

Below them, the same data split into six focused sections with their own counts and empty states: 🔵 New traffic, 🔻 Traffic drop, 🛒 Click drop, 💸 Zero clicks, 🔄 Comeback and 🚀 Fast growers.

The rules are printed at the bottom of the page, which is what makes the page trustworthy: a drop means visitors or clicks fell to half or less with at least 3 before; growth means doubled or brand new with at least 3 now; new traffic means visitors now and none in the comparison period. Each section shows the top 20, and the export gives you the full list.

💸 Zero clicks is the money one — articles that contain Amazon links, got real visitors, and produced no clicks at all. Traffic fine, monetisation broken.

Three alerts can also arrive by email: broken link found, article traffic spike (3× normal, minimum 20 visitors), and a top-10 article going quiet for two days.

Section 8 of 9

📇 Bing Indexer

Bing Indexer view showing per-post Bing status badges, submission times, days-to-index and a submission log
Bing Indexer — automatic IndexNow submission on every publish and update, with an honest log of Bing’s replies.

Every time you publish or update a post, NicheOwl submits the URL to Bing via IndexNow. Nothing to configure: the plugin generates its own key and writes it as a real file in your site root, which matters because many hosts block dynamically served key files and Bing then silently rejects everything you send. A 90-second guard prevents double submissions when publish and update fire together.

The status column is refreshingly literal. ✅ Indexed — got Bing visitor means a real Bing visitor arrived, which is proof rather than inference. ✅ Crawled by Bing comes from the Bing Webmaster API if you add a free key. 📤 Submitted — waiting and Not submitted yet mean exactly what they say. A Days to Bing column shows how long each post took, and four summary counters give the site-wide picture.

Bulk actions cover 📤 Submit latest 20 and 🔎 Check latest 30, and the 🧪 Test IndexNow button is the feature I’d have wanted most: it submits your homepage, verifies from outside that your key file is publicly readable, and tells you precisely what’s broken. Combined with the visible submission log — every request and Bing’s exact response — you never have to guess whether submissions are working. Paging is preserved too: pressing Submit on page 9 returns you to page 9, not page 1.

Note that this is Bing and IndexNow partners only. Google index checking was removed in 3.13, so this is a partial indexing picture.

Section 9 of 9

🏆 Top 10

Top 10 Hot Articles leaderboard with medals for the top three
Top 10 Hot Articles — the most-visited ten, with clicks and CTR alongside.
Top 10 Money Makers leaderboard ranked by Amazon clicks with CTR and average time
Top 10 Money Makers — the same ten slots ranked by Amazon clicks instead of visitors.

One button, two tabs: 🔥 Top 10 Hot Articles ranked by visitors, and 💰 Top 10 Money Makers ranked by Amazon clicks. Medals for the top three, and both carry clicks, visitors, CTR, average time and last visit so the two lists are directly comparable.

It’s the two-minute morning check. If the same articles top both lists, your traffic and your monetisation are aligned. If they’re different articles — which is the usual case — the gap between the two lists is your to-do list.

Settings, privacy and themes

NicheOwl settings page grouped into tracking, monetization, automation, email alerts and appearance sections
Settings — one page, grouped into tracking, monetisation, automation, alerts and appearance.

Everything is on one page, and the defaults are sensible: bots ignored, IPs hashed, nofollow added, admin clicks excluded so your own testing never pollutes the data. What you switch on yourself are the monetisation extras (SubID, local-Amazon redirect with per-marketplace tracking IDs, affiliate disclosure) and the automation (weekly email digest, daily broken-link check, data retention in days).

On privacy the plugin is better behaved than most analytics tooling:

  • Raw IP addresses are never stored. Where a visitor identifier is needed, you see an anonymous hash.
  • Country detection prefers trusted server or CDN headers. The HTTPS country.is fallback is the only outbound call, and it can be turned off entirely.
  • Proxy IP headers are ignored unless explicitly allowed through a filter, so a spoofed header can’t rewrite your geography.
  • Do Not Track can be honoured (off by default). With DNT active, tracking stops but affiliate redirects still work — so honouring it costs you nothing commercially.
  • Auto-delete after N days keeps the database from growing forever, and an uninstall option wipes everything.

There’s also an option to let Editor-role users open the dashboard and exports while Settings stays admin-only, and a light theme.

The same NicheOwl overview dashboard rendered in the light theme
The same Overview in light theme — useful in a bright room, or when you’re screenshotting for a client.

One more small courtesy: NicheOwl suppresses other plugins’ admin notices inside its own pages, so licence nags and cache banners don’t clutter the dashboard.

Exports, and what’s under the hood

Every report — and I checked all thirty — has CSV and Excel buttons that respect the active period, source, day tab and sort order. The Excel export is a genuine .xlsx written directly with PHP’s ZipArchive, not a CSV with the extension changed, and it falls back cleanly to CSV if your host lacks the Zip extension. CSVs carry a UTF-8 marker so flags and non-Latin names survive into Excel, and cell values are guarded against CSV formula injection.

The engineering deserves a mention because it’s not what you usually find in a single-file plugin. Dashboard requests query and render only the view you’re looking at, rather than building every hidden panel on every page load. Navigation, filters, sorting and pagination update in place without a full reload, with browser back/forward still working and an automatic fallback if the soft navigation fails. The live poller runs only on a visible Overview tab and discards stale responses so a slow request can’t overwrite newer data. Table indexes are laid out for the reports that actually run — composite keys on source plus date, and post plus date. Reporting and export sorting happen SQL-side, which removed an old 2,000-article cap.

The changelog is unusually candid, too. Entries name the exact bug, including embarrassing ones, and several releases exist purely to fix a report that was counting something subtly wrong. That’s a better signal of maintenance quality than a tidy feature list.

What it doesn’t do

  • No revenue data. Earnings import, EPC and A/B link testing were removed in 3.14, and the Amazon Product API integration was retired in 3.16.2 after Amazon’s endpoint changes. Clicks and CTR are your proxy for money. A reasonable proxy — but if you want dollars per article inside WordPress, this no longer provides it, and you’ll be cross-referencing SubIDs in Amazon’s own reports.
  • Bangladesh time is the anchor. Period boundaries follow Asia/Dhaka. You can display any timezone, but “Today” is a Dhaka day.
  • Google indexing status is gone. Indexing is Bing and IndexNow only since 3.13.
  • Short links can’t be grouped by product. Top Products needs a full /dp/ URL. Heavy amzn.to users will find that report thin.
  • Broken-link checking is best-effort. Amazon blocks automated requests often enough that a flag deserves a manual check.
  • No product boxes or comparison shortcodes any more. The old and shortcodes degrade to plain Amazon links now that the Product API is retired.
  • It’s not a general analytics replacement. No funnels, no custom events, no goal tracking, no non-Amazon affiliate networks.
  • Not on the WordPress.org repository. Private build, fingerprinted copies, reserved brand name. Updates arrive by upload.

Who it’s for

If you run one Amazon affiliate site with twenty posts, NicheOwl is more instrument than you need — GA4 and a spreadsheet will do.

If you run a content operation — several sites, a publishing schedule, hundreds of articles, a real need to know which of them are working — it fits a shape generic analytics doesn’t. The views that stand out are the ones built around publishing as a process rather than traffic as a number: Publish Tracker for whether new work gets found, First Visits for the moment it does, Visit Filters for content never seen at all, Gone Quiet for what used to work, Monetization Gaps and Low Amazon Clicks for what’s leaking, Campaigns for whether a deliberate push paid off, and Alerts for what changed while you were writing.

Get NicheOwl — one payment, unlimited sites →

Verdict

4.5out of 5 — for Amazon affiliate publishers working at scale
Category Notes Score
Amazon click tracking Server-side tokens, no-JS support, deduplication, SubID and geo-redirect 5 / 5
Visitor analytics Dual timezone, scroll depth, AI-source detection, live feed 4.5 / 5
Depth of reporting ~30 views, each answering a distinct question rather than repeating one 5 / 5
Campaign tracking Per-visit detail, editable while running, full export 4.5 / 5
Exports Native XLSX and CSV on every single report 5 / 5
Privacy No raw IPs, optional geolocation, DNT support, retention controls 4.5 / 5
Revenue attribution Clicks only — earnings import removed 2.5 / 5
Ease of use Zero-config install; thirty views take a week to learn 4 / 5

What works

  • Click tracking that survives caching, archives and blocked JavaScript
  • Publish Tracker, First Visits and Still-No-Traffic answer questions no other plugin asks
  • Monetization Gaps and Zero Clicks point straight at lost revenue
  • Campaigns give you per-visit reporting on a specific push
  • Paired opposites everywhere — Best beside Worst, Gone Quiet beside Good News
  • Automatic IndexNow submission with a test button that actually diagnoses failures
  • Dual-timezone display throughout, including exports
  • AI assistants tracked as a first-class traffic source
  • Real XLSX exports on every report; sensible privacy defaults

What doesn’t

  • No earnings or EPC data since 3.14 — clicks are the only money signal
  • Period boundaries are locked to Asia/Dhaka
  • Indexing covers Bing only; Google was removed
  • Top Products is thin if you rely on amzn.to shortlinks
  • Product-box and comparison shortcodes no longer render live data
  • Thirty report views is a lot of surface area to learn
  • Private build — no one-click updates from the plugin screen

Bottom line: NicheOwl is not trying to replace Google Analytics, and it shouldn’t. It’s a purpose-built instrument for one job — knowing which of your articles earn Amazon clicks, which ones should and don’t, and whether the thing you published on Tuesday has been found yet. For a publisher running content operations at volume, that specificity is exactly what makes it worth installing.

The data starts the day you install it — not before

Every visitor who reads your site between now and then is a visitor you’ll never get to see. There’s no import, no backfill, no way to recover it later. That’s the only real reason to do this today rather than next month.

Get NicheOwl on Gumroad →

One-time payment · Unlimited sites · Instant download · Works on any WordPress site

Last Updated on August 8, 2026 by Logan Carter

Leave a Reply

Your email address will not be published. Required fields are marked *