Snowflake Marketplace

Federal Buying Signals: Forecasts and Labor Rates

What federal agencies plan to buy, from DHS and the GSA Acquisition Gateway, with GSA’s ceiling rates for every labor category on the Multiple Award Schedule, updated weekly.

12,515forecasts
334,565labor rates
2tables
Weeklyupdated
About this dataset

What’s in the listing

A forecast is an agency’s public notice of a purchase it plans to make, usually months before the solicitation. DHS publishes its forecasts in the Acquisition Planning Forecast System (planned buys over $250,000). The GSA Acquisition Gateway publishes forecasts from ten civilian agencies, with Interior, Agriculture and Commerce the largest. Civly reads both every week into one table, FORECASTS, with an estimated value range, NAICS code, set-aside, incumbent and planned award date where the agency gives them. A forecast that drops off a feed stays in the table, flagged.

LABOR_RATES has GSA’s CALC+ ceiling rates: the most each Multiple Award Schedule contractor may bill per hour for each labor category, with next-year and second-year prices.

Common uses: building a federal sales pipeline (what is coming, when, how large, which set-aside, who holds the current contract), tracking recompetes, finding teaming partners and competitors, and pricing a bid against published ceiling rates.

FactDetail
SourceDHS Acquisition Planning Forecast System, GSA Acquisition Gateway forecast tool, and GSA CALC+ ceiling rates. U.S. government works
CoverageForecasts from DHS and the ten civilian agencies on the Acquisition Gateway. Ceiling rates for every labor category on the Multiple Award Schedule
RefreshWeekly
Free trial30 days: the DHS forecasts (SOURCE = 'dhs_apfs') and the labor rates whose CATEGORY includes Facilities
SubscriptionEvery forecast and every labor rate
Join keyThe tables share no key. FORECASTS.NORM_INCUMBENT_NAME and LABOR_RATES.NORM_VENDOR_NAME use the same name rule, so a forecast’s incumbent can be matched to its ceiling rates.
Permitted useNot for employment, tenant, credit, insurance or licensing decisions about a person.
Coverage

How much is in each table

Row counts as of October 6, 2026.

TableSourceRowsFree trial
FORECASTSDHS Acquisition Planning Forecast System (dhs_apfs)609Included
FORECASTSGSA Acquisition Gateway, ten civilian agencies (acquisition_gateway)11,906Subscription only
LABOR_RATESGSA CALC+ ceiling rates, Multiple Award Schedule334,565Categories that include Facilities

Reading the data

A forecast is a plan, not an award, a solicitation or a promise to buy. Agencies change dates, values and set-asides, or drop the purchase. The binding terms come with the solicitation on SAM.gov.

Use LISTED_IN_LATEST_FEED = TRUE for what agencies plan now. A forecast that leaves a feed stays with LISTED_IN_LATEST_FEED = FALSE. FIRST_SEEN_DATE and LAST_SEEN_DATE are the dates of Civly’s weekly reads, not the agency’s dates.

DHS gives an exact planned award date. The Acquisition Gateway usually gives a fiscal year and sometimes a quarter. PLANNED_AWARD_WINDOW_START and PLANNED_AWARD_WINDOW_END let you filter both together.

Dates outside 2015 to 2060 are typing errors or placeholders in the source (such as 2099-09-08) and are left empty, never corrected.

A ceiling rate is the most a vendor may bill per hour for a labor category on that contract. Actual task-order prices are often lower. Labor category names are the vendors’ own wording, so compare within SIN or CATEGORY and read EDUCATION_LEVEL and MIN_YEARS_EXPERIENCE beside the price.

Schemas

Data dictionary

Two tables, 78 columns in total: FORECASTS and LABOR_RATES. The same tables serve the trial and the subscription. During the free trial, FORECASTS returns the DHS forecasts and LABOR_RATES returns the categories that include Facilities. A subscription adds the Acquisition Gateway forecasts and every other labor category.

Schema

Data dictionary: FORECASTS

One row per forecast, from either source, with SOURCE and AGENCY columns. Text is kept as published apart from the columns marked as Civly’s. Named agency contacts are not included. 52 columns.

