Methodology

How these prices are produced

Every figure on this site comes from a published procurement record and can be traced back to it. This page explains how a contract award becomes a benchmarked unit price, and which comparisons the data does and does not support. Everything described here is done automatically, from published data.

1. Where the data comes from

All primary data is published by government procurement authorities in the Open Contracting Data Standard (OCDS) format. We ingest each publisher through its own adapter, so a publisher’s local quirks never leak into the shared logic, and we keep the original record verbatim alongside everything we derive from it.

Every publisher’s licence is checked before its data is used. Sources whose licence does not allow this use are not included.

2. The three tiers, and why they are never mixed

A number is only as good as its provenance, so every figure carries a badge saying where it came from. The three tiers are stored separately — they are not one table with a flag — and no page merges them into a single average.

  • Published/Derived

    Taken directly from the structured procurement record, or divided out of it arithmetically. No estimation, no judgment. This is the default and the only tier that feeds a benchmark unaided.

  • AI-Assisted — Estimated

    Used only where a record publishes no usable price, or where a record was flagged as a statistical outlier and needed explaining. Every such figure quotes the source text it was read from, carries a confidence score, and is reviewed by a person before it counts. It is never generated for a record that already has a clean structured price.

  • Market Reference

    Current vendor pricing, gathered on request when procurement coverage for an item is too thin to benchmark. Each result cites the page it came from and is approved by a person before it is cached. These are not procurement prices and are shown separately from them.

3. How a unit price is derived

Two methods, in strict order of preference. Each price on the site shows which one produced it.

  1. Published. The publisher stated a unit price on the line item. We use it unchanged.
  2. Derived. No unit price was published, so we divide the award value by the quantity. We only do this when the award covers exactly one line item — splitting a multi-item award across its lines would mean inventing an allocation.

A published figure is always preferred, even when a derived one is also available. A derived figure carries different risk: a wrong quantity silently produces a plausible-looking wrong price, which is why the method is labelled on every row rather than hidden.

If neither method works — no price, no quantity, no currency, or no resolvable item classification — the record produces no price at all. It is kept as raw source data and may become a candidate for an AI-assisted estimate, but it never appears as a published/derived figure.

4. Which records enter a benchmark

Having a price is not enough to count toward a benchmark. A record also has to pass these filters:

  • Competitively awarded. Direct awards and single-source contracts are excluded from the statistics, because they are not evidence of a market price. They are still shown in the source-record table, marked as non-competitive, so you can see them.
  • Same item classification. Benchmarks are computed per classification code, never across a whole category.
  • Same currency. A classification with awards in three currencies produces three benchmarks, not one: a benchmark is computed within a single currency and never pooled across two. Converting does not change that. Every record is converted to US dollars at the rate in force on the day of the award, and where enough of a group’s records convert, the dollar median shown beside it is the same sample measured differently. A historical award is never converted at today’s rate — see section 7.
  • Same tax basis. See section 6.
  • One unit, one median. “4.50 per pair” and “450 per box of 100” must not land in one figure. When a classification’s records are priced per several units — some per item, others per box, others per square metre — each unit that has enough records (five or more) gets its own figure, shown separately and labelled by unit (“per unit”, “per box”, “per m²”). A record whose unit is not stated joins that figure only when every other record under the same currency and tax basis shares one unit; when they do not, it is left out rather than guessed at. Two raw unit labels are treated as the same unit only when a reviewed table says so — for example “UD”, “Unidad” and “UNI” from different publishers, or “Pack” and “Paquete” — never by matching spelling automatically. Units are never converted into one another (a gram is never turned into a kilogram, a dozen never into a single unit). In these records, where two units are the same measure at different sizes, converted figures often disagree by a factor of a thousand or more, usually because the smaller unit was entered in error. The publisher’s own unit, exactly as recorded, is never rewritten — only a second, derived fact is added beside it for grouping.
  • Actually a unit price. Some publishers record an entire purchase as a single line, with the shopping list written into the description. The amount is then the total for the lot, not the price of one of anything. Two shapes of this are excluded from the medians:
    • No unit of measure and a quantity of one. Nothing in the record establishes what one unit is. One such record reads “bottled purified water (3,500 bottles)” with a quantity of 1.
    • A quantity of one where the “unit” names a category rather than a measure — service, unit, project, file, building. Here the publisher did fill the field, and the field still does not say how much of anything was bought. One record published as “1 unit” for 508,403 soles turned out, in the buyer’s own purchase order, to be 193,164 kilograms of filter media across five lines priced between 1.39 and 3.73 per kilogram. Read as a unit price it is wrong by a factor of hundreds of thousands.
    Neither kind is deleted or hidden. Both stay in the source-record table, labelled, because they are real contract awards.
  • Enough records to be a statistic. Below a minimum sample size (currently five records) no benchmark is computed at all. A median and an interquartile range calculated from one observation are that observation and zero — arithmetic that looks like a statistic and is not one. The item page says how many eligible records exist and why no figure is shown.
  • Records from more than one tender. A single tender can award many line items under the same classification, and each of those is a real price — but all of them together are one buyer’s decision on one day, not a market. Where every record behind a figure comes from one contracting process, the figure is shown as coverage from a single tender rather than as a benchmark, however many line items that tender contributed. Each figure also states how many distinct tenders are behind it, so the sample count can never be read as a count of purchases when it is not. Section 10 explains why several rows legitimately share one OCID.
  • A classification code that names a commodity. Some publishers emit an “uncategorised” placeholder code for items where no category was chosen. It is a real value in the published data and it is not a product: one such bucket in this corpus carries items ranging from cheese to air tickets. A median across everything filed under a placeholder describes nothing, so those codes are excluded from the statistics and from the browse list. The prices themselves stay published, linked to their source contracts, and countable.

