Skip to main content

Spreadsheet Column Reference

Every column in Oho's import template, what it expects, and which ones are required. This is the reference behind the spreadsheet import walkthrough — use the walkthrough to run the import, and this page while you're filling the template in.

It applies to every file-based source, because they all read the same template: Excel, Google Sheets, and SFTP.

⬇ Download the Excel template (.xlsx)

On a tenant that already holds data, the connection screen can also export your current records into this same template — same sheets, same headings, same vocabulary — which is usually a better starting point than a blank file.

How to read this page​

  • Required columns are the ones Oho refuses a row without. Leave one blank and that row is skipped, and the skip is counted in your sync report.
  • Recommended columns don't block the import, but leaving them blank costs you something concrete — the table says what.
  • Optional columns can be left blank — leave the empty column in place rather than deleting it. Blanking a cell and deleting its column mean different things; see below.
  • Dates use YYYY-MM-DD (for example 2026-03-31).
  • Values shown in code are the values Oho accepts. Case doesn't matter — Oho normalises them as it reads, so active, Active and ACTIVE are the same value, as are WWCC and wwcc. The one exception is Worker Type, which is free text and is stored exactly as you type it.
  • Column headings aren't case-sensitive either, and a trailing * is ignored. What matters is the wording — see the caution below.
What the asterisks mean

A * in the downloaded template marks a column Oho refuses the row without. There are only ever three or four per sheet, and they match the Required rows in the tables below exactly — a CI check holds the template to the connector, so the two can't drift apart.

Everything without a * is genuinely optional in the sense that the row still imports. That isn't the same as "safe to leave out": the Needed? column below says what each blank one actually costs you.

A blank cell and a missing column are different instructions

Your sheet is the source of truth for the worker fields it carries, and Oho reads these two cases differently:

  • Column present, cell blank — you're telling Oho this worker has no value, so it clears the field.
  • Column not on the sheet at all — your sheet isn't claiming to manage that field, so Oho leaves whatever it holds.

This is what makes a partial sheet safe. If you export only the columns you're updating — say Worker ID, Job Title and Department — nobody loses their date of birth or their address, and an older file written before a column existed won't wipe values recorded since. It also means the way to clear a field is to keep its column and empty the cell, not to delete the column.

One exception, in your favour: a value someone edited by hand in Oho isn't overwritten by a sheet that disagrees. That's raised for review instead.

Keep the headings unchanged

Oho reads your columns by heading name. If a heading is renamed, moved, or removed, Oho can't map that column and those rows won't import. Add your data under the headings exactly as they come in the template.

The row directly under the headings on each sheet is a hint row describing what the column expects. Leave it in place — Oho skips it — and start your data on the row below.

The four sheets​

SheetWhat goes on itNeeded?
WorkersOne row per person you employ or engage.Yes
ApplicantsOne row per candidate you're still hiring, before they become a worker.Optional
CredentialsOne row per card or registration a worker holds.Optional
ExemptionsOne row per requirement a worker is formally excused from.Optional

Fill in the sheets you need and leave the others empty. Don't delete a sheet you're not using — leave it in place with just its headings.

Worker ID is the match key​

Worker ID does two jobs, and both depend on you keeping it stable:

  • It links a worker's Credentials and Exemptions rows to their Workers row. Oho never matches on email.
  • It tells Oho a person on this run is someone it already has, so a re-import updates them instead of creating a duplicate.

Use the identifier the person already has in your HR or payroll system, use exactly the same value across all three sheets, and reuse it on every later run. A row with a blank Worker ID can't be linked; a credential or exemption row whose Worker ID doesn't appear on the Workers sheet is reported as an orphan rather than guessed at. More in Map your fields → Recognising the same person again.

Keep the column formatted as text

Worker IDs that start with a zero — 02579 — are the one thing a spreadsheet will quietly change for you. Saved as a number the leading zero is dropped and 02579 becomes 2579, while the spreadsheet carries on showing you 02579. Oho treats the two as the same payroll number, so this won't duplicate anybody, but the Worker ID stored against the person follows whichever form the file last carried. Format the Worker ID column as Text before you edit the file, and the value you see is the value Oho keeps.

Workers​

One row per person. 28 columns. Only Worker ID and a name will stop a row importing.

