Skip to content

Search wage determinations

Search federal wage determinations: the legally binding minimum wage and fringe schedules a federal contract is bound to, published by the Department of Labor through SAM.gov.

There are three kinds, from three statutes, and they are queried together here with a type filter:

  • DBA, Davis-Bacon Act construction rates, by county and construction type (Building, Heavy, Highway, Residential). 68,737 records.
  • SCA, Service Contract Act service-worker rates. 2,666 records.
  • CBA, collective bargaining agreements that carry over to a successor contract under section 4(c) of the SCA. 18,630 records, each carrying a cba block with its contractor, union, and term.

Most of what you get back is not current

SAM keeps every superseded revision of a determination, not just the one in force. About 6% of Davis-Bacon records are currently active (4,235 of 68,737); the rest are history. Pass active_only=true for the determinations that actually govern a bid today. Without it, the default result is a revision archive sorted newest-modified first.

Quick start

curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://govconapi.com/api/v1/wage-determinations/search?type=DBA&state=CA&active_only=true&limit=1"
{
  "data": [
    {
      "wd_id": "CA20260022",
      "wd_number": "CA20260022",
      "wd_type": "DBA",
      "revision_number": 5,
      "is_active": true,
      "publish_date": "2026-08-06",
      "modified_date": "2026-08-06",
      "construction_types": ["Building", "Heavy", "Highway"],
      "locations": [{ "state": "CA", "county": "Los Angeles" }],
      "total_locations": 1,
      "locations_truncated": false
    }
  ],
  "pagination": { "limit": 1, "offset": 0, "total": 28, "total_is_estimate": false, "has_next": true },
  "filters_applied": { "type": "DBA", "state": "CA", "active_only": true, "sort_by": "modified_date", "sort_order": "desc" },
  "window": { "plan_window_days": null, "earliest_searchable": null, "clamped": false, "reason": "Wage determinations are compliance reference data, not time-series records, so they are not date-windowed: the full set is searchable on every plan. Use date_from / date_to to filter by the date a determination was last modified." },
  "_sources": ["sam_wage_determinations"]
}

To answer the compliance question directly ("what applies in this county"), use /wage-determinations/by-location, which resolves county-specific and statewide coverage in one call.

locations[] is scoped to your filter, not the full nationwide list

When you pass state (and optionally county), the embedded locations[] array is narrowed to jurisdictions matching that filter, not every jurisdiction the determination applies to nationwide. total_locations is the determination's full nationwide location count; locations_truncated is true whenever the embedded array is narrower than that:

curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://govconapi.com/api/v1/wage-determinations/search?wd_number=1996-0223&state=VA&active_only=true"
{
  "data": [
    {
      "wd_id": "1996-0223",
      "wd_number": "1996-0223",
      "wd_type": "SCA",
      "revision_number": 70,
      "is_active": true,
      "locations": [
        { "state": "VA", "county": "Accomack" },
        { "state": "VA", "county": "Albemarle" }
      ],
      "total_locations": 3180,
      "locations_truncated": true
    }
  ]
}

This determination applies in 3,180 jurisdictions nationwide (total_locations); the embedded array here shows only its 96 Virginia counties, hence locations_truncated: true. To get the FULL, unscoped location list for one determination, use the single-record lookup , /wage-determinations/{wd_id} never filters locations[].

Parameters

Param Type Description
type string DBA, SCA, or CBA. Invalid values return a 400 with the valid list.
state string 2-letter US state or territory code. Joins through the location index.
county string County-name substring (for example Cook). Wildcards are escaped and matched literally.
wd_number string WD-number substring (for example AK2026, 1994-2371, CBA-2025).
active_only bool Only currently-effective determinations. Default false.
construction_type string DBA only: Building, Heavy, Highway, or Residential.
date_from / date_to date ISO YYYY-MM-DD, bounding the determination's modified date.
sort_by string modified_date (default), publish_date, wd_number, or revision_number.
sort_order string asc or desc (default).
limit / offset int Page size (default 100; maximum 100 on the free trial, 1,000 on paid plans) and offset.
fields string Comma-list of response fields to return.

modified_since is accepted as a hidden alias for date_from; sending both is a 400.

Response fields

Field Meaning
wd_id Internal SAM identifier (the stable key for a single-record lookup).
wd_number Human-readable WD number. DBA encodes state and year (CA2026...), SCA a year-sequence (2015-4567), CBA CBA-YYYY-N.
wd_type DBA, SCA, or CBA.
revision_number The determination's revision.
is_active Whether this revision is currently in force.
publish_date / modified_date Source dates. Roughly 27% of DBA records carry no modified date from the source, so a date_from filter will not return them.
construction_types DBA only: the construction categories the rate schedule covers.
locations The state and county jurisdictions the determination applies to. A statewide determination has a county of null. Scoped to your state/county filter, not the full nationwide list , see below.
total_locations The determination's real, full nationwide location count (unaffected by your filter).
locations_truncated true when locations[] above is narrower than total_locations because of your state/county filter.
cba CBA only: contractor, union, covered services, and effective dates. Present on CBA rows, absent on DBA and SCA. Present on roughly 87% of CBAs overall; the rest return empty from the source.

Errors

Status When
400 Invalid type, sort_by, or sort_order; malformed date_from / date_to; unknown query parameter; both date_from and modified_since sent.
401 Missing or invalid API key.
422 limit below 1 or negative offset. A limit above your plan maximum is a 402.

Examples

Track Davis-Bacon revisions issued in a state since a date:

GET /api/v1/wage-determinations/search?type=DBA&state=IL&date_from=2026-04-01&active_only=true

Find active CBAs in a jurisdiction, with contractor and union:

GET /api/v1/wage-determinations/search?type=CBA&state=DC&active_only=true

Look a determination up by number:

GET /api/v1/wage-determinations/search?wd_number=AK2026

A REST API and MCP server for U.S. federal procurement data.

Get a free key, emailed instantly, or follow the quickstart.

Found something wrong, missing or confusing on this page?

Press Ctrl + Enter to send a note. Highlight text first and it travels with your note.