---
title: Store baselines
nav: Store baselines
description: What Google's own converted price is, why it is shown beside your price, and every reason the column can be blank.
group: concepts
order: 1
status: shipped
updated: 2026-09-21
---

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](/guidelines/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.
