This section analyzes the overall performance and competitive dynamics of public procurement markets, focusing on market composition, bidder participation, and pricing outcomes. It examines the distribution of markets by contract size and value, identifies potential monopolistic structures through counts of unique suppliers per market and year, and assesses market volatility by tracking new entrants and regularly participating firms, including the diversity of supplier–buyer connections. The section evaluates competition levels by analyzing the number of bids across procedure types and the prevalence of single bidding and explores barriers to participation by reviewing bid submission timeframes and, where relevant, the restrictiveness of technical requirements. It also investigates pricing behavior such as savings or overruns relative to estimated prices, and regional or buyer-specific price patterns, and, when data allow, extends the analysis to price dispersion for standard products, the share of innovative goods, and comparisons of productivity between winning and non-winning firms.

Tip: The report is designed to run end-to-end with minimal editing.
You only need to point to your input files and an output directory.

render_country_results_econ <- function(cc, results_list) {
  results <- results_list[[cc]]
  summ    <- results$summary_stats

  cat("#### Basic data summary for ", cc, "\n\n", sep = "")

  ## ------------------------------------------------------------
  ## Contracts per year
  ## ------------------------------------------------------------
  cat("**Contracts per year:**\n\n")
  if (!is.null(summ$n_obs_per_year)) {
    contracts_tbl <- as.data.frame(summ$n_obs_per_year)
    knitr::kable(
      contracts_tbl,
      col.names = c("Tender year", "Number of contracts"),
      align = c("c", "c")
    ) %>% print()
    cat("\n\n")
  } else {
    cat("_Not available (no `tender_year`)._\n\n")
  }
  
  # ================================================================
  # CPV definitions (cluster -> category)
  # ================================================================
  cat("#### <span style=\"color:red; font-weight:bold\">CPV definitions (cluster → category)</span>\n\n", sep = "")

  # If you have labels, build a compact legend table from the market summary
  if (!is.null(results$market_summary) &&
      all(c("cpv_cluster", "cpv_category") %in% names(results$market_summary))) {

    cpv_legend <- results$market_summary %>%
      dplyr::select(cpv_cluster, cpv_category) %>%
      dplyr::distinct() %>%
      dplyr::arrange(cpv_cluster)

    if (nrow(cpv_legend) > 0) {
      knitr::kable(
        cpv_legend,
        col.names = c("CPV cluster", "CPV category"),
        align = c("c", "l")
      ) %>% print()
      cat("\n\n")
    } else {
      cat("_No CPV definitions available after filtering._\n\n")
    }

  } else {
    cat("_Not available (missing `market_summary` and/or CPV labels)._ \n\n")
  }

  ## ------------------------------------------------------------
  ## Unique buyers / bidders
  ## ------------------------------------------------------------
  if (!is.null(summ$n_unique_buyers) && !is.na(summ$n_unique_buyers)) {
    cat("**Number of unique buyers (buyer_masterid):** ",
        formatC(summ$n_unique_buyers, big.mark = ","), "\n\n")
  } else {
    cat("**Number of unique buyers:** column `buyer_masterid` not found.\n\n")
  }

  if (!is.null(summ$n_unique_bidders) && !is.na(summ$n_unique_bidders)) {
    cat("**Number of unique bidders (bidder_masterid):** ",
        formatC(summ$n_unique_bidders, big.mark = ","), "\n\n")
  } else {
    cat("**Number of unique bidders:** column `bidder_masterid` not found.\n\n")
  }

  ## ------------------------------------------------------------
  ## Unique tenders per year
  ## ------------------------------------------------------------
  if (!is.null(summ$tender_year_tenders)) {
    cat("**Number of unique tenders per year:**\n\n")
    tenders_tbl <- as.data.frame(summ$tender_year_tenders)
    knitr::kable(
      tenders_tbl,
      col.names = c("Tender year", "Number of unique tenders"),
      align = c("c", "c")
    ) %>% print()
    cat("\n\n")
  }

  ## ------------------------------------------------------------
  ## Variables present
  ## ------------------------------------------------------------
  cat("**Variables present (excluding indicator variables):**\n\n")
  cat(paste0("- ", summ$vars_present, collapse = "\n"), "\n\n")

  # ================================================================
  # 1) Market sizing
  # ================================================================
  cat("#### <span style=\"color:red; font-weight:bold\">What is the overall market composition? </span>\n\n", sep = "")

  print_result_plot(
    results, "market_size_n",
    title = paste("Market size by number of contracts –", cc),
    description = paste(
      "This chart compares how active different CPV markets are in terms of the number of contracts.",
      "Markets with very large volumes can indicate routine spending categories and high administrative workload.",
      "Pay attention to whether spending seems concentrated in a small number of markets or broadly spread across many categories.",
      "Very small markets can still matter, but they often reflect niche purchasing rather than system-wide dynamics."
    )
  )

  print_result_plot(
    results, "market_size_v",
    title = paste("Market size by total value –", cc),
    description = paste(
      "This chart shows where the money is concentrated across CPV markets.",
      "A small number of very large markets suggests concentration of budget and potentially higher strategic importance.",
      "Compare this figure to contract counts: markets that are high value but low count often reflect a few big projects.",
      "Markets that are high in both value and count typically represent core procurement areas."
    )
  )

  print_result_plot(
    results, "market_size_av",
    title = paste("Market size bubble plot –", cc),
    description = paste(
      "This plot combines volume and typical contract size to show how markets differ in structure.",
      "Markets with many contracts but low average value reflect frequent small purchases.",
      "Markets with few contracts but high average value reflect infrequent but large awards.",
      "Pay attention to outliers: unusually high average values can signal major infrastructure-type markets or atypical pricing patterns."
    )
  )

  # ================================================================
  # 2) Supplier dynamics
  # ================================================================
  cat("#### <span style=\"color:red; font-weight:bold\"> How volatile are the markets in terms of new vs old suppliers?   </span>\n\n", sep = "")

  print_result_plot(
  results, "suppliers_entrance",
  title = paste("New vs repeat suppliers –", cc),
  description = paste(
    "This figure shows how supplier participation evolves over time within markets: new entrants versus repeat suppliers.",
    "A healthy level of new entry can indicate openness and contestability, while very low entry may suggest barriers or stable incumbent dominance.",
    "Look for markets where entry falls over time, which can signal consolidation or reduced attractiveness.",
    "Very high entry shares can also reflect fragmentation or one-off participation rather than stable competitive ecosystems."
  ),
  fig_width = 12,
  fig_height = 12
)

print_result_plot(
  results, "unique_supp",
  title = paste("Unique suppliers over time –", cc),
  description = paste(
    "This chart tracks how many distinct suppliers participate over time, by market.",
    "Growth can indicate expanding competition or improved access; decline can signal consolidation or weakening supplier interest.",
    "Pay attention to sharp breaks (sudden rises/falls), which may reflect policy changes, shocks, or data coverage differences across years.",
    "Persistent low supplier counts in specific markets may point to structural constraints or naturally thin markets."
  ),
  fig_width = 12,
  fig_height = 12
)

  # ================================================================
  # 3) Buyer–supplier networks (optional)
  # ================================================================
  cat("#### <span style=\"color:red; font-weight:bold\">Are buyers able to choose from a variety of market offerings? </span>\n\n", sep = "")

  if (!is.null(results$network_plots) && length(results$network_plots) > 0) {
  purrr::iwalk(results$network_plots, function(p, nm) {
    cat("##### ", nm, "\n\n", sep = "")
    cat(paste(
      "This network visualizes who buys from whom within the selected CPV market, shown by year.",
      "Dense networks with many connections typically reflect broad participation and diversified contracting relationships.",
      "Star-like patterns (a few dominant buyers or suppliers connected to many partners) can indicate concentration or strong central actors.",
      "Pay attention to repeated tight clusters or isolated components, which may reflect segmented sub-markets or exclusive relationships."
    ), "\n\n")

    if (is.null(p)) {
      cat("_Not available for this country/market (missing columns or no eligible data)._ \n\n")
    } else {
      # Make the printed network plot taller (and a bit wider)
      old <- options(
        repr.plot.width  = 12,
        repr.plot.height = 18
      )
      on.exit(options(old), add = TRUE)

      print(p)
      cat("\n\n")
    }
  })
} else {
  cat("_No network plots produced for this country (missing columns or no eligible data)._ \n\n")
}


  # ================================================================
  # 4) Relative prices (optional)
  # ================================================================
  cat("#### <span style=\"color:red; font-weight:bold\">Are there price savings or price overruns prevailing?  </span>\n\n", sep = "")

  print_result_plot(
    results, "rel_tot",
    title = paste("Density of relative prices –", cc),
    description = paste(
      "This plot shows how contract prices compare to their corresponding estimates across tenders.",
      "Mass concentrated near 1 suggests estimates broadly align with contracted prices.",
      "A heavy right tail indicates cases where contract prices exceed estimates more often or more strongly.",
      "Pay attention to whether the distribution is wide and skewed, which can signal inconsistent estimation, pricing uncertainty, or weak cost control."
    )
  )

  print_result_plot(
    results, "rel_year",
    title = paste("Relative prices over time –", cc),
    description = paste(
      "This figure shows how the contract-to-estimate ratio changes over time.",
      "It helps identify whether pricing performance is stable or shifting across years.",
      "Look for widening spread (greater variability) or upward shifts (contracting increasingly above estimates).",
      "Strong year-to-year volatility may indicate changing market conditions, estimation practices, or procurement discipline."
    )
  )

  print_result_plot(
    results, "rel_10",
    title = paste("Top markets by relative prices –", cc),
    description = paste(
      "This figure highlights the markets where contracted prices tend to be highest relative to estimates.",
      "It is useful for prioritizing which sectors may deserve deeper review of cost estimation and price formation.",
      "Pay attention to whether these markets also have low competition or small supplier bases in earlier diagnostics.",
      "Outliers may reflect genuinely difficult-to-estimate markets, but persistent patterns can be a red flag for weak cost control."
    )
  )

  print_result_plot(
    results, "rel_buy",
    title = paste("Top buyers by relative prices –", cc),
    description = paste(
      "This chart compares buyers by how high their contracted prices tend to be relative to estimates.",
      "It can help identify institutions that consistently contract above estimates and may require targeted support or scrutiny.",
      "Pay attention to whether high ratios are paired with small numbers of contracts—those can be unstable and should be interpreted cautiously.",
      "Consistently high values among frequent buyers are more informative and may suggest systematic differences in planning or negotiation practices."
    )
  )

  # ================================================================
  # 5) Competition diagnostics (optional)
  # ================================================================
  cat("#### <span style=\"color:red; font-weight:bold\">Is there a high competition? </span>\n\n", sep = "")

  print_result_plot(
    results, "single_bid_by_procedure",
    title = paste("Single-bid share by procedure –", cc),
    description = paste(
      "This chart shows how often tenders receive only one bid across different procedure types.",
      "Higher single-bid shares can indicate weaker competition, barriers to entry, or procedures that are less attractive to suppliers.",
      "Pay attention to procedure types that are expected to be competitive but still show high single-bid incidence.",
      "A strong contrast across procedures can point to where rule design or implementation practices matter most."
    )
  )
  
  print_result_plot(
    results, "single_bid_market_procedure_price_top",
    title = paste("Single-bid shares by market × procedure × value (Top 5 markets) –", cc),
    description = paste(
      "This plot focuses on the CPV clusters with the highest overall single-bid incidence.",
      "Within those markets, it shows how single-bid outcomes vary by procedure type and contract value bins.",
      "Use it to identify *where* single bidding concentrates (e.g., specific procedures at higher values).",
      "Interpret sparse cells cautiously (small counts can be noisy)."
    )
  )

  print_result_plot(
    results, "single_bid_by_price",
    title = paste("Single-bid share by contract value –", cc),
    description = paste(
      "This figure shows whether single bidding is more common for smaller or larger contracts.",
      "High single-bid shares at very low values may reflect routine purchasing and limited supplier incentives to compete.",
      "High single-bid shares at high values are typically more concerning, as they affect major spending decisions.",
      "Look for non-linear patterns (e.g., competition improving at mid-values but falling again at the top end)."
    )
  )

  print_result_plot(
    results, "single_bid_by_price_and_procedure",
    title = paste("Single-bid share by value × procedure –", cc),
    description = paste(
      "This plot combines contract value and procedure type to show where single bidding concentrates.",
      "It helps distinguish whether single-bid outcomes are mainly driven by procedure choices or by contract size.",
      "Pay attention to combinations where high-value contracts are frequently single-bid within procedures that should support competition.",
      "This is a useful targeting tool: it narrows attention to specific segments where competitive pressure appears weakest."
    )
  )

  print_result_plot(
    results, "single_bid_by_buyer_group",
    title = paste("Single-bid share by buyer group –", cc),
    description = paste(
      "This chart compares competition across broad buyer types.",
      "Differences can reflect buyer capacity, market reach, supplier engagement practices, or the nature of what each group buys.",
      "Pay attention to buyer groups with persistently high single-bid shares, especially if they also command large market value.",
      "Large gaps across groups may suggest that reforms or capacity-building should be targeted rather than system-wide."
    )
  )

  print_result_plot(
    results, "top_buyers_single_bid",
    title = paste("Top buyers by single-bid share –", cc),
    description = paste(
      "This figure highlights the buyers with the highest incidence of single bidding.",
      "It is useful for targeting follow-up: reviewing procurement planning, market engagement, and tender design in the highest-risk institutions.",
      "Pay attention to whether these buyers appear frequently in the data—consistently high single-bid rates among frequent buyers are most informative.",
      "Use this as a screening tool rather than a verdict: high single bidding may reflect difficult markets, but persistent patterns deserve attention."
    )
  )
}

