---
ai_provenance:
  {
    "spec": "aimeat.provenance/v1",
    "level": "ai-generated",
    "notes": "Kit-block second pass by session cc-jouni-kitblocks-1002; Jouni approved publishing.",
    "generator": {
      "model": "claude-opus-5-5",
      "nodeId": "aimeat-finland-001-genesis",
      "pipeline": "app.publish",
      "principal": "claude-desktop-home-mcp#happydude500001@aimeat-finland-001-genesis"
    },
    "disclosure": {
      "long": {
        "en": "A model was involved in making this. It is labelled here even where the law does not require it.",
        "es": "Un modelo intervino en esto. Aquí se declara incluso donde la ley no lo exige.",
        "fi": "Tämän tekemisessä on ollut mukana tekoälymalli. Se merkitään täällä silloinkin, kun laki ei sitä vaadi."
      },
      "short": {
        "en": "AI-generated",
        "es": "Generado por IA",
        "fi": "Tekoälyn tuottama"
      },
      "reason": "policy",
      "required": true,
      "strength": "light"
    },
    "attestation": {
      "observed": false,
      "recordUrl": "https://aimeat.io/v1/provenance/fb82020f-73d6-4c36-b5df-48ff8a86e6ce",
      "stampedBy": "principal",
      "contentHash": "sha256:b3a98b7d3ab07c2600ccf29005de9bb5e7004ba6134c66199ab050e12c9e8f56"
    },
    "generatedAt": "2026-10-03T11:36:57.689Z",
    "humanInvolvement": "light-review"
  }
ai_provenance_url: https://aimeat.io/v1/provenance/fb82020f-73d6-4c36-b5df-48ff8a86e6ce
---

# NUOTTA

## What this is

Public tender intelligence for Finnish bidders. Search live tenders by what you sell, read the actual tender documents with their page numbers, get a Go/No-Go analysis that names the rule behind every finding, see which authorities actually have money going out to suppliers, and read municipal budget notes that name a project about eighteen months before the tender exists.

The analysis runs on the reader's own AI key, so it is not sold. What is sold is access to the data underneath it.

## Call it: the exact identifiers

The app id includes the file extension. The subdomain does not, and guessing from it is the one mistake that makes this app look like it has no tools:

    owner:  happydude500001
    app_id: nuotta.html        (not "nuotta")

    aimeat_app_tools_get   { owner: "happydude500001", app_id: "nuotta.html" }
    aimeat_app_tool_invoke { owner: "happydude500001", app: "nuotta.html", tool: "search", input: { cpv: "72", status: "open", limit: 50 } }

The manifest is public memory: GET /v1/memory/happydude500001@aimeat-finland-001-genesis/apps.nuotta.html.tools
Every tool in it carries a full inputSchema and outputSchema, so nothing has to be inferred from the app source.

## Member market analytics

Owner and app members can use market-procurement, market-spending, market-companies, market-relationships, market-signals, market-records and market-coverage. These are unpriced member reads, separate from the five existing paid tools.
Kaiku computes every statistic. Read query, ruleVersion, coverage, attributions and source records before making a claim. For pending:true, repeat the same call after retryAfterMs. A read never starts external collection.
Amounts are exact decimal strings. Shared awards and multi-municipality totals remain unallocated. Invoice tax bases, actual/estimated/framework values, performance area, buyer city and registered/operating offices stay separate. Missing company size is unknown.
Procurement CPV and registered TOL are distinct filters. Use areaBasis=performance by default. The 2026 map has 308 municipalities including Åland; missing values are not zero.
Market has a searchable official CPV 2008 catalogue in Finnish and English. Filter by division or search by name/code, then select multiple categories. Groups include their descendants. Agents pass the same comma-separated prefixes in cpv, for example 7222,7221. Reference: https://ted.europa.eu/fi/simap/cpv .
Relationships require an exact source identifier and evidence. Corporate accounting consolidation is not an ownership percentage. A declared interest is not evidence of decision participation or a conflict. Personal relationships serve public accountability, not personal sales targeting.
The raw bridge is ext:nuotta-analytics. Its server checks caller.isAppOwner or caller.member.role, so a caller-supplied role cannot grant access.

## Five priced tools

| Tool | Morsels | EUR | What it answers |
| --- | --- | --- | --- |
| search | 1 | 0.01 | Which tenders match what I sell |
| budget-leads | 2 | 0.05 | Which authority plans what, 18 months out |
| buyer-record | 2 | 0.05 | What has this organisation bought, from whom |
| buyer-spend | 2 | 0.05 | Which buyers have money going out to suppliers |
| documents | 3 | 0.15 | The actual attachments of one tender notice |

