Demographic Reaction Engine
Demographic Reaction Engine predicts how the US population would react to a pitch, ad, product page, or policy — before you ship it.
Core trick
Gemini scores stance from -100 to +100 per demographic segment, then maps those scores onto 13,354 Census-grounded synthetic personas.
Description
Demographic Reaction Engine predicts how the US population would react to a pitch, ad, product page, or policy — before you ship it.
Paste copy or a URL. Google Gemini returns a structured analysis across five demographic dimensions (age, education, region, gender, marital status) with stance scores from -100 to +100, concerns, benefits, and verbatim quotes. Those segment reactions are mapped onto 13,354 simulated personas, rendered as a stance histogram, archetype heatmap, polarization index, and browsable persona directory.
Persona dataset. Built from NVIDIA Nemotron-Personas-USA (Census-grounded synthetic personas), filtered to working-age, and enriched with personal income via k-nearest-neighbor lookup against the 2023 ACS PUMS (~3.4M US Census records) on state × occupation × education × sex.
The bigger picture. Synthetic Census personas are the open-data proof of concept. The same engine plugs into first-party customer profile data at companies like Google or Meta — turning their audience graphs into a production market research product: run any new ad, feature, price, or policy past millions of agent-simulated real customers in minutes, before a single focus group.
bluefalcon2357/market-research-engine★ 20 forksTypeScriptCreated May 23, 2026 · last push May 23, 2026
README excerpt
# Demographic Reaction Engine Test how the US population would react to a startup pitch, ad headline, product page, YouTube video, or policy proposal — before you ship it. The engine simulates a representative cross-section of America by combining Google Gemini with the **NVIDIA Nemotron-Personas-USA** dataset (synthetic personas grounded in US Census distributions for age, gender, education, occupation, marital status, city, and state). Submit any copy or URL and the app returns a population-scale reaction: an overall stance score, per-segment breakdowns across five demographic dimensions, a histogram of where individual agents land on the support/oppose spectrum, a heatmap of demographic archetypes, raw verbatim quotes, and a browsable directory of every simulated agent and their personal score. ## How it works 1. **Persona pool** — On startup the frontend loads the 13,354 personas shipped in [src/data/nemotron-agents.json](src/data/nemotron-agents.json) (a working-age sample drawn from the Nemotron dimensions; see [Dataset manipulations](#dataset-manipulations) below). You pick a subset size (100 up to the full pool) at simulation time. 2. **Pitch submission** — You paste copy or a URL into the input console. If a URL is detected, [server.ts](server.ts) scrapes the page title, meta description, and stripped body text (up to 2 URLs, 6s timeout each) and feeds the extracted context into the Gemini prompt. 3. **Segmented reaction** — The server calls Gemini with a strict