Country-specific results

Bulgaria (BG)

Basic data summary for BG

Contracts per year:

Tender year Number of contracts
2007 7715
2008 11552
2009 8595
2010 10424
2011 14393
2012 18833
2013 20472
2014 20723
2015 20698
2016 14857
2017 9480
2018 10549
2019 9500
2020 614
NA 6912

CPV definitions (cluster → category)

CPV cluster CPV category
03 Agricultural, farming, fishing, forestry and related products
09 Petroleum products, fuel, electricity and other sources of energy
14 Mining, basic metals and related products
15 Food, beverages, tobacco and related products
16 Agricultural machinery
18 Clothing, footwear, luggage articles and accessories
19 Leather and textile fabrics, plastic and rubber materials
22 Printed matter and related products
24 Chemical products
30 Office and computing machinery, equipment and supplies except furniture and software packages
31 Electrical machinery, apparatus, equipment and consumables; lighting
32 Radio, television, communication, telecommunication and related equipment
33 Medical equipments, pharmaceuticals and personal care products
34 Transport equipment and auxiliary products to transportation
35 Security, fire-fighting, police and defence equipment
37 Musical instruments, sport goods, games, toys, handicraft, art materials and accessories
38 Laboratory, optical and precision equipments (excl. glasses)
39 Furniture (incl. office furniture), furnishings, domestic appliances (excl. lighting) and cleaning products
41 Collected and purified water
42 Industrial machinery
43 Machinery for mining, quarrying, construction equipment
44 Construction structures and materials; auxiliary products to construction (except electric apparatus)
45 Construction work
48 Software package and information systems
50 Repair and maintenance services
51 Installation services (except software)
55 Hotel, restaurant and retail trade services
60 Transport services (excl. Waste transport)
63 Supporting and auxiliary transport services; travel agencies services
64 Postal and telecommunications services
65 Public utilities
66 Financial and insurance services
70 Real estate services
71 Architectural, construction, engineering and inspection services
72 IT services: consulting, software development, Internet and support
73 Research and development services and related consultancy services
75 Administration, defence and social security services
76 Services related to the oil and gas industry
77 Agricultural, forestry, horticultural, aquacultural and apicultural services
79 Business services: law, marketing, consulting, recruitment, printing and security
80 Education and training services
85 Health and social work services
90 Sewage, refuse, cleaning and environmental services
92 Recreational, cultural and sporting services
98 Other community, social and personal services
99 Other

