NewSearch millions of jobs from your AI agent with MCP
All posts
ComparisonWordpress
Comparison·Sep 9, 2026·10 min read

WordPress job board plugins in 2026: compared, and how to fill one with live postings

WP Job Manager, Simple Job Board, WP Job Openings, WPJobBoard and the Jobify and WorkScout themes compared on what the free core includes, applications and resumes, and whether the plugin accepts an API or XML backfill feed. Setup steps for WP Job Manager with an importer, the honest limits, and a curl plus PHP snippet that keeps a WordPress board full of live postings.

Dvir Atias

Dvir Atias

Founder, JobsPipe

WordPress is still the fastest way to put a job board on a domain you already own, and the plugin choice is smaller than the directory listings suggest. This comparison covers the plugins and themes that are maintained and that we are confident exist as described, what their free core actually includes, and the column that decides whether the board stays full: does it accept an API or XML backfill feed, or will you be typing jobs in by hand?

Which WordPress job board plugin should you use?

WP Job Manager for almost every public job board: free core, the largest add-on ecosystem, and importers that already understand it. Simple Job Board or WP Job Openings for a company careers page with application forms. A theme such as Jobify or WorkScout when you want a finished board design on top of WP Job Manager. WPJobBoard when you want one paid product with everything inside.

WordPress job board plugins compared

Plugin or themeTypeApplications and resumesAccepts an API or XML backfill feed
WP Job ManagerPlugin, free core, paid add-ons (Automattic)Paid add-ons: Applications, Resume Manager, paid listings, alertsNot built in. Yes through WP All Import with its WP Job Manager add-on, or a custom importer writing the job_listing post type
Simple Job BoardPlugin, free core, premium add-ons (PressTigers)Built in: application form with resume uploadNo importer. Custom post type only; feed jobs in with your own code
WP Job OpeningsPlugin, free core, pro version (AWSM Innovations)Built in: application form, applicant tracking in proNo importer. Built for a careers page, not a backfilled board
WPJobBoardCommercial plugin, one priceBuilt in: applications, resumes, paid listingsHas its own import and export tooling; check the current release for feed formats before relying on it
JobifyTheme built on WP Job Manager (Astoundify)Inherits the WP Job Manager add-onsSame paths as WP Job Manager
WorkScoutTheme built on WP Job Manager (Purethemes)Inherits the WP Job Manager add-onsSame paths as WP Job Manager

One warning that applies to every product with a setting called “Indeed backfill”: those settings date from Indeed’s publisher programme, which is no longer open to new publishers. Treat them as legacy and test before building a launch around them. The backfill sources that work in 2026 are in job board backfill.

How to set up WP Job Manager with an importer

  1. Install and activate WP Job Manager, then open Job Listings, Settings. Turn on listing expiry (a default duration of 30 days keeps dead roles from piling up) and decide whether applications go to a URL, an email, or both.
  2. Create three pages: one with the [jobs] shortcode for the board, one with [submit_job_form] for employer posts, and one with [job_dashboard] so employers can edit their own listings.
  3. Install WP All Import and its WP Job Manager add-on. Point it at your feed (an XML file, a CSV or a JSON response), and map the fields: title, description, company name, location, the application URL, the expiry date, and the job type taxonomy.
  4. Set a unique identifier for the import, the source’s own posting id, so a re-run updates existing listings instead of duplicating them, and enable removal of listings that have dropped out of the feed. That one setting is the difference between a board and a graveyard.
  5. Schedule the import to re-run at least daily. WP Job Manager outputs JobPosting structured data on each listing, so a fresh board with good expiry hygiene can appear in Google for Jobs without extra work.

Honest limits

  • Volume. WordPress post meta is not a search index. A few thousand live listings with a handful of filters is comfortable; tens of thousands with faceted search means caching, a search plugin, or a different platform. The hosted options in best job board software and white-label job board software exist for that case.
  • Deduplication. No plugin dedupes the same role across sources. If your feed does not do it upstream, your board will show a role twice.
  • The add-on bill. The free core is a listing type and a few shortcodes. Applications, resumes, paid listings and alerts are each a paid add-on, plus hosting. Price the whole stack before choosing free over a hosted board.
  • Expiry is on you. A feed tells you when a posting was published, rarely when it closed. Use a source that tracks status, or your board fills with roles that are no longer hiring.

How to fill a WordPress job board with live postings

Any importer that can read JSON from a URL can read the JobsPipe API, but the request is a POST with a filter body, so the simplest reliable path is a small plugin on WP-Cron that pulls a page of fresh postings for your niche and writes them as job_listing posts. The request:

curl https://api.jobspipe.dev/v1/jobs/search \
  -H "Authorization: Bearer $JOBSPIPE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "job_title_or": ["registered nurse"],
    "job_country_code_or": ["US"],
    "posted_at_max_age_days": 7,
    "limit": 100
  }'

