| Loaded by | research-audience (writes rows when a list is shown), write-outreach (updates statuses from replies and results) | work-with-creators |
| Ledger file | research/audience/ledger.csv | creators/roster.csv |
| Lessons document (file → brand document) | research/audience/lessons/<YYYY-MM-DD>.md → Outreach lessons — <Brand> — <YYYY-MM-DD> | creators/lessons/<YYYY-MM-DD>.md → Creator lessons — <Brand> — <YYYY-MM-DD> |
| Entity columns (after the required ones) | segment, tier, value_tier, signal_type, email_status, region_flag, email, email_candidate, profile_url, root_domain, route, sequence_id, opener_id, first_touch_date, last_touch, reply_category, recontact_after | role, tier, deal_structure, vetting_depth, wave, wave_criterion, wave_result, quoted_rate, then the roster's own columns |
| Status values | listed · contacted · replied · meeting · not-a-fit · bounced · unsubscribed · do-not-contact | shortlisted · contacted · replied · quoted · declined · signed · posted · never-again |
| Suppressing statuses (permanent) | bounced · unsubscribed · do-not-contact | never-again |
| Timed exclusions (not suppression) | not-a-fit — the account is skipped for 6 months, then eligible again; contacted with no reply after the sequence ended — the person is skipped for 12 weeks on every channel (cool-down) | declined — skipped until the human re-opens it |
| Match keys, in order | email (or email_candidate) → profile URL → name + root domain; account rows: root domain + route | handle + platform → profile URL |
| Grouped by (for lessons) | segment, tier, signal type, email status, region flag, sequence, opener and touch, reply category | role, tier, deal structure, vetting depth, wave |
| Re-check | recheck_by = date listed + 30 days | revet_by = vetted on + 30 days |