Number of unique buyers (buyer_masterid): 30,160

Number of unique bidders (bidder_masterid): 106,703

Number of unique tenders per year:

Tender year Number of unique tenders
2007 4604
2008 7037
2009 3704
2010 3174
2011 4038
2012 7175
2013 9409
2014 9384
2015 8869
2016 7666
2017 6827
2018 7470
2019 6097
2020 365
NA 6912

Variables present (excluding indicator variables):

  • tender_id
  • lot_number
  • bid_number
  • bid_iswinning
  • tender_country
  • tender_awarddecisiondate
  • tender_contractsignaturedate
  • tender_biddeadline
  • tender_proceduretype
  • tender_nationalproceduretype
  • tender_supplytype
  • tender_publications_firstcallfortenderdate
  • notice_url
  • source
  • tender_publications_firstdcontractawarddate
  • tender_publications_lastcontractawardurl
  • buyer_masterid
  • buyer_id
  • buyer_city
  • buyer_postcode
  • buyer_country
  • buyer_nuts
  • buyer_name
  • buyer_buyertype
  • buyer_mainactivities
  • tender_addressofimplementation_country
  • tender_addressofimplementation_nuts
  • bidder_masterid
  • bidder_id
  • bidder_country
  • bidder_nuts
  • bidder_name
  • bid_price
  • bid_priceusd
  • bid_pricecurrency
  • lot_productcode
  • lot_localproductcode_type
  • lot_localproductcode
  • submp
  • decp
  • is_capital
  • lot_title
  • lot_estimatedpriceusd
  • lot_estimatedprice
  • lot_estimatedpricecurrency
  • tender_year
  • cpv_cluster
  • single_bid
  • price_bin
  • cpv_category

