Skip to content
Surhires

Bulk import

Shipping today

Turn a resume backlog into records you can search

A folder of two thousand resumes is not a database. It becomes one when every file is parsed, deduplicated and attributed, with the failures visible.

Surhires imports resumes in bulk from a folder upload, a connected mailbox or a zip archive. Each file is extracted, parsed and checked against your existing database and against the rest of the batch. Every row reports its own outcome before anything is committed, and the credit cost of the run is shown first.

By Surhires Editorial · Published · Reviewed

In the product: BulkResumeImport.tsx, CandidateImportDialog.tsx and recruitmentCandidateImport.ts

A backlog arrives in three shapes

Resume backlogs do not sit in one place. Part of it is a shared drive folder that three recruiters have been dropping files into for two years. Part of it is an applications mailbox nobody emptied after the last hiring push. Part of it is an export from the system you are leaving, where the attachments came out in one directory and a spreadsheet of names came out in another.

Bulk import reads all three. Drag a folder of files into the browser, connect an applications mailbox and pull attachments from a date range or a label, or upload an archive that is expanded server-side. The ingestion path differs at the front. Everything after it is the same pipeline, so a mailbox import and a folder import produce the same kind of record and the same kind of report.

  • Folder upload, including nested directories, straight from the browser
  • Mailbox ingestion across a date range or a label, taking attachments and the sending address
  • Zip and archive upload, expanded server-side with the directory path kept as provenance
  • A spreadsheet of candidate rows mapped column by column, with resumes attached by filename

Every row reports its own outcome

An import that finishes with the message nine hundred records imported has told you nothing worth knowing. The number you need is how many of those nine hundred are usable, how many landed on top of somebody already in the database, and which files the parser could not read at all.

Each row in a Surhires batch carries its own result, and the batch is reviewable before it is committed. You can sort the review screen by outcome, open any row to see the parsed values next to the source text, correct a field, or exclude the row entirely. Committing writes only what you accepted.

  • Parsed cleanly and written as a new candidate record
  • Parsed with low confidence, written and flagged for review
  • Matched to an existing candidate, with the newer resume filed as a version
  • Duplicate of another row inside the same batch, merged before commit
  • Unreadable, stored with the original file intact and queued for manual entry
  • Skipped, because it fell outside the file types or size limit you set

Duplicates are caught inside the batch, not only against the database

Most importers check an incoming row against records that already exist. That is the easy half, and on its own it is why a folder containing three copies of the same person, saved by three recruiters under three filenames, becomes three new records.

Duplicate detection runs in both directions here. Every row is compared against the live database and against every other row in the same batch, on email address, phone number and the combination of name with a recent employer. Exact matches merge automatically and say so. Near matches are held on a review screen where you decide, and a merge keeps both resume versions rather than discarding the older document.

The credit cost is quoted before the run, not billed after it

Parsing consumes AI credits at a published weight per document, and a scanned page that needs optical recognition weighs more than a text-layer PDF. Discovering that after processing a four thousand file archive is not a reasonable way to run a business.

Before a batch commits, the import dialog shows the file count broken down by type, the credit cost of the run at current weights, and what your balance will be afterwards. You can trim the batch, split it across two months, or import in store-only mode where files are held against records and parsed later. Professional includes one hundred credits per user per month, and further credits are an add-on at a published price.

Imports are the single most common way a database loses track of where its data came from. Two years later somebody asks why you hold a particular candidate and the honest answer is that they arrived in a spreadsheet nobody remembers.

Batch-level defaults are set before the run and written onto every record it creates: source label, record owner, consent basis and the channel through which it was captured, the retention window that applies, and any tags or talent pool the batch should join. Where the source file carries that information per row, map the column instead of applying one value to everything. Records created by an import are indistinguishable from records created by hand, except that they know which import made them.

  • Source label and record owner applied per batch or mapped per row
  • Consent basis and capture channel recorded at import time rather than backfilled
  • Retention window applied so dormant imported records are reviewed on schedule
  • Tags and talent pool membership assigned as the batch commits