As a result, for publishers that record purchases as lots rather than as priced units, most records are visible on the site but not included in the statistics. The underlying figures remain published, linked and countable.

5. The statistics

For each eligible group we publish the median, the interquartile range (the 25th to 75th percentile band), and the minimum and maximum observed.

The median rather than the mean, because procurement data is heavily skewed by a small number of very large or very small awards, and a mean would follow them. The IQR rather than a standard deviation, for the same reason — it describes the middle of the distribution without assuming the distribution is normal.

Outliers are flagged using Tukey fences: a record more than 1.5× the IQR below the first quartile or above the third is marked. Flagging is not deletion — a flagged record stays in the data and stays visible. It marks a figure as worth explaining, and explaining it may conclude the price was entirely legitimate.

Every benchmark states the number of records behind it, and no benchmark is published below the minimum sample size described in section 4 — where there are too few records we show the count and say so, rather than computing a median and labelling it lightly. Benchmarks are versioned and timestamped, so a figure cited last month remains reproducible even after new data arrives.

Order size and unit price. A separate page, order size and unit price, shows how unit prices move as orders grow, pooled across every item with enough records. Each record is compared only with its own item, in its own unit, and records with no stated unit are left out. Its figures are medians per order-size band: a description of the records, not a benchmark and not a discount schedule. An item with enough records in one unit also shows its own chart of quantity against unit price, under its other charts, with the same thresholds and the median price per factor-of-ten quantity band.

6. What a price includes — tax, scope, delivery

Two unit prices are only comparable if they measure the same thing. Three attributes decide that, and each is shown beside every figure.

Tax. Whether a figure is gross or net of consumption tax (VAT, IVA, ISV). OCDS has no field for this, so we determine it per publisher from that country’s procurement rules and record the citation. Public procurement regimes generally require bidders to quote tax-inclusive prices, so government publishers are treated as tax-inclusive. International organisations are not: UN bodies and similar are frequently tax-exempt, and assuming otherwise would inflate their prices by the local tax rate in a way that would look like a real price difference. Benchmarks are computed within one tax basis and never across two. Tax rates themselves are recorded separately by jurisdiction and commodity, because most regimes zero-rate or reduce-rate whole categories — but we never convert between gross and net. The figures are shown as published, labelled.

Scope. Whether the procurement was open to foreign bidders. This is not a standard OCDS field either; we read it from the publisher’s own name for the procurement method, plus a per-publisher mapping for methods that are domestic by law but do not say so. International procurements are rare — well under 1% in current sources — so they are labelled and filterable rather than split into their own benchmark, and each benchmark reports how many of its records are international.

