Who can use it
- Workspaces on the Enterprise plan with a BigQuery or Snowflake connection. Redshift, Postgres and S3 connections aren’t supported.
- Admins with the permission to change sync settings turn it on. Turning it off works on any plan.
Turn it on
Create the destination first, then switch export on in GainTrace.- BigQuery
- Snowflake
- Create a dataset in the same location as your connection. The default name is
gaintrace. - Give the connection’s service account BigQuery Data Editor on that dataset. It keeps BigQuery Job User on the project.
How it runs
- The first export copies everything. Consumers can see a partial table until it finishes.
- After that it runs every hour with the connection’s sync, which needs auto sync on and billing not locked. Export now runs it on demand.
- Rows are upserted by
id, so you never get duplicates. Edits, follow-up changes and responses a respondent finishes later update the row. A row never moves to an older version. - Responses that are deleted in GainTrace get a
deleted_atvalue, and every answer and personal column on the row is cleared. A deleted response keeps onlyid,workspace_id,survey_id,measure,updated_atanddeleted_at. Itsupdated_atbecomes the deletion time. A deleted campaign getsdeleted_aton itssurveysrow. - Anonymous campaigns, and responses whose personal details were removed (
anonymized_atis set), never carryperson_id,respondent_emailorrespondent_name. - Private reviewer notes and GainTrace’s internal answer keys are never exported.
- Responses imported from other tools (Typeform, SurveyMonkey, Qualtrics, Retently, Delighted and CSV files) and NPS sent to
/nps-responsesaren’t included. - Turning export off keeps the tables. Turning it on again, or changing the dataset, empties the tables and reloads them.
_gaintrace_synced_at, a timestamp of when GainTrace last wrote the row.
Table survey_responses
One row per response. Types are shown for BigQuery and Snowflake.
id, workspace_id, survey_id and updated_at are never empty.
The answers column
answers has the same shape as answers on the API and in webhooks. Keys are question positions, q0, q1 and so on, counted from zero. A comment key holds the comment. Values you saved with hidden fields are under hidden, and an AI follow-up is under _probe with question and answer.
The question_answers column
question_answers is a list with one entry per answered question. Statements and unanswered questions are left out.
number is the question’s position counted from one. value is the stored answer. display is the same answer as text.
Table surveys
One row per campaign.
id, workspace_id and updated_at are never empty. Survey settings aren’t exported, because they hold alert destinations and in-app origins.
Example queries
Monthly NPS by campaign. Leave out deleted and unfinished responses.- BigQuery
- Snowflake
Troubleshooting
Related pages
Surveys API
Read the same responses over REST.
Webhooks
Get responses as they arrive.