What is the overall market composition?

Market size by number of contracts – BG

This chart compares how active different CPV markets are in terms of the number of contracts. Markets with very large volumes can indicate routine spending categories and high administrative workload. Pay attention to whether spending seems concentrated in a small number of markets or broadly spread across many categories. Very small markets can still matter, but they often reflect niche purchasing rather than system-wide dynamics.

Market size by total value – BG

This chart shows where the money is concentrated across CPV markets. A small number of very large markets suggests concentration of budget and potentially higher strategic importance. Compare this figure to contract counts: markets that are high value but low count often reflect a few big projects. Markets that are high in both value and count typically represent core procurement areas.

Market size bubble plot – BG

This plot combines volume and typical contract size to show how markets differ in structure. Markets with many contracts but low average value reflect frequent small purchases. Markets with few contracts but high average value reflect infrequent but large awards. Pay attention to outliers: unusually high average values can signal major infrastructure-type markets or atypical pricing patterns.

How volatile are the markets in terms of new vs old suppliers?

New vs repeat suppliers – BG

This figure shows how supplier participation evolves over time within markets: new entrants versus repeat suppliers. A healthy level of new entry can indicate openness and contestability, while very low entry may suggest barriers or stable incumbent dominance. Look for markets where entry falls over time, which can signal consolidation or reduced attractiveness. Very high entry shares can also reflect fragmentation or one-off participation rather than stable competitive ecosystems.