Delivery terms. Whether the price includes carriage, insurance and duties — what Incoterms describe. OCDS does not carry this, no published extension adds it, and neither do our current publishers, so for procurement records this is almost always shown as unknown. It matters most when comparing a procurement price against a vendor quotation, where the vendor price is typically quoted excluding tax and shipping; where the two are measured differently, the site says so instead of presenting them side by side as equivalent.

What “unknown” means here. It means the answer is not established, not that the attribute does not apply. The gap is shown rather than filled with an assumption.

7. Currency conversion

Prices on this site are led by a US dollar figure wherever one exists, so that items bought in different countries can be read side by side. The dollar figure is always ours, never the publisher’s: it is marked “Converted — derived” and states the rate and the date that rate was in force. The publisher’s own figure, in the publisher’s own currency, is shown beside it on every page and is never dropped — it is the number of record, and the one to cite.

A converted figure is marked as converted everywhere it appears, an undated conversion says so, and a record or a statistic with no dollar figure says why.

Conversion matters because a procurement benchmark compares prices across years. Converting a past award at today’s rate restates it in today’s money and quietly turns a currency movement into what looks like a price difference. So nothing here is converted at today’s rate. Every figure is converted at the rate that was in force on the day the award was made, and keeps it.

The rules below are what a converted figure on this site means.

  • The rate used is the one in force on the award date — specifically, the most recently published rate on or before that date. Rate series are not published daily and the gaps are irregular, so “the rate that was in force” is the only definition that gives the same answer every time it is asked.
  • A record with no award date is converted at a later rate, and says so. Some publishers do not date their awards — every Honduran record on this site is undated. An award date before 1 January 1990, or more than a year after the record was collected, is also treated as no award date; the publisher’s original date stays in the source record. Those are converted at the latest rate available at the moment the conversion was computed, and that rate and its date are stored with the figure exactly as for any other. On the page they are marked “Converted — undated” rather than “Converted — derived”, with the reason written next to them. Treat them as weaker than the others: comparing one with an award from a different year compares two years of exchange-rate movement as well as two prices. They are shown because a figure whose basis is stated and visible is more useful than no figure at all.
  • A rate is fixed to a figure the first time that figure is converted, and is never re-resolved afterwards. If the rate publisher later corrects a historical rate, the corrected rate is stored as a new entry, the old one is kept and marked superseded, and every figure already published keeps the rate it was computed with. A number cited last month does not change because a rate table was edited this month. Any restatement of a published figure is recorded.
  • A converted figure leads, and is always labelled as converted. Leading is a matter of position; being ours rather than the publisher’s is a matter of fact, and the label carries the fact. Every dollar figure on the site is marked “Converted” and states the rate and the effective date it used. The publisher’s own figure keeps its own column, its own place on every benchmark, and its own currency.
  • Where a record cannot be converted, it says so where the dollar figure would have been. Four reasons remain, and each is a recorded state rather than an absence: the award predates the rate series; the currency is not one the rate source publishes; no rate source is in use; or the conversion has not yet been run for that record. In each case the record shows a dash and the reason, not an empty cell.
  • A benchmark with no dollar median keeps its own currency, and says why. A dollar median is written only when enough of the group’s records converted to meet the same minimum sample the site requires of any other median. Below that, the statistic leads in the publisher’s currency and states which of the two reasons applies: none of its records convert at all, or too few of them do.
  • A dollar benchmark can mix both bases, and its sample count is the thing to read. Undated conversions count towards dollar medians alongside award-date ones. Where a classification’s records are largely undated — anything drawn mostly from Honduras — the dollar median inherits that weakness even though the line itself cannot show it. The publisher’s-currency median beside it does not have this problem, and is the one to prefer when the two disagree.
  • Converted figures are never pooled across currencies into one benchmark. Where a converted benchmark is shown it is the same sample as the original, measured differently — and it states how many of its records could be converted, because a dollar median drawn from a third of the sample is not the same claim as the median beside it. The charts described below are the one place a pooled figure appears, and they are not benchmarks.
  • Outliers are identified in the original currency only. No record becomes an outlier, or stops being one, because an exchange rate moved.

