back to work
Case Study / Relationship CRM

Casting Intelligence: A Mobile CRM Built on Relationships

A graph-powered mobile CRM that helps a casting agency stay top of mind with the right people at the right time — mapping 119k industry professionals and surfacing relationship context through a Telegram bot.

Neo4jPostgreSQLWeaviateTelegram
119k
Persons in graph
220k
Relationships mapped
48
Actors represented
691
Credits tracked

Overview

SECTION 01

Problem

A casting agency represents 48 actors and interacts with hundreds of casting directors, producers, and directors. The difference between getting the booking and missing it rarely comes down to talent — it comes down to being present. Being the agency that comes to mind when the casting director picks up the phone. But staying genuinely top of mind across that many relationships, knowing who is working with whom, what someone just finished shooting, which collaborations are heating up — that’s impossible to track mentally. You need a system that knows the landscape better than your memory can.

Solution

A mobile-first CRM built on a collaboration graph. Instead of flat contact lists and CRM fields, the system maps 119,000 industry professionals and 220,000 working relationships into a Neo4j graph. This makes the invisible visible: who works with whom, how often, how recently, and which collaborations are strengthening or fading. Accessed entirely through a Telegram bot, it puts relationship context in your pocket — ready between meetings, on set, or at industry events.

The Core Insight: Relationships Are the Product

SECTION 02

Swedish film and TV is a small, relationship-driven industry. People work with people they know and trust. Directors return to the same casting directors. Producers build teams from their network. These patterns form what we call “production bubbles” — clusters of professionals who repeatedly collaborate.

The Reactive Agency

  • Waits for casting briefs to arrive
  • Responds quickly with best-match actors
  • Competes on speed with every other agency
  • No context about who is behind the production
  • Relationship is transactional

The Present Agency

  • Knows who is working on what, and with whom
  • Reaches out when it’s relevant, not just when asked
  • Every conversation is informed by relationship history
  • Understands the production landscape around each contact
  • Relationship is ongoing, not episodic

The goal isn’t to be first. The goal is to be the agency they already had in mind. That requires being present, relevant, and informed across dozens of relationships simultaneously. The graph makes that possible.

The Architecture: Graph + CRM + Signals

SECTION 03

The system combines a collaboration graph with relationship tracking and industry signal monitoring, all accessible through a Telegram bot designed for mobile-first use:

01

The Collaboration Graph (Neo4j)

The heart of the system. 119,000 persons and 220,000 working relationships from Swedish film and TV, structured as a graph where every node is a person and every edge is a collaboration. Edges are weighted by recency and role type — a director-actor collaboration last year weighs more than a co-production credit from a decade ago.

What the graph reveals:

Who works with whomCollaboration strength over timeProduction bubblesNetwork pathsWarming or cooling ties

The minimum threshold for a collaboration edge is two shared productions. Single co-credits are noise; repeated collaborations are signal.

02

Relationship Context (PostgreSQL + Weaviate)

Every contact comes with context: shared history with the agency, collaboration patterns from the graph, recent activity, and relationship trajectory. When you open a conversation with a casting director, you see what they’ve been working on, which of your actors they’ve booked before, and what their network looks like right now.

Actor profiles are enriched from multiple sources — Sanity CMS for bios and headshots, IMDB/TMDB for film and TV credits, and Scendatabasen for Swedish theater work. 321 film/TV credits and 370 theater credits are tracked, with semantic search across the full roster using three specialized vector spaces (biography, acting style, and skills).

03

Industry Signal Monitoring

The system watches for signals that indicate when to reach out: new productions being announced, incoming casting emails, and shifts in the industry landscape. When a signal appears, it’s automatically enriched with graph context — who is involved, how they connect to the agency’s network, and which relationships are relevant.

Signal sources:

Production announcementsIncoming casting emails (M365)Industry grant decisionsNetwork activity changes
04

Outreach & Campaign Management

When the system surfaces an opportunity — a relevant signal, a warming relationship, an incoming brief — it helps close the loop. For casting emails, it extracts role descriptions, matches them against the actor roster using semantic search, and generates personalized draft replies. For proactive outreach, it tracks campaigns, recipient engagement, and follow-up timing. Everything flows back into the relationship context, so the next interaction is even more informed.

The Interface: Telegram-First

SECTION 04

No web dashboard. No admin panel. The entire system lives in a Telegram bot. This is a deliberate choice — casting relationships happen between meetings, on the phone, at industry events, on set. A CRM that requires opening a laptop is a CRM that doesn’t get used. Telegram is already in your pocket. Every command runs a live query against the graph and databases.

MomentCommandWhat You Get
Meeting a director/networkTheir top collaborators, shared production history
Hearing about a production/castingCasting directors in that director’s network
Looking for an actor/findSemantic search (“young intense dramatic woman”)
Prepping for a call/actorFull profile with credits, theater work, links
Weekly relationship review/intelWhich relationships are warming, who to reach out to
Incoming casting email/emailsNew briefs with matched actors and draft replies
Running outreach/campaignsCampaign status, engagement tracking, follow-ups

The bot also supports a client-safe mode for external casting professionals, showing pitch search results without exposing internal relationship data.

Keeping the Graph Current

SECTION 05

