Rillor
Full research reportMethods note
Tracking SAM.gov notices, amendments and attachments
The SAM.gov Opportunities API returns only the latest active version of a notice. Keeping amendments and attachments takes version capture, document text extraction and OCR checks.
Public procurement recordsrillor.com/insights/tracking-sam-gov-notices-and-attachmentsrillor.com
Summary
A dataset of SAM.gov contract notices keeps their history only when it captures each version and each attached file as it appears, because the public API returns the current version alone [1].
- The SAM.gov Opportunities API, which the General Services Administration (GSA) documents as the Get Opportunities Public API, "only provides the latest active version of the opportunity" [1]. Its documentation says active notices refresh daily and archived ones weekly [1].
- Every Opportunities API search needs a posted-date range of one year or less and returns up to 1,000 records a page [1]. The API limits daily requests by role with no figures given, while the sibling Contract Awards API lists 10 to 10,000 a day by account type [1, 2].
- Each revision, cancellation or archiving of a SAM.gov notice gets a new opportunity ID, and revisions carry the first version's ID as their parent [3]. The public API's documented response has no field for that parent link (derived) [1].
- On one notice revised on 6 November 2026, SAM.gov's full CSV file listed the first version and the revision as two unlinked rows, each with its own posting date, and the replaced spreadsheet stayed on the notice's attachment list with a deletion date [4, 5].
- The Opportunities API returns attachments as download links and the description as a link that needs an API key [1]. Files under 250 MB can be PDF, Office, image, video or zip files, and each can be marked controlled or deleted from every version [3].
- PDF records the positions of characters, so extraction tools rebuild words, reading order and tables [6, 7]. In one study of historical newspapers, person-name recognition fell from 0.87 to 0.63 average F-score between the top and bottom of four optical character recognition (OCR) quality bands [8].
- Notices link to awards through the solicitation number, which the Contract Awards API and USAspending also carry, and the Federal Acquisition Regulation requires award notices for only some awards [1, 2, 9, 10].
Background
The Federal Acquisition Regulation (FAR) defines the governmentwide point of entry (GPE) as "the single point where Government business opportunities greater than $25,000, including synopses of proposed contract actions, solicitations, and associated information, can be accessed electronically by the public", located at sam.gov [11]. Proposed contract actions expected to exceed $25,000 are announced there by synopsis [12].
FAR subpart 5.2 sets the timing. "The publication date is the date the notice appears on the GPE", and a notice must be published at least 15 days before a solicitation is issued, with a shorter period or a combined synopsis and solicitation allowed for commercial purchases [13]. Above the simplified acquisition threshold, $350,000 outside contingency and emergency cases [11], noncommercial purchases allow at least 30 days to respond, and research and development at least 45 [13]. Section 5.207(a) lists 18 data elements for a synopsis, from the action code and date to the place of performance and set-aside status [13]. Special notices cover matters such as business fairs, long-range procurement estimates, conferences and draft solicitations [13].
The documents follow the notice. FAR 5.102 requires solicitations synopsized through the GPE to be made available there, "including specifications, technical data, and other pertinent information determined necessary by the contracting officer" [14]. Information that needs controlled access goes through "the enhanced controls of the GPE", and a file whose size or format makes the GPE impractical can go by other electronic means or on paper [14]. FAR 5.301 requires award synopses above $25,000 for awards under trade agreements or likely to produce subcontracts [10], and FAR 6.305 has justifications posted at the GPE, usually within 14 days after contract award, for at least 30 days [15].
Two texts describe these notices in November 2026 [13, 17]. The codified FAR, at FAC 2026-01 effective 13 March 2026, holds subpart 5.2 [13]. The Revolutionary FAR Overhaul's Part 5 deviation text was issued on 8 August 2025 and updated on 16 March 2026, and its guidance page lists 33 agencies under Agency Deviations (count derived) [16]. It defines a notice as "a description of a business opportunity, contract action, or other information posted to the GPE" [17]. This note describes the records under both texts and does not say which governs a given notice.
For a dataset builder, these rules explain why a notice changes after it is first posted, and why its files carry much of its content.
Method
What was examined. The public record of a contract notice from posting to archive: types and fields, how revisions, amendments, cancellations and archiving change it, what GSA's public API and bulk files return, how attachments are posted and organized, how text comes out of mixed files and how notices link to awards.
Sources. Thirty-four sources, opened on 8 November 2026, with the archive listing opened again on 10 November 2026: FAR text on Acquisition.gov, GSA's documentation for three SAM.gov APIs, SAM.gov's Data Services listings and files, one notice's history and attachment list on its SAM.gov page, USAspending's data dictionary, seven research papers and one project's documentation on text extraction and OCR, and a paper on SQL:2011, a federal standard and a W3C recommendation on record design.
How. Rules were read first, then GSA's documentation, then the files, then the research. Where GSA's pages disagree, each statement is reported as written. The full CSV was checked by its header and size, and searched in full for the worked example's two opportunity IDs. The small yearly archive files were read in full, then deleted. No API key was used and no account was created, so statements about API responses rest on GSA's documentation and examples. Figures marked "derived" are counts or arithmetic on a source's own data. Contact names and emails in the files are left out.
Findings
1. SAM.gov notice types and what each record holds
The public API filters notices by a type code, ptype, with nine current codes and two retired ones (count derived) [1]. The table adds the labels used by GSA's Opportunity Management API, the posting API that federal users publish notices through [3]:
| Code | Label on the public API page | Label in the posting API, where it differs |
|---|---|---|
| p | Pre solicitation | Presolicitation |
| o | Solicitation | |
| k | Combined Synopsis/Solicitation | |
| r | Sources Sought | |
| s | Special Notice | |
| a | Award Notice | |
| u | Justification (J&A) | Justification and Authorization |
| g | Sale of Surplus Property | |
| i | Intent to Bundle Requirements (DoD-Funded) | Consolidate/(Substantially) Bundle |
| f | Foreign Government Standard, retired | Not listed |
| l | Fair Opportunity / Limited Sources, retired, u used instead | Not listed |
The posting API changed the label of code i in its alpha environment on 28 November 2022 and in production on 3 March 2023 [3]. On 8 November 2026 the public API page still showed the old label [1]. Storing the code beside the label keeps both readings comparable.
The response keeps two types: type, the "Opportunity current type", and baseType, the "Opportunity original type" [1]. The documentation's first example is an award notice whose base type is a combined synopsis/solicitation [1]. A count by current type alone therefore moves records between types as they age (derived).
For commercial purchases the notice can be the whole document. FAR 12.603 "combines the synopsis required by 5.203 and the issuance of the solicitation into a single document", and its amendments are publicized "in the same manner as the initial synopsis and solicitation" [18]. The description text of a combined synopsis/solicitation needs the same capture and versioning as an attached file.
The public API returns the solicitation number, the agency path as name and code, the NAICS code ("maximum of 6 digits"), the classification code, the posted date and archive fields [1]. Award notices add the award number, amount, date and awardee, with a ueiSAM field described as "Unique Entity Identifier SAM - Allow 12 digit value, alphanumeric" [1].
The bulk copy has another shape. SAM.gov's full file, ContractOpportunitiesFullCSV.csv, had 47 columns and 219,941,866 bytes, about 220 MB, last modified at 04:30:20 GMT on 7 November 2026 [4]. Its Description column holds the notice text, where the API returns a link [1, 4]. No column holds attachment links or an earlier version's ID (derived from the header) [4].
2. How a notice changes: revisions, amendments, cancellation and archiving
Versions in the posting system. The Opportunity Management API needs a federal system account with read and write permissions in the Contract Opportunity domain [3], so it shows how records are built and is closed to other readers. Its revise call creates "a draft version for a Published Opportunity" [3]. Its history call returns, for each version, an index ("Version number of revision"), a system-generated opportunityId, a parentOpportunityId, a latest flag, cancel and archive flags, an action type and a revision reason [3]. In the page's example, one solicitation number has five versions, each with its own opportunity ID [3]. Versions 2 to 5 carry the first version's ID as their parent, and only version 5 is marked latest [3].
Cancellation and archiving. Cancel, uncancel, archive and unarchive calls each return a new opportunity ID [3]. Archiving follows one of three archive types, auto15, auto30 or autocustom, and autocustom needs an archive date in the future [3]. The public API reports archiveType, archiveDate and an active flag, Yes for active and No for archived [1].
The rules that create changes. FAR 15.206 requires an amendment "When, either before or after receipt of proposals, the Government changes its requirements or terms and conditions" [19]. An amendment states, among other items, the solicitation number and date, the amendment number and date, the number of pages, a description of the change and any revised closing date [19]. In sealed bidding, amendments use Standard Form 30 [20]. A change "so substantial as to exceed what prospective offerors reasonably could have anticipated" leads the contracting officer to "cancel the original solicitation and issue a new one, regardless of the stage of the acquisition" [19]. Cancellation notices are optional: contracting officers "may publish notices of solicitation cancellations (or indefinite suspensions)" in the GPE [13].
These rules give a dataset three cases. An amendment's number, date and new closing date are fields inside the amendment document as well as on the notice [19]. A cancel-and-reissue starts a new solicitation, so a chain built on one solicitation number breaks there (derived from [19]). A cancelled purchase may leave no cancellation notice, so a notice that stops changing shows nothing about what came next (derived from [13]).
One notice, two versions. The history and attachment list on the SAM.gov page of one special notice show the pattern [5]:
| Version | Opportunity ID | Parent | Title | Posted (UTC) | Request type |
|---|---|---|---|---|---|
| 1 | 7dd0db60... | None | NSWC PHD SAP Acquisition Forecast | 13 February 2026, 17:33:26 | submit |
2, marked latest |
e267656b... | 7dd0db60... | NSWC PHD SAP FY27 Acquisition Forecast | 6 November 2026, 14:05:39 | modify |
Source: [5].
Neither version has a solicitation number [5]. Version 2 lists a new spreadsheet, "FY27 Projected SAP Forecast.xlsx" (60,905 bytes, posted 6 November 2026), and the old one, "NSWC PHD SAP FY26 Forecast.xlsx" (75,594 bytes, posted 13 February 2026), flagged deleted at the revision's posting time [5]. The full CSV carries the revision under the new ID with the revision's date, and the first version as a separate row under 7dd0db60... with its own date, "2026-02-13 12:33:26", both with an empty solicitation number [4, 5]. The revision's posted time reads "2026-11-06 09:05:39". Neither row's time states a time zone, and each sits five hours from the page's UTC time (derived) [4, 5].
A capture that read only the CSV would see two unrelated active notices, one posted 13 February and one posted 6 November, and no spreadsheet, since the file has no attachment column. Only the parent link on the notice page ties them together, and only the attachment list shows that the February file was deleted (derived) [4, 5]. This is one example and gives no rate.
3. What the SAM.gov Opportunities API returns, and its rate limits
Scope. GSA's overview states: "This API only provides the latest active version of the opportunity. To view all version of the opportunity, please visit Data Services Section of SAM.gov." (sic) It adds that active notices are updated daily and archived notices weekly [1].
Paging and dates. The production endpoint in Getting Started is https://api.sam.gov/opportunities/v2/search [1]. The request table makes postedFrom and postedTo mandatory, with the note "Date range between Posted Date From and To is 1 year" [1]. limit sets the records per page, with "Max Value = 1000" and a default of 1, and offset is the page index from 0 [1]. A back capture of ten years therefore takes at least ten date windows, and a window of 100,000 records at least 100 requests (derived) [1].
Keys and SAM.gov API rate limits. A key is required, and "Request per day are limited based on the federal or non-federal or general roles" [1]. The page gives no figures. The sibling Contract Awards API publishes its own: 10 requests a day for a non-federal user with no role, 1,000 for a non-federal user with a role, a federal user or a non-federal system account, and 10,000 for a federal system account [2]. Those figures are that API's own. The two pages also describe key retrieval differently, with the account password on one and an emailed one-time password on the other [1, 2].
Fields that point elsewhere. The description field is "A link to an opportunity description", and "To download the description, user should append the public API Key" [1]. resourceLinks is an array of strings, each a "Direct URL to download attachments in the opportunity" [1]. uiLink needs a contracting officer or contracting specialist role [1]. The response table holds no parent or earlier-version identifier (derived) [1]. Capturing one notice in full takes the search result, a description download and one download per attachment link (derived).
Where the documentation disagrees. Viewed on 8 November 2026, the page gives [1]:
| Topic | One statement | Another statement |
|---|---|---|
| Production URL | /opportunities/v2/search in Getting Started |
/prod/opportunities/v2/search in Example 1, /v1/search in the OpenAPI text |
| Required parameters | Request table: dates Yes, limit and offset No |
OpenAPI text: limit and offset required, dates "Required when providing limit" |
status filter |
Request table: labelled as forthcoming | Change log: added in version 1.91, 25 October 2020 |
| Site name | Example uiLink on beta.sam.gov |
Change log of May 2021 renames "Beta.SAM" to "SAM" |
Source: [1].
The change log runs from version 0.1 on 20 May 2019 to version 1.97 on 11 June 2021 [1]. A client written against this page needs tests for both URL forms and both parameter rules (derived).
Bulk files. The Data Services folder for Contract Opportunities holds Archived Data, Buy American Act, FBORecovery, FBORecoveryAwards, daily and datagov [21]. The datagov folder, described as holding "all public Contract Opportunity data collated nightly as a snapshop in time" (sic), lists the full CSV and a historical subfolder with an older FBOFullXML.xml dated 19 May 2020 [21]. No file in the listing is described as a version history (derived) [21].
The Archived Data folder holds yearly files from FY1969 to FY2030, with gaps. On 8 November every file was dated 1 November 2026, and on 10 November every file was dated 8 November 2026. Both dates are Sundays, which fits the weekly archive refresh (derived) [1, 22, 34]. The FY2026 file was 1,058,977,826 bytes, about 1.06 GB, on 10 November [34]. The small files show odd dates. FY1970 has three rows posted on 31 December 1969, and FY2030 one presolicitation posted on 20 December 2029 and archived on 5 June 2010 [22]. A capture keyed only to posted date would drop or misfile such records (derived).
4. Attachments and how solicitation documents are organized
Files, links and access. A notice's resources are files or links to external addresses [3]. A file can be public or private with explicit access, and the posting API labels its controlled example "Controlled Unclassified (Only applicable to files that are not published)" [3]. Downloading a secure attachment needs a draft-attachment permission [3]. The synopsis elements include how to obtain a solicitation that is not on the GPE [13].
Types and sizes. The posting system accepts .bmp, .gif, .jpeg, .jpg, .tex, .xls, .xlsx, .doc, .docx, .odt, .txt, .pdf, .png, .pptx, .ppt, .rtf, .avi, .mov, .mpg, .mpeg, .mp4, .wmv, .flv, .f4v and .zip files [3]. A file must be "greater than zero bytes and less than 250 MB", and publishing fails for encrypted, infected or unsupported files [3].
Deletion across versions. The deleteAll flag "Should be true if deleting resource from all versions of a notice" [3]. The posting API's attachment record carries the name, posted date, access level, export control flag, MIME type, size, deleted flag and deletion date [3]. The public API documents the links [1]. A dataset that wants a file after its deletion has to have stored it while it was listed (derived).
Document structure. FAR 15.204-1 has contracting officers prepare solicitations in the uniform contract format of Table 15-1 [23]:
| Part | Sections | Contents |
|---|---|---|
| I, The Schedule | A to H | Solicitation form, supplies or services and prices, statement of work, packaging, inspection, deliveries, administration data, special requirements |
| II, Contract Clauses | I | Clauses |
| III, List of Documents, Exhibits, and Other Attachments | J | List of attachments |
| IV, Representations and Instructions | K to M | Representations and certifications, instructions to offerors, evaluation factors for award |
Source: [23].
Section J lists "the title, date, and number of pages for each attached document, exhibit, and other attachment" [24], a checklist for the files captured (derived). Part IV is not physically included in the resulting contract [23], so a solicitation's files and its award's files differ (derived). Commercial solicitations follow Standard Form 1449, its continuation, clauses, "Any contract documents, exhibits or attachments" and solicitation provisions [25]. A section label from these formats gives each page of extracted text a place in its document (derived).
5. Getting text out of mixed files: layout, tables and OCR
What a PDF holds. "PDF is a layout-based format which specifies the fonts and positions of the individual characters rather than the semantic units of the text (e.g., words or paragraphs) and their role in the document" [6]. Bast and Korzen evaluated 14 tools on 12,098 arXiv articles and found their own method "significantly outperforms all other tools, but is still not perfect" [6].
A conversion pipeline. In the Docling technical report, "Each document is first parsed by a PDF backend, which retrieves the programmatic text tokens, consisting of string content and its coordinates on the page, and also renders a bitmap image of each page", followed by layout analysis and table structure recognition [7]. OCR is optional, "to cover scanned PDFs or content in bitmaps images embedded on a page", and the OCR library it used "runs fairly slow on CPU (upwards of 30 seconds per page)" [7]. At that rate a 300-page scanned file takes at least 2.5 hours on a CPU (derived) [7]. With OCR off, on 225 pages and four threads, its native PDF backend converted 1.27 pages a second on a 16-core laptop chip and 0.60 on a server processor, and the pypdfium backend 2.18 and 0.94 [7].
Formats. The project's documentation lists PDF, DOCX, XLSX, PPTX, ODT, HTML, CSV and common image formats as inputs, and legacy DOC, XLS, PPT and RTF files only with LibreOffice installed [26]. The posting system accepts all four legacy types, plus video files, which Docling reads only as transcribed audio with extra packages and only in .mp4, .avi and .mov form, and zip files, which it does not list [3, 26]. A pipeline for notice attachments therefore needs an office converter, an archive step and a record of each file it cannot read (derived).
Layout and tables. DocLayNet's authors found that earlier layout datasets "severely lack in layout variability since they are sourced from scientific article repositories", and that accuracy "drops significantly" on more diverse layouts [27]. Their dataset has 80,863 manually annotated pages, and their baseline models "fall approximately 10% behind the inter-annotator agreement" [27]. TableFormer reports its table structure score (TEDS) rising "from 91% to 98.5% on simple tables and from 88.7% to 95% on complex tables" [28]. OmniDocBench, with "981 PDF pages across 9 distinct types", found "a clear drop in accuracy on multi-column and complex layouts" across all models, with pipeline tools doing well on academic papers and financial reports [29].
OCR errors carry forward. Van Strien and colleagues compared OCR text of 30,509 historical newspaper articles with human-corrected versions, in four quality bands [8]. They report "a consistent impact resulting from OCR errors on our downstream tasks with some tasks more irredeemably harmed by OCR errors" [8].
| Task (2020) | Band 1, similarity above 0.9 | Band 4, similarity 0.7 or below |
|---|---|---|
| Person entities, average F-score | 0.87 | 0.63 |
| Geo-political entities, average F-score | 0.76 | 0.54 |
| Dependency parsing, neighbouring tokens | 0.82 | 0.57 |
| Dependency parsing, tokens more than five apart | 0.57 | 0.09 |
Source: [8].
Hamdi and colleagues write that "OCR errors still considerably impact document access" despite better engines [30]. Each page record therefore needs to say how its text was made, so later steps can treat OCR text apart (derived).
6. Linking notices to awards
Fields on both sides. An award notice carries an award number, amount, date and awardee, with the awardee's ueiSAM [1], and the full CSV has AwardNumber, AwardDate, Award$ and Awardee columns [4]. The Contract Awards API accepts a solicitationID filter and returns coreData.solicitationId [2]. USAspending defines the Solicitation Identifier as the "Identifier used to link transactions in FPDS to solicitation information", in its prime award and transaction files as solicitation_identifier [9]. The solicitation number is the shared key, and the award number and UEI field can confirm a match (derived). Matching awardees across names and identifiers is covered in how entity resolution matches records.
Coverage differs. FAR 5.301 requires award synopses only for awards over $25,000 under trade agreements or likely to produce subcontracts, and for some orders above the simplified acquisition threshold, and excludes other orders under subparts 16.5 and 8.4 [10]. FAR 5.202 lists 15 exceptions to the presolicitation synopsis, 14 in paragraph (a) and an agency head's written determination in paragraph (b) (count derived) [13]. Awards outside those rules need no award notice, and some notices, like the special notice in Finding 2, have no solicitation number [5, 10].
Changes on the award side. The Contract Awards API carries modification numbers and reasons, returns contracts deleted within the last six months and shows awards funded and made by the Department of Defense (DoD) once the date signed is at least 90 days past [2]. A notice-to-award link therefore needs the award's version as well as the notice's (derived).
7. A record design that keeps every version
Two times per version. In SQL:2011, system-versioned tables "are intended for meeting the requirements of applications that must maintain an accurate history of data changes either for business reasons, legal reasons, or both", and bitemporal tables keep both the period a fact held in the real world and the period it was recorded [31]. A notice version has the same two times: its posted date, set by the agency, and its capture time, set by the dataset (derived from [31]).
Version chain. Each version is keyed by its own opportunity ID, linked through the parent ID where the source shows it and through the solicitation number where it does not, with a cancel-and-reissue recorded as a break [3, 19]. Cancelled and archived states are versions too, since each gets a new ID [3].
Files by digest. FIPS 180-4 specifies hash algorithms whose digests "are used to detect whether messages have been changed since the digests were generated" [32]. Storing each attachment under its digest makes a re-posted file with the same name and new bytes a new document, and stores an unchanged file shared by several versions once (derived). The deleted flag and deletion date stay on the link between file and version [3, 5].
Text as a derived record. In the W3C PROV data model, "A derivation is a transformation of an entity into another, an update of an entity resulting in a new one, or the construction of a new entity based on a pre-existing entity" [33]. Page text is derived from a file by an extraction activity, so each page record keeps the file digest, the page number and the method, text layer or OCR with its version (derived from [33]).
Completeness. Section J's titles, dates and page counts are a check on the files captured [24]. Files behind enhanced controls, or sent outside the GPE, are recorded as listed and not captured [3, 14].
| Record | Key | Fields kept | Basis |
|---|---|---|---|
| Notice version | Opportunity ID | Parent ID, solicitation number, type, base type, posted date, capture time, archive type and date | [1, 3, 31] |
| File | Digest | Name, size, MIME type, access level | [3, 32] |
| File on a version | Opportunity ID and digest | Posted date, deleted flag, deletion date | [3, 5] |
| Page text | Digest and page number | Method, tool version, contract format section | [7, 23, 33] |
| Award link | Solicitation number | Award number, awardee UEI field, match date | [1, 2, 9] |
Implications
For data engineers. Capture on the documented schedule, daily for active notices and weekly for archived ones, in posted-date windows of one year or less [1]. Store every opportunity ID and its parent, and fetch each description and attachment when the notice is captured, because a later revision can delete a file from every version [1, 3, 5]. Test the client against both documented URL forms and parameter rules, and pace requests from the limits a key receives [1, 2].
For document intelligence teams. Convert legacy Office files and unpack zip files before extraction [3, 26]. Keep per-page text with its method and flag OCR pages for later steps, since entity and parsing scores fall with OCR quality [7, 8]. Score tables on structure, simple and complex apart [28]. Label pages with contract format sections and check the files against Section J [23, 24].
For analysts. Count notices by base type as well as current type [1]. Read each CSV row's posted date as that version's own, with no stated time zone, and check it against the notice's history before reading it as a first posting: in the one notice checked, the first version sat in the same file as a separate active row with no link to its revision [4, 5]. Expect yearly archive files keyed to posted date to hold records with dates out of order [22], and awards that no rule required a notice for [10].
Rillor's public procurement records hold notices, awards, suppliers, line items and attached documents linked across U.S. federal sources, with per-page text extraction including OCR. Each change to a record is kept as a new version, so earlier versions of a notice or award stay readable next to the current one.
Limits of this analysis
- No API key was used and no account was created. Statements about API responses rest on GSA's documentation and examples [1, 2, 3].
- The Data Services listing shows no file described as a version history [21]. The full CSV of 7 November 2026 holds the worked example's first version as a separate active row [4]. Whether it holds earlier versions of other notices, and whether the yearly archives do, was not checked.
- The worked example is one special notice [5]. It shows how versions and files can relate and gives no rate.
- The posting API page names the archive types auto15 and auto30 without their day counts [3].
- No source opened measures the share of notices with attachments, scanned or controlled files, amendments per solicitation, cancelled notices, or award records with a solicitation identifier.
- The extraction and OCR studies use scientific articles, historical newspapers and mixed benchmark pages [6, 8, 27, 29]. None measures procurement files, and no tool is ranked here.
- Two FAR texts apply in November 2026, and this note does not say which governs a given notice [13, 16, 17].
- GSA's pages can change after the viewing date, and the Opportunities API change log ends on 11 June 2021 [1]. The notice history was read from data the public notice page loads, which GSA does not document as an API [5].
- This note describes public records as data. It is not legal advice.
Sources
- SAM.gov Get Opportunities Public API. U.S. General Services Administration, open.gsa.gov, change log through 11 June 2021, viewed 8 November 2026. https://open.gsa.gov/api/get-opportunities-public-api/
- SAM.gov Contract Awards API. U.S. General Services Administration, open.gsa.gov, change log through 25 August 2026, viewed 8 November 2026. https://open.gsa.gov/api/contract-awards/
- SAM.gov Opportunity Management API. U.S. General Services Administration, open.gsa.gov, change log through 6 March 2025, viewed 8 November 2026. https://open.gsa.gov/api/opportunities-api/
- ContractOpportunitiesFullCSV.csv, header, file size and the worked example's rows. U.S. General Services Administration, SAM.gov Data Services, last modified 7 November 2026, viewed 8 November 2026. https://s3.amazonaws.com/falextracts/Contract%20Opportunities/datagov/ContractOpportunitiesFullCSV.csv
- Special notice e267656b93754586b76514d1d44c1429, history and attachment list. U.S. General Services Administration, SAM.gov, revised 6 November 2026, viewed 8 November 2026. https://sam.gov/opp/e267656b93754586b76514d1d44c1429/view
- A Benchmark and Evaluation for Text Extraction from PDF. Hannah Bast and Claudius Korzen, JCDL 2017, ACM/IEEE Joint Conference on Digital Libraries, June 2017, viewed 8 November 2026. https://ad-publications.cs.uni-freiburg.de/benchmark.pdf
- Docling Technical Report. Christoph Auer, Maksym Lysak, Ahmed Nassar, Michele Dolfi and others, arXiv 2408.09869, version 5, 9 December 2024, viewed 8 November 2026. https://arxiv.org/abs/2408.09869
- Assessing the Impact of OCR Quality on Downstream NLP Tasks. Daniel van Strien, Kaspar Beelen, Mariona Coll Ardanuy, Kasra Hosseini, Barbara McGillivray and Giovanni Colavizza, ICAART 2020, SciTePress, pages 484-496, viewed 8 November 2026. https://www.scitepress.org/Link.aspx?doi=10.5220/0009169004840496
- USAspending Data Dictionary, Solicitation Identifier. USAspending.gov, U.S. Department of the Treasury, Bureau of the Fiscal Service, data dictionary API, viewed 8 November 2026. https://api.usaspending.gov/api/v2/references/data_dictionary/
- FAR 5.301, General, Synopses of Contract Awards (FAC 2026-01, effective 13 March 2026). Acquisition.gov, General Services Administration, viewed 8 November 2026. https://www.acquisition.gov/far/5.301
- FAR 2.101, Definitions (FAC 2026-01, effective 13 March 2026). Acquisition.gov, General Services Administration, viewed 8 November 2026. https://www.acquisition.gov/far/2.101
- FAR 5.101, Methods of Disseminating Information (FAC 2026-01, effective 13 March 2026). Acquisition.gov, General Services Administration, viewed 8 November 2026. https://www.acquisition.gov/far/5.101
- FAR Subpart 5.2, Synopses of Proposed Contract Actions (FAC 2026-01, effective 13 March 2026). Acquisition.gov, General Services Administration, viewed 8 November 2026. https://www.acquisition.gov/far/subpart-5.2
- FAR 5.102, Availability of Solicitations (FAC 2026-01, effective 13 March 2026). Acquisition.gov, General Services Administration, viewed 8 November 2026. https://www.acquisition.gov/far/5.102
- FAR 6.305, Availability of the Justification (FAC 2026-01, effective 13 March 2026). Acquisition.gov, General Services Administration, viewed 8 November 2026. https://www.acquisition.gov/far/6.305
- FAR Overhaul, FAR Part Deviation Guidance (Part 5 issued 8 August 2025, updated 16 March 2026). Acquisition.gov, General Services Administration, viewed 8 November 2026. https://www.acquisition.gov/far-overhaul/far-part-deviation-guide
- FAR Overhaul, Part 5 (Revolutionary FAR Overhaul deviation text). Acquisition.gov, General Services Administration, viewed 8 November 2026. https://www.acquisition.gov/far-overhaul/far-part-deviation-guide/far-overhaul-part-5
- FAR 12.603, Streamlined Solicitation for Commercial Products or Commercial Services (FAC 2026-01, effective 13 March 2026). Acquisition.gov, General Services Administration, viewed 8 November 2026. https://www.acquisition.gov/far/12.603
- FAR 15.206, Amending the Solicitation (FAC 2026-01, effective 13 March 2026). Acquisition.gov, General Services Administration, viewed 8 November 2026. https://www.acquisition.gov/far/15.206
- FAR 14.208, Amendment of Invitation for Bids (FAC 2026-01, effective 13 March 2026). Acquisition.gov, General Services Administration, viewed 8 November 2026. https://www.acquisition.gov/far/14.208
- Data Services, Contract Opportunities. U.S. General Services Administration, SAM.gov, folder listing, viewed 8 November 2026. https://sam.gov/data-services/Contract%20Opportunities?privacy=Public
- Data Services, Contract Opportunities, Archived Data. U.S. General Services Administration, SAM.gov, files dated 1 November 2026, viewed 8 November 2026. https://sam.gov/data-services/Contract%20Opportunities/Archived%20Data?privacy=Public
- FAR 15.204-1, Uniform Contract Format (FAC 2026-01, effective 13 March 2026). Acquisition.gov, General Services Administration, viewed 8 November 2026. https://www.acquisition.gov/far/15.204-1
- FAR 15.204-4, Part III, List of Documents, Exhibits, and Other Attachments (FAC 2026-01, effective 13 March 2026). Acquisition.gov, General Services Administration, viewed 8 November 2026. https://www.acquisition.gov/far/15.204-4
- FAR 12.303, Contract Format (FAC 2026-01, effective 13 March 2026). Acquisition.gov, General Services Administration, viewed 8 November 2026. https://www.acquisition.gov/far/12.303
- Supported formats, Docling documentation. Docling project, viewed 8 November 2026. https://docling-project.github.io/docling/usage/supported_formats/
- DocLayNet: A Large Human-Annotated Dataset for Document-Layout Analysis. Birgit Pfitzmann, Christoph Auer, Michele Dolfi, Ahmed S. Nassar and Peter Staar, KDD 2022, arXiv 2206.01062, 2 June 2022, viewed 8 November 2026. https://arxiv.org/abs/2206.01062
- TableFormer: Table Structure Understanding with Transformers. Ahmed Nassar, Nikolaos Livathinos, Maksym Lysak and Peter Staar, arXiv 2203.01017, version 2, 11 March 2022, viewed 8 November 2026. https://arxiv.org/abs/2203.01017
- OmniDocBench: Benchmarking Diverse PDF Document Parsing with Comprehensive Annotations. Linke Ouyang, Yuan Qu, Hongbin Zhou, Jiawei Zhu and others, CVPR 2025, arXiv 2412.07626, version 2, 25 March 2025, viewed 8 November 2026. https://arxiv.org/abs/2412.07626
- In-depth analysis of the impact of OCR errors on named entity recognition and linking. Ahmed Hamdi, Elvys Linhares Pontes, Nicolas Sidere, Mickaƫl Coustaty and Antoine Doucet, Natural Language Engineering 29(2), pages 425-448, March 2023, viewed 8 November 2026. https://doi.org/10.1017/s1351324922000110
- Temporal features in SQL:2011. Krishna Kulkarni and Jan-Eike Michels, SIGMOD Record 41(3), pages 34-43, September 2012, viewed 8 November 2026. https://sigmodrecord.org/publications/sigmodRecord/1209/pdfs/07.industry.kulkarni.pdf
- FIPS 180-4, Secure Hash Standard. National Institute of Standards and Technology, August 2015, viewed 8 November 2026. https://csrc.nist.gov/pubs/fips/180-4/upd1/final
- PROV-DM: The PROV Data Model. World Wide Web Consortium, W3C Recommendation, 30 April 2013, viewed 8 November 2026. https://www.w3.org/TR/prov-dm/
- Data Services, Contract Opportunities, Archived Data, second view. U.S. General Services Administration, SAM.gov, files dated 8 November 2026, viewed 10 November 2026. https://sam.gov/data-services/Contract%20Opportunities/Archived%20Data?privacy=Public