Dynata
Dynata (formerly Research Now SSI) is the world's largest first-party data and insights platform, with access to respondents across 220+ countries. Flashpoint.AI integrates with Dynata's Samplify API to let you recruit real human respondents for large-scale market research, B2B studies, and niche professional audiences.
How it works
Dynata uses a project-based model. When you launch a panel, Flashpoint.AI creates a Samplify project with a line item that specifies your targeting (as a quota plan), sample size, length of interview, and incidence rate. Dynata handles respondent routing, qualification, and payment on their side.
Respondent tracking uses Dynata's [%RID%] placeholder system. When a respondent finishes the survey, Flashpoint.AI redirects them to Dynata's exit endpoint with an HMAC-SHA256-signed URL that encodes the outcome (complete, screen-out, or quota full). This signature lets Dynata verify the redirect originated from Flashpoint.AI.
Key differences from Prolific
| Dimension | Prolific | Dynata |
|---|---|---|
| Model | Study-based | Project-based with line items |
| Feasibility | Pre-project eligibility count | Requires a draft project — no pre-project feasibility endpoint |
| Auth | Token header (Token <key>) | Password grant against Samplify auth endpoint |
| Targeting format | Filter ID + selected values | Quota plan with attribute IDs and option IDs |
| Redirect security | Completion codes (per-study unique) | HMAC-SHA256 signed exit URLs |
| Typical latency | 24-48 hours | 2-7 days |
| Best for | Academic, UX, consumer surveys | Large-scale MR, B2B, multi-country |
Targeting
Dynata targeting uses Samplify attribute IDs. The platform translates canonical keys (like sex, age_range, education) into the Dynata wire format automatically.
Standard targeting keys
| Key | Attribute ID | Format | Description |
|---|---|---|---|
sex / gender | 11 | Enum: male, female | Biological sex. |
age | 13 | Integer (18-99) | Minimum age. |
age_range | 13 | Range string, e.g. "25-34" | Age range. |
household_income_usd | 14 | Samplify reference | Annual household income. |
education | 15 | Samplify reference | Highest education level. |
employment_status | 16 | Samplify reference | Current employment. |
marital_status | 17 | Samplify reference | Relationship status. |
ethnicity / race | 18 | Samplify reference | Self-identified ethnicity. |
us_zip / zip | 19 | 5-digit string | US ZIP code. |
us_state | 20 | USPS code or full name | US state of residence. |
us_region | 21 | Census region name | US census region. |
Keys marked "Samplify reference" accept locale-specific values from Dynata's reference data API. For the sex / gender key, the platform handles the translation (male maps to option 1, female to option 2). All other keys pass values through as strings to Samplify.
Attribute search for niche targeting
Dynata's full attribute catalog spans thousands of entries organized into 14 categories: Demographic, Automotive, Leisure/Interests, Entertainment, Travel, Finance, Household, Electronics, Shopping, Food/Beverages, Utilities, Region, Political, and B2B.
Use the attribute search to find targeting options beyond standard demographics. This is an agent-only operation — there is no public REST endpoint. The surveys agent runs the search against Dynata's catalog and returns the matches inline.
Agent prompt:
Search Dynata for vehicle ownership attributes.
The agent returns matches that include the vendor's own attribute_id and options. Pass these directly into the attributes parameter on quote and submit — no translation needed.
{
"matches": [
{
"attribute_id": "8421",
"name": "Vehicle Ownership",
"category": "AUTOMOTIVE",
"options": [
{"id": "1", "label": "Own"},
{"id": "2", "label": "Lease"},
{"id": "3", "label": "Neither"}
]
}
]
}
Survey topics
Dynata uses a topic taxonomy to route respondents. The default topic is BUSINESS. You can override it via the config parameter if your survey falls under a different category (e.g., HEALTHCARE, AUTOMOTIVE, FINANCE).
The full flow
The flow follows the same shape as Prolific: list providers, check filters, quote, approve and pay, monitor, pause/resume.
Step 1: Get a quote
Dynata's feasibility check requires creating a draft project on Samplify (there is no pre-project feasibility endpoint). Flashpoint.AI handles this automatically — the draft project is free and auto-expires. The platform polls Samplify for the feasibility result with exponential backoff, since Dynata returns a PROCESSING status while computing.
Agent prompt:
Quote 500 US respondents on Dynata for the brand tracker, ages 25-54.
API call:
curl -X POST https://surveys.flashpoint.ai/api/v1/surveys/$SURVEY_ID/panels/quote \
-H "X-Service-Token: $TOKEN" \
-H "X-Team-ID: $TEAM_ID" \
-H "Content-Type: application/json" \
-d '{
"provider_id": "DYNATA_PROVIDER_UUID",
"sample_size": 500,
"country": "US",
"targeting": {
"age_range": "25-54"
},
"loi_minutes": 12
}'
Response shape:
{
"feasible": true,
"estimated_completes": 500,
"estimated_days": 5,
"cost_per_complete": "4.20",
"total_cost": "2100.00",
"currency": "USD",
"warnings": []
}
If Dynata's feasibility engine is still computing when the retry budget is exhausted (~40 seconds), the response returns with a warning and feasible: false. Retry in a moment.
Step 2: Use niche attributes in the quote
Combine standard targeting with vendor-direct attributes from the search catalog.
Agent prompt:
Quote 300 US iPhone users aged 18-34 on Dynata.
API call:
curl -X POST https://surveys.flashpoint.ai/api/v1/surveys/$SURVEY_ID/panels/quote \
-H "X-Service-Token: $TOKEN" \
-H "X-Team-ID: $TEAM_ID" \
-H "Content-Type: application/json" \
-d '{
"provider_id": "DYNATA_PROVIDER_UUID",
"sample_size": 300,
"country": "US",
"targeting": {
"age_range": "18-34"
},
"attributes": [
{"attribute_id": "8421", "options": ["1"]}
]
}'
Multiple attribute entries are AND-ed together. Within one entry, multiple options are OR-ed. Add "operator": "exclude" to negate an attribute.
Step 3: Approve and pay
Same Stripe inline payment flow as Prolific. The panel auto-launches after payment clears. On the Samplify side, this triggers a POST /sample/v1/projects/{id}/buy call that moves the project from draft to fielding.
Agent prompt:
Approve the Dynata panel and launch.
Step 4: Monitor status
Check live progress from Dynata's stats endpoint.
Agent prompt:
How's the Dynata panel doing?
Response shape:
{
"status": "active",
"completes": 312,
"starts": 405,
"disqualified": 67,
"over_quota": 26
}
Step 5: Pause and resume
Pause halts respondent flow. Resume reactivates the project.
Agent prompts:
Pause the Dynata panel.
Resume recruiting on Dynata.
How the quota plan works
Dynata's targeting is expressed as a quota plan — a nested structure of quota groups, cells, and nodes. When you provide a flat targeting dict (e.g., {"sex": "male", "age_range": "25-34"}), Flashpoint.AI collapses all conditions into a single quota cell with the specified sample size.
For split quotas (e.g., 50% male / 50% female), the platform converts Flashpoint.AI's Quota database records into multi-cell quota plans via the quota mapper. Each cell specifies its own count and conditions.
Wire format example (single cell):
{
"filters": [],
"quotaGroups": [
{
"name": "Targeting",
"quotaCells": [
{
"quotaCellId": "default",
"count": 500,
"quotaNodes": [
{
"attributeId": "11",
"options": ["1"],
"operator": "include"
},
{
"attributeId": "13",
"options": ["25-34"],
"operator": "include"
}
]
}
]
}
]
}
An empty quota plan ({}) means general population with no filtering.
HMAC-signed redirect URLs
When a respondent finishes (or is disqualified, or hits quota full), Flashpoint.AI redirects them to Dynata's exit endpoint at api.dynata.com/respondent/exit. Each redirect URL includes:
| Parameter | Purpose |
|---|---|
rst | Result status: 1 = complete, 2 = screen out, 3 = quota full |
psid | Respondent ID (Dynata substitutes [%RID%] at runtime) |
_o | Flashpoint.AI's project ID |
_k | Security key ID |
_s | HMAC-SHA256 signature over the path and query string |
The signature lets Dynata verify that the redirect originated from Flashpoint.AI and was not tampered with. If signing keys are not configured, URLs are generated unsigned (acceptable for development, logged as a warning in production).
Reference data
Dynata's attribute catalog, country list, and survey topic taxonomy are all locale-specific and fetched from Samplify's reference data API. Flashpoint.AI caches this data for one hour. The attribute catalog is paginated and deduplicated — only attributes marked isAllowedInQuotas=true are surfaced.