ColumnTypeMeaning
SOURCE_ROW_NUMBERNUMBERPosition of the row in Civly’s weekly file.
ACQUISITION_PHASETEXTAcquisition Gateway only: the purchase’s stage, as published.
ADDITIONAL_INFORMATIONTEXTAcquisition Gateway only: the agency’s added notes. Typed-in email addresses are replaced with [email removed].
AGENCYTEXTDepartment of Homeland Security for DHS forecasts. For Acquisition Gateway forecasts, the agency that published it.
CONTRACT_TYPETEXTPlanned contract type, as published.
CONTRACT_VEHICLETEXTPlanned contract vehicle or buying method, as published.
CONTRACTING_AGENCYTEXTAcquisition Gateway only: the agency that will award the contract.
CONTRACTING_OFFICETEXTThe office that will award the contract.
CURRENT_CONTRACT_END_DATEDATEAcquisition Gateway only: when the current contract ends, when listed.
DESCRIPTIONTEXTThe agency’s description of the purchase. Typed-in email addresses are replaced with [email removed].
ESTIMATED_VALUE_MAX_USDNUMBERCivly’s reading of the upper dollar amount in ESTIMATED_VALUE_RANGE. Empty for open-ended bands such as Over $100M, or when the label has no amount Civly can read.
ESTIMATED_VALUE_MIN_USDNUMBERThe lower dollar amount in the band, read the same way. 0 for bands such as Below $150K.
ESTIMATED_VALUE_RANGETEXTThe agency’s value band, as published. A band, not a budget or an expected price.
EXTENT_COMPETEDTEXTAcquisition Gateway only: planned competition, as published.
FORECAST_IDTEXTThe agency’s own forecast number (the APFS number for DHS).
INCUMBENT_CONTRACT_NUMBERTEXTCurrent contract number, when the agency lists one. Several are joined as a; b.
INCUMBENT_NAMETEXTCurrent contractor, when listed. Placeholders such as TBD and N/A are left out, and several names are joined as a; b. Typed-in email addresses are replaced with [email removed].
NAICS_CODETEXTIndustry code (NAICS). The Acquisition Gateway shows only the first when a forecast has several.
NAICS_CODE_COUNTNUMBERHow many NAICS codes the agency listed.
NAICS_DESCRIPTIONTEXTIndustry name, as published.
NORM_INCUMBENT_NAMETEXTCivly’s normalized incumbent name, each name normalized separately, for matching. Same rule as LABOR_RATES.NORM_VENDOR_NAME.
ORGANIZATIONTEXTThe agency component or funding organization, as published.
PERIOD_OF_PERFORMANCE_ENDDATEPlanned end of the work.
PERIOD_OF_PERFORMANCE_STARTDATEPlanned start of the work.
PLACE_OF_PERFORMANCE_CITYTEXTEvery city the forecast lists, as a; b. Not lined up with the state and country columns.
PLACE_OF_PERFORMANCE_COUNTNUMBERHow many places the forecast lists. Empty when the agency says the place cannot be disclosed.
PLACE_OF_PERFORMANCE_COUNTRYTEXTEvery country the forecast lists, as a; b.
PLACE_OF_PERFORMANCE_STATETEXTEvery state the forecast lists, as a; b. A nationwide forecast lists all 62 states and territories.
PLANNED_AWARD_DATEDATEDHS only: the planned award date.
PLANNED_AWARD_FISCAL_YEARNUMBERFederal fiscal year of the planned award. A fiscal year runs October 1 to September 30.
PLANNED_AWARD_QUARTERNUMBERFiscal quarter of the planned award, when given.
PLANNED_AWARD_WINDOW_ENDDATEEnd of the planned award window (see PLANNED_AWARD_WINDOW_START).
PLANNED_AWARD_WINDOW_STARTDATECivly’s column, so both sources can be filtered together: the exact planned date when published, otherwise the fiscal quarter, otherwise the whole fiscal year. Empty when the agency gave no award year.
PLANNED_SOLICITATION_DATEDATEWhen the agency plans to post the solicitation.
REQUIREMENT_TYPETEXTCivly’s mapping of the agency’s wording: new, recompete (a follow-on to an existing contract), option_exercise (Acquisition Gateway only), no_longer_required (DHS only) or other. Empty when the agency gave none.
REQUIREMENT_TYPE_AS_PUBLISHEDTEXTThe agency’s own wording.
REQUIREMENTS_OFFICETEXTThe office that needs the purchase.
SET_ASIDETEXTSmall-business set-aside, in the agency’s wording (SB is small business, TBD is to be determined).
SET_ASIDE_EXTENTTEXTDHS only: full or partial.
SOLICITATION_URLTEXTAcquisition Gateway only: link to the solicitation, when posted.
SOURCETEXTdhs_apfs or acquisition_gateway. The trial returns dhs_apfs.
SOURCE_CREATED_DATEDATEWhen the agency created the forecast.
SOURCE_RECORD_IDTEXTThe source system’s id for the forecast. Unique together with SOURCE.
SOURCE_UPDATED_DATEDATEWhen the agency last changed the forecast.
TITLETEXTForecast title.
SOURCE_URLTEXTThe feed the row was read from.
SOURCE_SHA256TEXTChecksum of the file read.
SOURCE_RELEASE_DATEDATEDate of the read.
FIRST_SEEN_DATEDATEDate of the first weekly read that found the forecast. Civly’s date, not the agency’s.
LAST_SEEN_DATEDATEDate of the latest weekly read that found the forecast.
LISTED_IN_LATEST_FEEDBOOLEANTrue when the latest read found the forecast. False means it has left the feed since LAST_SEEN_DATE, often because the solicitation was posted or the plan was dropped. It does not mean the contract was awarded.
IMPORTED_ATTIMESTAMP_NTZWhen Civly imported the row.
Schema

