Skip to main content
This page covers code methods for launching surveys, gathering human responses, and analyzing results. For interactive survey building, see Survey Builder. For Prolific recruitment, see Prolific studies. For email notifications and scheduled reminders, see Survey notifications.

How it works

1
Create Surveys with desired types of Questions.
2
Humanize the survey to generate a web-hosted version on Expected Parrot with a respondent link and an admin dashboard.
3
Share the respondent link with human participants (or recruit via Prolific).
4
Collect responses back as a standard EDSL Results object.
5
Analyze your human results alongside any LLM results.

Basic usage

.humanize() parameters

Return value

survey.humanize() returns a Scenario (dict-like) with these keys: Save the uuid — you need it to retrieve responses.

Previewing before deployment

Use .preview() to get a preview URL without creating a live survey:

With scenarios

When using scenarios, call .humanize() on a Jobs object (not directly on the survey). You must specify a scenario_list_method. This example shows each respondent a different policy description and asks for their reaction:

Scenario list methods

Rules:
  • If you attach scenarios, you must specify scenario_list_method.
  • If you specify a method, you must attach scenarios.
  • Agents and models are not supported with humanize — the survey goes to real humans.

With agent lists (for email notifications)

Attach an AgentList via .by() to associate respondents with email addresses. Pass a DeliveryMap to tell Coop which agent trait holds the email address.
col_name must match the trait key that holds each respondent’s email address. Once deployed, use Survey notifications to send invitations, schedule reminders, and track delivery status.

Retrieving responses

Checking response count

Working with file upload responses

If your survey includes a QuestionFileUpload question, each response’s answer for that question is a list of file-info dicts. Use FileStore.from_file_upload_answer (single file) or FileStoreList.from_file_upload_answers (all files at once) to download and wrap them:
The returned FileStore and FileStoreList objects behave like any other — you can inspect, filter, or pass them into further EDSL workflows.

QR code

Generate a QR code for the respondent link using get_human_survey_qr_code(). Requires the qrcode library (pip install "edsl[full]" or pip install "qrcode[pil]").

Prolific integration

For paid recruitment via Prolific, see the Prolific studies page. The short version: