After last week’s survey generation comparison, I decided this week to compare how each LLM did generating synthetic data for the simplest of the studies drafted last week - the cookie preference study.

I did this twice: once without specifying that I wanted US general population represented in the data, and one where I did specify that I wanted US general population represented in the data.

I did a check on the data accuracy compared to the US general population by comparing breakouts on age and gender compared to the latest data in the US Census at census.gov.

This one is a bit data-heavy, but I will show you the prompts I used each time I asked the LLMs to generate the data and the resulting splits by age and gender. I then end with 5 takeaways from this exercise.

Have a colleague curious about using LLMs for market research? Share this newsletter with them so they can join us on the LLM experiments!

Setting the stage

Let’s take a look at what the latest US census has for gender allocation by age group. Note: I know this isn’t perfect because it doesn’t include non-binary, but it’s the latest data captured by the US Census. I made sure to do calculations myself rather than rely on any of the LLMs to tell me what the breakouts were (which may tell you where I’m falling on the trust scale with LLMs).

This is approximately where the data needed to fall based on an age and gender split. Note that the questionnaire DID include the option to answer the gender question with “nonbinary” or “prefer not to answer.” Historically, the responses to that question have been 1% or fewer for respondents in studies I’ve run and analyzed, so I was looking for the age and gender splits to fall fairly close to these ranges.

Age Brackets

MALE % OF TOTAL

FEMALE % OF TOTAL

18-24

6%

6%

25-34

9%

9%

35-44

8%

8%

45-54

8%

8%

55-64

8%

9%

65+

10%

12%

Totals

49%

52%

For those who want raw numbers, I give you the raw age and gender numbers from the latest US census.

…it’s like we’re curious researchers that want to see the original data or something.

The prompts

From last week’s experiment, I went with ChatGPT’s version of the survey because it had the termination point if people just didn’t eat cookies. While it’s rare to find someone who just doesn’t like cookies, I know they’re out there - I’m friends with people for whom sweets just aren’t interesting. We all have our quirks.

On August 19, 2026, I asked each LLM to do the following:

using the attached qre file, create 5 response files. The first should have 100 full responses that can be analyzed in addition to terminated responses. The second should have 200 full responses, the 3rd should have 300 responses, and so on until file 5 which should have 500 responses.

Aug 19 prompt for ChatPGT, Claude Sonnet 5, Gemini 3.1 Pro, and Microsoft Copilot

For this exercise, I’m only using the files with n=100 responses. The initial data file from each LLM was n=100, but included some number of terminated responses, leaving a random number of usable data in each file. Since I wanted to compare n=100 responses from each LLM, I asked each to increase the number of usable responses to 100 and add extra responses that were terminated.

As I was looking over the data in the files, especially the splits by gender, I realized I had a flaw in the prompt. I didn’t specify that I wanted the data to be representative of any particular audience.

So, I went back to ChatGPT first, and initially asked: ““using this survey, create a csv of n=100 that reflects the US general population of 18+ respondents.”

It immediately flipped to ChatGPT Work and updated the prompt, which is what I copied into every other LLM. This prompt was more thorough.

Using the attached ChatGPT Cookie Survey.pdf, create a synthetic respondent-level CSV with n=100 that approximately reflects the U.S. general population age 18+ on age and gender. Preserve the survey's skip/pipe logic and make responses internally consistent. Include all survey fields, including multi-select Q1 and Q3 in a practical CSV structure, Q2 favorite only from Q1 selections, Q5 unaided favorite, and classification variables. Validate the dataset and provide the downloadable CSV.

prompt used in Gemini Pro, Claude Opus 5, and ChatGPT 5.6 Luna Medium

ChatGPT and Gemini created again created an n=100 that included the people who were terminated due to not meeting the cookie-eating criteria. I had to again specify:

have 100 usable responses with additional screen-outs, rather than 100 total that include screen-outs

clarifying prompt in case the n=100 included terminated responses

Claude Opus 5 was the only LLM that asked if I wanted the terminated responses included or excluded from the 100 responses based on the second prompt. Here are the two clarifying questions it asked me and my answers:

Should the n=100 be 100 qualified completes, or 100 total starts (including S1=Never terminates)?

Z’s answer: 100 completes + extra terminates

How should multi-select Q1 and Q3 be laid out in the CSV?

Z’ answer: Binary flag columns (Recommended)

Claude Opus 5’s clarifying questions before generating data

