Exporting and Analyzing Your Data
The Report page tells you what's in your data at a glance. The CSV export is where the actual analysis happens — in Excel, pandas, R, or whatever tool your team already uses. Here's how the export is structured, the gotchas that catch first-time users, and the workflows that pair best with each kind of question.
How to export
Two buttons, both on /client/reports:
- Export CSV — in the survey list and on every single-survey report. Downloads the entire response set for that survey.
- Export GeoJSON — per question, only on Route Creator question cards. Downloads every drawn route as a standards-compliant GeoJSON file.
Both are synchronous downloads. There's no email-when-ready step — even surveys with tens of thousands of responses stream in seconds.
The CSV layout
The export is a standard UTF-8 CSV with a header row. The columns are:
-
Seven identity columns, in this order:
Response ID,Date Completed,Verified,Email,First Name,Last Name,Zip. -
One column per renderable question, in the
order the questions appear on the Survey. Dividers are skipped.
Soft-deleted questions still appear (with an
[archived]prefix) so their historical data isn't lost.
Each subsequent row is one completed response. Empty cells mean the question was optional and not answered, or the question didn't exist when the response was submitted.
Header annotations to look for
Two header annotations are appended to columns that have a story behind them:
- [archived] — the question was soft-deleted from the survey. New respondents don't see it; historical data is preserved.
- [renamed mid-collection] — the question text changed during data collection. The column merges responses from multiple wordings. If exact phrasing matters, drill into individual responses or filter by date to separate cohorts.
See Reading the Report Page for more on what these annotations signal and when to care about them.
How each question type lands in the CSV
| Question type | CSV cell content | Analysis note |
|---|---|---|
| Short / Long Text, Email | The full text the Traveler typed. | Open the column in your tool's text editor or use NLP / sentiment libraries. |
| Radio, Dropdown, Range | The selected option's display value (e.g. "Mostly satisfied"). | Group-by + count is the natural starting point. |
| Checkboxes | Comma-separated values: "Work, School, Medical". |
Split the cell on commas before counting. Each respondent contributes to multiple buckets. |
| Date | YYYY-MM-DD. | Sortable as text or as a parsed date column. |
| Route Display | The Traveler's feedback text (if you collected it). | Same as a Long Text field for analysis. |
| Route Selector | The chosen route's name. | Group-by route name to count picks. |
| Route Creator | "N route(s): Name 1 | Name 2 | …" summary string. | Full coordinates are NOT in the CSV. Export GeoJSON separately for spatial analysis. |
| Route Ranker | "1. Route A | 2. Route B | 3. Route C" full ordering. | Split on " | " then on ". " to get rank-route pairs. |
The GeoJSON pairing for route data
Route Creator responses produce real geographic data — ordered sequences of latitude/longitude waypoints — and that doesn't fit cleanly into a CSV cell. Instead, every Route Creator question on the Report page has its own Export GeoJSON button that downloads the full geometry as a standards-compliant GeoJSON FeatureCollection.
The pairing pattern: export the CSV for the tabular analysis, and export the GeoJSON for each Route Creator question separately. Join them in your tool by the Response ID column — it appears in both files. That gives you "this respondent answered these questions AND drew this route", which is the natural data model for cross-tab analysis (e.g. "what trip purposes did the people in Corridor B select?").
For the full GIS workflow (QGIS, ArcGIS, kepler.gl, geojson.io) see Working with GeoJSON Route Data.
Practical analysis recipes
In Excel / Google Sheets / Numbers
For non-technical stakeholders, the CSV opens cleanly in any spreadsheet tool. A few tips:
- Use PivotTables for option counts on Radio / Dropdown / Range columns — drag the question column into Rows, then into Values as Count.
-
For Checkboxes, split the comma-separated
cells first. In Excel,
TEXTSPLIT(cell, ", ")works; in Google Sheets,SPLIT(cell, ", "). Then count each split value separately. - Filter by the Verified column when sharing with stakeholders who want defensible counts. "Verified = Yes" gives you the subset that has affirmative identity evidence.
- For Route Ranker columns, the "1. Name | 2. Name" format is intentionally human-readable. If you need per-route rank aggregation, split on " | " and you have one rank-route pair per cell.
In Python (pandas)
The export is pandas-ready out of the box. The skeleton:
import pandas as pd
df = pd.read_csv("Survey-Name-2026-05-30.csv")
# Filter to verified responses only
verified = df[df["Verified"] == "Yes"]
# Group-by counts for a Radio / Dropdown question
df["Preferred mode"].value_counts()
# Checkboxes: split, explode, count
df["Trip purposes"].str.split(", ").explode().value_counts()
# Route Ranker: pull rank-by-name pairs
ranker = (
df["Route preference order"]
.str.split(" | ")
.explode()
.str.extract(r"^(\d+)\.\s+(.*)$")
.rename(columns={0: "rank", 1: "route"})
)
In R
Same idea, idiomatic R:
library(readr)
library(dplyr)
library(tidyr)
library(stringr)
df <- read_csv("Survey-Name-2026-05-30.csv")
# Verified-only subset
verified <- df %>% filter(Verified == "Yes")
# Checkboxes: split, unnest, count
df %>%
mutate(purposes = str_split(`Trip purposes`, ", ")) %>%
unnest(purposes) %>%
count(purposes, sort = TRUE)
For QGIS / ArcGIS spatial analysis
Export GeoJSON for each Route Creator question. Drag the file into QGIS, ArcGIS, or kepler.gl — every route lands as a LineString feature with the Response ID, Traveler name (when known), and route name in the properties. From there, standard GIS operations apply: density grids, intersection with transit network shapefiles, distance-to-stop calculations, and so on. See Working with GeoJSON Route Data for end-to-end tutorials.
Five gotchas to expect on your first export
- The CSV opens with mojibake in Excel on Windows. Excel's CSV importer doesn't always detect UTF-8 from the BOM. Workaround: open Excel first, then use Data → From Text/CSV and explicitly pick UTF-8. Or open in Google Sheets, which gets it right the first time.
- An "[archived]" column has data even though the question isn't on the survey any more. Not a bug — that's history preservation. Include or drop the column based on whether the archived question's data is relevant to your analysis.
- The Verified count keeps changing for a week after you close the survey. Verification clicks trickle in via the post-submit email. Wait at least 48 hours, ideally a week, before treating any verification rate as final.
- A response shows blanks in some columns. Three common reasons: the question was optional and skipped, the question was added after that response was submitted, or the question was archived and a new one with the same purpose was added at a new field id. The Report page surfaces all three.
-
Email addresses contain odd values like
qr-abc123@anonymous.travelerips.com. Those are QR-arrival placeholders — Travelers who didn't supply an email at all but were given an internal identifier. Filter them out for any email-based outreach analysis.
A delivery checklist for stakeholder hand-offs
When you're packaging response data for someone outside TIPS — a board presentation, a consultant, a federal grant submission — the standard bundle is:
- The CSV, renamed to something the recipient will recognize (the default is the survey title + date).
- One GeoJSON file per Route Creator question, if applicable.
-
A printed PDF of the survey from
/client/survey-print— one page showing every question exactly as Travelers saw it. This is the document that proves "this is the instrument we administered." -
A short README noting the response window,
the verified count, and any header annotations
(
[archived],[renamed mid-collection]) in the data.
Common questions about exports
- What format is the CSV export in?
- UTF-8 encoded comma-separated values with a header row. One row per completed response; one column per question plus seven identity columns at the front (Response ID, Date Completed, Verified, Email, First Name, Last Name, Zip). Standard CSV — opens in Excel, Numbers, Google Sheets, Python pandas, R, anything.
- Why do some column headers say "[archived]" or "[renamed mid-collection]"?
- TIPS preserves response history even when the survey changes. "[archived]" means the question was soft-deleted from the survey but historical responses still exist. "[renamed mid-collection]" means the question text changed during data collection, so the column merges responses from multiple wordings — useful warning if exact phrasing matters.
- What does the Verified column tell me?
- Yes / No. Yes means TIPS has affirmative evidence the email address is real — either the response came via an email invitation (auto-verified) or the Traveler clicked the verification link in the post-submit confirmation email. No means the response is anonymous or identified-but-unverified.
- How are Checkboxes responses represented in the CSV?
- Comma-separated values in a single cell. If a respondent checked "Work" and "School", the cell contains "Work, School". Use your tool's string-split function (Excel TEXTSPLIT, pandas .str.split, R strsplit) to break them apart for analysis.
- How are route questions represented in the CSV?
- Route Selector and Route Creator show a route summary string (route name or count). Route Ranker shows the full ordering as "1. Route A | 2. Route B | 3. Route C". For Route Creator, the actual drawn geometry is NOT in the CSV — you export that separately as GeoJSON from the per-question button on the Report page.
- Does the CSV include incomplete (in-progress) responses?
- No. Only responses where the Traveler reached the final page and submitted are exported. Partial responses are kept in the database (so a Traveler can resume), but they don't appear in reports or exports until completed.
- Can I get the data programmatically (API)?
- Not yet — CSV and GeoJSON exports from the Report page are the supported paths. A read-only API is on the roadmap. For most analysis workflows the CSV is sufficient; pandas, R, or Excel can ingest a CSV in under a second.
- What's the right format for delivering data to a stakeholder who doesn't use TIPS?
- CSV for tabular analysis (transit board, finance team, planning consultant), GeoJSON for GIS staff (overlay on the transit network in QGIS or ArcGIS), and the PDF-style Survey Print page if they just want a clean visual of the questionnaire that was administered. All three are exportable from the Client Portal.
Ready to dig into your data?
Open the Reports page in your Client Portal, pick a survey, and click Export CSV. Five minutes later you'll have the whole response set open in whatever tool your team uses.
View plans Contact usPutting this to work
TIPS is the survey platform behind everything described above. These two pages cover the part most relevant to what you just read.