The third step of Content Engine. Does not invent topics out of thin air — pulls raw material from 4 sources for the period, runs it through the gate, deduplicates, and writes ideas to the Idea Pool. Then 04-weekly-plan selects from the pool.
Input: $ARGUMENTS — client (default — the only active one), opt. --source (default all),
opt. --since (default 7d). Structured input/output — so n8n can call the step via the SDK.
0 · Config (from Notion, not from the repo)
Read the client's research-config (subpage "🔎 {Client} · Research Sources" on the "Content Engine" hub; if none — create one with defaults and mark [ASSUMPTION], ask to edit it):
- Creator watchlist (source C): 15–25 profiles in the client's topic cluster (peers + thought leaders from Section 2 of the strategy). NOT generic viral — niche only.
- Fathom scope (source A): which types of calls to mine (default: client / discovery / sales / mentoring) + anonymization rule (generalize, no client names — like "without NDA" in the strategy).
- TikTok seeds (source E): hashtags/creators in the business-sales-founder niche (from Viktor's Make scenario).
- Reddit subreddits (source F): list of subreddits of the ICP world (from Viktor's Make scenario).
- Source toggles: which of the 6 sources are active for this client.
Sources (by priority — for Viktor calls > scraping)
A · Calls (Fathom) — the highest signal
Fathom MCP: list_meetings (by --since) → filter by scope → get_meeting_transcript /
get_meeting_summary. Extract:
- recurring questions from founders → P1 topics (methodology) and lead-magnet ideas;
- objections / false beliefs → P2 topics (contrarian);
- verbatim ICP language (pains, goals, fears) → raw material for hooks and JTBD validation;
- dialogues ("Me: … / Them: …") → a ready story-wrapped input (Viktor's top pattern).
Each insight →
Source = call-insight, in Notes — generalized context (anonymously), in Source link — Fathom URL (internal, not for the post).
B · Own workflow — build-in-public + hands-on
An analog of "internal Slack" for solo. Sources: daily logs, fresh Notion work, Claude sessions
(like the building of this engine), financial models, GTM deliverables (anonymously). Extract "here's what I'm currently
building/doing" → topics P3 (AI/Claude) and P4 (personal). Source = own-thought.
⚠️ The P4 Personal tag is applied only to topics that pass the Personal test (see 04-weekly-plan Step 1): a work
case in the first person (price, workshop, metric, tool) — that's P1/P3, not Personal.
C · LinkedIn outliers in the cluster (Apify, no-cookie — zero risk to the account)
Two modes, BOTH without cookie/login (the author's account is not at risk; li_at is NOT needed — we keep it for the tracking tool / 08-engage):
- C1 · By creators (watchlist):
apimaestro/linkedin-profile-postsfor each watchlist profile → 5x+ outliers vs the creator's median. (the same actor that pulled 50 posts by van der Blom — 100% success). Can be done via the skillviral-research. - C2 · By topic (keyword/hashtag search):
apimaestro/linkedin-posts-search-scraper-no-cookies(keyword) orharvestapi/linkedin-post-search(cheaper ~$0.002/post, richer filters: author industry / keywords / mentions) → viral posts ON THE TOPIC across all of LinkedIn, even from people outside the watchlist. MUST be filtered down to the cluster (author job title / industry / keywords), otherwise — generic viral. ⚠️ Interest Graph: outliers in the client's topic cluster, not generic. Outlier → idea into the pool ONLY if the client has competence proof on the topic (otherwise — a format/angle reference in the Notes of the neighboring card, not a separate entry).Source = research-outlier, Source link — URL of the original.
D · Comments
Your own posts (Posts DB, once the tracking tool works) + comments under watchlist posts (Apify). Extract
recurring questions/pains in the comments → topics P1/P2. Source = comment-mining.
E · TikTok trends (Apify) — format/hook patterns, "steal like an artist"
Exists as Viktor's Make scenario (TikTok→Telegram). Here — natively: Apify TikTok scraper by seeds
from the config (hashtags/creators in the business-sales-founder niche) → viral short-form. We take the hook
pattern and format, not the topic (TikTok viral ≠ GTM for agencies). A mandatory step — reframe for the ICP:
a short hook pattern → translation into the bizdev problem of agencies. Source = tiktok-trend, Source link — URL.
Closer to C (reference) than to pain — more often goes into the card's Notes as a "delivery angle".
F · Reddit pains (Apify) — real questions from the ICP world
Exists as Viktor's Make scenario (Reddit→Telegram). Natively: Apify Reddit scraper across subreddits
from the config (r/agency, r/sales, r/msp, r/Entrepreneur, r/startups…) → threads where founders/salespeople
complain about pipeline, hiring, positioning. This is a public analog of calls (A): verbatim pains
and questions in the words of the ICP world → topics P1/P2. Mandatory — reframe for your ICP (a generic Reddit
pain ≠ a post without your proof/angle). Source = reddit-pain, Source link — the thread URL.
📌 Viktor already has Make scenarios for TikTok/Reddit (Haiku→Telegram “LinkedIn Drafts”). This skill is their “brain”: the same sources, but through the gate/dedup/tag/competence + Viktor's voice, into the Idea Pool (not raw drafts in Telegram). Make remains as an optional trigger (nervous system) — later n8n.
Processing pipeline (for each candidate)
- 3-criteria gate (
methodology.md§2.1): hook>idea · there is competence proof (or the fallback strategy §2.3: research-backed / “here's what I do” / your own story) · a unique feed. Failed all — we discard it, we don't write. - Dedup against the Idea Pool: semantically compare with existing ones (Name + Hook draft + Notes). A close duplicate — skip it OR enrich the existing card with a new angle (don't spawn records).
- Reuse pause: if the topic overlaps with a card where
Last used< 1–3 months — skip. - Tag:
Pillar(1 з 4) ·Funnel·Format(a suggestion, not fixed) · draftHook draftperhook-bank.md·Competence proof·Source·Source link. - Score 0–100 (like hook-bank §scoring): viral lever × specificity × voice fit × signal freshness. A signal from a call/real pain > matrix-expansion.
- Record:
Status = newу Idea Pool (notion-schema.md).
Output
- New cards in 💡 Idea Pool (data_source — from
notion-schema.md/ project memory). - A short digest to the user: how many were added per source, top-5 by score, what was discarded and why. (This digest is a candidate for Telegram delivery once we wrap the step in n8n.)
- Return a structured summary to the orchestrator (for the 03→04 chain).
Definition of Done
- research-config read (or a default one created + flagged for editing).
- Active sources gone through per
--since; each gave insights or an explicit "nothing new". - Every new card passes the competence proof gate; no duplicates created; reuse pauses accounted for.
- Idea Pool replenished; digest shown; summary returned.
- ⚠️ No real client names in the cards (anonymization of calls/deliverables).