# Google Play 评价 API (google_play.reviews)

- Canonical page: https://everyinfra.com/google-play-api/reviews
- Endpoint: POST https://api.everyinfra.com/api/v1/social with {"platform": "google_play", "action": "reviews", "params": {...}}
- Price: $0.001389 per call ($1.39 per 1,000 requests); failed calls and empty results are not charged
- Returns: list, default 40, max 200 per call
- Pagination: pass next_page_token back as page_token for the next page, other params unchanged; one call per page, tokens last 24 hours; up to 200 rows
- Mode: sync; add "mode": "async" for slow tasks

Google Play 评价按包名 `app_id` 读取一个安卓应用的用户评价，每条带正文、星级、评价人昵称和头像、被点赞次数、版本号、发布时间，以及开发者的回复和回复时间。它回答「用户对这个应用满意吗、最近在抱怨什么」，适合出海应用团队跟踪每次发版后的反馈、产品经理对比同类应用的口碑，以及观察开发者回复评价的速度。

星级在 `score` 里，固定为 5 分制。`language` 是查询语言，默认英文，返回哪些评价只随它变，评价也未必都用这种语言写；`country` 在评价这一项不改变结果，同一 `language` 下美国区和英国区的评价相同。`sort` 默认 `newest`，最新的排在前面，取 `top_rated` 则高分在前。

## Health

- Live health (24h percent, hourly and daily trends): https://api.everyinfra.com/api/v1/social/availability?platform=google_play&action=reviews

## Parameters

| name | type | required | default | description |
|---|---|---|---|---|
| app_id | not declared | yes | not declared | Android 应用包名，例如 com.example.app，即 Play 商店链接 ?id= 后的值；不是 Apple App Store 的数字 ID。不要把完整 Play URL 填进 app_id，该值会作为包名直接使用。 |
| country | not declared | no | not declared | Google Play 店面国家/地区，建议小写代码，默认 us；search、profile 用它决定查哪个国家的店面，不是用户手机地区或应用开发者国籍。reviews 里它不改变返回哪些评价：评价只随 language 变，同一 language 下 us、gb 返回的评价相同（10-25 实测）。要按国家比较评价，请换 language，不要只换 country。 |
| language | not declared | no | not declared | Play 商店内容/评论查询语言，默认 en；例如 en 或 zh。它不自动更换 country，也不保证所有返回评论都是该语言的原文。 |
| page_token | not declared | no | not declared | 翻页令牌：把上一页响应里的 next_page_token 原样传回拿下一页；不传从第一页开始。其他参数须与上一页一致，令牌 24 小时有效，每页算一次调用；最深能翻多少条、多深要改用 mode=async，见目录里的 pagination。 |
| sort | enum: newest / top_rated | no | not declared | 应用评论顺序：newest 最新、top_rated 评分较高；reviews 默认 newest。只用于 reviews，不是应用搜索排名或应用总评分筛选。 |
| limit | integer (1–200) | no | 40 | 这次调用最多返回的条数，整数，1–200；不传按默认值，实际返回可能少于这个数。超过上限会在扣费前返回 422。 |

## Response fields (items in `results`)

| field | meaning |
|---|---|
| id | 该记录在原平台上的唯一标识。仅在同一平台内唯一，跨平台可能重复。 |
| app_id | 应用包名（如 com.example.app），Google Play 的唯一标识。 |
| text | 正文内容，已去除 HTML 标签，全文返回、不截断（个别平台的列表结果本身只有摘要，以该平台的字段说明为准）。 |
| title | 标题。平台无标题概念时（如纯文本帖）为 null。 |
| score | 应用评分，5 分制。 |
| author_name | 作者昵称（显示名）。 |
| author_avatar_url | 评价人头像。 |
| thumbs_up | 该评价的点赞数。 |
| reply_text | 开发者对评价的回复。 |
| reply_at | 开发者回复时间。 |
| app_version | 当前版本号。 |
| language | 内容语言代码（如 zh、en），由平台判定，可能不准。 |
| url | 该记录在原平台上的可访问链接。 |
| posted_at | 发布时间，ISO 8601 格式、UTC 时区（如 2026-08-07T12:34:56+00:00）。平台只给非标准字符串时原样透传，解析前建议做容错。null 表示平台未公开。 |
| platform | 数据来源平台标识，与请求里的 platform 一致（如 xiaohongshu、tiktok）。 |

