Inspiration

I work with behavioral researchers, and the same thing keeps happening: someone spends $800 recruiting participants on Prolific, and the data comes back broken. A skip logic bug, a manipulation that never had a chance, a confusing question everyone straight-lined through. The money is just gone.

Doppelganger started as a fix for that: run your Qualtrics survey through a panel of AI respondents first, catch the problems, then spend on real humans. For this hackathon I wanted to close the loop on the money side of research, starting with how researchers pay for the tool itself.

## What it does

You paste a Qualtrics survey link and Doppelganger runs it through 100 persona-based AI respondents (a 19 year old biology student who skims on her phone, a cashier who clicks 4 on everything). It uses the Qualtrics Sessions API, so real branching and randomization fire exactly like they would for a human. Your survey gets run through three different LLMs in parallel, and you compare results across them.

New for the hackathon: credit purchases now run through PayPal (sandbox), new accounts get 200 free credits so you can try it without paying, and results include a respondent-level AG Grid table where you can sort and filter every individual answer.

We benchmarked the ensemble against the published Twin-2K-500 dataset: it reproduced 15.5 of 17 classic behavioral effects, versus 9 for the digital twins built in the original study.

How we built it

FastAPI on Railway, Next.js on Vercel, Postgres, Gemini plus two OpenRouter models for the ensemble. PayPal is a server-side Orders v2 integration: the client only ever sends a pack id, prices live on the server, and capture is idempotent so a double click can't double-credit.

Challenges we ran into

The weirdest one: adding PayPal broke every HTTPS call in the backend with a RecursionError deep in Python's ssl module. Turned out our corporate-SSL workaround (truststore) has to patch SSL before requests is ever imported, and the new payments code changed the import order. One line moved to the top of main.py fixed it.

Also, Qualtrics rejects AI sessions on lots of question types, so we auto-generate an AI-compatible copy of your survey and never touch the original.

Accomplishments that we're proud of

The benchmark result. Pretesting with AI only matters if the AI behaves like people, and 91% replication of known human effects is a real number from an external dataset, not a vibe.

## What we learned Payment code is mostly about what can go wrong twice. Idempotency keys, pending rows before capture, never trusting the client with a price.

What's next for Doppelganger

The part I'm most excited about: AI-gated payouts. After you field the real survey, the same models that pretested it score each human response for quality (speeding, straight-lining, gibberish), and legit respondents get paid automatically through PayPal Payouts. Bots don't.

Built With

Share this project:

Updates

Submission history