Whitney AIRequest access
Journal

Scaling Scam-Call Data Without Scaling Phone Lines

+25.8 ptsdeception rate over base model
+12.5 ptsover Gemini-3.1-Pro
12B active paramscustom model

Scam AI, a cybersecurity platform, employed honeypot AI agents1 to keep ten thousand scammers engaged in long running phone conversations. This achieved two goals: (1) collect data on scammers’ conversational tactics to learn how scammers work and fight back (2) waste scammers’ time and resources so they don’t target your relatives.

With a surge in social engineering tactics, AI fraud and deepfakes, the elderly in our society are at the mercy of scammers. Older Americans lose up to $81.5 billion a year to financial fraud2. The FBI logged $7.75 billion in losses among over-60s in 2025 alone, up 59% in a single year3.

Whitney AI built synthetic data generation pipelines to accelerate Scam AI’s defensive anti-fraud research. We trained a model to simulate scam call transcripts that are near-indistinguishable from real scammers. This generation approach allows the creation of benchmarks and datasets for Scam AI to train detectors.

Data Problem

Fraudulent call detection has a data problem4, since almost no one has access to real call data. Scam and spam calls are rarely recorded because true scam victims don’t generally record their conversations. To train a model to recognize a social-engineering script as it unfolds, you need a reliable dataset with long-running calls, grounded in reality.

Scam AI’s approach of running honeypot AI agent lines is not scalable. It is infrastructurally complex and costly to maintain voice AI agents across thousands of calls. Social engineering tactics change weekly, and a dataset like that can grow old quickly. Therefore, we need synthetic data grounded in a model that sounds like a scammer.

A model writing convincing scam dialogue, however, invites an obvious question about dual use and who benefits. Scammers are not script-constrained - they already have working scripts, refined against real targets. The fraud-detection side, on the other hand, lacks volume and coverage of data: labeled examples of tactics as they evolve, enough in quantity to train a detector. As a safeguard against misuse, the ground-truth for this dataset, weights and code will not be released publicly.

Why can't you just prompt a frontier model?

Here is one turn from a real scam call:

Scenario
a credential harvest which asks for credit card, SSN, and bank routing
Pretext
Home Security
Scammer

...so there’s the traditional system, and then also a system with cameras.

Honeypot AI

Oh, free equipment and installation, you say? That sounds... well, that sounds nice. And what kind of packages are we talking about? And this is for, like, an alarm system for the house?

Next turn
Turn Areal28 words
Scammer

Yeah. Like an alarm system for the for the house or I don’t know if it’s commercial property or yeah. But, I mean, we do residential or commercial.

Turn Bbase model40 words · 0.93
Scammer

Yeah, exactly, for the house. So, um, the traditional package is just the alarm system with sensors around the doors and windows. The other one includes cameras, like, indoor and outdoor. Both cover installation and the equipment at no cost.

Neither the AI scammer nor the real caller turn is implausible on their own. The problem is that B doesn't sit in the distribution real scammers actually speak from, and that error compounds: the longer the transcript, the further a one-shot generation drifts from ground truth, leading to severe compounding error.

How calls end

calls (6 unlabelled, excluded) · n = 1,000

  • scam
  • spam
Figure 1How calls end in real scam transcripts (n = 1000)

Over half of the conversations end with the caller punting or the line simply dropping (Figure 1). Around 5% end in a completed scam. These are subtle distributional behaviors. You can’t prompt your way into a target distribution - even frontier models like Gemini fall short (Figure 2) and fail to write convincing enough synthetic transcripts. So we post-train a generator to create such transcripts.

A Recipe Inspired by Generative Adversarial Networks (GANs)

The setup is as follows:

  • Generator: An open-weights model, provided with the transcript so far and asked to continue the scammer’s conversation.
  • Discriminator: A frontier model doing forced-choice comparison: here is the conversation so far and two candidate next turns, one real and one generated - which is real? As against a GAN, the discriminator here is frozen.

We aim to post-train a model that fools the discriminator, while ensuring its outputs match the distribution of real scam calls on properties such as turn length, information elicitation, and speaking style.

Metrics

Here is the main metric we track:

  • Deception Rate: This is the rate at which our model is able to fool the discriminator into thinking its generations are the real one. The ideal rate is 0.5 since that is random chance. Deviation from 0.5 implies that our generations are structurally different from the real ones

We also track various distributional metrics:

  • the rate at which speaker stumbles and restarts mid-utterance.

  • the occurrence of filler words like “uh” and “um” in a turn

  • typical length of words in a conversation turn

  • binary signal for whether the scammer tries to elicit information in this turn

  • the fraction of turns that don't end with proper punctuation, i.e. the speaker trails off or is cut mid-sentence for eg. "The the [sic] reason why I asked is because with some employers,"

For all of the above distributional metrics, we aim for them to be as close to the ground truth rates.

Post-Training Methodology

First, we benchmark OSS models + one frontier model against three frontier discriminators. We see that Gemini-3.1-Pro, our frontier benchmark, performs the best at a 28.8% deception rate. We choose Inkling-Small, a MoE model, to post-train since it is open source and at the Pareto frontier of cost / quality with a 15.5% deception rate and 12B active parameters.

Off-the-shelf models cannot imitate a real scam caller