Unique suppliers over time – BG

This chart tracks how many distinct suppliers participate over time, by market. Growth can indicate expanding competition or improved access; decline can signal consolidation or weakening supplier interest. Pay attention to sharp breaks (sudden rises/falls), which may reflect policy changes, shocks, or data coverage differences across years. Persistent low supplier counts in specific markets may point to structural constraints or naturally thin markets.

Are buyers able to choose from a variety of market offerings?

network_cpv_45

This network visualizes who buys from whom within the selected CPV market, shown by year. Dense networks with many connections typically reflect broad participation and diversified contracting relationships. Star-like patterns (a few dominant buyers or suppliers connected to many partners) can indicate concentration or strong central actors. Pay attention to repeated tight clusters or isolated components, which may reflect segmented sub-markets or exclusive relationships.

network_cpv_33

This network visualizes who buys from whom within the selected CPV market, shown by year. Dense networks with many connections typically reflect broad participation and diversified contracting relationships. Star-like patterns (a few dominant buyers or suppliers connected to many partners) can indicate concentration or strong central actors. Pay attention to repeated tight clusters or isolated components, which may reflect segmented sub-markets or exclusive relationships.

Are there price savings or price overruns prevailing?

Density of relative prices – BG

This plot shows how contract prices compare to their corresponding estimates across tenders. Mass concentrated near 1 suggests estimates broadly align with contracted prices. A heavy right tail indicates cases where contract prices exceed estimates more often or more strongly. Pay attention to whether the distribution is wide and skewed, which can signal inconsistent estimation, pricing uncertainty, or weak cost control.

