Skip to main content

bid-deadline-check

Read a government solicitation (RFP, RFQ, IFB; PDF or text) and get back:

  • Deadlines with date, time and timezone: questions due, proposal due, site visit, intent to bid, orals
  • Page limits per volume
  • Format rules: font, margins, paper size, spacing, file format
  • Forms and clauses: SF-1449, SF-33, SF-30, FAR 52.xxx, DFARS 252.xxx
  • Sections and volumes referenced (L, M, Volume I/II/III)
  • Every "shall / must" requirement aimed at the offeror
  • A compliance checklist (text, JSON, CSV or Markdown)
  • Warnings for what's missing: no proposal due date, a time with no timezone, no page limits

It is deterministic: regex and rules only. No LLM, no network, nothing leaves your machine.

Quickstart

pip install "git+https://github.com/itcustomsolution/bid-deadline-check#egg=bid-deadline-check[pdf]"
# Not published on PyPI yet; install from GitHub as above.

bid-deadline-check solicitation.pdf
bid-deadline-check solicitation.pdf -f csv > compliance-matrix.csv
bid-deadline-check solicitation.txt -f md
bid-deadline-check solicitation.txt -f json

Example output (from tests/fixtures/rfp_sample.txt, a synthetic RFP):

DEADLINES
  [questions_due] October 20, 2026 2:00 PM Eastern Time  (line 6)
  [proposal_due] November 5, 2026 11:00 AM EDT  (line 7)
  [site_visit] 10/27/2026 10:00 AM local time  (line 8)
PAGE LIMITS
  Volume I Technical: 20 pages  (line 13)
  Volume II Past Performance: 10 pages  (line 14)
...

--strict exits with code 2 when there are warnings, so you can gate a script on it.

Library

from bid_deadline_check import analyze, read_document

report = analyze(read_document("solicitation.pdf"))
for d in report.deadlines:
    print(d.kind, d.date, d.time, d.timezone)
rows = report.checklist()   # list of dicts: id, category, item, line, done

Scope and limits

  • It finds what is written; it does not interpret it. Always read the solicitation and every amendment yourself. This is a checklist aid, not legal or contracting advice.
  • Scanned PDFs without a text layer return no text. Run OCR first.
  • Dates are reported as written; no timezone conversion.
  • Limits: files and stdin over 50 MB are refused; PDFs over 1000 pages, over 5 million extracted characters, or over 60 s of extraction (checked between pages) are refused. PDF parsing relies on pypdf >= 6.19. A single slow page can still exceed the time budget, so only open solicitations from sources you trust.
  • CSV output prefixes cells that start with =, +, -, @, tab or CR with '. This is a common mitigation for formula injection; it is not tested against any particular spreadsheet application.
  • Out of scope: scoring, bid/no-bid, writing proposal content.

Development

python -m venv .venv && . .venv/bin/activate
pip install -e ".[dev]"
pytest

Fixtures are synthetic. Please don't add real solicitations that carry controlled or proprietary markings.

License

MIT © IT Custom Solution

Metadata

Release files for bid-deadline-check 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for bid-deadline-check 0.1.0
File Size Uploaded
bid_deadline_check-0.1.0.tar.gz 12.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for bid-deadline-check 0.1.0
File Interpreter ABI Platform
bid_deadline_check-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 23.1 kB

Release files / bid_deadline_check-0.1.0.tar.gz

Download URL bid_deadline_check-0.1.0.tar.gz
Size 12.5 kB
Tags Source
SHA-256 checksum
How to use checksums
e539e83cddb049e348e8f5387ac17930ee8987167b523ed325c5db9ec495d91b
BLAKE2b-256 checksum
How to use checksums
31a2cc6f828288332ec194d01489ba6052bbfa45082cd1a9399cc2859721a39b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.5

Release files / bid_deadline_check-0.1.0-py3-none-any.whl

Download URL bid_deadline_check-0.1.0-py3-none-any.whl
Size 10.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
7a573d4b778f6c52a893241a8e665bcf882cd078d4830c2ca474d9c83964809d
BLAKE2b-256 checksum
How to use checksums
f68265c0bb597525b4b40f75b43701b7f9eb8e37b1aa9f71b9c28473ae496ce8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.5

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page