## Example

```bash
curl -X POST 'https://api.everyinfra.com/api/v1/social' \
  -H "Authorization: Bearer $EVERYINFRA_API_KEY" \
  -H 'Content-Type: application/json' \
  --data-raw '{
  "platform": "google_play",
  "action": "reviews",
  "params": {
    "app_id": "com.whatsapp"
  }
}'
```

```python
import os
import requests

response = requests.post(
    "https://api.everyinfra.com/api/v1/social",
    headers={"Authorization": f"Bearer {os.environ['EVERYINFRA_API_KEY']}"},
    json={
        "platform": "google_play",
        "action": "reviews",
        "params": {
            "app_id": "com.whatsapp",
        },
    },
    timeout=120,
)
print(response.status_code)
print(response.json())
```

## Response example

Real response to the example request above, captured 2026-09-26T08:56:04Z. `results` and `count` are real with personal information (names, handles, avatars, profile links, contact details) removed; the list keeps the first 2 of 40. `id`, `billing` and `quota` differ on every call, so only their shape is shown.

```text
{
  "id": "req_…",
  "platform": "google_play",
  "action": "reviews",
  "results": [
    {
      "id": "65d39096-b59c-4d75-9f8f-00e98b8a49df",
      "app_id": "com.whatsapp",
      "text": "77u7uuiuuu u 7k788",
      "score": 3,
      "author_name": "•••",
      "author_avatar_url": "https://play-lh.googleusercontent.com/•••",
      "thumbs_up": 0,
      "app_version": "2.26.36.74",
      "url": "https://play.google.com/store/apps/details?id=com.whatsapp&reviewId=65d39096-b59c-4d75-9f8f-00e98b8a49df",
      "posted_at": "2026-09-25T09:37:51.158000+00:00",
      "platform": "google_play"
    },
    {
      "id": "b03244e4-a5e0-4db2-88ca-ef1e148ec30c",
      "app_id": "com.whatsapp",
      "text": "good",
      "score": 5,
      "author_name": "•••",
      "author_avatar_url": "https://play-lh.googleusercontent.com/•••",
      "thumbs_up": 0,
      "app_version": "2.23.11.77",
      "url": "https://play.google.com/store/apps/details?id=com.whatsapp&reviewId=b03244e4-a5e0-4db2-88ca-ef1e148ec30c",
      "posted_at": "2026-09-25T09:37:33.540000+00:00",
      "platform": "google_play"
    }
  ],
  "next_page_token": …,
  "pagination": { … },
  "count": 40,
  "billing": {
    "charged": …,
    "charged_usd": …,
    "balance_after_usd": …,
    …
  },
  "quota": { … }
}
```

## FAQ

### `app_id` 填什么？

填安卓应用的包名，也就是 Play 商店链接里 ?id= 后面的部分，比如 com.whatsapp。不要传整条链接：这个值会被原样当作包名，链接对不上任何应用；Apple App Store 的数字 ID 同样不行。

### 怎么读取多于一页的评价？

把响应里的 `next_page_token` 原样作为 `page_token` 传回，`app_id`、`country`、`language` 和 `sort` 保持不变，就能拿到下一页；第一次调用不带 `page_token`，从头读起。令牌 24 小时内有效，每翻一页都是一次独立调用，某一页没有返回评价时不计费。

### 怎么衡量开发者回复评价的情况？

开发者回复过的评价带 `reply_text` 和 `reply_at`。有回复的行数除以总行数就是回复率，`reply_at` 减去 `posted_at` 就是回复用时；再把低 `score` 的评价分成已回复和未回复两组，能看出哪些问题得到了处理。

## Also

- Capability catalog (no key): https://api.everyinfra.com/api/v1/social/catalog?platform=google_play
- OpenAPI: https://everyinfra.com/openapi.json · Agents guide: https://everyinfra.com/agents.md