Relative prices over time – BG

This figure shows how the contract-to-estimate ratio changes over time. It helps identify whether pricing performance is stable or shifting across years. Look for widening spread (greater variability) or upward shifts (contracting increasingly above estimates). Strong year-to-year volatility may indicate changing market conditions, estimation practices, or procurement discipline.

Top markets by relative prices – BG

This figure highlights the markets where contracted prices tend to be highest relative to estimates. It is useful for prioritizing which sectors may deserve deeper review of cost estimation and price formation. Pay attention to whether these markets also have low competition or small supplier bases in earlier diagnostics. Outliers may reflect genuinely difficult-to-estimate markets, but persistent patterns can be a red flag for weak cost control.

Top buyers by relative prices – BG

This chart compares buyers by how high their contracted prices tend to be relative to estimates. It can help identify institutions that consistently contract above estimates and may require targeted support or scrutiny. Pay attention to whether high ratios are paired with small numbers of contracts—those can be unstable and should be interpreted cautiously. Consistently high values among frequent buyers are more informative and may suggest systematic differences in planning or negotiation practices.

Is there a high competition?

Single-bid share by procedure – BG

This chart shows how often tenders receive only one bid across different procedure types. Higher single-bid shares can indicate weaker competition, barriers to entry, or procedures that are less attractive to suppliers. Pay attention to procedure types that are expected to be competitive but still show high single-bid incidence. A strong contrast across procedures can point to where rule design or implementation practices matter most.

Single-bid shares by market × procedure × value (Top 5 markets) – BG

This plot focuses on the CPV clusters with the highest overall single-bid incidence. Within those markets, it shows how single-bid outcomes vary by procedure type and contract value bins. Use it to identify where single bidding concentrates (e.g., specific procedures at higher values). Interpret sparse cells cautiously (small counts can be noisy).

Single-bid share by contract value – BG

This figure shows whether single bidding is more common for smaller or larger contracts. High single-bid shares at very low values may reflect routine purchasing and limited supplier incentives to compete. High single-bid shares at high values are typically more concerning, as they affect major spending decisions. Look for non-linear patterns (e.g., competition improving at mid-values but falling again at the top end).

Single-bid share by value × procedure – BG

This plot combines contract value and procedure type to show where single bidding concentrates. It helps distinguish whether single-bid outcomes are mainly driven by procedure choices or by contract size. Pay attention to combinations where high-value contracts are frequently single-bid within procedures that should support competition. This is a useful targeting tool: it narrows attention to specific segments where competitive pressure appears weakest.

Single-bid share by buyer group – BG

This chart compares competition across broad buyer types. Differences can reflect buyer capacity, market reach, supplier engagement practices, or the nature of what each group buys. Pay attention to buyer groups with persistently high single-bid shares, especially if they also command large market value. Large gaps across groups may suggest that reforms or capacity-building should be targeted rather than system-wide.

Top buyers by single-bid share – BG

This figure highlights the buyers with the highest incidence of single bidding. It is useful for targeting follow-up: reviewing procurement planning, market engagement, and tender design in the highest-risk institutions. Pay attention to whether these buyers appear frequently in the data—consistently high single-bid rates among frequent buyers are most informative. Use this as a screening tool rather than a verdict: high single bidding may reflect difficult markets, but persistent patterns deserve attention.

Uruguat (UY)

Basic data summary for UY

Contracts per year:

Tender year Number of contracts
2014 88
2015 57262
2016 71525
2017 85379
2018 46791

CPV definitions (cluster → category)

