# How do I get alerted when my brand or a keyword hits Weibo hot search?

> Check the Weibo hot search board every 10 minutes and get an alert when your brand or a keyword appears, then read the first reactions. Daily cost and code.

Canonical page: https://okdata.online/answers/weibo-hot-search-brand-alert/

**Short answer: **Poll Weibo hot search every 10 minutes and match each topic against your brand names; 144 checks a day cost $0.288. When a topic matches, run one Weibo post search on it ($0.002 a page) so the alert arrives with the posts driving it, not just the headline.

The classic PR failure goes like this: a complaint about a drink brand reaches Weibo hot search at 11 pm, and the team learns about it from a journalist at 9 the next morning. A small job that checks the board every 10 minutes closes most of that gap. When the brand, a product or the CEO's name shows up, someone gets a message with the rank, the heat and the five loudest posts on the topic.

## Two endpoints

1. [Weibo hot search](/apis/weibo/trends/list/) returns the whole board in one call: rank, topic, heat and a search link.
2. [Weibo post search](/apis/weibo/posts/search/) is called only when a topic matches. Sorted by hot, its first page of about 10 posts shows who is driving the topic and how many reposts they have.

## What it costs

| Setup | Calls | Cost |
|---|---|---|
| Board every 10 minutes, one day | 144 | $0.288 |
| Board every 10 minutes, 30 days | 4,320 | $8.64 |
| 30 days plus 10 matches, 2 search pages each | 4,320 + 20 | $8.68 |

## The alert job

```python
import json, os, requests

API = "https://api.okdata.online"
H = {"Authorization": f"Bearer {os.environ['OKDATA_API_KEY']}"}
WATCH = ["山野咖啡", "椰云拿铁", "shanye"]          # brand, products, nicknames
SEEN = "alerted.json"

def call(path, **params):
    r = requests.get(API + path, headers=H, params=params, timeout=30).json()
    if r["code"] != "ok":
        raise RuntimeError(f"{r['code']}: {r['message']}")
    return r["data"]["items"]

seen = set(json.load(open(SEEN))) if os.path.exists(SEEN) else set()
for row in call("/v1/weibo/trends/list"):
    hit = any(w.lower() in row["name"].lower() for w in WATCH)
    if not hit or row["name"] in seen:
        continue
    posts = call("/v1/weibo/posts/search", query=row["name"], sort="hot",
                 fields="text,author.name,metrics.reposts")
    print(f"#{row['rank']} {row['name']} heat={row['heat']}")
    for p in posts[:5]:
        print("  ", p["author"]["name"], p["metrics"]["reposts"], p["text"][:80])
    seen.add(row["name"])
json.dump(sorted(seen), open(SEEN, "w"), ensure_ascii=False)
```

Swap the `print` lines for a post to your Slack, Feishu or WeCom webhook, and schedule the script every 10 minutes.

## Where this falls short

- A topic about you can trend without your name in it, for example a store incident described by place and product. Keep the watch list broad, and run [keyword monitoring](/apis/weibo/posts/search/) on posts as well; hot search is only the loudest layer.
- At a 10-minute rate you can be up to 10 minutes late. Five minutes doubles the cost and rarely changes the outcome.
- Comments under the posts are not in the catalog. The alert tells you what is trending and who started it, and the comment threads are still read on Weibo.
- The board has no history. If the job was down, it cannot tell you what you missed.

## Other routes

Social listening platforms offer the same alerting with sentiment charts and a support team, and suit a company that wants a dashboard and no code. On launch days, a person keeping the hot search page open is still the fastest reader there is. For a fuller playbook see [word of mouth](/solutions/word-of-mouth/).

## Endpoints used

- [Weibo hot search](https://okdata.online/apis/weibo/trends/list/) `weibo.trends.list`: $0.002 per call · about 50 board entries per page
- [Weibo post search](https://okdata.online/apis/weibo/posts/search/) `weibo.posts.search`: $0.002 per call · about 10 posts per page

Updated 2026-11-12
