WordPress plugin

Live Pricing for Freemius

Freemius pricing, live on your own pages with blocks or shortcodes, in each visitor’s currency, refreshed so it never goes stale.

If you sell through Freemius, every price on your website is a copy of the price in your dashboard, and copies go stale. Live Pricing for Freemius keeps the figure in the page bound to the price in the dashboard: blocks in the editor, shortcodes everywhere else, prices fetched on your server, stored on your site and refetched within seconds of a change.

Blocks and shortcodes

Refreshed in seconds

Each visitor’s currency

Free on WordPress.org

Free on WordPress.org. No premium tier, no account, no licence key. WordPress 6.3 or later, PHP 7.4 or later.

PlugUpp Live Pricing for Freemius

The Problem

Prices typed into pages go stale

If you sell through Freemius, every price on your website is a copy of the price in your Freemius dashboard. Change the price in the dashboard and each page, tile and sentence that quotes it keeps the old figure until somebody opens it in the editor and retypes it.

A price on a page is a copy

A pricing page, a comparison table, a landing page and a figure quoted in a paragraph are separate copies of the same number. Miss one and a visitor is reading a price you no longer charge.

Freemius’s own plugin writes the price at publish time

Freemius for WordPress 0.5.0 writes the price into the page when the page is saved. Measured 2026-09-11: after a dashboard change the page kept the old figure until it was reopened in the editor and updated, and its own README says the front end does not call the Freemius API on every visit.

Every currency is another copy

Sell in dollars, euros and pounds and each figure exists three times over. A page cache holds one rendering of a page, so a server that picks the currency per visitor either gives up the cache or serves one visitor another visitor’s currency.

Live Pricing for Freemius keeps the figure in the page bound to the price in the dashboard. Prices are fetched from the Freemius API on your server, stored on your site and refetched within seconds of a dashboard change, so nobody has to re-save a page for a new price to appear.

The Solution

The page renders whatever the price is now

Instead of a figure typed into the page, the page holds a block or a shortcode, and the plugin renders it from a copy of your Freemius prices that lives on your own site and is kept current.

1

Connect

Add the product on the Products screen: its numeric Freemius product ID and its API Bearer Authorization Token, nothing else. The save fetches the prices and the product’s name, reads the secret key that signs webhooks, and registers the webhook with Freemius for you.

2

Fetch and store

Your server reads the product’s plans and prices from the Freemius API and stores them on your site. The webhook registers itself when you save, and a price change is refetched within seconds.

3

Render

Insert a Freemius price or Freemius buy button block, or put the pflp_price shortcode anywhere a figure belongs. Every currency ships in the page and the visitor’s browser shows theirs.

Nothing about this makes a visitor wait on an API call. Pages render the stored figure, so a slow or unreachable Freemius API cannot slow a page down, and if a refresh ever fails the last good prices stay on the page while an admin notice tells you.

Key Features

Everything a pricing page needs, kept live

Three blocks, three shortcodes, one renderer, and a copy of your prices that is refreshed the moment the dashboard changes.

Blocks and shortcodes, one renderer

Freemius price, Freemius buy button and Freemius currency toggle sit under Widgets in the inserter. The pflp_price, pflp_button and pflp_currency shortcodes do the same thing anywhere else, through the same code, so the two can never drift apart. A shortcode converts to a block in one click, and back.

Refreshed in seconds

A webhook receiver refetches within seconds of a price or plan change in the dashboard. A staleness check is the backstop, and a daily job is the backstop for that.

Each visitor’s own currency

Every price carries all of its currencies, and the visitor’s browser picks theirs: their own choice, then their location, then your default. The toggle lists only the currencies a product is sold in, and renders nothing when there is one.

Checkout links that carry the currency

Buy buttons stay ordinary links to the hosted checkout and gain the visitor’s currency, whether the plugin rendered them or your theme did. One setting opens the checkout in an overlay instead.

The last good price wins

If the Freemius API is unreachable, the stored prices stay on the page and an admin notice tells you. Nothing goes blank, and no figure is ever invented or shown as zero.

Ready-made shortcodes

Every product’s plans and pricing rows are listed on its own screen, with a price shortcode and a button shortcode on each line to copy into a page.

See It In Action

A price in a page, in the visitor’s currency

Put a price in a tile or in a sentence, add the toggle once, and the same page reads correctly in every currency you sell in.

A pricing page rendering live prices, with the currency toggle

Live prices with the currency toggle

