Skip to content

Migration and CSV import

WP Career Board overviewFree + ProGet WP Career Board →

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.

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.

Click Download Sample CSV to get a template with two example rows. Use it as a starting point for your data.

Column Description
title Job title - the only required column
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.
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.
Column Description
company Company name text
company_id WordPress post ID of an existing company post
Column Description
apply_url External application URL
apply_email Application contact email

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
Column Description
lat Latitude (decimal)
lng Longitude (decimal)
board_id WordPress post ID of the target job board (Multi-Board)
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.

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.

  1. Select your CSV file using the file picker
  2. Click Upload & Import
  3. A results summary shows counts for Imported, Updated, Skipped, and Warnings. Per-row errors are listed under a “View row errors” toggle.
  4. 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.

Re-importing a CSV never creates duplicate jobs. Each row is matched against jobs already imported by:

  • An external_id column, 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_id is 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.

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.

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

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_listing posts 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.