The Scenario
Your HR team just closed a job posting for a mid-level engineering role and received 30 applications. The resume PDF links landed in column A of an Excel workbook titled "Applicant Pool — May 2026." The hiring manager is reviewing Thursday morning. Your task before then is to extract structured contact data from each CV: name, email, phone, mobile. Reading 30 resumes to pull contact fields isn't recruiting work. It's data entry with extra steps.
The bad version:
- Open each resume PDF link in a browser, scan for the contact section, locate the email and phone number, and type them into columns C through F — 30 times, for candidates you haven't evaluated yet.
- Realize halfway through that four resumes are scanned documents where text isn't selectable, so you're reading small fonts and hand-typing email addresses you hope you got right.
- Finish the extraction at noon Thursday, leaving 90 minutes before the hiring manager meeting to actually evaluate whether any of the 30 candidates are worth moving forward.
Screening candidates is the value you're supposed to be adding. Contact extraction is overhead that landed on you because no one else was going to handle it.
The Easy Way: One Prompt in SheetXAI
SheetXAI is an AI agent that lives inside your Excel workbook. It reads the applicant sheet, connects to Odoo through its built-in integration, and can submit every resume URL for parsing, poll for extracted results, and write candidate contact fields into adjacent columns — so the hiring manager gets a workbook they can work with directly.
Read my Excel recruiting pipeline sheet (30 resume URLs) and use Odoo to OCR-parse every CV — extracting candidate name, email, and phone into adjacent columns so I can review them all in one place
What You Get
- Adjacent columns populate with extracted name, email, phone, and mobile for each applicant row
- Rows where the resume fails to parse return a status note so you know which ones need manual attention
- Scanned documents that Odoo's OCR can process still extract contact fields — those it can't read get flagged rather than returning empty cells silently
- The full batch runs without you managing each submission individually
What If the Data Is Not Quite Ready
Some resumes are in languages other than English
For each resume URL in column A, submit to Odoo Parse Applicant, extract name, email, phone, and mobile into columns C through F — and in column G note the detected language if it is not English
You also need to capture LinkedIn URLs if they appear in the resume
Submit each resume URL in column A to Odoo Parse Applicant, write extracted name, email, phone, and mobile into columns C through F — and in column G write any LinkedIn URL found in the parsed contact data, or 'NOT FOUND' if absent
A second batch of resumes arrived after the first run
For rows in column A where column B is empty, submit to Odoo Parse Applicant, write the token to column B, and write extracted name, email, phone, and mobile to columns C through F — skip rows where column B already has a value
Full intake pass with contact completeness flags
For each resume URL in column A: submit to Odoo Parse Applicant, extract name, email, phone, and mobile into columns C through F, write the parse status to column B, and in column G write 'MISSING CONTACT' for any row where both phone and mobile are empty — then sort the workbook so MISSING CONTACT rows appear at the bottom
Getting the contact completeness signal at extraction time means the hiring manager's first filter takes minutes instead of a manual scan through 30 rows.
Try It
Get the 7-day free trial of SheetXAI and open your applicant pool workbook with resume PDF URLs in column A, then ask it to extract contact fields using Odoo. For related Odoo tasks, see batch invoice parsing and expense receipt extraction.