A pricing page rendered from the copy of your Freemius prices stored on your site: the headline figure, a buy button and the currency toggle, with no request to Freemius during the visit.

The same page in a second currency

The visitor’s browser swaps every price on the page to their currency, from data already in the HTML. No request comes back to your site, so a page cache or a CDN can never serve one visitor’s currency to another.

The same page in a second currency, swapped in the visitor's browser
The Shortcodes section: the shortest working form of each shortcode, then every plan and pricing row with a ready-made price shortcode and button shortcode

Copy the shortcode from the product’s screen

The Shortcodes section shows the shortest working form of each shortcode with what it renders for your product, then every plan and pricing row with a ready-made price shortcode and button shortcode on each line.

Set Up In Five Minutes

Three screens in the admin, most of the work in the Freemius dashboard

Freemius Pricing in the WordPress admin menu has three screens: Products, Settings and Logs. Add a product with its ID and its API Bearer Authorization Token, and the rest is on the page.

The Products screen: every configured product with its plans, currencies, last fetch, last webhook and status

Products

One row per Freemius product, showing its plans, its currencies, when the prices were last fetched, when a webhook last arrived and whether the last fetch worked. Each row can be edited, refreshed or deleted.

Keys and the webhook URL

A product’s own screen holds the API Bearer Authorization Token with its Test token button and the secret key on file. The webhook registers itself, and the Status list says so.

A product's own screen: the API Bearer Authorization Token with its Test button and the secret key on file
The Logs tab, showing fetches and webhook deliveries

Logs

The Logs tab on the Settings screen shows what the plugin has been doing: fetches, webhook deliveries, and anything a shortcode asked for that could not be found.

Pricing

Free, on WordPress.org

There is one version of Live Pricing for Freemius, it is free, and everything on this page is in it. No premium tier, no account, no licence key.

What you get

The whole plugin, in the one build on WordPress.org. WordPress 6.3 or later, PHP 7.4 or later.

Freemius price, buy button and currency toggle blocks, and the matching shortcodes
A webhook receiver, a staleness check and a daily refresh
The visitor’s currency, applied in their own browser
Currency-aware checkout links, with an optional overlay checkout
The last good prices kept on the page if Freemius is unreachable
A Products screen with a ready-made shortcode for every plan and pricing row

Given away because everyone who needs it sells a plugin or theme through Freemius from a site of their own, which is exactly who PlugUpp builds for.

FAQ

Questions, answered

No. This plugin talks to the Freemius API directly and does not depend on any other plugin. The two can coexist if you already run the official one. The one thing it does to the rest of the page is add the visitor’s currency to any link pointing at the Freemius checkout, whoever rendered it, and open those links in the overlay if that setting is on. Nothing else on the page is touched.

No, but it is what makes a price change appear in seconds. Without it, a page view notices that the stored prices are older than the refresh interval you set and schedules a background refresh, and a daily job catches anything missed. The webhook URL is generated for you on the product’s own screen, and every delivery is checked against your product’s secret key before it is acted on.

Your prices stay exactly as they are. The stored copy on your site is only ever replaced by a successful fetch, so a failed refresh changes nothing a visitor sees. You get an admin notice saying which product could not be refreshed, and the reason is recorded in the log. A page never waits on the API, so an outage at Freemius cannot slow down or break your site.

Yes, and it is built for them. Prices are rendered into the page from the copy stored on your site, so a cached page is a correct page. The visitor’s currency is applied in their own browser from data already in the HTML, with no request back to your server, so a cached page can never show one visitor another visitor’s currency.

Both, and they are the same thing. Three blocks under Widgets in the inserter: Freemius price, Freemius buy button and Freemius currency toggle. They are dynamic blocks rendering through exactly the same code as the shortcode of the same name, so a price in a block and a price in a shortcode can never disagree. A Shortcode block holding one of the three converts to the block in one click, and a block converts back the same way.

Nothing is shown for it, and a warning goes to the log naming which shortcode asked and what could not be found. A price leaves a gap and a button is not rendered at all, because a link to a checkout that sells nothing is worse than no link. Showing a zero, or falling back to another row’s price, would put a wrong figure in front of a customer.

Put the live price on the page, once.

Live Pricing for Freemius binds the figure in the page to the price in your Freemius dashboard, in each visitor’s currency, refreshed within seconds of a change. Free on WordPress.org.

No premium tier, no account, no licence key. WordPress 6.3 or later, PHP 7.4 or later.