Importing and exporting
Import reads a spreadsheet or a delimited file and offers each row to the service that owns the record, so a row that would be invalid anywhere else is refused here too and reported rather than dropped in silence. Export writes CSV, and it neutralises anything a spreadsheet application would treat as a formula — which is why some cells look escaped when you open the file.
What an import does, in order#
Supply the file. The readable formats are the ones Connect accepts everywhere — CSV and TSV, and XLSX for a spreadsheet.
Result The file goes through the same validation and safe parsing as any upload, which is where a malformed archive or a hostile document is stopped.
Map the columns in the file to the fields on the record.
Result You can see what will be written where, before any row is written. A column you do not map is not guessed at.
Let Connect check the rows.
Result Each row is validated by the owning service. Rows that cannot be accepted are listed with the reason, next to the row they came from.
Apply the rows that passed.
Result Each is written through the same service an inline edit uses, and each leaves its own audit entry.
There is no route that writes an imported row straight into a table. That is what makes an import safe to run on real data: the worst outcome is a report of refusals, not a set of records the rest of Connect considers invalid.
Rows that do not arrive#
- A required field is empty
- The service will not create half a record. Fill the column, or map a different one to it.
- A value does not parse
- A date in an unexpected order, a number with stray characters, a stage that does not exist on the record.
- The row duplicates an existing record
- It is reported rather than merged. Merging is a decision, taken on duplicates.
- A rule refuses it
- Suppression and compliance apply to imported rows exactly as they apply to typed ones.
- The file itself was refused
- Parsing rejected it before any row was read — see the file was refused.
If the count that arrived is smaller than the count you sent, the difference is enumerated rather than left as arithmetic. Some imported rows are missing goes through the same list as a symptom.
Why an export escapes some cells#
CSV is a text format with no notion of a formula, but spreadsheet applications opening one will happily evaluate a cell that starts with =, +, - or @. That means any text a customer typed into a form could become executable the moment somebody exports it and double-clicks the file. Connect neutralises those cells on the way out, so what was text stays text.
| In the record | In the exported CSV | In a spreadsheet |
|---|---|---|
Discount 10% | Unchanged | Reads as written |
A cell beginning = | Neutralised so it cannot be evaluated | Shows the text, does not run |
A cell beginning +, - or @ | Neutralised the same way | Shows the text |
A telephone number beginning + | Neutralised — it begins with a formula character | Shows the number as text, which is usually what you wanted anyway |
What export gives you, and what it does not#
- The set you defined. Build the filter first; the export follows it rather than the whole sheet.
- Text, not a live link. An exported file is a copy taken at that moment. It does not update, and it is outside every protection the workspace gave it.
- No hidden fields. An export contains record fields, not internal identifiers you were not shown.
- No route around visibility. You can only export rows you could already read; the workspace kernel and row-level security apply to the query behind an export like any other.
Questions#
Can I import a file to update existing records rather than create new ones?
An import offers each row to the owning service, and rows that match an existing record are reported rather than silently overwritten. That deliberately makes bulk correction a decision you take with duplicates and bulk actions in front of you.
Why is my phone number quoted oddly in the CSV?
It begins with a plus sign, which is one of the four characters a spreadsheet treats as the start of a formula. The neutralisation applies to the character, not to the meaning, so a perfectly ordinary international number is escaped along with everything else that could be evaluated.
Does exporting count as sharing data?
Once a file leaves the workspace it is a file like any other, with none of the isolation that protected the records inside it. Whether that is appropriate is a question for whoever owns the data; Connect's part is to make sure the file cannot execute anything when it is opened.