Each row carries id, job_title, company, location, description, date_posted, status and the apply url, and metadata.next_cursor pages through the rest. The same call as a WordPress plugin, with the posting id stored as meta so a re-run never inserts a duplicate:

<?php
add_action('jobspipe_sync', function () {
  $res = wp_remote_post('https://api.jobspipe.dev/v1/jobs/search', [
    'headers' => [
      'Authorization' => 'Bearer ' . JOBSPIPE_API_KEY,
      'Content-Type'  => 'application/json',
    ],
    'body' => wp_json_encode([
      'job_title_or'           => ['registered nurse'],
      'job_country_code_or'    => ['US'],
      'posted_at_max_age_days' => 7,
      'limit'                  => 100,
    ]),
    'timeout' => 30,
  ]);
  if (is_wp_error($res)) return;

  $jobs = json_decode(wp_remote_retrieve_body($res), true)['data'] ?? [];
  foreach ($jobs as $job) {
    $existing = get_posts([
      'post_type'   => 'job_listing',
      'post_status' => 'any',
      'meta_key'    => '_jobspipe_id',
      'meta_value'  => $job['id'],
      'fields'      => 'ids',
    ]);
    if ($existing) continue;

    $post_id = wp_insert_post([
      'post_type'    => 'job_listing',
      'post_status'  => 'publish',
      'post_title'   => $job['job_title'],
      'post_content' => $job['description'] ?? '',
    ]);
    update_post_meta($post_id, '_jobspipe_id', $job['id']);
    update_post_meta($post_id, '_company_name', $job['company']);
    update_post_meta($post_id, '_job_location', $job['location']);
    update_post_meta($post_id, '_application', $job['url']);
    update_post_meta($post_id, '_job_expires', gmdate('Y-m-d', strtotime('+30 days')));
  }
});

if (!wp_next_scheduled('jobspipe_sync')) {
  wp_schedule_event(time(), 'hourly', 'jobspipe_sync');
}

Define JOBSPIPE_API_KEY in wp-config.php, never in the theme. The meta keys are the ones WP Job Manager reads for the company, the location and the apply link, so imported listings render exactly like employer-submitted ones. Themes built on WP Job Manager pick them up unchanged.

Taking closed roles down is a second, cheaper job. Once a day, send the stored ids back with job_ids and status: "any"; every row that comes back with status: "closed" gets trashed, and the closed_at and closed_reason fields tell you why. Paid plans can subscribe a webhook to the job.closed event instead and skip the polling. Filter by source_not if you want only employer-direct postings, and by max_ghost_score to keep likely ghost jobs off a board your readers trust. The rest of the platform question, hosted versus self-hosted versus custom, is in open-source job board software and how to build a job board.

Fill a WordPress board with live postings - 30+ sources, one JSON schema, free tier included.

Get a free API key
FAQs

Frequently Asked Questions

What is the best WordPress job board plugin?

WP Job Manager for almost every public job board: free core, the largest add-on ecosystem, and importers such as WP All Import that already understand its job_listing post type. Simple Job Board or WP Job Openings suit a company careers page with application forms. Jobify and WorkScout are themes built on WP Job Manager, and WPJobBoard is a single commercial plugin with applications, resumes and paid listings inside.

Is WP Job Manager free?

The core plugin is free and includes the job listing type, the [jobs], [submit_job_form] and [job_dashboard] shortcodes, listing expiry and JobPosting structured data. Applications, resume management, paid listings and job alerts are paid add-ons, and you pay for WordPress hosting, so price the full stack before choosing it over a hosted board.

Can a WordPress job board pull jobs from an API or XML feed?

With WP Job Manager, yes: WP All Import with its WP Job Manager add-on reads XML, CSV or JSON from a URL and maps fields onto job_listing posts, or a small plugin on WP-Cron can call an API and write the posts itself. Simple Job Board and WP Job Openings have no importer and are built for careers pages. Settings labelled Indeed backfill in older themes are legacy.

How do you fill a WordPress job board with live postings?

Call POST /v1/jobs/search on a schedule with filters for your niche (title phrases, country, posting age), and insert each row as a job_listing post with the source posting id stored as meta so re-runs never duplicate. Write the company, location and apply link into the _company_name, _job_location and _application meta keys WP Job Manager reads. Once a day, send the stored ids back with status any and trash the rows that come back closed.

How do you stop a WordPress job board filling with expired jobs?

Turn on listing expiry in WP Job Manager with a default duration, enable removal of listings that dropped out of the feed in your importer, and use a source that tracks posting status so closed roles are unpublished the day they close rather than when a fixed expiry date arrives. Paid JobsPipe plans can receive a job.closed webhook instead of polling.