Relationship intelligence is only useful if it’s current. The system self-maintains through automated pipelines that run on schedule — syncing credits, refreshing the graph, monitoring signals, and backing up data. No manual intervention required.

Data Sources

  • IMDB/TMDB: Film and TV credits with incremental change detection
  • Sanity CMS: Actor bios, headshots, and profile data
  • Scendatabasen: Swedish theater credits (automated scraping)
  • Microsoft 365: Casting inbox for brief detection
  • Industry signals: Production announcements and grant decisions

Automation

  • Weekly enrichment pipeline (credit sync, graph refresh, theater scrape)
  • Daily actor profile sync from Sanity CMS
  • Continuous email monitoring (weekday business hours)
  • Industry signal monitoring (multiple daily checks)
  • Daily PostgreSQL backups with 7-day retention
  • Docker auto-restart and health monitoring

Technical Foundation

SECTION 06

Stack

  • Neo4j 5: Collaboration graph — 119k persons, 220k relationships, weighted edges by recency and role
  • PostgreSQL + pgvector: Structured data and CRM — credits, contacts, relationship history, email logs
  • Weaviate: Semantic actor search — 3 named vectors (biography, acting style, skills)
  • Python + FastAPI + Telegram: Interface layer — REST API + conversational bot
  • Docker Compose + GitHub Actions: VPS with auto-deploy, health checks, log rotation

Design Decisions

  • Dual database: PostgreSQL for structured data, Neo4j for graph queries. One-way sync keeps them consistent without coupling
  • Telegram-first: No web UI to build or maintain. The bot IS the product
  • Incremental pipelines: MD5 hashing and staging tables for safe updates across 119k+ records
  • Weighted edges: Collaboration strength decays over time and varies by role type
  • Client-safe mode: Same bot, different view

How It's Used

SECTION 07
01

Before a Meeting

You’re about to call a casting director. Instead of going in cold or relying on memory, you check the bot: their recent productions, who they collaborate with, which of your actors they’ve booked before, what their network looks like right now. The call becomes a conversation between people who know each other’s world, not a pitch from a stranger.

02

When a Brief Arrives

An email arrives with a casting brief: “Woman, 35-45, vulnerable but strong, Swedish with possible dialect.” The system detects it, runs semantic search against the roster, and generates a draft reply with matched actors and personalized justifications. What used to take an hour of browsing profiles and writing emails is ready in minutes.

03

Weekly Relationship Check

A quick /intel shows which relationships are warming — one casting director has been on 3 productions recently and has history with your actors. An industry signal shows activity in their network. Time for a friendly check-in, not because a brief arrived, but because you’re genuinely present in the relationship.

04

At an Industry Event

You meet a producer and recognize the name but can’t place the context. A quick /network on your phone shows their production history, key collaborators, and which casting directors they work with. Now you can have a real conversation — not “so what do you do?” but “I saw you worked with [director] on [production], how was that?”

Key Learnings

SECTION 08
01

Graphs Reveal What Tables Hide

PostgreSQL can answer “who worked on this production?” Neo4j can answer “who is most likely to work with this director next?” Relationship patterns — production bubbles, strengthening collaborations, network clusters — are invisible in rows and columns but obvious in a graph. The dual-database design gives the best of both worlds.

02

Presence Beats Speed

The initial instinct was to optimize for speed — respond to briefs faster than anyone else. But the real competitive advantage is being the agency that doesn’t need the brief to start the conversation. When you’re already in the casting director’s mind because you’ve been relevant and present, the brief is a formality. The graph makes this kind of sustained presence possible across dozens of relationships.

03

Domain Insight Beats Model Sophistication

The “production bubble” insight — that Swedish directors repeatedly work with the same collaborators — is worth more than any amount of ML refinement. A simple weighted Cypher query based on this insight outperforms generic recommendation algorithms because it encodes how the industry actually works.

04

The Best CRM Is the One You Actually Use

Casting decisions happen between meetings, on the phone, on set. A web dashboard that requires opening a laptop is a CRM that sits unused. Telegram is already in your pocket. Every command is a live query — no loading screens, no navigation, no login. The interface disappears and you’re just having a conversation with your network intelligence.

05

Automate the Maintenance, Not the Relationships

The pipelines handle the tedious work: syncing credits, refreshing the graph, monitoring inboxes, tracking engagement. But the outreach itself stays human. The system tells you who to call and gives you context for the conversation. It doesn’t make the call for you. Automation serves the relationship, not the other way around.

Current Scale

SECTION 09
119,552
Person nodes
220,602
Relationships
48
Actors represented
691
Credits tracked
321
Film/TV credits
370
Theater credits
5
Data sources
24/7
Automated monitoring

Production-deployed with Docker Compose and GitHub Actions CI/CD. Daily backups, automated health monitoring, and self-healing container management.

Part of a Larger System

SECTION 10

Casting Intelligence works alongside the AI Casting Search system. While the casting search answers “which actors match this brief?” with multi-vector semantic search and AI-generated justifications, Casting Intelligence handles everything around it: knowing who to talk to, when to reach out, what context to bring, and how to respond when opportunities arrive.

Together they form a complete casting operations platform: relationship intelligence on one side, talent matching on the other.

Status: ✅ Production-deployed, automated, in daily use
Deployment: Docker Compose with automated CI/CD
Repository: Private
Interface: Telegram bot (mobile-first)

Explore More