For any brand, Reaction Lab:
- Discovers competitors and scrapes their public Meta ads
- Parses ad creative into structured attributes (hooks, CTAs, tone, visual style)
- Generates synthetic consumer personas using three validated psychology frameworks: Big Five personality traits (OCEAN), VALS psychographic segmentation, and behavioral dimensions like price sensitivity and impulse tendency
- Simulates audience reactions — each persona evaluates each ad across 8 dimensions including attention, credibility, relevance, and purchase intent
- Synthesizes white space — identifies overused patterns, underserved segments, and neglected messaging angles
- Proposes differentiated ad concepts targeting the specific gaps competitors are missing
How we built it
- Frontend: React + Vite + Tailwind + GSAP animations, deployed on Railway
- Backend: FastAPI + arq (async job queue) + PostgreSQL + Redis
- Agentic pipeline: 7 specialized agents orchestrated in sequence, each with typed input/output schemas — no prompt soup
- Persona engine: Research-backed persona generation using Big Five (OCEAN) traits, VALS psychographic types, and behavioral profiling. Based on the Deepsona framework (2024), PersonaLLM (ICLR 2025), and a 2024 meta-analysis of personality traits and ad response
- LLM layer: Anthropic Claude (Sonnet/Opus) for simulation and synthesis, Haiku for parsing — provider-swappable to OpenAI
- Ad scraping: Browser-based agents navigating the Meta Ad Library directly, no API keys required
- Demo case study: AYBL (activewear brand) vs. Gymshark, Lululemon, Alo Yoga, Salomon — 12 real competitor ads scraped and analyzed
Research backing
- Big Five personality traits predict advertising response (meta-analysis of 15 studies, Tandfonline 2024)
- Multi-trait synthetic personas outperform simple role-playing (Deepsona, 2024)
- Explicit OCEAN scores in prompts produce trait-consistent LLM behavior (PersonaLLM, ICLR 2025)
- VALS psychographic framework validated since 1978 (SRI International)
Challenges we ran into
- Meta Ad Library has no reliable public API — we solved this with browser-based scraping agents
- Generic persona labels ("budget shopper") produce flat, predictable reactions — multi-trait cards with explicit OCEAN scores create real disagreement between personas
- Balancing pipeline speed for live demo vs. depth of analysis — the scale knob (5 personas for demo, 12+ for production) solved this
What we learned
The key insight: disagreement between personas is where strategic insight lives. When all synthetic consumers react the same way, you learn nothing. When a Skeptical Researcher scores credibility at 3/10 while an Aspirational Adopter scores it at 8/10, that's actionable signal about which audiences you're reaching and which you're repelling.
Built With
- anthropic-claude
- docker
- fastapi
- gsap
- openai
- postgresql
- python
- railway
- react
- redis
- tailwind-css
- typescript
- vite
Log in or sign up for Devpost to join the conversation.