The brand-fit dossier — Creator Overview, Deep Analysis, and Background Research
The dossier you wanted but didn't want to write yourself: 1-credit scored overview, 5-credit deep analysis, web-grounded background research — three layers, one cache, every prose field renders as Markdown.
The shape
/kols/[username] → three stacked cards: Creator Overview (free cache or 1 credit refresh) → Background Research (web-grounded, 1 credit) → Deep Analysis (opt-in button, 5 credits). All three respect your active workspace's brand profile + your UI locale.Why three tiers, not one big report
Brand managers don't read 5 paragraphs of LLM prose to decide whether a KOL is worth a second look. They read a one-line headline, glance at four star ratings, and either commit 30 seconds to the deeper read or move on. So the three tiers map onto the actual triage funnel:
- Overview (1 credit, cached 30 days) — answers "what does this person do, and would I pursue them?" with a scored verdict. Reads 50 recent videos + author demographics + audience data when present.
- Background Research (1 credit, cached 30 days) — answers "who is this person off-platform?". A search-LLM (
openai/gpt-4o-mini-search-preview) browses public sources and returns Markdown with[1]citation chips. Useful for legitimacy / identity checks before a real outreach budget. - Deep Analysis (5 credits, cached 7 days) — for KOLs you've already shortlisted. Reads up to 200 videos + full audience snapshot + cross-platform contacts and produces five extra sections you can paste into a brief: content quality, partnership history, outreach strategy, negotiation notes, competitive context.
Scored ratings — only when we have ground truth
The four scores (Recommendation / Content fit / Audience fit / Risk) only render when the workspace brand profile has at least one structured field filled in. Without that anchor we couldn't score "fit" against anything — the LLM would be inventing a comparison.
Fill in any of product_category, target_audience_text, target_geographies, or exclusions_text on /workspaces/{slug}/settings and the scoring block lights up on every dossier. The LLM is told what to score against, asked to clamp to 1-5, and required to explain its reasoning in a 300-character score_rationale.
Every prose result lands in Postgres
Each of the three tiers has its own cache table — keyed by (workspace_id, username, platform), with the locale stashed inside the JSON payload so a re-render in a different language is a clean miss, not a stale read.
Operationally: a busy workspace opening the same KOL dossier 20 times in a week makes one LLM call to each tier. The 19 subsequent opens are free. The "Refresh" button on each card is the only path that burns a fresh call — a deliberate operator action, never an accidental fetch.
Markdown renderer, not whiteSpace: pre-line
Operator feedback was direct: "如果是 markdown,就用 markdown 格式 来优化展示". Every prose field is now rendered via a tiny inline Markdown component — headings, bold, italic, ordered + unordered lists, and the [1] / [2] citation chips for Background Research.
We didn't ship a full Markdown library; the renderer is single-file (~110 lines) and only handles the subset the LLMs actually emit. Smaller surface, no MDX plugin churn.
Locale, end to end
NEXT_LOCALEcookie set by the locale switcher- BFF reads the cookie and forwards
?locale= - Railway service injects the locale into the LLM system prompt ("Respond entirely in Simplified Chinese (zh-CN)…")
- Cache key includes locale so en-cached bodies never serve zh callers
Three locales currently shipped: en / zh-CN / ja. Adding a fourth is a 3-line addition to _LOCALE_NAME in api/services/kol_overview.py plus the messages file.
Try the dossier
Open any KOL on /kols/[username]. If your workspace brand profile is set, you'll see star ratings on first load. Click Deep Analysis to see the five extra sections — billed against your workspace credit pool with explicit confirmation copy on the button.
Frequently asked
- What's the difference between Creator Overview and Deep Analysis?
- Overview reads 50 videos + author demographics and bills 1 credit. Deep Analysis reads 200 videos + audience snapshot + cross-platform contacts + brand profile and bills 5 credits via the workspace credit pool. The schema is a strict superset — deep adds content_quality, partnership_history, negotiation_notes, competitive_context, and a tailored outreach_strategy.
- Why do the star ratings only show up when I've filled in my brand profile?
- Without a brand profile we have no anchor for 'fit' — we'd be inventing a comparison. The scoring path is gated on at least one structured field (product_category / target_audience_text / target_geographies / exclusions_text). When the workspace brand profile is empty, the card shows a CTA linking to /workspaces/{slug}/settings instead of fake stars.
- What model does each tier use?
- Overview: gpt-4o-mini (settings.ai_insight_classifier_model). Deep Analysis: gpt-4o (settings.ai_deep_analysis_model). Background Research: gpt-4o-mini-search-preview (settings.ai_background_research_model). All env-overridable so swapping to a different gateway is a deploy, not a code change.
- How long does each cache row last?
- Overview: 30 days. Deep Analysis: 7 days (the negotiation/partnership-history insights drift faster). Background Research: 30 days. All three accept ?refresh=true to force a fresh call (and a fresh credit charge).
- Are the prose fields really Markdown?
- Yes. The LLM prompts explicitly request Markdown for overall_summary, content_quality, partnership_history, negotiation_notes, competitive_context, and audience_signal. The dossier UI renders via a tiny inline MdRender that supports headings, **bold**, *italic*, ordered + unordered lists, and citation chips [1] [2].
- Does my locale change the output?
- Yes. NEXT_LOCALE cookie → BFF query param → LLM system prompt + cache key. The cached row is gated on locale, so a zh-CN caller never sees an en-cached body and vice versa. en / zh-CN / ja currently shipped.
Read next
Audience Persona is live — sampled-follower analytics for any TikTok creator
KOLens' Audience Snapshot ships today: where a creator's followers actually live, what language they speak, how active they are, which niches they care about. Statistical sample with explicit 95% CI / ±error.
Find TikTok KOLs with Claude Code + KOLens MCP — A Phonecase Brand Case Story
How a 4-person phonecase brand wired Claude Code to KOLens, Notion, and Slack via MCP and compressed a 6-hour KOL-discovery + outreach pipeline to under 6 minutes. Prompts, screenshots, real numbers.