Skip to main content
WorldMonitor separates open opportunities from historical recent awards. Open opportunities live in the dedicated Global Procurement panel as a forward-looking, seed-backed feed; awards remain sourced from USASpending in the Economic panel. Global Procurement is a Pro feature. The panel shows the standard sign-in or upgrade gate to free users, and the RPC independently enforces an active tier-1 subscription server-side. The browser only requests and retains tender data while Pro access is active; sign-out or downgrade clears both the panel payload and its in-memory response cache. Recent awards remain part of the free Economic panel behavior. Pro users can search titles and descriptions, filter by buyer, two-letter country code, and source, choose a supported sort, and page through the complete result set. The panel never reads Upstash directly: it calls the paginated RPC, which reads the canonical seeded snapshot.

Coverage and freshness

The initial adapters read official public procurement sources: The Railway seeder runs hourly and stores a canonical snapshot at economic:global-tenders:v1. Its TTL is three hours so the prior successful snapshot survives a missed run. If one adapter fails, healthy-source results remain available, that source’s last-good records are retained, and the response reports availability: "partial". If every adapter fails, the previous records remain available with availability: "stale". availability has five meanings:
  • available: all configured adapters succeeded and returned one or more notices.
  • empty: configured adapters succeeded but returned no notices.
  • partial: at least one adapter is unavailable or failed while another succeeded.
  • stale: all current source attempts failed, so retained last-good records are being served.
  • unavailable: no fresh canonical snapshot is available.
Per-source state, record counts, retrieval-attempt time, last-success time, and stale flag are included in the feed response. Every per-source seed key is independently registered in /api/health. Unsupported country filters are never treated as a confirmed zero-result source.

Deployment configuration

Only the U.S. SAM.gov adapter needs a new credential:
  1. Sign in to SAM.gov, open Account Details, and enter your account password to view the API-key controls.
  2. Request a Public API Key. SAM.gov displays the generated key on the Account Details page.
  3. Add it to the Railway service running node scripts/seed-bundle-relay-backup.mjs as SAM_GOV_API_KEY. Do not expose it through a VITE_ variable or commit it to the repository.
The official setup and request-limit details are in the GSA Get Opportunities Public API guide. TED, Contracts Finder, CanadaBuys, GETS, and World Bank do not require API keys. If SAM_GOV_API_KEY is absent, only the SAM source reports unavailable; the other adapters continue normally. Leaving SAM unconfigured is a supported state, not a degradation: /api/health reports that source as NOT_CONFIGURED (green, excluded from problems) rather than as an error, so a deployment that never obtains a GSA key still reports a clean health endpoint. Adding the key flips it to OK on the next seed run with no health-config change.

Australia: AusTender adapter is blocked

An official Australian austender adapter cannot ship safely today, because no permitted machine-readable AusTender interface publishes the closing date that an open-opportunity record requires. Evidence, current as of 2026-07-13:
  • The official AusTender current-ATM RSS feed (https://www.tenders.gov.au/public_data/rss/rss.xml, registered on data.gov.au by the Department of Finance) publishes only a notice title, official link, free-text description, and publish date. It carries no closing date, buyer, or category fields.
  • The official AusTender OCDS API exposes awarded contract notices from 2013 onward, not open Approaches to Market.
  • data.gov.au’s machine-readable open-ATM exports ended in June 2014.
  • Closing dates are published only on per-notice HTML pages; harvesting them would mean scraping the AusTender website, which is not a documented machine-readable reuse interface and is excluded by this feed’s non-goals.
This feed never represents a record without a verifiable future closing date, so Australian coverage remains absent rather than inferred, and New Zealand GETS coverage is not substituted for it. Filtering on country=AU keeps the standard countryCoverage: "unknown" semantics for unobserved countries. If AusTender begins publishing closing dates through a machine-readable channel, the adapter can ship without pipeline changes.

API

GET /api/economic/v1/list-global-tenders is Pro-gated, deliberately paginated, and is not part of the bootstrap payload. It supports country, repeated countries, region, source, status, buyer, published_from, published_to, deadline_from, deadline_to, min_value, max_value, currency, category, query, min_automation_score, page_size, cursor, and sort. Supported sorts are newest, closing_soon, estimated_value, and relevance. page_size is bounded to 100. The response includes applied filters, a cursor, snapshot time, availability, and source-health summaries. Every record contains a stable WorldMonitor ID (source:sourceNoticeId), its official notice URL, source notice ID, typed money fields when supplied, source timestamps, category data, and a provenance-preserving source name. Missing upstream fields remain absent rather than being inferred.

MCP tool

get_procurement_opportunities exposes this same canonical route to authenticated MCP clients; it never reads economic:global-tenders:v1 directly. Its intentional context budget is 10 compact opportunities by default, 25 maximum. It exposes country, repeated countries, source, query, buyer, deadline_from, deadline_to, sort, min_automation_score, page_size, and cursor. The compact projection omits description text, eligibility requirements, and submission URLs while retaining each opportunity’s official URL, source, title, buyer, dates, money, categories, sectors, participationMode, and compact automationFit. It also retains cursor pagination, total, appliedFilters, countryCoverage, availability, snapshot time, and source-health summaries. The 25-record MCP maximum is deliberately tighter than the REST route’s 100-record maximum. The MCP tool is Pro-gated exactly like the HTTP route and is not part of bootstrap. An unfiltered tool call preserves all open opportunities; min_automation_score remains opt-in. See the MCP tool reference for the complete parameter contract.

Technology relevance

automationFit is a transparent keyword-based relevance signal for software, AI, data, cybersecurity, automation, cloud, and related terms. It contains a score, classification version, match reasons, and text evidence. It is not a legal or procurement-eligibility determination: participationMode remains unknown unless an upstream source explicitly supports it. The optional min_automation_score query parameter (an integer from 1–100; larger values are clamped and non-integer values are ignored) returns only opportunities whose automationFit.score meets the threshold. It is disabled by default, so existing callers keep receiving every matching open opportunity, and when active it appears in the response’s appliedFilters. The dedicated panel exposes it as a Technology relevant only checkbox. Both the filter and the per-record match reasons express keyword relevance evidence only — they never assert that an AI system, agent, or vendor is eligible to bid. The dashboard renders official notice links only after URL sanitization and exposes the relevance reason alongside the source-provided opportunity details.