xscanTender inspection bureau

How xscan works

Four steps, in order, for every tender. Cheap checks first; the AI court only when the cheap checks find something.

  1. Collect

    Real tenders from official APIs and from any website you paste.

  2. Screen

    Thirteen free rules score each tender from 0 to 1. Below the threshold it looks normal.

  3. Argue

    The prosecutor brings counts with verbatim quotes; the defense answers each one.

  4. Rule and ask

    The court rules count by count, sets a risk level, and the clerk writes to the buyer.

The three agents

Prosecutor
charges: 1–6
  quote     verbatim, original language
  category  one of 11 risk types
  severity  low | medium | high
injection_detected: boolean
Defense
rebuttals: one per charge
  stance    contest | partially_concede | concede
  counter_quote   verbatim, or empty
  would_clear_it  what the buyer could show
Court
rulings: one per charge
  ruling    SUSTAINED | DISMISSED | REFER_FOR_CLARIFICATION
  strength  prosecution 0–1, defense 0–1
risk: LOW | MEDIUM | HIGH | CRITICAL, score 0–1

Every quote is matched against the notice text: VERIFIED, APPROXIMATE or NOT_FOUND. A quote the model made up is struck through and the court gives it no weight.

The screening rules

RuleLooks forHow
short-windowToo little time to bidDays between publication and deadline, against the legal minimum (EU 15, elsewhere 10).
delivery-windowDelivery period too shortA delivery or execution period that is very short for the scope.
brand-lockBrand with no equivalentA named brand or model with no “or equivalent” wording.
restrictive-specProprietary specificationUnusually exact or proprietary technical parameters.
turnover-ratioTurnover far above valueRequired turnover more than twice the contract value.
eligibilityNarrow eligibilityEligibility tied to a manufacturer, a locality, or prior work for this buyer.
penaltiesHeavy penaltiesSevere or uncapped delay penalties.
guaranteeLarge guaranteesBid security or guarantees well above the usual share of value.
amendmentSuspicious amendmentA change that shortens the deadline or adds a new restrictive requirement.
processProcess gapsNo clarification channel, deferred justification, or price-only evaluation.
missing-infoMissing factsValue, deadline or buyer not published.
non-competedNo competitionUS awards made without full and open competition.
injectionText aimed at AIInstructions to automated reviewers inside the notice. Kept as evidence, never obeyed.

Sources

  • TED

    Official EU API. Newest notices first; only the ones not on file are downloaded in full.

  • USAspending

    Official US API. Federal contracts awarded without open competition.

  • SAM.gov

    US tenders. With an API key, or by pasting a link, read in a headless browser.

  • zakup.gov.kz

    Kazakhstan. Read from the portal's own public JSON API: exact official fields.

  • Any website

    Paste a link. Plain pages are read directly, JavaScript pages in headless Chrome; the AI extracts the facts, the tender text stays verbatim.

For developers

GET  /api/v1/tenders                 every tender on file
POST /api/v1/tenders/:id/trials      open a hearing
GET  /api/v1/trials/:id/events       live stages (server-sent events)
POST /api/v1/import/one              { url } or { text }
POST /api/v1/import/listing          { url, max }
POST /api/v1/ingest                  { target, sources }

Models: Meta Muse Spark 1.3 with strict JSON schemas, validated and retried. Tender text is wrapped as untrusted data, so instructions inside a notice are never followed.

What xscan does not do

It never says a buyer is corrupt. It points out warning signs for a person to review, and drafts the question to ask. Every claim it makes can be traced to a quote in the notice.

Watch a hearing