Data dictionary: LABOR_RATES

One row per labor category on one vendor’s GSA schedule contract, from one nightly CALC+ build. 26 columns.

ColumnTypeMeaning
SOURCE_ROW_NUMBERNUMBERPosition of the row in Civly’s weekly file.
BUSINESS_SIZETEXTS for a small business, O for other than small.
CATEGORYTEXTMultiple Award Schedule category, as published. The trial returns categories that include Facilities.
CONTRACT_ENDDATEContract end date.
CONTRACT_NUMBERTEXTGSA contract number. One contract carries many rates, and one vendor can hold several contracts.
CONTRACT_STARTDATEContract start date.
CONTRACT_TERMINATION_DATEDATEPublished by CALC+ without a definition and set on few contracts. Read it as published.
CURRENT_PRICENUMBERCeiling hourly rate for the contract’s current year, dollars: the most the vendor may bill, not a price anyone paid.
DATA_SOURCETEXTCALC+’s own source label for the rate, as published.
EDUCATION_LEVELTEXTMinimum education for the labor category, in the vendor’s wording.
LABOR_CATEGORYTEXTThe vendor’s name for the job. The same job appears under many names.
MIN_YEARS_EXPERIENCENUMBERMinimum years of experience the vendor sets for the category.
NEXT_YEAR_PRICENUMBERCeiling rate for the contract’s next year. Empty when none is published.
NORM_VENDOR_NAMETEXTCivly’s normalized vendor name, for matching. Same rule as FORECASTS.NORM_INCUMBENT_NAME.
RATE_IDNUMBERCALC+’s id for the rate.
SCHEDULETEXTGSA schedule. MAS (Multiple Award Schedule) on every row as of October 5, 2026.
SECOND_YEAR_PRICENUMBERCeiling rate for the year after next. Empty when none is published.
SECURITY_CLEARANCEBOOLEANWhether the labor category requires a security clearance.
SINTEXTSpecial Item Number: the part of the schedule the rate is offered under.
SUBCATEGORYTEXTSchedule subcategory, as published.
VENDOR_NAMETEXTContractor name, as published.
WORKSITETEXTWhere the work is done, in the vendor’s wording (the contractor’s site, the customer’s, or both).
SOURCE_URLTEXTThe CALC+ address the rates were read from.
SOURCE_SHA256TEXTChecksum of the file read.
SOURCE_RELEASE_DATEDATEDate of the read.
IMPORTED_ATTIMESTAMP_NTZWhen Civly imported the row.
Matching

