Skip to content
TablePage.ai Open the app

Turn Job Posting Data Into a Public Table Readers Can Check

Choose a job posting data source, define each row, clean duplicates and salary fields, and publish a sourced table without confusing ads with vacancies.

Share X in f
Wei Hu

To publish job posting data, start with a bounded question: Which open federal job announcements matched a documented data-related search during collection? The result should be a table readers can filter by agency, location, pay interval and closing date—with links back to the announcements.

Job posting data describes advertisements, not necessarily individual vacancies. Indeed notes that one posting can cover multiple openings, an advertisement may remain online after a role is filled, and some openings are never advertised online. Label your measure “announcements” or “postings,” not “available jobs.” (Indeed data FAQ)

Choose between individual postings and trend data

These sources serve different publishing tasks. The descriptions below reflect their documentation as of October 24, 2026.

Source What you can build Important boundary
USAJOBS Search API A snapshot of currently open U.S. federal job opportunity announcements Requires an API key; this endpoint returns currently open announcements, not a historical archive
Indeed Hiring Lab repository A time-series table of posting trends by country, sector or available subnational geography These are aggregate index series, not individual ads or absolute vacancy counts
BLS Job Openings and Labor Turnover Survey (JOLTS) A comparison using an official job-openings measure Its definition differs from an online posting count

The USAJOBS documentation describes authentication, search filters, pagination and returned fields. The Hiring Lab repository provides daily series refreshed weekly and permits public use under Creative Commons Attribution 4.0 with attribution to Indeed Hiring Lab.

For context, JOLTS defines job openings as unfilled positions on the last business day of the month that meet specific conditions, including a possible start within 30 days and active external recruiting. Do not combine that measure with advertisement counts as though they were interchangeable.

Build a posting-level snapshot

For the federal-announcement example, record your search terms, filters and collection start and end timestamps before cleaning anything. Decide whether “data-related” means a title match or a match anywhere in the announcement: USAJOBS distinguishes PositionTitle searches from broader Keyword searches, and its documentation says these searches can include synonyms. Describe the results as matches to your search, not an exhaustive classification of data-related work. Retrieve every results page, not just the first. (Search API reference)

Use one row per source announcement per snapshot. Here is a proposed publication schema—not a verbatim API response:

Column Meaning or preparation rule
source, posting_id Source name and source identifier; preserve identifiers as text
title_raw, employer_raw Original title and agency or employer name
location_raw, location_count Original location information and number of listed locations
salary_min, salary_max Numeric advertised endpoints; blank when unavailable
salary_currency, salary_period Verified currency and source pay interval; leave unknown currency blank
posted_date, closing_date Source publication date and application deadline
retrieved_at Collection timestamp for the record, including time-zone context
source_url Link to the original announcement

For USAJOBS, map MatchedObjectId (the control number) to posting_id, PositionURI to source_url, PublicationStartDate to posted_date, and ApplicationCloseDate to closing_date. Structured locations are in PositionLocation; pay ranges and intervals are in PositionRemuneration. The documented remuneration object does not supply a currency field, so do not present currency as an API-provided value. If a record contains multiple pay ranges, document how you represent them rather than silently keeping only the first. (Response field definitions)

If you collect repeated snapshots, the same announcement may legitimately appear on several dates. That is evidence of repeated observation, not automatically a duplicate.

Clean without changing the meaning

Keep an untouched source extract privately, then prepare a separate release file.

  • Deduplicate within a snapshot. Start with source plus posting ID. Across sources, identical titles and employers are only duplicate candidates; compare links, locations and dates before merging.
  • Handle multiple locations explicitly. Retain one announcement row with its location list, or create a separate announcement-location table. If you expand locations into rows, count distinct announcement IDs when reporting posting totals.
  • Preserve original labels. Add normalized titles or employer names in separate columns, with a documented mapping. Do not silently replace the source wording.
  • Keep pay comparable. Do not average hourly and annual ranges together, or mix currencies. Leave undisclosed pay blank, not zero. If you annualize pay, retain the original interval and disclose the hours-per-year assumption.
  • Distinguish “not stated” from “no.” Use an explicit unknown category when a remote-work or other attribute is absent rather than inferring it.

Use consistent dates and timestamps; the guide to dates and time zones in public tables explains the distinction. For pay and other missing fields, follow the same discipline as empty fields versus zero.

Publish a table with its counting rules

Before upload, check the unique-announcement count, missing salary count, reversed salary ranges and any rows multiplied by location expansion. Compare the cleaned count with your source extract and explain exclusions.

For a snapshot, useful summaries include announcements by agency and the share with a disclosed pay range. For trends, use a consistent collection schedule and search definition. A listing disappearing from your next snapshot does not establish that someone was hired.

If you choose Hiring Lab instead, preserve its series labels, adjustment status, baseline and download date. The repository documents methodology changes and historical revisions, so a reproducible release needs a dated copy of the input. (Hiring Lab methodology)

Review redistribution terms before publishing. Remove applicant information, recruiter personal contact details, credentials and private notes. A public advertisement is not permission to republish every field you collected.

Export the reviewed table as CSV or a supported spreadsheet. TablePage accepts CSV, TSV, XLSX and XLS and creates a public dataset page with a shareable link and filterable table. After upload, inspect identifiers, dates, missing values and row counts on the published page.

Accompany the link with the source, collection period, search scope, row definition, exclusions and counting rule. For this example, use a title such as “Federal job announcements matching a data-title search” and include the actual collection date. Readers should know exactly what the table includes before interpreting its totals.