Migration and CSV import
You can move jobs into Career Board from a spreadsheet, and re-run the same file later to update them instead of creating duplicates. Pro adds a CSV importer card to the Import screen, next to the built-in WP Job Manager cards.
Rows import as Pending unless the status column says publish or draft.
CSV Import
Section titled “CSV Import”Finding the Import Screen
Section titled “Finding the Import Screen”Go to Career Board → Import and look for the CSV → Jobs card (marked Pro). Only users who are allowed to manage Career Board settings see it.
Download the Sample File
Section titled “Download the Sample File”Click Download Sample CSV to get a template with two example rows. Use it as a starting point for your data.
CSV Column Reference
Section titled “CSV Column Reference”Required
Section titled “Required”| Column | Description |
|---|---|
title |
Job title - the only required column |
Content
Section titled “Content”| Column | Description |
|---|---|
description |
Full job description (HTML allowed) |
status |
pending, publish, or draft. Any other value, or an empty cell, becomes pending. |
deadline |
Application deadline. Any date format PHP can read; it is saved as YYYY-MM-DD. |
Salary
Section titled “Salary”| Column | Accepted values |
|---|---|
salary_min |
Integer (e.g. 80000) |
salary_max |
Integer (e.g. 120000) |
salary_currency |
Any currency code in the plugin’s currency catalog (e.g. USD, EUR, GBP, CAD, AUD, INR, SGD). Codes are matched case-insensitively. |
salary_type |
yearly, monthly, or hourly |
If salary_min is greater than salary_max, the importer swaps them automatically and records a warning.
| Column | Accepted values |
|---|---|
remote |
yes, 1 or true turns it on. Any other value turns it off. |
featured |
yes, 1 or true turns it on. Any other value turns it off. |
Company
Section titled “Company”| Column | Description |
|---|---|
company |
Company name text |
company_id |
WordPress post ID of an existing company post |
Application
Section titled “Application”| Column | Description |
|---|---|
apply_url |
External application URL |
apply_email |
Application contact email |
Taxonomies
Section titled “Taxonomies”Separate multiple values with commas or pipes. Terms are created automatically if they do not exist.
| Column | Taxonomy |
|---|---|
categories |
Job category |
job_types |
Job type (e.g. `Full-time |
locations |
Location |
experience |
Experience level |
tags |
Job tags |
Geo and Board
Section titled “Geo and Board”| Column | Description |
|---|---|
lat |
Latitude (decimal) |
lng |
Longitude (decimal) |
board_id |
WordPress post ID of the target job board (Multi-Board) |
Matching
Section titled “Matching”| Column | Description |
|---|---|
external_id |
Optional stable ID from your source system. Used to match rows on re-import. It is not treated as a custom field. |
Custom Fields
Section titled “Custom Fields”Add a field key from the Field Builder as a column header to fill that custom field on each imported job. Columns that match no field key are ignored.
Running the Import
Section titled “Running the Import”- Select your CSV file using the file picker
- Click Upload & Import
- A results summary shows counts for Imported, Updated, Skipped, and Warnings. Per-row errors are listed under a “View row errors” toggle.
- Use the Review pending jobs link to review the Pending listings before publishing
Imported jobs are authored by the user who runs the import. On a re-import, an empty cell keeps the job’s existing value for every column except title, description and status. An empty description clears the description, and an empty status sets the job back to Pending.
Idempotent Re-Imports
Section titled “Idempotent Re-Imports”Re-importing a CSV never creates duplicate jobs. Each row is matched against jobs already imported by:
- An
external_idcolumn, if your CSV provides one (recommended - ties each row to a stable ID from your source system), or - A natural key derived from the row’s title, company, and board
when no
external_idis given.
A row that matches an existing import updates that job in place (title, description, status, and the fields with a value in the row) and counts as Updated. A row with no match creates a new job and counts as Imported. This means you can re-run the same file - or a refreshed export from your source system - on a schedule without piling up duplicate listings.
Geocoding and candidate alerts
Section titled “Geocoding and candidate alerts”Imported jobs are geocoded in the background, the same way a job posted through the frontend is. The import never waits on a geocoding service, so pins can appear a few minutes after a large import. See Job Map.
Candidates with a matching instant job alert are told when a job becomes public, not when it is imported. A row with status set to publish alerts them as it is imported. A row left pending alerts them when you approve it. Each job alerts once. A bulk import does not send the pending-review email or post to the activity stream that a new frontend submission would.
Jobs migrated from WP Job Manager by the Free importer do not alert candidates by default. Developers can allow it with the wcbp_alerts_notify_on_import filter (return true). CSV imports are not affected by that filter.
Error Handling
Section titled “Error Handling”| Condition | Result |
|---|---|
| File not found or unreadable | Import stops with an error message - no rows processed |
| Empty file or no header row | Import stops with an error message - no rows processed |
Missing title column |
Import stops with an error message - no rows processed |
| Row has wrong column count | Row skipped, error logged in summary |
| Empty title on a row | Row skipped, error logged in summary |
| Invalid currency or salary type | Field skipped for that row |
| Invalid date | Field skipped for that row |
salary_min greater than salary_max |
Values swapped automatically, counted as a warning |
WP Job Manager migration
Section titled “WP Job Manager migration”You can move a WP Job Manager site onto Career Board from the same Career Board → Import screen. The cards are:
- WP Job Manager → Jobs - copies
job_listingposts to Career Board jobs with title, description, author, publish date, salary, deadline, categories, job types, tags and company pages. The Free plugin provides it, so you do not need Pro. - WP Job Manager Applications → Applications - moves applications onto the imported jobs. Import the jobs first. No emails are sent.
- WP Job Manager Resumes → Resumes - copies resumes. It is unlocked by Pro.
Each migration is safe to run more than once. Records that were already imported are skipped, and each card shows how many were found and how many are already imported.

