ActorStack.dev

Three deadline fields, because 38.8% of federal deadlines have no time

SAM.gov stamps midnight UTC on deadlines that are date-only. Passing that through as an instant would present a precision that does not exist, so it is null instead.

By Oswaldo Carabano6 min read

Short answer

Measured on 1,566 notices with a deadline, 61.0% carry a real UTC offset, 38.8% state only a date with no time, and 0.2% give a wall-clock time with no zone. SAM.gov stamps midnight UTC on the date-only ones, so `response_due_utc` is deliberately null unless `response_due_precision` is `instant` — a deadline you can convert and a deadline you cannot are different objects and get different fields.

Key points

  • 61.0% `instant`, 38.8% `date_only`, 0.2% `local_naive`, measured on 1,566 notices with a deadline.
  • SAM.gov stamps midnight UTC on date-only deadlines, which looks like a precise instant and is not.
  • `response_due_utc` is null unless the precision is `instant`, so a false conversion cannot leak into a calendar.
  • `response_due_local` is what you display; it preserves what the notice actually said.
  • `response_timezone` is carried separately, so an instant can be rendered in the contracting office's local time.
On this page6 sections

A bid deadline is the one field in this dataset where being wrong has a consequence you cannot recover from. So it gets three fields instead of one, and the reason is that 38.8% of federal deadlines do not contain a time.

The problem with one deadline field

SAM.gov exposes a response date. It looks like a timestamp. Put it in a calendar and you get a precise moment — for the 61.0% of notices where that moment is real, and a fiction for the rest.

The three cases, measured

response_due_precisionShareWhat it means
instant61.0%A real offset. response_due_utc is a true UTC instant you can convert.
date_only38.8%"Due on the 25th", no time. response_due_utc is null.
local_naive0.2%A wall-clock time with no zone. response_due_utc is null.

Measured on 1,566 notices that carried a deadline at all — deadlines are present on 75.2%.

The midnight-UTC trap

Here is the specific failure. For a date-only deadline, SAM.gov stamps midnight UTC. That is a syntactically perfect timestamp, and it is not a deadline — nobody said the bid is due at 00:00 UTC.

Pass it through and two things go wrong. A bidder in Los Angeles sees 5pm the previous day, which is early by up to a day. And nothing looks broken: the field is populated, the type is right, the value is plausible.

The three fields

  • response_due_local — what the notice says, as it says it. This is what you display.
  • response_due_utc — a true UTC instant, and null unless the precision is instant. This is what you schedule against.
  • response_due_precision — which case you are in, so the choice between the first two is made by code rather than by hope.

response_timezone comes along too, so an instant can be rendered in the contracting office's local time rather than the reader's.

What this means for a bid calendar

scheduling only what can be scheduled
-- Real deadlines: safe to convert, safe to alarm on
SELECT notice_id, title, response_due_utc
FROM notices
WHERE response_due_precision = 'instant'
  AND response_due_utc > now();

-- Date-only: show a human the date, do not invent a time
SELECT notice_id, title, response_due_local, response_due_precision
FROM notices
WHERE response_due_precision <> 'instant'
  AND response_due_local IS NOT NULL;

Two queries rather than one, and the second is the one that keeps you honest: a date-only deadline belongs in front of a person who will read “due on the 25th” and act on it, not in an automated countdown.

The general principle

When a source encodes uncertainty as precision, the right response is to add a field rather than to pick a convention. Three fields cost a little storage; picking midnight costs somebody a bid.

The same reasoning produced `budget_type` on Workana and the `*_raw` fields on coches.net: record which case you are in, and keep what the source actually said.

Frequently asked questions

Why is `response_due_utc` sometimes null?
Because 38.8% of SAM.gov deadlines state a date with no time. SAM.gov stamps midnight UTC on those, which would render as a precise instant in any calendar — so the Actor leaves the UTC field null and gives you `response_due_local` plus a precision flag instead.
How do I know whether I can convert a deadline?
Read `response_due_precision`. If it is `instant`, `response_due_utc` is a true UTC instant you can convert and schedule. If it is `date_only` or `local_naive`, use `response_due_local` for display and do not compute against it.
What does `local_naive` mean?
A wall-clock time with no time zone — 0.2% of deadlines. You know the hour but not the offset, so it cannot be converted without an assumption the notice does not support.

Sources

Every URL below was requested and returned a page on the date shown.

  1. Operator claimchecked 19 Aug 2026
    SAM.gov Federal Contract Opportunities & Attachments — Actor README and input schemaActorStack / Apify Store
  2. Operator claimchecked 19 Aug 2026
    Contract OpportunitiesSAM.gov (U.S. General Services Administration)
A desk with stacked legal reference books, loose documents and a newspaper.
SAM.govExplainer

Exclusions and debarment

63% of the federal exclusion list is individuals and only about a fifth of those carry a UEI. A name-matching lookup would manufacture false positives about real people.

6 min
The dome of the United States Capitol against a clear sky.
SAM.govGuide

Opportunity monitoring

A working monitoring pipeline: what to filter, how often to run, which deadline field to schedule against, and where the attachment rate changes your plan.

8 min
The dome of the United States Capitol against a clear sky.
SAM.govGuide

Scrape SAM.gov

A walkthrough of extracting U.S. federal contract notices: which filters actually narrow the index, how to get the solicitation documents, and why there are three deadline fields.

9 min