Product
Import, export and search
Getting in and getting out are the two things that decide whether a system is adopted and whether it can be left, and they are the two people check least carefully.
Getting in
Most migrations are abandoned halfway, and always for the same reason
The usual story of a failed migration is not that the new system was wrong. It is that someone imported a spreadsheet, the import half worked, and the organisation was left with a database containing four hundred correct records, ninety wrong ones and no reliable way to tell which was which.
At that point there are two options, both bad. Spend a day picking through it by hand, or delete everything and start again, having lost confidence in the process. What actually happens in most organisations is a third thing: the new system is quietly abandoned, the spreadsheet survives another year, and everyone agrees to look at it again in the spring.
The root cause is that the import wrote before anyone could see what it was going to do. Every problem downstream follows from that single decision.
A preview that writes nothing
Import in Consonas reads your file, matches the columns it recognises, works out which records it would create, which it would update and which it would skip, and shows you all of that. Nothing is written. You read it, and then you decide.
The skips are usually the most informative part, because they are where your file disagrees with itself: rows with no name, addresses in the wrong column for some entries, a date format that changes halfway down because someone edited it on a different computer. Those are things you want to know before there are records depending on them.
And because the first pass writes nothing, a wrong import costs you nothing. Fix the file, run it again. There is no half finished import to unpick, no partial state to reason about, and no reason to abandon the migration.
People and organisations from one file
Almost every real file contains both: a person, their job title, and the company they work for. Import creates the person, creates the organisation, and connects them, which is the shape you want and the shape a system with separate contact and company imports makes you produce by hand in two passes.
Duplicates are matched on email address and on close name matches, and appear in the preview as records that will be updated rather than created. You are shown them rather than having them merged silently, because two records that look identical are occasionally two people, and a product that guesses will eventually guess about somebody who matters.
Moving systems
Six moments where this either works or does not
All six happen to everyone who moves systems.
| The moment | How it usually goes | How it goes here |
|---|---|---|
| Importing a spreadsheet the first time | You upload, it writes, and you discover afterwards that the county column went into the address line. | You upload, you read a preview of what it will create and skip, and nothing is written until you approve it. |
| The file turns out to be wrong | Half the records exist wrongly. Undoing means deleting selectively and hoping you catch them all. | Nothing was written, so there is nothing to undo. Fix the file and run it again. |
| Searching for somebody | Search contacts, then search companies, then search notes, because they are separate boxes. | One search across everything you may see, including people, organisations, notes and custom fields. |
| Searching when a record is restricted | It appears as a locked row, confirming who exists and often what the record is called. | It is genuinely absent unless you hold the grant, because the existence of the record is frequently the sensitive part. |
| Asking the same question every week | Rebuild the filter each time, slightly differently, and get slightly different answers. | A saved view. Shared, it becomes the team's agreed definition of a category rather than an opinion. |
| Leaving the supplier | A support request, sometimes a fee, occasionally a professional services engagement. | Export, free, on any plan, at any time, without asking, in a format that opens without our software. |
Finding things
One search, across everything you may see
Type a name, part of a name, an email address, a telephone number or a word from a note. Results come from people and organisations together, along with the notes and custom fields attached to them, in one box instead of one box per record type.
Searching people and organisations together is the practical benefit of holding them together. You do not have to know which kind of thing you are looking for before you can look for it, which matters most in exactly the cases where the answer is unclear.
It respects permission completely, and it is worth being precise about what that means. A record you may not open does not appear. A sensitive record you do not hold the grant for is genuinely absent rather than shown as a locked row, because a result that says there is something here you cannot see confirms both the existence of the record and usually the name, which is frequently the confidential part.
Asking repeatedly
Saved views are how a team agrees what a category means
A view is a filtered, sorted, column configured list you keep. Customers in one county with no activity for ninety days. Quotes older than a fortnight. Members whose consent has lapsed. Each of those is a question you ask repeatedly, and a view turns reconstructing it every time into clicking a tab.
Shared views matter more than they sound. When someone says the at risk accounts, a shared view makes that a definition rather than an opinion, and when the definition changes everybody's list changes with it. Most disagreements about numbers in small organisations are actually disagreements about definitions, and this is where they get settled.
The export of a view is the view: the same rows, the same columns, in the shape you built. If you have constructed the question in the product, the answer should not arrive as a generic dump you have to filter again in a spreadsheet.
Getting out
The feature whose value is entirely in the day you leave
Export produces everything you hold, in a format that opens without our software, generated on request, at any time, free, on every plan including the free one, and including after you have stopped paying. There is no window that closes, no archive fee and no request to raise with support.
It is on the free plan deliberately. A portability promise you can only test after you have paid for it is not a promise, it is a hope, and the point at which you find out is the point at which it is too late to matter.
We would encourage you to run one on your first afternoon, when there is nothing in it that matters. The value of an export is entirely in whether it works on the day you have decided to leave, and the only way to know that is to have already done it once when the stakes were nothing.
The three parts
Getting in, finding things, and getting back out
Each part, and why it is shaped the way it is.
- Import preview
- The product reads your file, matches the columns it recognises, and shows exactly what it will create, update and skip, and why. Nothing is written until you approve it.
- Nothing half written
- Because the first pass writes nothing, a wrong import leaves nothing to unpick. Fix the file, run it again. This is the usual reason a migration gets abandoned halfway and the spreadsheet survives another year.
- People and organisations together
- One file containing both is the normal case. Import works out which columns describe a person and which describe an organisation, creates both, and connects them.
- Duplicate handling
- Matched on email address and close name matches, shown to you rather than merged silently, because two records that look identical are occasionally two people.
- Search
- Across everything you are allowed to see and nothing you are not, covering people, organisations, notes, custom fields and more, in one box rather than one per record type.
- Sensitive records
- Excluded from results unless you hold the separate grant, rather than shown as a locked row. A result confirming that a record exists is frequently the sensitive part.
- Saved views
- A filtered, sorted, column configured list you keep and can share. A shared view is how a team agrees what a category actually means.
- Export
- Complete, on request, on every plan, free, in a format that opens without our software, including after you have stopped paying. It is a portability commitment instead of a feature.
Check the export before you commit five years of relationships to anybody, including us. It is the one feature whose value is entirely in whether it works on the day you have decided to leave.
Which is why it is free on every plan, and why we would rather you tested it before you needed it.
The import, in order
An afternoon that decides the next two years
Almost every organisation that ends up unhappy with a system of this kind imported badly on the first day and lived with the consequences instead of starting again.
Bring the messy spreadsheet instead of cleaning it first
The advice everybody gives is to tidy the file before importing. It is well meant and it is the wrong order, because until you have seen the preview you do not know which columns matter, and you will spend an hour standardising a field nothing reads.
The preview shows exactly what will be created, row by row, before a single record is written. Clean against that. It is faster, and it tells you which of your columns are actually two columns wearing one heading.
Decide what a row is before you map anything
This is the decision that matters and it takes two minutes. Most spreadsheets have rows that describe a person and the organisation they work for at the same time. That is two relationships and a connection between them, not one record, and importing it as one produces a system that cannot answer who else works there.
The symptom of getting this wrong is discovering in month four that you have four hundred people and no companies, or four hundred companies each with a person's name in a field. Both are recoverable and both cost an afternoon you did not need to spend.
Map fewer columns than you have
Bring what someone will actually read. Name, contact details, type, the two or three pieces of information your trade genuinely uses. Leave the rest.
There is a strong instinct to bring everything on the grounds that it might be useful. It very rarely is, and the cost is real: fields nobody fills stay empty, empty fields make a record look neglected, and a record that looks neglected stops being trusted. You can always import the rest later against the same records.
Import a hundred rows first
Not the whole file. Take a hundred, look at what was created, and open five records at random to see whether they read the way you expected. Almost every problem shows up in the first hundred, and undoing a hundred is a different proposition from undoing four thousand.
Then run an export
Immediately, before there is anything worth losing. It takes a minute and it converts a promise on a website into a file you have opened. Do it again periodically so a current copy exists somewhere we do not control.
The first afternoon is the only time you can find out what an export produces without needing it to work, which is exactly why it is the right time to find out.
How a file misleads
Six ways an import goes wrong
All six are visible in the preview if someone is looking for them, which is the entire reason there is a preview.
One column holding two things
A name column with the company in brackets. An address column with the postcode after a comma. A notes column that has been used as a status field by three different people over four years.
The preview shows you what it made of each. Where it made something odd, the fix is almost always to split the column in the spreadsheet rather than to teach the import something clever, because a rule that works on eighty per cent of rows leaves twenty per cent wrong in a way no one will find.
Duplicates that are not identical
The same company under two spellings, the same person at two addresses, an old record and a new one that differ by a middle initial. An import cannot reliably tell these apart and neither can anybody else without knowing the business.
Deal with them before, in the file, where sorting and eyes are faster than any tool. What you must not do is import both and intend to tidy up later, because within a month each will have accumulated its own history and merging becomes a decision about which history to lose.
Dates in more than one format
A file that has passed through several hands almost always has some dates entered as text, some as dates, and at least a few where the day and the month have swapped. The ones that swapped are the dangerous ones because they import successfully.
Sort the column and look at the extremes. Anything before your business existed or after today is the tell.
A status column no one agrees on
Active, ACTIVE, live, current, and a blank that means active. Standardise it in the file, and take the opportunity to reduce it: a status field with eleven values is usually three real states and eight opinions.
Consent imported as a tick
This one matters more than the others. A column marked yes tells you nothing about when consent was given, for what, or how, and importing it as a simple yes carries an assertion you may not be able to support.
Consent is recorded here as a fact with a date and a source, so bring those columns if you have them. If you do not have them, that is worth knowing before someone sends a campaign on the strength of a tick whose provenance nobody can describe, because the Privacy and Electronic Communications Regulations ask about the circumstances of the consent rather than about the tick.
Importing the same file twice
Usually after someone stops halfway, is not sure whether it worked, and starts again. The preview tells you what will be created, so read the count before confirming: if it says four thousand and you have four thousand records already, that is the answer.
Search
Finding one thing, and asking the same question twice
Search is for the thing you half remember
A name you are not sure how to spell, a phrase from a note, a company you met once. It searches across everything you are allowed to see, which means two people running the same search can correctly get different results, and that is the permission system working rather than an inconsistency.
Names rank above notes, which is right for the common case and occasionally wrong for yours. If you know the thing you remember was written in a note, saying so in the search rather than hoping is faster.
A saved view is for the question you will ask again
This is the habit that most changes whether a system of this kind is useful, and almost no one adopts it in the first fortnight. The useful question is never everyone. It is anything that has not moved in a month, clients in this region with no activity this quarter, everything owned by somebody who has left.
Three named views is usually enough to change how a team works. The one that finds money in most businesses is some version of nothing has happened here in a while, because it surfaces exactly the records that no process would ever bring to anyone's attention.
Views respect permission, which is what makes them shareable
A view is a question rather than a list of results. When someone else opens it, it runs for them, against what they are allowed to see. That is why a saved view can be shared without anyone having to think about whether it will leak something.
Where import stops
What import, search and export refuse to do
No automatic deduplication. Nothing merges records it thinks are the same. A merge is destructive and irreversible in a way an import is not, and a system that does it confidently will eventually do it wrongly to the one record you cared about.
No data enrichment. Nothing goes and finds a company's turnover, an address, or somebody's job title from a third party. That is a different product with different consent implications, and it sits badly beside a product that records consent as a fact with a source.
No scheduled or two way sync from a spreadsheet. Import is a deliberate act with a preview somebody approves. A file that quietly writes into your records on a timer is a very effective way to destroy them.
No undo on an import. The preview is the protection, which is why it exists and why it shows every row rather than a sample. If an import goes badly wrong, point in time recovery covers the last thirty days, but that is a recovery instead of a feature.
Search is not a query language. There is no syntax to learn, no boolean operators and no regular expressions. Saved views carry the structured questions, and that division is deliberate: a search box that is also a query language is a search box most people stop using.
The whole export is complete rather than configurable. You get everything you are allowed to reach, in a format that opens without our software, because the purpose of that file is portability instead of reporting, and a partial copy is exactly the thing that turns out to be missing something on the day it matters. For an owner, allowed to reach means everything. For somebody who holds the export permission without the separate grant for sensitive records, the sensitive rows are left out and the manifest counts what it left out, so the file can be short but never quietly short. Any single list is a separate matter: a list, or a saved view of one, comes out with the rows and the columns you built, which is reporting and is meant to be.
The import record
What an import leaves behind once it has finished
An import is a record here instead of something that happened once and cannot be asked about afterwards.
- The file itself
- The name you sent, who uploaded it and when. It stays after the import has finished, so a question in March about where four hundred records came from has an answer rather than a theory.
- Where it has got to
- Previewed, applying, or applied. A long file applies in batches rather than in one pass, so an import in progress says so instead of appearing to have stalled.
- Four counts
- Rows read, rows that will apply cleanly, rows that look like somebody you already hold, and rows applied so far. Reading those four numbers before you approve is very nearly the whole check.
- The mapping as it stood
- Which column was read as a name, which as an email address, and so on, kept with the import rather than only on the screen where you approved it.
- Every row, by line number
- The values read from it, the problem if there was one, the record it matched, and the record it created. The line number is your file's, so anything wrong is somewhere you can go and look at.
- The problems file
- The rows that will not apply, as a file with the reason written against each one. Correct that and it becomes the next thing you upload, which is the whole loop.
- Batches
- Two hundred rows at a time, and never more than five hundred, so a long file makes progress you can watch rather than becoming one request that either finishes or times out.
- A ceiling of about ten thousand rows
- A larger file is read up to roughly there and stops. Splitting a very large file is better practice anyway, because the first part tells you what the rest of it will do.
An afternoon of it
One cleaning company, one spreadsheet, and the afternoon it took
Hypothetical throughout. No one described below exists, and the point is the order of events instead of the trade.
Consider an eleven person commercial cleaning company moving off a spreadsheet that three people have edited for four years. It holds roughly twelve hundred rows, one for every job, which means the same client appears four or five times over. A column headed Contact holds the client's name on some rows and the supervisor's name on others, because at some point someone used it for whoever they last spoke to.
The first upload, which writes nothing
Somebody uploads the file on a Monday afternoon. The preview reports what it read: every row counted, the rows with no name in them at all, the rows whose email column holds two addresses in one cell, and the rows that look like people already held, because a trial import of forty rows was run the previous week and never cleaned up.
Instead of reading the screen, they download the problems file and sort it by reason. The pattern shows in a minute. Every nameless row is a job with no client attached to it, and every unreadable address is a cell holding a person and their assistant separated by a semicolon.
The second upload, which is free
Back in the spreadsheet: one row per client instead of one per job, second addresses moved to a column of their own, empty rows deleted. Upload again. It is a fresh preview and it costs nothing, because the first one wrote nothing and there is no partial state anywhere to reconcile it against.
The second preview reads three hundred and ten rows and reports nothing it cannot apply. They approve it. The rows apply in batches, each created record gets a timeline entry saying it was created, each creation is audited against the person who approved the import, and the search index gains them as they are written rather than afterwards.
The export, the same afternoon
Before there is anything in the system worth losing, they run an export and open it. The first line is a manifest carrying a count for every table. Three hundred and ten relationships. It agrees with what they just approved. That is the entire test, and an hour when the answer does not matter is the only time it is a cheap one to run.
What they did not do is bring the site address column, because the preview asked them for nothing and they were in a hurry. In November somebody wants the address of a job from two years ago and it is in a spreadsheet on a desktop rather than on the record. That is the ordinary cost of an import that went well: the column you left out is reliably the column you later want.
What a file will not tell you
The same person twice, and other things a file will not warn you about
The same address twice inside one file
Duplicate review compares each row against the records you already hold, and it compares the rows against each other as well. A spreadsheet holding the same person on line eighty and line six hundred becomes one record rather than two. The earlier row is the one written, the later row fills in any column the earlier one left empty, and the preview says against that line that it was combined into one record, so you see it happen before anything is written.
Capitalisation defeats neither comparison. Both are made on the address folded to lower case, so an address typed two ways on two rows is still one person here.
What neither comparison can catch is the same person under two different addresses, or two rows that carry no address at all. The file is where that is cheapest to fix, so it is still worth sorting by the name column and looking. Two minutes there is worth an hour of merging afterwards, once each record has begun accumulating a history of its own and the merge has become a decision about which history to lose.
Someone who is in the recycle bin
A person who was deleted is not matched as a duplicate, deliberately. An import must not quietly bring someone back who was removed on purpose, possibly at their own request, by the side effect of a spreadsheet still holding their name. The row is read as new, and if you approve it you have created a new record rather than resurrected an old one, which is the outcome you can see and reason about.
A file that is not quite a file
Files that have been through several hands are frequently malformed in small ways. A quote in the middle of a field that was never quoted, a file that ends inside a quotation that was never closed, an invisible marker some spreadsheet applications write at the very start that would otherwise become part of your first column heading. Each of these is reported against its line number rather than absorbed silently, because a parser that makes its best guess at a broken line is a parser that produces a record nobody can trace back to anything.
A note containing a line break is read as one field rather than as the end of a row, so long free text survives. A file of much more than ten thousand rows is read up to about that point and stops. Split it, which you should be doing anyway.
Searches that correctly find nothing
A single letter returns nothing, on purpose. Matching is on the beginnings of words, so a search for the middle of a surname finds nothing while the same search against its first few letters finds it. And a search whose every match sits outside what you may see comes back empty rather than partially populated, which looks like a fault and is the permission model behaving exactly as intended.
Everything it touches
Importing a thousand people is a thousand things happening
Every created record is an event, and most of the product is listening
Approving an import does not merely insert rows. Each record created raises the same event that creating one by hand raises, and it reaches the same places. A webhook delivering to something outside hears it, and the payload says the record arrived through an import so whatever is at the other end can decide for itself what to do with that. An audience whose membership is a rule rather than a list reconsiders itself the moment a record appears that matches it, so a migrated back book is inside the right audiences before anybody looks.
Workflows are the one deliberate exception, and it is the only place an imported record is treated differently from a typed one. A rule that assigns an owner, writes a task or enrols somebody in a sequence does not run for an imported row. Four hundred rows would otherwise be four hundred welcome tasks and four hundred enrolments, and a back book arriving as a morning of notifications is exactly the failure the help centre promises does not happen when it says that importing a file contacts nobody in it.
The cost of that choice is worth naming, because it is a real one. If you did want the workflow applied to what you have just brought across, it did not happen and you have to do it deliberately afterwards. That is the better way round: you get to look at what actually landed before anything acts on it, and four hundred records you can inspect are easier to live with than four hundred notifications you cannot recall.
The index is written with the record, not after it
Search entries are written inside the same transaction as the record itself, so a record is findable the instant it exists and a change that was rolled back never leaves a search result pointing at nothing. There is no queue to drain and no interval to wait for. It also means an import of any size is fully searchable the moment it is applied rather than gradually over the following minutes.
Search asks the permission that governs the record, not a general one
A quotation is judged by the rule for quotations and correspondence by the rule for correspondence, each defined in administration. Anything the system has not been told how to judge is refused rather than guessed at, which means a new kind of record is absent from search until someone has stated what it takes to see one. The failure that produces is someone saying they cannot find a thing, which is the failure that gets reported rather than the silent one that leaks.
An export is an event as well
Taking a complete copy writes an entry to your own audit trail naming who took it and when, because someone removing everything the organisation holds is at least as worth recording as somebody editing one field. Five or more complete exports by one organisation in a single day also reaches us as something to look at, since that is the shape of a copy being taken on someone else's credentials. It is never a refusal and never a limit. Your export is yours whenever you want it.
What we rejected
What we rejected here, and what rejecting it costs you
We read the file ourselves instead of handing it to a library
The rules for this file format are small and completely written down, and the failures that matter for an import are precisely the ones a general purpose reader smooths over: the stray quotation mark, the line break inside a field, the invisible marker at the top of the file. We would rather report those with a line number than absorb them neatly. The cost is that any fault in reading your file is entirely ours, which is the correct place for it to sit and not the comfortable one.
The export is one file of lines rather than a folder of spreadsheets
A folder of spreadsheets is nicer to double click and loses the thing that matters, which is what pointed at what. The export is one file with a manifest at the top carrying a count for every table and what your organisation was entitled to, and then one line per record. It opens in any text editor, it can be read by anybody's developer without our involvement, and it can be loaded back. The honest cost is that it is not a spreadsheet, and if what you want is a list of clients with chosen columns you want a list rather than the export.
We read your export back every night
Every line, not a sample: the manifest is checked, each line is parsed, and the counts the manifest claims are compared with the rows the file actually contains. An export that writes cleanly and cannot be read back is the exact failure that stays hidden until the day someone needs it, and a backup nobody has ever read is a hope rather than a backup. It costs a little machine time nightly and it is the cheapest insurance in the product.
Import sits with an administrator, and export goes one wider
Export sits with owners, administrators and managers, because taking a copy destroys nothing. Import sits with owners and administrators, and not with managers. An administrator holds every permission the organisation has, this one included; what separates them from the owner is the grant over sensitive records and the billing, not anything on this page.
Import is still the one ordinary action that writes thousands of records on a single decision, so it is worth deciding on purpose who holds it rather than inheriting the default. Roles here are yours to define, and taking import out of the role you give somebody so they can reset passwords is a reasonable narrowing rather than a sign that something is wrong. If you change it, change it knowing which of the two is the destructive one.
Asked about spreadsheets
Asked about import, search and export
What file formats can I import?
Spreadsheet exports in the usual comma separated form, which is what every other system and every spreadsheet application produces. If you can get a file out of your current system, you can almost certainly get it in here.
What if my columns are not named the way you expect?
You map them. The product suggests matches for the columns it recognises and you correct anything it has guessed wrongly, before anything is written. Column names differing between systems is the normal case rather than an edge case.
Can I import people and companies from one file?
Yes, and it is the common shape. A file with a person, their job title and their employer creates two records and the connection between them. The preview shows you exactly that before it happens, which is where you catch a file that puts the company name in the wrong column for some rows.
What happens to duplicates during import?
They are detected on email address and close name matches, and shown in the preview as records that will be updated rather than created. You decide. Silent merging is the tempting design and the wrong one, because two records that look identical are occasionally two people and a product that guesses will eventually guess about someone important.
Can I run an import twice?
Yes, and it is the intended way to work. Run it, read the preview, cancel, fix the file, run it again. Because the first pass writes nothing there is no penalty for getting it wrong, which is the entire point of the design.
Does search cover notes and custom fields?
Yes, along with names, email addresses, telephone numbers and record types, in one box. What it does not search is the contents of files you have uploaded, so a phrase inside an attached document will not be found.
What exactly is in the export?
Everything you hold: relationships, connections, timelines, notes, custom fields, consent records, opportunities, tasks and the records from any module on your plan, in a format that opens without our software. Files are included. It is generated on request rather than being a nightly extract.
Is export really free on the free plan?
Yes, at any time, without asking, including after you have stopped paying. It is a portability commitment rather than a feature, which is why it is not on the paid plans only. We would encourage you to run one on your first afternoon rather than at the point you need it, because the value of a portability promise is entirely in whether it works on the day you have decided to leave.
Whose spreadsheet
The trades whose first afternoon this decides
The file that arrives is different in every trade, and so is the decision about what a row describes. Charities and membership organisations usually arrive with the hardest one, because a spreadsheet of donors or members carries consent as a tick and the tick is the part that will not survive being asked about.
Local service businesses and letting and estate agents more often arrive with one row per job or per tenancy instead of one per client, which is the decision worth making before anything is mapped. Recruitment agencies arrive with two populations in one file and need them kept apart from the first row.
Testing the export on the first afternoon is the same exercise as judging a supplier who has no customer stories yet, which is the position we are in and say so.
Import your spreadsheet and look at the preview
Nothing is written until you approve it, so the worst outcome of trying is that you learn something about your own file.
Three people, a thousand relationships, no card and no time limit.