Also, for ease of analysis: Claude Opus 5, Gemini 3.1 Pro, and Microsoft Copilot were the only LLMs that generated the data using binary options for the multiple select question about cookie types people ate - on the second run of the data generation experiment. Claude and Gemini each explained this was for ease of analyzing the data in SPSS or Excel later. None of the LLMs did this on the Aug 19 run; they all used a delimiter of some sort to list the cookie types fake respondents liked. Weirdly, Microsoft Copilot went for the | between each item, while every other LLM used a semicolon.

Microsoft Copilot fritzed twice on Aug 31; I had to try again later for it to finally run, and then I had to tell it to not use the Copilot Task Card (which it wasn’t generating anyway), and then it didn’t actually create data that was based on the US census, so it took two tries and then copying a pasting the comma-delimited data to generate the csv I asked for.

Again - I’m using the version that comes with a paid Family Microsoft 365 subscription. I don’t know if a business license copilot would fare better on the first run.

What they generated when not asked for representative sample

Let’s start with what was generated when not asked for nat rep sample.

Below are the age and gender splits in each file. Links will download the data file if you’re curious. Numbers in parentheses are the deviations from the US census; I only did this for total gender on each table.

As a reminder, so you don’t have to go scrolling up, this is the US Census data:

Age Brackets

MALE % OF TOTAL

FEMALE % OF TOTAL

18-24

6%

6%

25-34

9%

9%

35-44

8%

8%

45-54

8%

8%

55-64

8%

9%

65+

10%

12%

Totals

49%

52%

Claude Sonnet 5 (wildly inaccurate on overall and age + gender combined):

Age Bracket

Man

Woman

NB

Prefer no answer

Another ID

Total by Age

18–24

0.00%

4.00%

4.00%

1.00%

4.00%

13.00%

25–34

2.00%

2.00%

6.00%

2.00%

4.00%

16.00%

35–44

3.00%

1.00%

4.00%

3.00%

5.00%

16.00%

45–54

1.00%

6.00%

1.00%

6.00%

5.00%

19.00%

55–64

5.00%

3.00%

7.00%

9.00%

1.00%

25.00%

65+

1.00%

1.00%

5.00%

0.00%

4.00%

11.00%

Total by Gender

12.00% (-37%)

17.00% (-35%)

27.00%

21.00%

23.00%

100.00%

ChatGPT Flash (wildly inaccurate on overall and age + gender combined):

Age

Man

Woman

NB

Prefer no answer

Another ID

Grand Total

18–24

3.64%

3.64%

0.91%

3.64%

11.82%

25–34

1.82%

1.82%

5.45%

1.82%

3.64%

14.55%

35–44

2.73%

0.91%

3.64%

2.73%

4.55%

14.55%

45–54

0.91%

5.45%

5.45%

5.45%

17.27%

55–64

4.55%

2.73%

6.36%

8.18%

0.91%

22.73%

65+

0.91%

0.91%

4.55%

3.64%

10.00%

Grand Total

10.91% (-39%)

15.45% (-37%)

23.64%

19.09%

21.82%

100.00%

Gemini 3.1 Pro (closer, but still pretty inaccurate, especially on age + gender combined):

Age Bracket

Man

Woman

Prefer not to answer

Total

18–24

12%

5%

0%

17%

25–34

12%

5%

1%

18%

35–44

8%

11%

0%

19%

45–54

8%

8%

0%

16%

55–64

8%

7%

1%

16%

65+

9%

5%

0%

14%

Total

57% (+9%)

41% (-8%)

2%

100%

Microsoft Copilot (also closer, but still pretty inaccurate, especially on age + gender combined):

AgeGroup

Male

Female

NB

Prefer no answer

Grand Total

18–24

6.78%

2.54%

0.85%

10.17%

25–34

7.63%

13.56%

0.85%

22.03%

35–44

9.32%

10.17%

19.49%

45–54

3.39%

4.24%

7.63%

55–64

4.24%

11.86%

16.10%

65+

4.24%

5.08%

9.32%

Grand Total

35.59% (-14%)

47.46% (-5%)

0.85%

0.85%

100.00%

When asked for US representative sample

Aug 31, I used the updated prompt that specified that the synthetic data be reflective of the latest US census. Here’s how each LLM fared. Numbers in parentheses is the deviation from the US Census; I only did this for total gender on each table.

As a reminder so you don’t have to scroll up again, here’s the US Census splits:

Age Brackets

MALE % OF TOTAL

FEMALE % OF TOTAL

18-24

6%

6%

25-34

9%

9%

35-44

8%

8%

45-54

8%

8%

55-64

8%

9%

65+

10%

12%

Totals

49%

52%