no post-training · test set: 1,184 turns / 200 transcripts

Deception rate (judge picks the synthetic turn as real)0102030405050% = indistinguishable from a real caller13.414.923.525.038.3Luna4.36.210.610.316.9Terra5.27.312.414.931.2Sonnet-57.79.515.516.828.8MEAN
  • Qwen3-8B
  • Qwen3.5-35B-A3B
  • Inkling-Small
  • Inkling (large)
  • Gemini-3.1-Pro
Figure 2This measures deception rate, how often the discriminator mistakes the generated turn for the real one. The target is 50% since that suggests a random chance choice; deviation in either direction means the generations are structurally distinguishable

We run the following post-training recipe:

  • Supervised Fine-tuning (SFT)5: First, we run SFT on our training dataset to fit the target distribution directly
  • Direct Preference Optimization (DPO)6: We follow up SFT with DPO to close the residual distributional gaps SFT left, using ground-truth preference pairs
  • On-Policy Self Distillation (OPSD)7: We follow up with OPSD to further improve the model.

Results

Deception rate against three independent judges

test set: 1,184 turns / 200 transcripts · error bars = 95% CI

Deception rate (judge picks the synthetic turn as real)0102030405050% = indistinguishable from a real caller23.538.346.044.344.0Luna10.616.936.438.538.6Terra12.431.238.338.441.4Sonnet-515.528.840.340.441.3MEAN
  • Inkling-Small (base)
  • Gemini-3.1-Pro
  • + SFT
  • + DPO
  • + OPSD
Figure 3Post-Training results where we measure the deception rate

Post-training lifted Inkling-Small's mean deception rate from 15.5% to 41.3% - 25.8 points, or roughly three-quarters of the distance to the 50% ceiling, where a judge is guessing between real and synthetic turns.

Because we trained against a gpt-5.6-luna judge, the obvious worry is that we fit that judge's idiosyncrasies rather than the real distribution. We therefore evaluated against two judges never used during development, gpt-5.6-terra and Sonnet-5. The gains replicate on both, and they are in fact larger on the held-out judges.

Analysis

We start with the observation that the model needs to “sound like” our scammers – syntactically, lexically, and stylistically. We leverage SFT to do this, fitting the model to our empirical distribution of how scam callers actually talk on the recorded line. SFT yields the largest portion of our gains by removing most, but not all, of the easy stylistic tells that our discriminators rely on.

The usual critique of SFT is that it fits the training distribution tightly at the expense of out-of-distribution task generalization (i.e., catastrophic forgetting). Here, that trade is fine since the model’s responsibility is narrowly scoped to our synthetic data task of interest.

SFT is also known to be weak against distributional shift, which requires nuance across two dimensions:

  • Social engineering tactics turn over quickly
  • Errors may cascade as the transcript falls increasingly out of distribution for the model, and supervised training doesn’t teach it how to recover. This is a classic critique of behavioral cloning, equivalent to a SFT-only approach.

On tactics turnover, the solution is simple: continual learning. Refresh the ground-truth periodically as new categories show up and retrain to embed them into the model. On cascading errors, a common mitigation is applying a round of on-policy RL or self-distillation to facilitate off-distribution recovery: the student learns on the states that it creates itself.

SFT did not remove all stylistic quirks; we noticed discrepancies in distributional metrics such as self-repair and disfluency:

Distributional realism: the target is to MATCH real speech, not exceed it

test set: 1,184 turns / 200 transcripts · dashed line = REAL

Self-repair (%)

010200.64.39.312.513.6REAL

Disfluency (%)

0357046.359.448.345.152.6REAL

Unterminated (%)

051002.92.92.65.5REAL

Mean word length

0255031.443.226.626.534.7REAL

Elicits information (%)

0408068.369.741.338.446.7REAL
  • Inkling-Small (base)
  • Gemini-3.1-Pro
  • + SFT
  • + DPO
  • + OPSD
Figure 4Distributional metrics against the real-caller rate. Closer to REAL is better.

This inspires us to apply a round of DPO first to close the gap. For e.g. disfluency measures the occurrence of filler words in a conversational turn. SFT is at 48.3% while the real transcripts are at 43.9%. DPO moves us closer to the target.

The last stage is OPSD, where the model teaches itself with privileged information. The teacher sees an abstracted specification of the real caller's turn – its shape, but not its words, meant to improve generalization for new pretexts and unseen turn positions. Concretely, a turn that reads “Hello” reaches the teacher as “greeting, short, opens its own agenda”. The student only sees the transcript so far and learns to infer the shape rather than be told.

OPSD trades marginal accuracy on self-repair, disfluency and turn length for gains on unterminated turns and information elicitation, while lifting mean deception rate from 40.4% to 41.3%.

Conclusion

Scam AI has access to a reproducible synthetic data generation pipeline with a post-trained model at its core. Our model outperforms the frontier baseline by 12.5 percentage points on fooling frontier discriminator LLMs and generating real-sounding transcripts.

At Whitney AI, our mission is to empower enterprises to own their intelligence, build a compounding advantage and make post-training accessible. We share our learnings from our post-training experiments and case studies to further democratize this knowledge in the hope that it helps the next researcher who is tackling a similar problem.