Note: Simulation defaults apply to simulated and test respondents only. They never affect live respondents or how live respondents are screened, and simulated data is never included in delivered datasets.
This page covers survey testing, not fielding. For how to reach a rare audience in field — sizing incidence, quota minimums, boost sources, and sourcing beyond panel — see Reaching low-incidence audiences.
The MX8 Labs Research Platform uses simulated responses to test and validate the survey. If you're working with a low-incidence survey, purely random simulated answers rarely qualify, so almost every simulated respondent screens out and the questions after the screener never get exercised. Setting test data defaults gives the simulation a representative set of test respondents so the rest of the survey is validated.
Respondent source names in simulation
Simulation carries the selected respondent source display name into the simulated respondent context. Code that branches on s.respondent.source therefore follows the same named-source path during simulation that it will use in field:
if s.respondent.source == "Customer panel":
customer_status = s.select_question(
"How long have you been a customer?",
options=["Less than a year", "1–3 years", "More than 3 years"],
)
The display name takes precedence over the technical source type and is automatically reported as respondent_source. If a simulation has no source display name, s.respondent.source falls back to its source type. When testing source-specific routing, run the simulation for the intended named respondent source rather than hardcoding a separate simulation-only default.
Consider a survey where the fourth question is about the industry they work in, looking to filter out people who work in marketing or mobile gaming:
household_industry = s.multi_select_question(
question="Do you or anyone in your household work in any of the following sectors?",
options=[
"Market analysis and research",
"Marketing, public relations, or promotional activities",
"Video game development or publishing",
"Mobile app development or publishing",
"Social media platform or application",
"User insights or consumer research",
"Manufacturing of consumer electronics",
"Retailing of consumer electronics",
"Large-scale retail of consumer goods",
"Producing, distributing, or selling DVDs or music CDs",
"A television broadcasting network",
"Distribution of food or beverages",
"Healthcare provider",
"Financial services and insurance",
"Real estate services",
"Construction industry",
"Educational institutions and services",
"Government or public sector",
"A news or media organization"],
other_options=["None of the options listed above"],
randomize=True,
)
s.terminate_if(
any(industry in household_industry for industry in [
"Market analysis and research",
"Marketing, public relations, or promotional activities",
"Video game development or publishing",
"Mobile app development or publishing"]),
"Sorry this survey is only for people who don't work in marketing or mobile game development.",
)
When creating the simulated responses, it's pretty likely that every response is going to choose one of the excluded industries at random, so you end up getting an error that the subsequent results don't have any responses.
Setting a representative test default
Questions that collect a response have a parameter default that can be set to specify what the simulated responses return. You can either set this to a fixed value or a random value. Choose a value that reflects how a qualifying respondent would answer in the real world — here, most people who qualify work in a sector the screener does not exclude, so picking two random industries from that list every time gives a realistic test respondent:
forbidden_industries = ["Market analysis and research",
"Marketing, public relations, or promotional activities",
"Video game development or publishing",
"Mobile app development or publishing"]
allowed_industries = [
"Social media platform or application",
"User insights or consumer research",
"Manufacturing of consumer electronics",
"Retailing of consumer electronics",
"Large-scale retail of consumer goods",
"Producing, distributing, or selling DVDs or music CDs",
"A television broadcasting network",
"Distribution of food or beverages",
"Healthcare provider",
"Financial services and insurance",
"Real estate services",
"Construction industry",
"Educational institutions and services",
"Government or public sector",
"A news or media organization",
]
household_industry = s.multi_select_question(
question="Do you or anyone in your household work in any of the following sectors?",
options=forbidden_industries+allowed_industries,
other_options=["None of the options listed above"],
randomize=True,
default=s.randomize(allowed_industries)[:2]
)
With these changes in place, the simulated responses work fine for this question and we get the rest of the survey running fine.
If you're working with a single select question, you can pass a list of the allowed industries as candidates — each simulated respondent picks one from the list at random:
industry = s.select_question(
question="Which sector do you work in?",
options=forbidden_industries+allowed_industries,
other_options=["None of the options listed above"],
randomize=True,
default=allowed_industries
)

