
Every way a contact is created
Every path also stamps the date created and files the contact under your organisation.
Records created before Orgo started recording provenance have an empty Source, which is
why an old tenant can show a large group of blank rows in that column.
The contact form and the newsletter widget are two different embeds. The contact form
sends you a message and files the sender in Contacts. The newsletter widget does one
thing: it collects confirmed subscribers. See
Newsletter signup widgets.
The import wizard
Import is how most contacts arrive, especially in the first month. It lives at Settings → Customization → Import and needsADMIN_TENANT. Contacts go through the
column-mapping wizard rather than the plain upload used by the older import steps.
1
Upload the file
.csv and .txt, up to 50 MB. Comma, semicolon and tab separators are detected for
you, and a UTF-8 byte order mark is stripped. A larger file is refused before it
uploads, so split it and run the parts one after another. Nothing is created yet.2
Map your columns onto contact fields
Orgo reads the first 200 rows of the file and opens a sheet-style preview: your
headers across the top, sample rows underneath, and a panel for the column you
clicked. For each column you choose one of four destinations: a contact field, an
existing custom field, a new custom field, or skip. Orgo suggests a destination per
column and marks it Suggested, so a tidy spreadsheet usually needs only a few
corrections.Contact fields you can map to: email, name, phone, address, organisation, role, town,
country, chapter, newsletter subscription, gender, birth date, company name, company
identifier, company address, company registry number, professional role, LinkedIn,
Twitter, Instagram, status and tags. Each one can be filled by a single column, and
the wizard tells you when two columns compete for the same field.
3
Let anything else become a custom field
A column that is neither a contact field nor an existing custom field can create a
new one: give it a name and a type (text, long text, number, date, yes/no, dropdown,
radio or checkboxes). For dropdown and radio columns you match the values in your
file to the options; a value the sample missed is added as a new option while the
import runs. Checkbox columns split on a separator you pick (comma, semicolon or
pipe), with a live split preview. Encrypted custom fields cannot be an import target.
4
Start the import
Your mapping saves as a draft while you work, so closing the modal loses nothing.
Start import creates any new custom fields you declared, then processes the file
in the background in batches. Discard deletes the uploaded file and the mapping;
nothing has been imported at that point.
5
Read the results
Import History shows a live percentage and running counts of successful, failed
and skipped rows, then a per-row log with the row number, the message and the raw row
data.
Rows that match somebody you already have
Matching is on the email address, within your organisation.- A row whose email belongs to an existing member is skipped. The member record always wins, so an import cannot split someone’s history in two.
- A row whose email belongs to an existing contact is also skipped, and the contact is left as it is. Two things still apply: tags in the file are added, and a contact who had never been asked about the newsletter is set to subscribed when the file says so. A contact who is already subscribed or has unsubscribed is never changed.
- A row with a blank email cell has nothing to match on, so it creates a new contact every time you run that file. Re-running a file with blank emails is the one case where an import reliably produces duplicates.
Rolling an import back
Every completed import has a Rollback button in Import History, usable once. It runs as a single transaction, so it either completes or changes nothing. Rollback deletes the contacts that import created, along with the other records it created, in an order that leaves nothing pointing at a missing parent. For a Modify Contacts import, Orgo stored a before-image of every row it changed, and rollback replays those values, including custom field answers. If somebody edited those records after the import, that later work is reverted too. Full mechanics of the import page, including the other seventeen import types and the order to run them in: Data Import.Which paths subscribe someone to the newsletter
Being in Contacts and being on your mailing list are different things. Only contacts marked Subscribed receive campaigns.
Two of those deserve spelling out.
The contact form deliberately subscribes nobody. Writing to you is not consent to be
marketed to, and the consent checkbox on that form covers replying to the message. The
sender lands in Contacts so you have their details and their history, with the newsletter
field left exactly as it was: untouched on an existing contact, and never asked on a new
one. If you want those people on the list, ask them separately.
The newsletter widget is the only double opt-in path. Nothing is created when the
form is submitted. Orgo stores a pending signup, emails a confirmation link, and only
creates or subscribes the contact when that link is clicked. Every other path above is a
single checkbox at the moment of a transaction.
Details of consent, unsubscribes and bounces: Newsletter.
Duplicates, honestly
Contacts are matched by email address, and nothing in the database prevents two contacts sharing one. Every check happens as the record is created, and those checks are good but not perfect. What is handled: capitalisation.Anna@example.org and anna@example.org are the
same person to every lookup in Orgo.
What still slips through:
- Punctuation and spacing variants. Some paths, notably paid event checkout and the
ticket details link, look the address up exactly as typed, so
anna..s@example.orgmisses the storedanna.s@example.organd creates a second record. The import path normalises before it looks up, so it does not have this problem. - Extra tickets on one order. Registering a second ticket for a person who already holds an active one creates a separate contact with no email address, on purpose, so each ticket carries its own attendee details. Those records look like duplicates in the contacts list and, having no address, cannot sign in to the event app.
- Import rows with a blank email, as described above.
- Contacts who later become members. Creating a member account from a contact does not remove or link the contact, so the person exists twice until you merge them.
Choosing how to bring people in
- A backlog of history goes through import. One file, one mapping, one rollback button if the mapping was wrong. It is the only path that can create thousands of records and undo them.
- Ongoing capture from your website goes through the embedded contact form or the newsletter widget. Use the contact form when you want the message and the person, and the newsletter widget when you want a mailing list you can defend, since it is the only path that proves the address belongs to the person who typed it.
- Event and donation contacts arrive on their own. You do not set anything up: someone who buys a ticket or donates without an account becomes a contact as part of the checkout, with the details that page collected.
- Add Contact by hand is for the handful of people who reach you by phone or in person, and for filling in someone you already know is missing.
Troubleshooting
The import finished but rows are missing
The import finished but rows are missing
Compare the successful count with the skipped count in Import History. Skipped almost
always means the email already belongs to a member or to an existing contact, which is
the expected result when you re-run a file or when your spreadsheet overlaps your
membership. Open the per-row log to see the reason for each row. If you meant to update
those people rather than create them, run the file again as a Modify Contacts
import.
The same person appears twice
The same person appears twice
Check the two email addresses character by character: a stray dot, a space or a
completely different address is the usual cause, since identical addresses are matched
regardless of capitalisation. A second record with no email address at all is normally
an extra event ticket rather than a duplicate person. Merge the records rather than
deleting one, so the payments and tickets survive. See
Becoming a member.
A contact arrived with no name
A contact arrived with no name
Look at the Source. A contact created by the System path carries the email address
as its name, because it was created while checking whether that address was already
registered and nobody had typed a name yet. Contacts from Stripe and from event
checkouts carry only what the payment or registration form asked for. Add the name by
editing the record; nothing later on will overwrite it.
The import is slow
The import is slow
Contacts are processed in batches of several hundred rows, and the progress percentage
moves one batch at a time, so a small file can sit at 0% until it is done. Larger files
keep running after you close the tab; come back to Import History rather than waiting.
A file whose town column names places Orgo has not seen before is the slow case, as
each new place name is resolved one row at a time. If an import is still processing
after fifteen minutes with no counts moving at all, split the file into smaller parts
and run them one after another.
Related
- Contacts - what a contact is and how the directory works
- Becoming a member - merging a contact into a member account
- Data Import - the import page in full, and the other import types
- Newsletter signup widgets - the double opt-in embed
- Newsletter - campaigns, consent and unsubscribes
- Forms - public forms that create contacts
- Donations - donor records and donation checkout
- Ticketing - how ticket buyers become contacts
- Custom Fields - the fields an import can create

