Concepts
Store baselines
What Google's own converted price is, why it is shown beside your price, and every reason the column can be blank.
The store baseline is what the store itself would charge in a market if you let it convert your US price. It is not a Paywall Parity number. It is Google's number, retrieved from Google, shown unmodified.
Why it is on the screen
Without it, a parity target is an assertion. With it, the matrix shows three positions at once:
- what you charge today;
- what the store's own conversion would charge;
- what purchasing-power parity suggests.
The gap between the second and third columns is the argument for changing anything. Google's conversion is a currency conversion with rounding — it does not know that a monthly subscription costing the equivalent of a day's median wage will not convert in that market. The parity target does.
How it is read
For each plan, Paywall Parity finds the plan's US price and asks Google to convert it to every other region, using the Android Publisher pricing:convertRegionPrices endpoint.
This is a read-only call. It asks what a price would convert to; it sets nothing.
The response carries Google's region version, and that version is stored alongside each baseline price. A baseline is only comparable to other baselines from the same region version, so the version travels with the number rather than being assumed.
Why the column can be blank
A blank baseline is always a reported condition with a stated reason, never an empty feature. There are three causes.
The plan has no US price
Conversion is anchored on the US price. A plan not sold in the United States has nothing to convert from.
This is a legitimate catalogue shape, not an error — but it is still why the column is blank, so it is reported rather than swallowed.
The service account lacks permission
The most common cause. The message reads:
Imported, but Google's store baseline could not be read for 2 plan(s):
The caller does not have permission
The import succeeded — that part is real. Google returned 403 PERMISSION_DENIED on the conversion call specifically.
This is a Play Console permission gap, not a credential problem. A read-only grant is enough to list your subscriptions but not enough to call the monetization pricing endpoint, which is why the catalogue imports fine and only the baseline fails. Fix it in Users and permissions, then re-sync. See Google Play.
The catalogue was imported before the baseline pipeline existed
Applications imported before baselines shipped have no stored baseline for any plan. A re-sync fills them in.
What a blank baseline does not mean
It does not mean the market is unanalyzable, and it does not block the parity target. The target is derived from economic data and your current price; it does not depend on Google's conversion. A blank baseline costs you the comparison, not the recommendation.