ColumnNeeded?What it expects
Worker IDRequiredThe person's unique ID from your HR or payroll system. Oho's match key — keep it stable.
OrganisationRecommendedThe Oho organisation the worker belongs to — a worker belongs to exactly one. Blank imports, but leaves them assigned to none: see Leaving Organisation blank.
First NameRecommendedTheir given name. Leave it blank for someone who goes by a single name — see the note below.
Middle NameOptionalTheir middle name, if you hold it.
Last NameRequiredTheir family name — and the single name of anyone who has only one. Never a placeholder; see the note below.
EmailRecommendedTheir email address. Without one Oho can't send this worker a check request or a reminder — they still import.
Email TypeOptionalwork or personal. Describes the address in Email.
PhoneOptionalInternational format, for example +61 2 1234 5678.
Phone TypeOptionalwork or personal. Describes the number in Phone.
Date of BirthRecommendedYYYY-MM-DD. Several registers match on it — see the note below.
NationalityOptionalFor example Australian.
Street AddressOptionalStreet number and name of where they live.
Street Address 2OptionalUnit, level or suite of where they live.
CityOptionalSuburb or city where they live.
StateRecommendedNSW, VIC, QLD, WA, SA, TAS, NT or ACT. Sets the worker's home address — put the credential's own state on its own row.
PostcodeOptionalFour-digit Australian postcode where they live.
CountryOptionalTwo-letter country code, for example AU. Defaults to AU when any other home address column is filled in.
Work Street AddressOptionalStreet number and name of the site they work at.
Work Street Address 2OptionalUnit, level or suite of the work site.
Work CityOptionalSuburb or city of the work site.
Work StateRecommendedNSW, VIC, QLD, WA, SA, TAS, NT or ACT. The state whose rules apply to this worker — see the note below.
Work PostcodeOptionalFour-digit Australian postcode of the work site.
Work CountryOptionalTwo-letter country code, for example AU. Defaults to AU when any other work address column is filled in.
Job TitleOptionalTheir role, for example Case Manager.
DepartmentOptionalTheir team or department.
Worker TypeRecommendedFree text, stored exactly as you type it. Use Employee, Contractor or Volunteer so the filter stays tidy.
StatusRecommendedACTIVE or INACTIVE, in any case. Blank counts as active. INACTIVE is the only value that deactivates a worker. See Active vs. inactive.
Start DateOptionalYYYY-MM-DD.
What actually stops a worker row importing

Only two things: a blank Worker ID, or no name at all. Oho builds the worker's name from First Name, Middle Name and Last Name together, so a row with any one of them filled in will import. Fill in both First Name and Last Name anyway — name-matching at the issuing register compares against the full name Oho holds.

A worker with one name: leave First Name empty, never fill it with a placeholder

For someone who holds a single legal name, put it in Last Name and leave First Name blank. The row imports — First Name is only marked required on the template, not by the import.

Don't put -, ., N/A or a repeat of the name in Last Name to satisfy the column. The surname is what Oho sends to the register, and a placeholder is submitted literally: the check errors or returns not found, every time it runs. The Credentials sheet has no name columns — each credential is checked under its holder's name — so the Workers row is the only place to get this right. See People with one name.

Home address vs. work address

The unprefixed address columns are where the worker lives. The Work * columns are the site they work at. Compliance rules that scope by state read the work address, because it's the site's state that decides which state's rules apply — a worker living in NSW but based at a Victorian site needs the Victorian requirements. If the two are the same, fill in both.

Both follow the blank-cell rule above: empty the cells to clear an address, and a sheet written before the Work * columns existed won't touch work addresses at all.

Templates downloaded before September 2026 have no Street Address 2 or Country column on the home address. Those files still import exactly as before — a missing column means "not managed" — but because the home address is rebuilt from the columns that are present, they can't carry a unit number or a country. Download the current template if you hold either.

Fill in Date of Birth wherever you can

It's optional, but several credential checks match on date of birth at the issuing authority. A worker without one may not verify automatically even when their card details are correct.

Leaving Organisation blank​

The Add Worker form in the app makes Organisation required; this sheet doesn't. The import won't stop a row over it — but the worker arrives belonging to no organisation, and Oho has no default to fall back on.

That matters more than "optional" suggests:

  • Only a Super Admin can see them. Access is scoped by organisation for every other role, so an unassigned worker is missing from the worker lists, compliance figures and search results of every Admin, Manager and Observer. See Roles & access.
  • Their credential rows inherit the gap. Credentials take their organisation from the worker's row, so those become invisible too.
  • Police check rows are skipped outright. An npc row for a worker with no organisation can't be submitted and is reported as skipped — a police check needs an organisation to bill and route it.

Fill the column in, even when you only have one organisation. If a worker has already imported without one, re-import them with the column filled; same Worker ID, so it updates rather than duplicating.

Credentials​

One row per card or registration. 9 columns, 3 of them required. A worker can have as many rows as they hold cards — repeat their Worker ID on each one.

