=== Fresh Plugins Content Audit ===
Contributors: freshplugins
Tags: content audit, content decay, content refresh, seo, editorial workflow
Requires at least: 6.2
Tested up to: 7.1
Requires PHP: 8.0
Stable tag: 1.0.0
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

AI content audit for WordPress. Score every post for freshness, find what needs updating, and assign the rewrite. No API key required.

== Description ==

Published content ages badly. Statistics go stale, links rot, and posts that once ranked quietly stop earning their place — usually without anyone noticing until a competitor overtakes them.

Fresh Plugins Content Audit audits your published posts and tells you which ones need attention. Each post is scored for freshness by an AI model, with a written reason for every part of the score, so you can see *why* a post was flagged rather than just being handed a number. From there, you assign it to a writer and track it through to done.

Built for B2B content teams maintaining a library they can no longer audit by hand.

**How scoring works**

Every post is scored across three dimensions, each weighted to your preference:

* **Age** — how long since the post was meaningfully updated
* **References** — whether the statistics, sources and links it depends on have gone stale
* **Depth** — whether the coverage still holds up against what the topic now demands

Each dimension comes back with a written explanation, not just a number.

**Key features**

* **AI-powered freshness scoring** — every post scored on age, references and depth, with a reason for each sub-score
* **No API key required** — scoring runs through a managed service. Nothing to sign up for, no key to store on your site, no per-token billing to monitor
* **Team assignment** — assign posts to team members, track status, bulk-assign across a selection
* **Workflow tracking** — follow refresh progress from flagged through to done
* **Custom field and ACF support** — reads content from Advanced Custom Fields, including flexible content and repeater layouts, so page-builder sites score accurately
* **Configurable weighting** — tune how much age, references and depth each contribute
* **Weekly automatic rescoring** — opt in, and Fresh Plugins Content Audit re-scores anything whose score has gone stale once a week. Available on every tier
* **Free tier** — 25 scores per month. Pro removes the cap. Every feature is available on the free tier; plans differ only in how many scores you can run each month

**How this differs from WordPress core AI features**

WordPress 7.0 introduced AI Connectors, which let a plugin talk to an AI provider using a key you supply. Fresh Plugins Content Audit takes a different approach: scoring runs through a managed service operated by Fresh Plugins, so you never obtain, store or rotate a provider API key, and you are never billed per token. Usage limits are applied by plan at the service, and Pro entitlement is verified server-side rather than trusted from your site. If you would rather run your own key against your own provider account, a core-connector-based tool is the better fit — Fresh Plugins Content Audit is built for teams who want the scoring to just work.

**Requirements**

* WordPress 6.2 or higher
* PHP 8.0 or higher
* An outbound HTTPS connection (see External services below)

== External services ==

Fresh Plugins Content Audit relies on external services to score content. Scoring cannot work offline. This section describes every service the plugin can contact, exactly what is sent, when it is sent, and the terms and privacy policies that govern each.

**1. Fresh Plugins API — the Fresh Plugins Content Audit scoring service**

Service: https://api.fresh-plugins.com (operated by Fresh Plugins)

What it is and what it is used for: the managed scoring endpoint. It receives your content, requests a freshness assessment from Anthropic's Claude API on your behalf, applies your plan's monthly usage limit, and returns the references and depth sub-scores with a written reason for each. It exists so that you do not need your own AI provider account or API key.

Data sent: your site URL; the post title; up to the first 3,000 characters of the post's text content (post body plus any ACF or custom fields you have configured for scoring, with HTML removed); the post's word count; and a freshness-age score calculated on your own site from the post's modified date. Pro sites additionally send a Freemius licence installation identifier and an anonymous site identifier, and — on paid licences — a licence key, so entitlement can be verified server-side.

When it is sent: only when scoring runs. That is, when you score a single post from the dashboard, when you score a selection of posts in bulk, 60 seconds after you mark a post "Done" (which queues an automatic rescore), and — on sites with weekly automatic rescoring switched on — once a week via WP-Cron for enrolled posts whose score is more than seven days old, stopping as soon as the monthly allowance is spent. Nothing is sent on page load, on publish, or on activation.

Terms of use: https://fresh-plugins.com/terms/
Privacy policy: https://fresh-plugins.com/privacy/

**2. Anthropic — Claude API**

Service: https://www.anthropic.com — Claude API at https://api.anthropic.com

