Candidates

Smart Search & Bulk Upload

Find people by describing them in plain words, and add a whole folder of resumes in one go.

Smart Search

  • On Candidates, type what you’re looking for, e.g. React developers in Pune with 5+ years, ex-Flipkart product managers, designers who know Figma added this month, referrals in interview stage for Platform Engineer.
  • Otter turns it into filters you can see under the box (Understood as): skills (all needed, with common spellings like React = ReactJS), title, company (current or past), location (Bangalore = Bengaluru), years of experience, words in the resume, date added, stage, source, tag and job. Remove any chip with ×, or change them in Edit Filters.
  • Each result shows why it matched and a short piece of the resume with the matching words highlighted. Results are ordered by how well those job words match (Most relevant).
  • A name, email or phone on its own runs the classic search.
  • Save search keeps the filters as a view (private or shared). Select results to add them to a job or talent pool in bulk, tag them, or email them.
  • You only ever see candidates you already have access to (hiring managers: their jobs).

Fair By Design

  • Search only filters and orders by job-related words. It never rejects anyone or moves them in a pipeline.
  • Words about age, gender, family, religion, caste, race, health or sexuality are left out and listed as Not used. Experience is filtered by years of experience, never by age.
  • Why Postgres full-text and not AI embeddings: filters and keyword matches can be shown and edited, results are instant and free, and nothing is sent to an AI provider when you search. Embeddings would add a cost per resume and per search, and their matches can’t be explained the same way.

Bulk Upload

  • Candidates → Upload Resumes (also on a talent pool’s page). Choose where they go: just the database, a job (Applied stage) or a talent pool.
  • Drop up to 100 files: PDF, Word (.docx/.doc), RTF or text, up to 25 MB each, or a .zip of them.
  • Files upload straight to your workspace’s private storage, then Otter reads them in the background (scans too, with text recognition). The progress page shows Added, Matched Existing, Failed (with the reason) and In Progress; you can leave and come back.
  • Duplicates: if the email or phone on a resume belongs to someone already in Otter, the resume is added to their profile (empty fields filled in, nothing you typed is changed) instead of creating a copy.
  • New people get the source Bulk upload. Nobody is emailed, and “candidate applied” automations don’t run for them.
  • Retry Failed reads failed files again (uploaded copies are kept for a day). Reading uses AI within your workspace’s daily AI limit; after that resumes are read without AI.
  • Limit: 500 files per workspace per day.

API & MCP

POST /api/v1/candidates/search with { "query": "…", "filters": { … } } (any key). POST /api/v1/bulk-imports with up to 20 files as links or base64 (read & write key), then GET /api/v1/bulk-imports/:id and POST /api/v1/bulk-imports/:id/retry. MCP: smart_search_candidates, bulk_import_resumes, get_bulk_import.

The public demo is read-only: Smart Search works there; uploading is turned off.