ColumnNeeded?What it expects
Worker IDRequiredMust match a Worker ID on the Workers sheet — this is what links the credential to its holder.
Credential TypeRequiredOne of the codes in Credential Type values below. A code Oho doesn't recognise is skipped, not guessed at.
Reference NumberRequiredThe official ID or registration number, exactly as it appears on the card — including any leading zeros. Format the column as Text first; see below.
StateRecommendedThe state or territory the credential was issued in. It picks the register Oho checks — without it a state-based card won't verify.
Issuing AuthorityOptionalThe body that issued it, for example Blue Card Services.
Country of IssueOptionalUsed for VEVO checks.
Issue DateOptionalYYYY-MM-DD.
Expiry DateOptionalYYYY-MM-DD.
StatusOptionalACTIVE, EXPIRED, PENDING or INACTIVE, in any case. Blank counts as ACTIVE. INACTIVE pauses Oho's re-checks — see the caution below.
What actually stops a credential row importing

A blank Worker ID, a blank Reference Number, or a Credential Type that's blank or not on the accepted list. Everything else imports — but a row with no State may sit unverified, because Oho uses the state to pick which register to check.

Two things that spoil a Credentials sheet​

Both of these import without an error and go wrong quietly afterwards, so they're worth checking in the file rather than finding in Oho.

Leading zeros disappear in Excel and Google Sheets​

A card number made only of digits — 0984082 — is treated as a number by both Excel and Google Sheets, and a number has no leading zeros. The spreadsheet shows 984082, and that's what it stores. The zeros are gone before Oho ever opens the file, so Oho reads 984082 and there is nothing for it to recover.

That matters because Oho identifies a credential by its type and its reference number. A card recorded as 984082 and the same card arriving as 0984082 from your HR system or a register check are two different records of one card, and your worker shows two.

Format the column as Text before you type or paste into it (in Excel: select the column → Home → Number Format → Text; in Google Sheets: Format → Number → Plain text). Re-typing the zeros into a column that's still formatted as a number won't hold them. Pasting into an existing file is the usual way this happens — a column that was fine can become numeric when the paste brings its own formatting.

It only affects numbers made entirely of digits. A number carrying a letter or a slash — a Queensland Blue Card 1519921/2, a WA card already saved as text — is left alone.

The same reference number on two people​

Oho identifies a credential by credential type plus reference number, with no holder in the key — that's what lets one card converge when it arrives from an HR feed, a register check and a worker's upload at the same time. The cost is that two different people recorded against the same number aren't two credentials. They're one, and its holder is whichever row was written last. The other worker's profile shows nothing, and they'll read as missing that credential.

This usually comes from one of two things:

  • A typo — the same card number entered against two people. Fix the sheet and re-import.
  • A number that was never per-person — a group policy number, a training unit code like HLTAID009, or a placeholder such as N/A typed into the column because it's required. Don't use a placeholder: leave the row out, or record the credential in Oho by hand. If a credential type you use really does share one number across people, ask support to key that type per worker for you.

Your sync report counts the collisions it found, so re-run the import and check the report before assuming a clean load.

Check before you import

Scan the Credentials sheet for a reference number that appears on two Worker IDs, and confirm that any digits-only card numbers still start with the zeros printed on the card.

Credential Type values​

These are the codes the Credential Type column accepts. Anything else is skipped with an "unknown credential type" warning in your sync report.

CodeWhat it isOho verifies it
wwccWorking With Children Check. State names it — QLD is the Blue Card, NT the Ochre Card, TAS the WWVP Registration, ACT the WWVP Check.NSW, VIC, QLD, WA, SA, TAS, NT. ACT capture-only
wwvpWorking With Vulnerable People Registration, when you'd rather name it directly than as wwcc + TAS.TAS
ndwsNDIS Worker Screening Check, against the NDIS Quality and Safeguards Commission register.Australia-wide
ahpraAHPRA registration — nurses, doctors, allied health.Australia-wide
teacherTeacher registration. State picks the board — VIT, NESA, QCT and the state TRBs.NSW, VIC, QLD, WA, SA, TAS, NT. ACT capture-only
vevoVEVO visa entitlement check with the Department of Home Affairs.Australia-wide
npcA National Police Check you already hold from a prior system. See the note below.Loaded as a completed check, not re-run
passportPassport.No — recorded and tracked for expiry
driverslicenseDriver's licence. Add the state in the State column.No — recorded and tracked for expiry
firstaidFirst aid certificate.No — recorded and tracked for expiry
cprCPR certificate.No — recorded and tracked for expiry
driverslicense_act … driverslicense_waThe same, with the state baked into the code. One per state and territory.No — recorded and tracked for expiry
Your own custom credential codesAnything you've defined yourself. Use the code Oho shows you, or the slugified name.No — see Create a custom credential