Two figures on one page, and why they differ. An item page can show two medians for the same item, and they answer two different questions. The chart median, shown first under “All records — every source, converted”, pools every record for the item after converting it, because a chart whose purpose is to show what one item costs across countries cannot be split into one chart per currency without defeating itself. The chart figures are descriptive of the records drawn on the chart. The benchmark median, shown below the charts under “Benchmark — per currency”, is computed per currency and tax basis: it never mixes sources that publish in different currencies, for the reasons above. The benchmark is the figure to cite.

They will usually be close, and where they are far apart that is information rather than error. A laptop page whose benchmark median comes from one country’s records while its chart median pools that country with another is saying that the second country’s laptops are cheaper, or differently specified, or bought in different quantities — which is the comparison this site exists to make possible. The two figures also count different things: a benchmark counts only the records eligible for it, and a chart shows every record for the item, including those shown but not averaged.

Outliers are set aside, by the charts and by the benchmark. Some publishers record a placeholder unit price — a literal 1 — where the real price is agreed elsewhere. A laptop priced at one peso is not a cheap laptop; it is not a price at all. Before a chart is drawn, records more than one and a half interquartile ranges beyond the middle half of that item’s own prices are set aside. The test is applied on a logarithmic scale, so that it measures a price against what the item costs rather than against a fixed amount — the same rule works for a $2,000 laptop and a two-cent screw. Each chart states how many records it set aside and the two prices it used as boundaries.

The same rule, with the same boundaries, is applied by the benchmark itself — so a record the chart sets aside and a record the benchmark sets aside are the same record. A benchmark figure therefore says how many records it rests on as well as how many were examined: “median from 203 of 215 records”.

Nothing is deleted. Every record stays in the source table with its link, and a record set aside from a statistic keeps its place in the record of that statistic. Setting aside changes which records a figure is computed from; it never removes a record from the site, and it never changes what the publisher published.

The rate source, and what its publisher says about it. The rates used are the UN Operational Rates of Exchange (UNORE), a semi-monthly series published by the United Nations Treasury. Its own published disclaimer says:

“The Operational Rates of Exchange listed herein are intended only for the internal record-keeping of the United Nations. No warranty of accuracy can be given and the United Nations shall not assume any responsibility in connection with the present publication of these rates.” — and: “The U.N. Operational Rates are not to be used and quoted as historic or market rates by the general public, as the U.N. Operational Rates are not bank rates nor databases of the exchange rates. They are for internal use only by the U.N. and its agencies.”

Because of this disclaimer, every dollar figure on this site is labelled “derived” and is for information only. No dollar figure here should be used as a market rate, quoted as one, or relied on for a decision that turns on the exact amount. The figure to cite is the published one, in the currency actually paid. The original amount, the award date and the rate used are all shown, so a different conversion can be made.

8. Known limits

These are the things most likely to make a number misleading. They are listed here so you can check.

  • Units are normalised for spelling, never for size. A reviewed table merges different spellings of the same unit (“UD”, “Unidad”, “UNI”); it never converts one unit into another (grams into kilograms, a dozen into a single unit), and a raw code with no reviewed row yet is kept apart rather than guessed at. Within one unit we still take the publisher’s word for what it means — a publisher that records “unit” for both a single item and a pack of a hundred will produce a wide, real-looking spread inside that one figure.
  • Benchmarks are never pooled across currencies. A classification with awards in three currencies produces three benchmarks, not one, so coverage looks thinner than it is. Converted figures do not change that: a dollar benchmark, where one is shown, is the same sample measured differently, and it says how many of its records could be converted. Section 7 sets out the conversion method and the rate source’s own caveats.
  • Classification quality varies. Items are grouped by the publisher’s own classification code where present. Where it was missing, a code may have been assigned by matching against the standard codelist — those assignments are reviewed, and cite what they matched.
  • Nobody reads each award. Prices are grouped by their item code, converted and averaged by software. Two awards under one code can be different products — different grade, size, pack quantity or brand — and nothing here checks that they match a single specification.
  • Award-stage prices only. We record what was awarded. Contract amendments that change what was ultimately paid are not currently modelled.
  • Coverage is partial. The site covers a limited number of publishers. Absence of a price for an item means we have no data, not that none exists.
  • Item names are machine-translated. Publishers write in their own language. Where we hold an English translation we show it, produced by a language model and not reviewed by a person. The publisher’s own words are shown beneath it and are what we store, cite and match on — no translation is ever used to derive a price, to group records into a benchmark, or to assign a classification. Search matches the translation and the original, so either language finds the item. An item whose name still appears in Spanish has not been translated yet.

