Skip to content

Survey Data Model

Primary Entities

Survey Responses: Individual customer responses to surveys with optional overall rating

Answers: Question-level detail for each response, including free text and numeric scale answers

Key Relationships

Many-to-One: Survey Response → Shop (each response is linked to one shop)

Many-to-One: Survey Response → Customer (each response is linked to one customer)

Many-to-One: Survey Response → Survey (each response belongs to one survey)

One-to-Many: Survey Response → Answers (each response contains one or more answers)

Core identification fields linking survey responses to tenants, shops, and customers.

Field NameData TypeDescriptionRequired
STEER_TENANT_IDString (UUID)Unique tenant identifier (parent organization)Yes
STEER_SHOP_IDString (UUID)Shop location identifier where the survey was issuedYes
STEER_CUSTOMER_IDString (UUID)Customer identifier who submitted the responseYes
STEER_SURVEY_IDString (UUID)Unique survey identifier (groups all responses for a survey)Yes
STEER_SURVEY_RESPONSE_IDString (UUID)Unique survey response identifier (groups all answers for one submission)Yes

Overall response-level metrics.

Field NameData TypeDescriptionRequired
SURVEY_RATINGNumberOptional overall satisfaction rating (1–5 scale). Separate from individual question answersNo
SURVEY_ANSWER_COUNTNumberTotal number of answers in this responseYes

Response timing in both UTC and local timezone.

Field NameData TypeDescriptionRequired
POSTED_ATTimestampResponse submitted timestamp (UTC)Yes
POSTED_AT_LOCALTimestampResponse submitted timestamp (shop’s local timezone)Yes

Individual question/answer pair fields. Each row represents one answer within a response.

Field NameData TypeDescriptionRequired
ANSWER_TYPEStringType of survey question (see enum values)Yes
ANSWER_QUESTIONStringFull text of the survey questionYes
ANSWER_TEXTStringSubmitted answer as a JSON array. Contains text for FreeText, OptionsSingleChoice, OptionsMultipleChoices, and ReviewButtons questions. Empty array [] for LinearScale questions. Max 1000 characters per answerYes
ANSWER_NUMERIC_VALUENumberNumeric answer value for LinearScale questions only (0–100, or 0–10 for NPS questions). Null for all other question typesNo
ANSWER_IS_OPTIONALBooleanWhether the question was optional in the surveyYes

Record lifecycle tracking.

Field NameData TypeDescriptionRequired
STEER_CREATED_ATTimestampRecord creation timestamp in SteerYes
STEER_UPDATED_ATTimestampRecord last update timestamp in SteerYes

The ANSWER_TYPE field indicates the type of survey question (enum values in order):

  • FreeText (1): Open-ended text question. Answer stored in ANSWER_TEXT as ["response text"]. ANSWER_NUMERIC_VALUE is null
  • LinearScale (2): Numeric scale question (0–100, or 0–10 for NPS). Answer stored in ANSWER_NUMERIC_VALUE. ANSWER_TEXT is []
  • OptionsSingleChoice (3): Single-select from predefined options. Selected option stored in ANSWER_TEXT as ["selected option"]. ANSWER_NUMERIC_VALUE is null
  • OptionsMultipleChoices (4): Multi-select from predefined options. Selected options stored in ANSWER_TEXT as ["option1", "option2"]. ANSWER_NUMERIC_VALUE is null
  • ReviewButtons (5): Button-based selection. Selected value stored in ANSWER_TEXT. ANSWER_NUMERIC_VALUE is null

Complete API response example with survey answer records:

{
"data": [
[
"729051b5-3e17-4a63-ad9e-a7bc76af571d",
"3282fa05-00cf-45c1-8f3a-7b9eb9a304ff",
"c3c9f27c-9be0-4c95-bd7a-cad95858723d",
"ae1f8b84-1132-429f-913e-63597c886d59",
"11f4ec40-a155-44eb-b47c-610a403440fb",
null,
7,
"2026-03-15T15:34:01.911000Z",
"2026-03-15T10:34:01.911000Z",
"FreeText",
"We value your insights! Please share any additional feedback about your visit in the space provided.",
"[\"Great service!\"]",
null,
false,
"2026-03-15T15:34:01.911000Z",
"2026-03-15T15:34:01.911000Z"
],
[
"729051b5-3e17-4a63-ad9e-a7bc76af571d",
"3282fa05-00cf-45c1-8f3a-7b9eb9a304ff",
"c3c9f27c-9be0-4c95-bd7a-cad95858723d",
"ae1f8b84-1132-429f-913e-63597c886d59",
"11f4ec40-a155-44eb-b47c-610a403440fb",
null,
7,
"2026-03-15T15:34:01.911000Z",
"2026-03-15T10:34:01.911000Z",
"LinearScale",
"On a scale of 1-5, how would you rate the cleanliness and comfort of the waiting area?",
"[]",
5,
false,
"2026-03-15T15:34:01.911000Z",
"2026-03-15T15:34:01.911000Z"
]
],
"metadata": {
"rowType": [
{"name": "STEER_TENANT_ID", "type": "text"},
{"name": "STEER_SHOP_ID", "type": "text"},
{"name": "STEER_CUSTOMER_ID", "type": "text"},
{"name": "STEER_SURVEY_ID", "type": "text"},
{"name": "STEER_SURVEY_RESPONSE_ID", "type": "text"},
{"name": "SURVEY_RATING", "type": "fixed"},
{"name": "SURVEY_ANSWER_COUNT", "type": "fixed"},
{"name": "POSTED_AT", "type": "timestamp_ntz"},
{"name": "POSTED_AT_LOCAL", "type": "timestamp_ntz"},
{"name": "ANSWER_TYPE", "type": "text"},
{"name": "ANSWER_QUESTION", "type": "text"},
{"name": "ANSWER_TEXT", "type": "text"},
{"name": "ANSWER_NUMERIC_VALUE", "type": "fixed"},
{"name": "ANSWER_IS_OPTIONAL", "type": "boolean"},
{"name": "STEER_CREATED_AT", "type": "timestamp_ntz"},
{"name": "STEER_UPDATED_AT", "type": "timestamp_ntz"}
]
}
}