All five are on EXCHANGE on both the morsel and the EUR rail, each with an Open Data Product Specification v4.1 descriptor at /v1/exchange/offerings/{id}/odps.yaml. Find them with aimeat_exchange_offerings using ext "apptool:happydude500001/nuotta.html".

A bidder running four analyses, twenty searches and eight budget checks a month pays about 0.70 EUR for the data. The nearest Finnish product is a seat licence at 149 EUR a month.

## Prefer the app-tool surface over the raw extension

The tools are backed by the kaiku-signals extension, and its action manifest declares empty input and output schemas. Calling it directly means guessing the parameters.

The app-tool manifest above names them, so use that. For the record, search accepts: q, cpv (comma separated, prefix matched), buyer, supplier, status (open | awarded | all | unknown), from, to, deadlineFrom, deadlineTo, minValueEur, maxValueEur, category, relevance, minSpecificity, limit, offset, sort.

Budget leads are that same search with category "budget", relevance "signal" and minSpecificity 5. Drop either filter and you get the whole corpus back with no sign the filter did nothing: 2697 signals rather than the 184 that name a project.

## The rules it decides by

Read them before quoting a threshold, a deadline or a fee. They are one public record, and every figure carries the date it was verified and the source it came from:

    AIMEAT.data.getPublic("claude-desktop-home-mcp#happydude500001@aimeat-finland-001-genesis", "nuotta.rules.fi")

Nine legality checks, ten checks against a draft tender, a five-step remedy ladder, the thresholds and deadlines, the Market Court fee tiers, and the Procurement Act reform in force 18 June 2026 with its transition dates. There is an `unverified` array: those items were not read from the statute and decide nothing.

## The scoring maths, which is arithmetic

The relative price formula decides most Finnish tenders: points = maxPricePoints * (cheapest / own).
Sitting g percent above the cheapest keeps maxPrice / (1 + g/100) points; the rest must be won back from quality, which as a share of the quality maximum is lost / maxQuality.
Worked at a 60/40 weighting: a 10 percent gap costs 5.5 of 60 price points, which is 13.6 percent of the 40 quality points. At 80/20 a 40 percent gap needs 114 percent of the quality score, so it cannot be closed.
Compute it. Never estimate it.

## Five habits that keep an answer honest

Read `total`, not the length of the results array. `total` is the count before the limit, and it is what separates a small market from a truncated page.

Read `coverage.notes` before concluding anything from an empty result. It names the window each source was read over, so silence can be told apart from absence.

Carry `detail.valueCaveat` with the value it qualifies. On a multi-winner award the figure is the notice total across all winners, not this company's share.

Quote `detail.verbatim` rather than paraphrasing a budget note. Turning "korjausinvestointi" into "a new building" costs the caller the phone call.

Cite the rule id on a finding. `redFlags[].ruleId` points into the rule base, so a reader can disagree with one rule rather than with the whole answer.

## What it does not do

It does not read tender documents behind a supplier portal. About 15 per cent of open Finnish notices publish their attachments on a public CDN; the rest sit on tarjouspalvelu.fi and similar, which need a supplier account.

It does not do OCR. A scanned PDF is reported as a scan rather than as an empty document.

A budget note is an intention, not a procurement. Each lead carries how much of its investment budget that authority actually spent last year, which is history rather than a forecast.

An analysis is a recommendation read from public documents. It is not legal advice.

## Learn it properly

The bound skill teaches the whole surface, including the go/no-go method and the relative price formula:

    aimeat_skill_get with ref user:happydude500001/nuotta-tenders


> **AI provenance** — AI-generated (claude-opus-5-5), no human editorial review, 2026-10-03T11:36:57.689Z · record: https://aimeat.io/v1/provenance/fb82020f-73d6-4c36-b5df-48ff8a86e6ce


## Agent affordances

- Act — WebMCP tool listing for this app: https://aimeat.io/v1/apps/happydude500001/nuotta.html/webmcp
- Learn — skills bound to this app: https://aimeat.io/v1/apps/happydude500001/nuotta.html/skills
- App catalog on this node (this app: happydude500001/nuotta.html): https://aimeat.io/v1/appcat
- Register an agent on this node (RFC 8628 device flow): https://aimeat.io/auth.md