Failures are visible, resumable and traceable

Any import large enough to be worth automating will partly fail. Files will be corrupt, a scanned page will be a photograph of a photograph, and a handful of documents will turn out to be cover letters with no resume behind them.

A batch is a durable record, so you can close the tab and come back to it. Failed rows are listed with the reason they failed, and you can retry only those rows once the underlying problem is fixed without reprocessing the ones that succeeded. Every record a batch creates carries that batch identifier, which means a bad import can be found, reviewed and reversed as a set rather than hunted down one row at a time.

What bulk import will not fix for you

Importing does not improve the data it is given. A backlog of resumes with no consent basis behind them is a compliance problem after the import in exactly the way it was before, and putting it into a searchable system makes the problem easier to see rather than smaller.

Age matters too. A five-year-old resume produces a record whose salary expectation, notice period and contact number are all likely wrong. The useful pattern is to import the backlog, mark it clearly by source and date, and treat it as a rediscovery pool to be re-consented and refreshed on contact rather than as a list to start messaging on Monday.

What you get

Folder upload

Drag a nested directory of resumes into the browser; the directory path is kept as provenance.

Mailbox ingestion

Pull attachments from a connected applications inbox across a date range or a label.

Archive expansion

Zip and archive files expanded server-side, with the internal structure preserved.

Spreadsheet plus attachments

Map columns to fields and attach the matching resume file by filename.

Per-row outcomes

Six distinct result states per row, sortable and reviewable before anything commits.

In-batch dedupe

Rows compared against each other, so three copies of one person become one record.

Cross-database dedupe

Rows compared against live records on email, phone and name with recent employer.

Version-preserving merge

A merge keeps the older resume as a version rather than overwriting it.

Cost quoted first

File counts, credit weights and post-run balance shown before the batch commits.

Store-only mode

Hold files against records now and run parsing later when credits allow.

Batch field defaults

Source, owner, consent basis, retention window and tags applied as the batch runs.

Batch identifier

Every created record knows which import made it, so a bad run can be reversed as a set.

Failed-row retry

Reprocess only the rows that failed, without touching the ones that succeeded.

Questions recruiters ask

How many files can go into one batch?

We do not publish a single maximum, because a batch of small text-layer PDFs and a batch of scanned multi-page documents behave very differently. The import dialog shows what it has counted and what it will cost before you commit, and very large backlogs are chunked so a single failure does not take the run down.

Does an import count against the candidate limit on my plan?

Yes. The Starter plan is capped at five hundred candidate records, so a large backlog import belongs on Professional or Enterprise, which are not capped on candidate count. The import dialog warns you before it commits a batch that would exceed a plan cap rather than failing halfway through.

What happens when an imported resume matches someone already in the database?

The row is reported as a match rather than written as a new record. The newer resume is filed as a version on the existing candidate, newer contact details are offered as suggested updates rather than applied silently, and the activity stream records that the change came from an import.

Can I import files without spending credits on parsing?

Yes. Store-only mode writes the candidate record and attaches the file without running extraction or structuring. You get a searchable filename and a document you can open, but not normalised skills or seniority. Parsing can be run later on any subset of those records.

Is this how we migrate off an incumbent system?

It is part of it. Bulk import handles resumes and a mapped spreadsheet well. A full migration also carries custom fields, activity history, notes, client records and placement financials, which is why we run early migrations as a paid concierge project rather than pretending a generic importer covers it.

Do failed files cost credits?

A file that cannot be read at all is not charged, because no extraction ran. A file that extracted but structured poorly is charged, because the work was done. The batch report separates the two so the cost on your invoice can be reconciled against the rows that produced it.

Who is responsible for whether we are allowed to hold these resumes?

You are. Surhires supports consent basis capture, configurable retention windows and export or erasure workflows against every record an import creates, but the lawful basis for holding a candidate backlog sits with you as the controller of that data, not with us as the processor.

See it against your own reqs

Bring one live role and three resumes. In twenty minutes you will see the match scores, the shortlist and the placement invoice that comes out the other end.