The Exemptions sheet takes a shorter list than Credentials: wwcc, wwvp, teacher, ahpra, ndws, npc, vevo, visaentitlement, righttowork, driverslicense, firstaid, cpr. It has no passport, and no per-state driverslicense_* — use driverslicense with the State column. As on the Credentials sheet, a code that isn't on the list is skipped.

"Oho verifies it" means Oho checks the number against the issuing register and keeps re-checking it. Everything else is stored, shown on the worker's profile, and tracked for expiry — Oho just can't confirm it with the issuer.

Using the API too?

These codes are the import vocabulary, and the REST API uses a different one — ndws is stored as NDIS_SCREENING, wwcc with State NSW as WWCC_NSW, ahpra as AHPRA_G. Credential Type Codes maps every code here to the one the API expects.

Importing police checks you already hold

npc rows don't trigger a new police check. Oho loads them as a completed, historic check so the worker's record is accurate from day one. Two conditions: leave State blank or set it to AUS, and give the row an Issue Date — without one the row is skipped, because the check's expiry is calculated from it.

Not on the list?

Credentials Oho doesn't verify still belong in your import — they count towards compliance and Oho tracks their expiry. If the type you need isn't listed, create it as a custom credential first, then use its code here.

Status also controls whether Oho keeps checking the credential

Oho reads this column as the credential's scan toggle: INACTIVE pauses re-checks, and every other value — including a blank cell — switches them back on.

So if you paused a credential in Oho and then upload a sheet that leaves its Status blank, the pause is lifted. Put INACTIVE in the cell for any credential you want to stay paused. This is why the export Oho gives you writes INACTIVE for paused records and leaves every other Status cell blank, rather than filling in the check result.

Applicants​

One row per candidate you're still considering. 7 columns. Fill this sheet in only if you want to bring a recruitment list in alongside your workforce — otherwise leave it blank.

ColumnNeeded?What it expects
Applicant IDRequired — keyTheir unique ID in your ATS or HR system. Applicants are keyed on it, so a row without one is skipped.
OrganisationRecommendedThe organisation they're being considered for. Leave it blank and the applicant imports unassigned.
First NameRecommendedTheir given name. Leave it blank for a candidate who goes by a single name.
Last NameRequiredTheir family name, or their single name. Never a placeholder — it's what the registers are searched on.
EmailRecommendedWhere Oho sends their Recruitment Check. Applicants with no email address import — you just can't send them a check.
PhoneOptionalInternational format, for example +61 4 1234 5678.
External IDOptionalA second reference of your own, for example an ATS reference.
What actually stops an applicant row importing

A blank Applicant ID, or no name in either name column. Oho keys applicants on Applicant ID, so a row without one can't be matched on the next run.

Applicants don't take credential rows — their credentials arrive when they complete a Recruitment Check. When you take an applicant on, you promote them to a worker and their credentials carry across. See Applicants.

Exemptions​

An exemption records that a worker is formally excused from a requirement — a registered teacher exempt from holding a Queensland Blue Card, for example. Exemptions count towards compliance, so a properly exempt worker doesn't also need the underlying card.

The sheet takes the same 9 columns as Credentials, with two differences in meaning:

  • Credential Type names the requirement the worker is excused from, rather than a card they hold.
  • State is what makes the exemption specific — wwcc + QLD is the Blue Card exemption.

The exact codes the Exemptions sheet takes are listed with the Credential Type values above.

Worker ID, Credential Type and Reference Number are required, exactly as on the Credentials sheet — and State matters just as much here, because it's what turns wwcc into the specific state exemption.

Use this sheet when you're loading a batch of known exemptions alongside your workforce. For one-off exemptions — and where you need to capture a reason and a review-by date — record them on the worker's profile instead: see Record an exemption.

When rows don't import​

What you seeWhyFix
A column is ignored entirelyIts heading was renamed, moved, or deletedRestore the heading exactly as the template has it
Some worker rows missingWorker ID is blank, or the row has no nameFill in Worker ID and at least one name column
Some credential rows missingWorker ID, Reference Number or Credential Type is blank — or the Credential Type isn't one Oho acceptsFill all three, and use an accepted Credential Type code
A credential has no workerIts Worker ID isn't on the Workers sheetUse the same Worker ID on both sheets
The same person imported twiceTheir Worker ID changed between runsKeep Worker ID stable for the life of the person's record
A value was rejectedIt isn't one of the accepted valuesUse one of the code values above. Case doesn't matter — spelling does

More in Run and verify your first sync.