CPV cluster CPV category
03 Agricultural, farming, fishing, forestry and related products
09 Petroleum products, fuel, electricity and other sources of energy
14 Mining, basic metals and related products
18 Clothing, footwear, luggage articles and accessories
22 Printed matter and related products
24 Chemical products
30 Office and computing machinery, equipment and supplies except furniture and software packages
32 Radio, television, communication, telecommunication and related equipment
33 Medical equipments, pharmaceuticals and personal care products
34 Transport equipment and auxiliary products to transportation
37 Musical instruments, sport goods, games, toys, handicraft, art materials and accessories
39 Furniture (incl. office furniture), furnishings, domestic appliances (excl. lighting) and cleaning products
41 Collected and purified water
42 Industrial machinery
44 Construction structures and materials; auxiliary products to construction (except electric apparatus)
45 Construction work
50 Repair and maintenance services
51 Installation services (except software)
63 Supporting and auxiliary transport services; travel agencies services
64 Postal and telecommunications services
65 Public utilities
66 Financial and insurance services
70 Real estate services
72 IT services: consulting, software development, Internet and support
77 Agricultural, forestry, horticultural, aquacultural and apicultural services
79 Business services: law, marketing, consulting, recruitment, printing and security
99 Other

Number of unique buyers (buyer_masterid): 268

Number of unique bidders (bidder_masterid): 11,822

Number of unique tenders per year:

Tender year Number of unique tenders
2014 45
2015 47122
2016 58670
2017 65622
2018 37364

Variables present (excluding indicator variables):

  • tender_id
  • lot_number
  • bid_number
  • tender_country
  • tender_awarddecisiondate
  • tender_biddeadline
  • tender_proceduretype
  • tender_nationalproceduretype
  • tender_supplytype
  • tender_publications_firstcallfortenderdate
  • source
  • buyer_masterid
  • buyer_id
  • buyer_name
  • buyer_buyertype
  • bidder_masterid
  • bidder_id
  • bidder_country
  • bidder_name
  • bid_price
  • bid_priceusd
  • bid_pricecurrency
  • lot_productcode
  • lot_localproductcode_type
  • lot_localproductcode
  • submp
  • decp
  • is_capital
  • lot_title
  • tender_year
  • cpv_cluster
  • single_bid
  • price_bin
  • cpv_category

What is the overall market composition?

Market size by number of contracts – UY

This chart compares how active different CPV markets are in terms of the number of contracts. Markets with very large volumes can indicate routine spending categories and high administrative workload. Pay attention to whether spending seems concentrated in a small number of markets or broadly spread across many categories. Very small markets can still matter, but they often reflect niche purchasing rather than system-wide dynamics.

Market size by total value – UY

This chart shows where the money is concentrated across CPV markets. A small number of very large markets suggests concentration of budget and potentially higher strategic importance. Compare this figure to contract counts: markets that are high value but low count often reflect a few big projects. Markets that are high in both value and count typically represent core procurement areas.

Market size bubble plot – UY

This plot combines volume and typical contract size to show how markets differ in structure. Markets with many contracts but low average value reflect frequent small purchases. Markets with few contracts but high average value reflect infrequent but large awards. Pay attention to outliers: unusually high average values can signal major infrastructure-type markets or atypical pricing patterns.

How volatile are the markets in terms of new vs old suppliers?

New vs repeat suppliers – UY

This figure shows how supplier participation evolves over time within markets: new entrants versus repeat suppliers. A healthy level of new entry can indicate openness and contestability, while very low entry may suggest barriers or stable incumbent dominance. Look for markets where entry falls over time, which can signal consolidation or reduced attractiveness. Very high entry shares can also reflect fragmentation or one-off participation rather than stable competitive ecosystems.

Unique suppliers over time – UY

This chart tracks how many distinct suppliers participate over time, by market. Growth can indicate expanding competition or improved access; decline can signal consolidation or weakening supplier interest. Pay attention to sharp breaks (sudden rises/falls), which may reflect policy changes, shocks, or data coverage differences across years. Persistent low supplier counts in specific markets may point to structural constraints or naturally thin markets.

Are buyers able to choose from a variety of market offerings?

network_cpv_45

This network visualizes who buys from whom within the selected CPV market, shown by year. Dense networks with many connections typically reflect broad participation and diversified contracting relationships. Star-like patterns (a few dominant buyers or suppliers connected to many partners) can indicate concentration or strong central actors. Pay attention to repeated tight clusters or isolated components, which may reflect segmented sub-markets or exclusive relationships.

network_cpv_33