What it is and what it is used for: the AI model that assesses your content. Your content is not sent to Anthropic by your site directly. The Fresh Plugins API in (1) forwards it and returns the result. Anthropic produces the references and depth sub-scores and the written reason for each; the age sub-score and the overall weighted score are calculated on your own site.

Data sent: the post title, the word count, and up to the first 3,000 characters of the post's text content. Your site URL, the locally calculated age score and any licence identifiers are **not** forwarded to Anthropic, and no date or day count for the post is sent there.

When it is sent: on every scoring request, as part of the same user actions and cron runs described in (1).

Note on terms: you are not an Anthropic customer, and installing Fresh Plugins Content Audit does not create an agreement between you and Anthropic. Fresh Plugins holds the API account, and its use of the Claude API is governed by Anthropic's terms. Anthropic's privacy policy describes how it handles data it receives.

Privacy policy: https://www.anthropic.com/legal/privacy
Consumer terms: https://www.anthropic.com/legal/consumer-terms
Commercial terms (governing Fresh Plugins' use of the API): https://www.anthropic.com/legal/commercial-terms

**3. Google — OAuth and Search Console API**

Services: https://accounts.google.com and https://oauth2.googleapis.com (sign-in and token exchange), https://www.googleapis.com/webmasters/v3/ (Search Console data)

What it is and what it is used for: an optional integration that reads your own Search Console performance figures — clicks, impressions, average position and CTR for the last 28 days — and shows them next to each post's freshness score.

**This integration is switched off in the distributed plugin.** It is gated behind the `FPCA_GSC_ENABLED` constant, which defaults to `false`, and additionally requires OAuth client credentials that are not shipped with the plugin. Unless you deliberately define those constants in `wp-config.php`, Fresh Plugins Content Audit never contacts Google and the feature is not visible in the admin.

Data sent, when enabled: to accounts.google.com, the OAuth client ID, the requested read-only Search Console scope, and a return URL for your own WordPress admin. To oauth2.googleapis.com, the authorisation code or refresh token together with the OAuth client ID and secret, in exchange for an access token; and, on disconnect, the access token to be revoked. To googleapis.com, the access token plus the Search Console property you selected and a 28-day date range, in order to read back your own analytics rows. No post content and no post text are ever sent to Google.

When it is sent: on connect (when you click through Google's consent screen), when you press "Sync Now" or "Sync Search Console", when an expired access token is refreshed during one of those actions, and when you disconnect.

Terms of service: https://policies.google.com/terms
Privacy policy: https://policies.google.com/privacy

**4. Freemius — licensing and checkout**

Services: https://api.freemius.com, https://checkout.freemius.com, https://users.freemius.com

What it is and what it is used for: Fresh Plugins Content Audit uses the Freemius SDK to handle Pro checkout, licence activation and plan entitlement. Freemius is what makes the Pro upgrade and trial work, and what the scoring service checks entitlement against.

Data sent: your site URL and a site identifier, WordPress and PHP version information, the plugin version, and licence or installation identifiers. The SDK asks for your consent before sending anything beyond what a licence check requires; optional diagnostic and usage data is sent only if you opt in at that prompt. You can decline and still use the free tier.

When it is sent: on plugin activation (at the opt-in prompt), on licence or trial activation, during checkout, and on periodic entitlement checks thereafter.

Terms of use: https://freemius.com/terms/
Privacy policy: https://freemius.com/privacy/

**5. Cloudflare — infrastructure, not a separate signup**

Service: https://www.cloudflare.com

Cloudflare is not a service Fresh Plugins Content Audit signs you up to. It is the infrastructure the Fresh Plugins API in (1) runs on: that endpoint is a Cloudflare Worker, so every scoring request passes through Cloudflare's network in transit. It is listed here so you have a complete picture of where your content travels.

Data involved: the same request described in (1), as a matter of transport. Fresh Plugins Content Audit stores no content on Cloudflare.

Privacy policy: https://www.cloudflare.com/privacypolicy/

**6. Gravatar — avatar images in the admin (via WordPress core)**

Service: https://secure.gravatar.com

Fresh Plugins Content Audit's assignment interface shows user avatars using WordPress's own `get_avatar_url()`. On a default WordPress configuration that resolves to a Gravatar image URL, so the browser of whoever is viewing the admin screen requests that image directly. No post content is involved, and Fresh Plugins Content Audit itself makes no server-side request to Gravatar. This is core WordPress avatar behaviour and is governed by your site's Settings → Discussion avatar options; turning avatars off in core removes it.

Privacy policy: https://automattic.com/privacy/

== Installation ==

1. Upload the `freshplugins-content-audit` folder to the `/wp-content/plugins/` directory, or install it from Plugins > Add New
2. Activate the plugin through the 'Plugins' menu in WordPress
3. Open **Content Audit** in the admin menu — your published posts are enrolled automatically as you publish them, and you can enrol existing posts from the dashboard
4. Adjust scoring weights and which post types are tracked under **Content Audit > Settings**
5. Score a post from the dashboard to see its freshness breakdown

Pro is activated through the upgrade link under **Content Audit > Settings**, which opens secure checkout. There is no licence key to copy or paste — entitlement is applied to your site automatically once purchase or trial completes.

Please read the External services section above before scoring content, as scoring transmits post content to a third-party AI provider.

== Frequently Asked Questions ==

= Do I need an API key? =

No. Scoring runs through a managed service, so there is no account to create, no key to store on your site, and no per-token bill to watch. Usage limits are applied per plan by that service.

= What is the free tier limit? =

The free tier includes 25 scores per month. The dashboard shows how many of those you have used. There is no limit on how many posts Fresh Plugins Content Audit tracks — only on how many scores you run each month. Pro removes the monthly limit.

= How does the AI scoring work? =

When you score a post, Fresh Plugins Content Audit sends the post title, the word count, up to the first 3,000 characters of its text content, and an age score it calculates locally from the post's modified date, to the Fresh Plugins API — a Cloudflare Worker operated by Fresh Plugins. That service forwards the title, word count and content excerpt to Anthropic's Claude API, which returns a score and a written reason for the references and depth dimensions. Your site combines those with its own age score, using your configured weights, into the overall freshness score, and stores the result.

Content is sent only when scoring runs. See the External services section for the full disclosure.

= Does this work with Advanced Custom Fields? =

Yes. Many sites keep their real body content in ACF fields rather than the post editor, and a plugin that only reads `post_content` will score those posts as empty. Fresh Plugins Content Audit detects your ACF field structure and reads content from it directly, including flexible content and repeater layouts nested several containers deep. Plain post content and standard custom fields are supported as well — ACF is not required.

= How is this different from WordPress 7.0's built-in AI connectors? =

Core AI Connectors let a plugin talk to an AI provider using a key that you supply and pay for. Fresh Plugins Content Audit instead routes scoring through a managed service operated by Fresh Plugins, so there is no key to obtain, store or rotate, and no usage bill to reconcile. Plan limits and Pro entitlement are enforced at that service rather than trusted from your site. If you would prefer to bring your own provider account, a connector-based tool will suit you better.

= Is my content stored by the AI provider? =

Fresh Plugins Content Audit does not store your content on the scoring service. Handling of data by Anthropic is governed by its own privacy policy, linked in the External services section above.

= Can I stop content being sent externally? =

Yes. Scoring is the only feature that transmits content. If you do not score posts, and you leave weekly automatic rescoring switched off, no post content leaves your site. The assignment and workflow features run entirely locally.

= Which posts does Fresh Plugins Content Audit track? =

By default, published posts and pages. You can change which post types are tracked under Content Audit > Settings. Posts are enrolled automatically as you publish them, and existing posts can be enrolled in bulk from the dashboard.

== Screenshots ==

1. The Fresh Plugins Content Audit dashboard — every tracked post scored for freshness, with a breakdown showing why.
2. Assignments — hand posts to writers and track them through to done.

== Changelog ==

= 1.0.0 =
* Initial release
* AI freshness scoring across age, references and depth, with a written reason for every sub-score
* Reads content from Advanced Custom Fields, including flexible content and repeater layouts nested several containers deep
* Team assignment and workflow tracking, with bulk assignment across a selection
* Configurable scoring weights
* Free tier of 25 scores per month, with usage reported by the scoring service. Enrolment is uncapped on every tier — only scoring is metered
* A one-time data disclosure shown before the first score, with the same detail repeated under Settings > Data & Privacy
* Full External services disclosure covering the Fresh Plugins API, Anthropic, Google, Freemius, Cloudflare and Gravatar

== Upgrade Notice ==

= 1.0.0 =
Initial release.