Joining the tables

The two tables share no key. NORM_INCUMBENT_NAME in FORECASTS and NORM_VENDOR_NAME in LABOR_RATES are normalized the same way, so a forecast’s incumbent can be matched to that company’s ceiling rates. A forecast that lists several incumbents joins them as a; b, and those rows match only after you split the value.

Getting started

Sample queries

After installing, set your worksheet’s database selector to the installed database and these run as written.

-- Forecasts listed now with an award planned in the next 12 months, largest bands first
SELECT agency, title, naics_code, set_aside, estimated_value_range, incumbent_name,
       planned_award_window_start, planned_award_window_end
FROM FEDERAL_BUYING_SIGNALS.FORECASTS
WHERE listed_in_latest_feed
  AND planned_award_window_start <= DATEADD(month, 12, CURRENT_DATE)
  AND planned_award_window_end >= CURRENT_DATE
ORDER BY estimated_value_min_usd DESC NULLS LAST
LIMIT 50;

-- Recompetes listed now, by industry code
SELECT naics_code, naics_description, COUNT(*) AS recompetes
FROM FEDERAL_BUYING_SIGNALS.FORECASTS
WHERE listed_in_latest_feed AND requirement_type = 'recompete'
GROUP BY naics_code, naics_description
ORDER BY recompetes DESC
LIMIT 20;

-- Forecasts that left the feeds in the last 30 days
SELECT source, agency, title, last_seen_date, solicitation_url
FROM FEDERAL_BUYING_SIGNALS.FORECASTS
WHERE NOT listed_in_latest_feed AND last_seen_date >= DATEADD(day, -30, CURRENT_DATE)
ORDER BY last_seen_date DESC;

-- Ceiling rates for one kind of job, by business size
SELECT business_size, COUNT(*) AS rates,
       MEDIAN(current_price) AS median_rate,
       APPROX_PERCENTILE(current_price, 0.9) AS rate_90th_percentile
FROM FEDERAL_BUYING_SIGNALS.LABOR_RATES
WHERE category ILIKE '%facilities%' AND labor_category ILIKE '%project manager%'
GROUP BY business_size;

-- Recompetes whose incumbent also holds GSA schedule rates
SELECT f.agency, f.title, f.incumbent_name, f.planned_award_window_start,
       COUNT(r.rate_id) AS incumbent_rates, MEDIAN(r.current_price) AS median_ceiling_rate
FROM FEDERAL_BUYING_SIGNALS.FORECASTS f
JOIN FEDERAL_BUYING_SIGNALS.LABOR_RATES r ON r.norm_vendor_name = f.norm_incumbent_name
WHERE f.listed_in_latest_feed AND f.requirement_type = 'recompete'
GROUP BY f.agency, f.title, f.incumbent_name, f.planned_award_window_start
ORDER BY incumbent_rates DESC
LIMIT 25;
Provenance

Sourcing and attribution

Sources: the DHS Acquisition Planning Forecast System (apfs-cloud.dhs.gov), the GSA Acquisition Gateway forecast tool (acquisitiongateway.gov/forecast) and GSA’s CALC+ ceiling rates (buy.gsa.gov/pricing). All three are U.S. government works, read from their public pages without signing in. Other agencies publish forecasts only on their own sites or in spreadsheets, and those are not included.

No named agency contacts. The contact and small-business contact names, email addresses and phone numbers the agencies publish are not loaded. Email addresses typed into descriptions, notes and incumbent names are replaced with [email removed].

Civly’s own columns: REQUIREMENT_TYPE, ESTIMATED_VALUE_MIN_USD, ESTIMATED_VALUE_MAX_USD, PLANNED_AWARD_WINDOW_START, PLANNED_AWARD_WINDOW_END, NORM_INCUMBENT_NAME, NORM_VENDOR_NAME, FIRST_SEEN_DATE, LAST_SEEN_DATE and LISTED_IN_LATEST_FEED. Everything else is as the agencies publish it. This product is not endorsed by DHS, GSA or any government agency.

Permitted use: not for employment, tenant, credit, insurance or licensing decisions about a person.

For coverage or access questions: matthew@civly.ai