Appearance
Database Reference
The Brand Match App has no local database. All data lives in a shared Neon Postgres instance, accessed via the ca-data API backend. This page documents the key Neon tables that power the app.
Entity Relationship Diagram
matches
The central table powering all match views. One row per creator–brand pair.
| Field | Type | Notes |
|---|---|---|
id | Int | Primary key |
brand | String | Brand name |
creator | String | Creator name |
agent | String | Assigned agent name (annie, charlie, henry, or null for unassigned) |
match_score | Float | Overall match score 0–100 |
rate | Int | Creator's rate in dollars |
cpm | Float | Creator's CPM |
avg_views | Int | Creator's average view count |
subscribers | Int | Subscriber count |
niches | String | Comma-separated niche tags |
platform | String | Primary content platform |
status | String | Pipeline status: not_pitched, reached_out, in_negotiation, won, not_a_fit |
pitch_narrative | String? | Pre-written pitch angle for this pair |
pitch_angle | String? | Shorter pitch hook |
notes | String? | Agent notes |
us_pct | Float | US audience percentage |
male_pct | Float | Male audience percentage |
brand_deals_total | Int | Number of past brand deals for this creator |
niche_fit | Float | Signal 2 component score |
view_score | Float | Signal 1 view fit score |
audience_score | Float | Signal 5 audience demo score |
cpm_score | Float | Signal 4 price/market fit score |
score_version | String? | Scorer version tag (e.g. v3) |
scored_at | DateTime? | When this score was computed |
Total rows: ~107,000+ (as of last full V3 rescore).
→ See Matching & Scoring
brand_intel
One row per brand. Contains CRM data, scoring context, deal history, and AI-enriched intelligence.
| Field | Type | Notes |
|---|---|---|
id | Int | Primary key |
name | String | Brand name (canonical form) |
website | String? | Brand website from Close CRM |
email | String? | Primary contact email from Close |
avg_cpm | Float? | Weighted average CPM from matched creators |
avg_rate | Float? | Average deal rate from monday_deliverables |
total_deals | Int? | Total deal count from Monday |
agent | String? | Assigned CA agent |
last_activity_date | Date? | Most recent deal date (from Monday, synced 6-hourly) |
last_contacted_date | DateTime? | Most recent outbound email timestamp (from Close, synced daily) |
last_contact_agent | String? | Agent who sent the most recent email |
last_contact_subject | String? | Subject of the most recent email |
last_contact_summary | String? | AI-generated summary of the most recent email thread |
profile | JSON? | Enriched brand profile: { creators, verticals, audience, content_themes, ideal_creator_archetype, platforms } |
what_they_want | JSON? | Simplified targeting profile |
fathom_calls | JSON? | Array of past Fathom call objects with summaries |
deal_history | JSON? | Array of past deals with creator, value, close date |
agencies | JSON? | Other agencies this brand works with |
Total rows: 2,786 brands (1,178 original + 1,608 from Close import).
creators
Creator profile data synced from Airtable. Used for match context and the creator detail page.
| Field | Type | Notes |
|---|---|---|
id | Int | Primary key |
name | String | Creator name (canonical, matches matches.creator) |
slug | String | URL slug for the creator detail page |
platform | String | Primary platform (youtube, tiktok, etc.) |
subscribers | Int? | Subscriber/follower count |
avg_views | Int? | Average views per video |
rate | Int? | Rate in dollars |
cpm | Float? | CPM value |
niches | String? | Niche tags |
headshot_url | String? | Airtable CDN URL for headshot |
airtable_id | String? | Airtable record ID for this creator |
Synced from Airtable on ca-data startup and every 2 hours via src/sync.js.
brand_emails
Latest email thread per brand, sourced from Close CRM. One row per brand (the most recent thread).
| Field | Type | Notes |
|---|---|---|
id | Int | Primary key |
brand | String | Brand name |
contact_emails | String[] | Email addresses involved in the thread |
thread_id | String | Gmail thread ID |
thread_subject | String | Email subject |
thread_date | DateTime | Date of the most recent message |
agent | String | CA agent whose inbox the thread was found in |
summary | String? | AI-generated summary (gpt-4o-mini) |
Synced by sync-close-contacts.js (daily, 4am UTC). Searches across 5 agent Gmail inboxes for threads matching each Close lead.
monday_deliverables
Deal records synced from Monday.com. Source of avg_rate, total_deals, and last_activity_date in brand_intel.
| Field | Type | Notes |
|---|---|---|
id | Int | Primary key |
deal_name | String | Monday item name (e.g. "Caleb Hammer YouTube Integration for SoFi") |
creator | String | Creator name (parsed + normalized from deal name) |
brand | String | Brand name (parsed from deal name) |
agent | String? | Agent column from Monday |
creator_payment | Int? | Deal value in dollars |
status | String? | Monday deal status |
close_date | Date? | Deal close date |
created_at | DateTime | Row creation time |
Cancelled items are excluded from all rate/count aggregations.
Name normalization: Deal names are stripped of suffixes like (renewal), (extension), (upsell), (copy) before creator matching.
conflict_database
Active sponsor conflicts detected for roster creators. Used to show conflict warning badges on match cards.
| Field | Type | Notes |
|---|---|---|
id | Int | Primary key |
creator | String | Creator name |
brand | String | Brand the creator is actively sponsoring |
detected_at | DateTime | When the conflict was first detected |
source | String? | Detection source (e.g. video transcript ID) |
Populated by the separate sponsor detection pipeline. ~39 creators have active detections.