9. Checking our work

Every published/derived price links back to its publisher, and every link says what it will show you — because not every publisher publishes a page for every record, and a link that does not say so is worse than no link.

There are three kinds, and the difference matters:

  • “Award summary (publisher’s page)” or “Signed contract (PDF)” — the publisher’s own page or document for that specific award. Open it and you can check the figure yourself. This is what every Paraguayan record and 45% of Honduran records carry. Where an award summary is shown, the OCDS record for the same process is offered underneath it, so you can read either the page or the data.
  • “Publisher’s OCDS record (data)” — the machine-readable record for that process. Less pleasant to read, equally checkable.
  • “Publisher’s system — no record page published” — the publisher’s system, and nothing more specific, because that publisher does not publish a page for this record. It is marked Does not show this record on the record itself. This is the remaining 55% of Honduran records: Honduras’s ONCAE publishes a signed-contract PDF for some contracts and only a system homepage for the rest.

Every source link is taken from what the publisher itself publishes. Where a publisher does not publish a page for a record, none is shown.

Two exceptions. For Uruguay, and since September 2026 for Chilean tenders, we build the link from the process number in the publisher’s own data, because the publisher’s own address for the record either does not exist or does not open. Chile’s published “documents” links opened blank, so a Chilean tender record now links to Mercado Público’s tender page for that tender code. That page shows the tender; its award notice and annex show the amount awarded. Tender types whose page requires a login get the system homepage instead, labelled as such.

Publisher documents are served over plain http:// in some cases; we link to the https:// form of the same address. If a document does not load, the same path over http:// is what the publisher published.

Each price also records which version of our derivation logic produced it, and each benchmark records the parameters it was computed under. If a number looks wrong, those two facts are usually enough to establish why.

Browse the data →

10. What an OCID is, and why two rows can share one

An OCID — an Open Contracting ID — is the identifier a publisher assigns to one contracting process: a single tender, followed from the notice through to the award and the contract. It looks like ocds-03ad3f-482596-1. The middle part identifies the publisher; the rest is that publisher’s own reference for the process.

It is not a product code, and it does not identify an item. That distinction is the one worth holding on to: the code beside an item name on this site (UNSPSC 42132203, say) says what was bought; the OCID says which purchase it was bought in.

So the same OCID can appear on several rows, and that is correct. A tender that awards twenty line items produces twenty priced records, all carrying the one OCID, because there was one process. Rows sharing an OCID are therefore not independent evidence of a market price — they are one buyer’s decision on one day.

How the statistics use this. Every published figure states how many distinct contracting processes it rests on as well as how many records, and a figure whose records all come from one process is presented as single-tender coverage rather than as a benchmark — see section 4. Nothing is deleted or down-weighted to achieve that: the records are all real awarded prices and all remain listed. Only the label changes: such a figure is not called a benchmark.

An OCID is stable and public. Given one, you can find the process in the publisher’s own system without going through us — which is the point. Every source link on a record is the publisher’s address for that OCID, taken from what they publish, never assembled by us (section 9).

11. Sources, attribution and licences

Every figure here is built from data somebody else published and made open. These are the sources, named as they name themselves, with the licence each is published under. Where a licence requires attribution, this section meets that condition.

The licence of the data on this site. The unit prices, benchmark statistics and any exported dataset produced here are an adapted database in the sense the Open Database License uses. One source above is published under that licence, and it is share-alike, so this derived dataset is offered under the same terms — the Open Data Commons Open Database License (ODbL) 1.0. The licence requires that anyone receiving the data be told.

Changes were made. Nothing on this site is a verbatim republication of a publisher’s record: prices are derived, grouped, benchmarked and in places translated, and every one of those steps is described on this page. The publisher’s original record is kept unmodified alongside everything derived from it, and each figure links back to it.