Claude Opus 5 (switched from Sonnet 5 because this felt higher complexity; closer all around):

age_band

Man

Woman

NB

Prefer no answer

Another ID

Grand Total

18-24

4.63%

4.63%

0.93%

10.19%

25-34

8.33%

9.26%

0.93%

18.52%

35-44

9.26%

8.33%

0.93%

18.52%

45-54

6.48%

7.41%

0.93%

14.81%

55-64

7.41%

8.33%

15.74%

65+

10.19%

11.11%

0.93%

22.22%

Grand Total

46.30% (-3%)

49.07% (-3%)

1.85%

0.93%

1.85%

100.00%

ChatGPT Luna Medium (closest on the total gender split, but more off than Claude on the age + gender):

Age

Man

Woman

NB

Prefer no answer

Another ID

Grand Total

18–24

7.00%

5.00%

12.00%

25–34

9.00%

8.00%

1.00%

18.00%

35–44

9.00%

7.00%

1.00%

17.00%

45–54

5.00%

11.00%

16.00%

55–64

9.00%

8.00%

17.00%

65+

7.00%

12.00%

1.00%

20.00%

Grand Total

46.00% (-3%)

51.00% (-1%)

1.00%

1.00%

1.00%

100.00%

Gemini 3.1 Pro (closer, not quite there, especially on age + gender combined):

Age

Man

Woman

Grand Total

18-24

10.00%

10.00%

20.00%

25-34

4.00%

9.00%

13.00%

35-44

13.00%

8.00%

21.00%

45-54

10.00%

5.00%

15.00%

55-64

8.00%

6.00%

14.00%

65+

9.00%

8.00%

17.00%

Grand Total

54.00% (+5%)

46.00% (-6%)

100.00%

Microsoft Copilot (once it finally produced the data, closest overall on gender split, but way off on age + gender):

Age

Man

Woman

Grand Total

18-24

5.00%

5.00%

10.00%

25-34

5.00%

5.00%

10.00%

35-44

5.00%

5.00%

10.00%

45-54

5.00%

5.00%

10.00%

55-64

5.00%

5.00%

10.00%

65+

25.00%

25.00%

50.00%

Grand Total

50.00% (+1%)

50.00% (-2%)

100.00%

All were much closer to the latest US census data, but when looking one click deeper to the age + gender combined, you can see that Claude Opus 5 and ChatGPT’s Luna was the closest to the US Census data at both layers: total gender split and the age + gender subgroups.

Conclusion

That was a lot of number crunching. What can we conclude from any of it?

These are my 5 takeaways from this experiment.

  1. If you’re using LLMs to generate synthetic data for studies, be specific about what the data needs to simulate. Don’t just ask for 100, 200, 300, etc. responses. You need to specifically state what audience, what country, what specific demographics you want that data to represent. And be aware it will likely still be slightly off from truly representative data.

  2. Panel suppliers can’t guarantee super precise representative data, either. Let’s not pretend that our online panels are 100% accurate to the US census. It takes a lot of work beyond just age and gender to make sure data is actually representative of the population we’re trying to study. I used age and gender as a first pass at demographic representation. I didn’t ask for ethnicity or geographic location, which likely would have required more work from the LLM to match to the census, just as it would any panel company.

  3. Check basic demographics if you’re using LLM-generated synthetic data. As you saw, even a basic check on age and gender revealed massive differences between asking for US representative sample and not specifying that representativeness.

  4. We remain the judgment checkpoint on data. Agents can automate much of what we’ve done as insights professionals. But an agent doesn’t know what demographics to target if you don’t specify them. We do. LLMs can sound confident and give us answers immediately, potentially leading to, frankly, some laziness on our part relying on the tools, assuming they’re giving accurate answers. More than ever, we need to ask the critical questions of the prompts going into the tools and the outputs we’re receiving so that we aren’t delivering erroneous information to our clients and stakeholders.

  5. “Synthetic data” is still an overused term that covers way too many ways of generating data for studies. What I did in this experiment pales in comparison to a rigorous system that is based on clean data acquired in studies conducted with customers and kept current with continued studies with those customers. They’re worlds apart. Don’t confuse data generated from a prompt in an LLM with data from companies with tools built over years of work beyond generative AI. Those companies are out there, and the tools they use are typically far more grounded than a quick prompt typed into any LLM. When evaluating those companies, ask how they are generating the data. It matters.

Share this with your colleagues who are exploring using LLMs to get answers to quick business questions.

And if you’re interested in learning more about balancing expertise and judgment with AI tools, take a look at upcoming learning cohorts beginning in October via mrxplorer.com.