This network visualizes who buys from whom within the selected CPV market, shown by year. Dense networks with many connections typically reflect broad participation and diversified contracting relationships. Star-like patterns (a few dominant buyers or suppliers connected to many partners) can indicate concentration or strong central actors. Pay attention to repeated tight clusters or isolated components, which may reflect segmented sub-markets or exclusive relationships.

Are there price savings or price overruns prevailing?

Density of relative prices – UY

This plot shows how contract prices compare to their corresponding estimates across tenders. Mass concentrated near 1 suggests estimates broadly align with contracted prices. A heavy right tail indicates cases where contract prices exceed estimates more often or more strongly. Pay attention to whether the distribution is wide and skewed, which can signal inconsistent estimation, pricing uncertainty, or weak cost control.

Not available for this country (missing data/columns or pipeline skipped this step).

Relative prices over time – UY

This figure shows how the contract-to-estimate ratio changes over time. It helps identify whether pricing performance is stable or shifting across years. Look for widening spread (greater variability) or upward shifts (contracting increasingly above estimates). Strong year-to-year volatility may indicate changing market conditions, estimation practices, or procurement discipline.

Not available for this country (missing data/columns or pipeline skipped this step).

Top markets by relative prices – UY

This figure highlights the markets where contracted prices tend to be highest relative to estimates. It is useful for prioritizing which sectors may deserve deeper review of cost estimation and price formation. Pay attention to whether these markets also have low competition or small supplier bases in earlier diagnostics. Outliers may reflect genuinely difficult-to-estimate markets, but persistent patterns can be a red flag for weak cost control.

Not available for this country (missing data/columns or pipeline skipped this step).

Top buyers by relative prices – UY

This chart compares buyers by how high their contracted prices tend to be relative to estimates. It can help identify institutions that consistently contract above estimates and may require targeted support or scrutiny. Pay attention to whether high ratios are paired with small numbers of contracts—those can be unstable and should be interpreted cautiously. Consistently high values among frequent buyers are more informative and may suggest systematic differences in planning or negotiation practices.

Not available for this country (missing data/columns or pipeline skipped this step).

Is there a high competition?

Single-bid share by procedure – UY

This chart shows how often tenders receive only one bid across different procedure types. Higher single-bid shares can indicate weaker competition, barriers to entry, or procedures that are less attractive to suppliers. Pay attention to procedure types that are expected to be competitive but still show high single-bid incidence. A strong contrast across procedures can point to where rule design or implementation practices matter most.

Single-bid shares by market × procedure × value (Top 5 markets) – UY

This plot focuses on the CPV clusters with the highest overall single-bid incidence. Within those markets, it shows how single-bid outcomes vary by procedure type and contract value bins. Use it to identify where single bidding concentrates (e.g., specific procedures at higher values). Interpret sparse cells cautiously (small counts can be noisy).

Single-bid share by contract value – UY

This figure shows whether single bidding is more common for smaller or larger contracts. High single-bid shares at very low values may reflect routine purchasing and limited supplier incentives to compete. High single-bid shares at high values are typically more concerning, as they affect major spending decisions. Look for non-linear patterns (e.g., competition improving at mid-values but falling again at the top end).

Single-bid share by value × procedure – UY

This plot combines contract value and procedure type to show where single bidding concentrates. It helps distinguish whether single-bid outcomes are mainly driven by procedure choices or by contract size. Pay attention to combinations where high-value contracts are frequently single-bid within procedures that should support competition. This is a useful targeting tool: it narrows attention to specific segments where competitive pressure appears weakest.

Single-bid share by buyer group – UY

This chart compares competition across broad buyer types. Differences can reflect buyer capacity, market reach, supplier engagement practices, or the nature of what each group buys. Pay attention to buyer groups with persistently high single-bid shares, especially if they also command large market value. Large gaps across groups may suggest that reforms or capacity-building should be targeted rather than system-wide.

Top buyers by single-bid share – UY

This figure highlights the buyers with the highest incidence of single bidding. It is useful for targeting follow-up: reviewing procurement planning, market engagement, and tender design in the highest-risk institutions. Pay attention to whether these buyers appear frequently in the data—consistently high single-bid rates among frequent buyers are most informative. Use this as a screening tool rather than a verdict: high single bidding may reflect difficult markets, but persistent patterns deserve attention.