Discover/HalleyWeb API
live

HalleyWeb APIhalleyweb.com

Extract Italian municipality tender notices from HalleyWeb portals. Get CIG codes, dates, awarded amounts, procedure types, and PDF attachments per tender.

This API takes change requests — .
Endpoint health
monitored
search_tenders
download_tender_pdf
get_tender_notice_detail
list_tender_pdfs
list_tender_notices
0/5 passing latest checkself-healing
Endpoints
5
Updated
28d ago

What is the HalleyWeb API?

The HalleyWeb API provides 5 endpoints for accessing public procurement data from Italian municipality portals hosted on the HalleyWeb platform. Starting with list_tender_notices, you can retrieve full tender listings per municipality — including CIG codes, start and end dates, awarded amounts, and procedure types — then drill into individual notices with get_tender_notice_detail to pull structured metadata and attached documents.

Try it
Municipality base URL on HalleyWeb, in the format https://www.halleyweb.com/<municipality_code>.
api.parse.bot/scraper/029346f6-3c41-4aa8-b22b-7adbef02b05b/<endpoint>
Ready to send
Fill in the parameters and hit sign in to send to see live response data here.
Call it over HTTPgrab a free API key at signup
curl -X GET 'https://api.parse.bot/scraper/029346f6-3c41-4aa8-b22b-7adbef02b05b/list_tender_notices?base_url=https%3A%2F%2Fwww.halleyweb.com%2Fc015050' \
  -H 'X-API-Key: $PARSE_API_KEY'
Python SDK · recommended

Typed, relational, agent-ready

A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.

  • Fully typed · autocompletes
  • Objects link to objects
  • Typed errors & pagination

Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:

uv add parse-sdk
uv run parse init
uv run parse add --marketplace halleyweb-com-api

uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.

"""Walkthrough: HalleyWeb Tender Notices — browse Italian municipality tenders, drill into details, inspect documents."""
from parse_apis.halleyweb_tender_notices_api import HalleyWeb, TenderNotFound

client = HalleyWeb()

# Construct a municipality by its portal URL and list its tenders.
municipality = client.municipality(base_url="https://www.halleyweb.com/c015050")

for tender in municipality.tenders(limit=5):
    print(tender.title, tender.cig, tender.amount)

# Search tenders by keyword within the same municipality.
match = municipality.search(query="PROGETTO", limit=1).first()
if match:
    # Drill into the tender detail page for metadata and documents.
    detail = match.details()
    print(detail.title, detail.metadata)

    # List attached documents and inspect the first one.
    for doc in detail.documents(limit=3):
        print(doc.label, doc.url)

# Inspect a known document's metadata (file size, content type).
doc = client.document(url="https://www.halleyweb.com/c015050/zf/index.php/bandi-di-gara/bandi-di-gara/allegato-esito/serialBando/185/procedura/EG/serialAllegato/36")
try:
    meta = doc.inspect()
    print(meta.filename, meta.size_bytes, meta.content_type)
except TenderNotFound as exc:
    print(f"Document gone: {exc.url}")

print("exercised: municipality.tenders / municipality.search / tender.details / detail.documents / document.inspect")
All endpoints · 5 totalmissing one? ·

Retrieve all published tender notices from a municipality's HalleyWeb portal. Returns structured metadata for each tender including title, CIG code, dates, awarded amount, and procedure type. Municipalities without active tenders return an empty array. Each tender carries a detail_url suitable for drill-down via get_tender_notice_detail.

Input
ParamTypeDescription
base_urlrequiredstringMunicipality base URL on HalleyWeb, in the format https://www.halleyweb.com/<municipality_code>.
Response
{
  "type": "object",
  "fields": {
    "tenders": "array of tender objects, each containing title, detail_url, cig, start_date, end_date, amount, and procedure_type",
    "base_url": "string, the normalized municipality base URL used for the request"
  },
  "sample": {
    "data": {
      "tenders": [
        {
          "cig": "Z0232F8C93",
          "title": "AFFIDAMENTO DIRETTO AD UNICO FORNITORE DEL SERVIZIO DI GESTIONE DEGLI ATTI AMMINISTRATIVI",
          "amount": "8.418,00€",
          "end_date": "31/12/2024",
          "detail_url": "https://www.halleyweb.com/c015050/zf/index.php/bandi-di-gara/bandi-di-gara/bando/serialBando/132",
          "start_date": "21/09/2021",
          "procedure_type": "23-AFFIDAMENTO DIRETTO"
        }
      ],
      "base_url": "https://www.halleyweb.com/c015050"
    },
    "status": "success"
  }
}

About the HalleyWeb API

Tender Listings by Municipality

The list_tender_notices endpoint takes a base_url parameter in the format https://www.halleyweb.com/<municipality_code> and returns an array of tender objects. Each object includes title, detail_url, cig (Codice Identificativo Gara), start_date, end_date, amount, and procedure_type. Municipalities with no active postings return an empty array rather than an error. The base_url is echoed back in the response so you can track which portal a result set came from.

Detail Pages and Attached Documents

get_tender_notice_detail accepts a full url — typically a detail_url value from list_tender_notices — and returns the notice title, a metadata object containing CIG and CUP codes when present, and a pdfs array of document objects each carrying a label and url. The list_tender_pdfs endpoint exposes the same response shape when you only need the attachment inventory for a notice. To inspect a specific file before downloading it, download_tender_pdf performs a HEAD-level inspection and returns filename, size_bytes, content_type, and a status field — no file contents are transferred.

Keyword Search Across a Portal

search_tenders filters across the full tender list for a given municipality using a case-insensitive query string matched against title and cig. It returns matching tender objects in the same shape as list_tender_notices, plus a total count of matches. This is useful for monitoring a specific contract type or tracking a known CIG across portal updates.

Coverage Scope

This API is scoped to municipality portals running on the HalleyWeb platform. Each request targets a single municipality identified by its code in the base URL. Cross-municipality aggregation requires calling list_tender_notices once per portal.

Reliability & maintenance

The HalleyWeb API is a managed, monitored endpoint for halleyweb.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when halleyweb.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.

This isn't an official halleyweb.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.

Latest check
0/5 endpoints passing
Maintenance
Monitored & self-healing
Will this API break when the source site changes?+
It's built not to. Every endpoint is health-checked on a schedule with automated test probes. When the source site changes and a check fails, the API is automatically queued for repair and re-verified — that's the self-healing layer. Each API page shows when its endpoints were last verified. And because marketplace APIs are shared, any fix reaches everyone using it.
Is this an official API from the source site?+
No — Parse APIs are independent, managed REST wrappers over publicly available data. That is the point: where a site has no official API (or only a limited one), Parse gives you a maintained, monitored endpoint for that data and keeps it working as the site changes — so you get a stable contract over a source that never promised one.
Can I fix or extend this API myself if I need a new endpoint or field?+
Yes — and you don't have to wait on us. This API was generated by the Parse agent, which stays attached. Describe the change in plain English ("add an endpoint that returns reviews", "fix the price field") in the revise box on the API page or via the revise_api MCP tool, and the agent rebuilds it against the live site in minutes. Contributing the change back to the public API is free.
What happens if I call an endpoint that has an issue?+
Errors are machine-readable: a bad call returns a clean status with the list of available endpoints and a repair hint, so an agent (or you) can recover or trigger a fix instead of failing silently. Confirmed failures feed the automatic repair queue.
Common use cases
  • Monitor all active tenders for a specific Italian municipality by polling list_tender_notices on a schedule
  • Build a CIG-code lookup tool using search_tenders to filter by known procurement identifiers
  • Aggregate tender document inventories across multiple municipality portals using list_tender_pdfs
  • Track awarded amounts and procedure types across municipalities to analyze public spending patterns
  • Verify file size and MIME type of tender PDFs before ingesting them into a document pipeline using download_tender_pdf
  • Extract CUP codes from detail pages via get_tender_notice_detail to cross-reference national investment project registries
Pricing & limitsSee full pricing →
TierPriceCredits/monthRate limit
Free$0/mo1005 req/min
Hobby$30/mo1,00020 req/min
Developer$100/mo5,000100 req/min

One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.

Frequently asked questions
Does HalleyWeb provide an official developer API for its municipality portals?+
HalleyWeb does not publish a documented public API for third-party developers. Their platform is a closed municipal management system; the structured tender data is only surfaced through the portal web interface.
What does `get_tender_notice_detail` return beyond what's in the listing?+
list_tender_notices returns summary fields: title, CIG, dates, amount, and procedure type. get_tender_notice_detail adds the pdfs array of attached documents (each with a label and URL) and a metadata object that includes the CUP code when the notice carries one. Not every notice will have a CUP or attached PDFs.
Does `download_tender_pdf` return the actual file contents?+
No. It returns metadata only: filename, size_bytes, content_type, and a status string. If you need to ingest the file contents, you can fork the API on Parse and revise it to add a file-download endpoint.
Can I search tenders across multiple municipalities in a single request?+
Not currently. search_tenders requires a single base_url and filters within that municipality's portal only. You can fork the API on Parse and revise it to add a multi-municipality batch search endpoint.
Are tender notices from all Italian municipalities available?+
Only municipalities whose portals run on the HalleyWeb platform are accessible. Portals on other CMS platforms or national procurement systems like ANAC's TED-Italy feed are not covered. You can fork the API on Parse and revise it to add endpoints targeting additional portal providers.
Page content last updated . Spec covers 5 endpoints from halleyweb.com.
Related APIs in Government PublicSee all →
tenders.gov.uk API
Search and access UK government public procurement notices, tenders, and contract opportunities in real-time, with the ability to retrieve detailed notice information and browse standardized classification codes. Get comprehensive procurement data in structured formats to analyze tender patterns and find relevant contracting opportunities.
evergabe-online.de API
Search and retrieve public tender opportunities from Germany's e-Vergabe platform by keywords, contract types, CPV codes, and publication dates. Access detailed tender information and discover the latest procurement opportunities across construction and other sectors.
vergabe.rib.de API
Search and retrieve tender information, award notices, and EU prior information from the RIB eVergabe platform to stay updated on procurement opportunities and contract awards. Get detailed tender specifications and the latest news to monitor bidding opportunities and market developments.
tenders.etimad.sa API
Browse and search all public Saudi government tenders from the Etimad platform with detailed information including tender specifications and awarding results. Stay updated on procurement opportunities by accessing tender details and award outcomes in one centralized location.
portalcompraspublicas.com.br API
Search and access detailed information about public tenders, bids, and procurement documents from Brazilian municipalities and states. Retrieve tender items, clarification logs, winner details, and all related documentation to monitor and analyze public purchasing activity across Brazil.
mahatenders.gov.in API
Access Maharashtra government tenders from mahatenders.gov.in, browsing them by closing date or by organization with full tender details and pagination support. Find and review procurement opportunities across different government departments in one place.
doffin.no API
Search for public procurement tenders across Norway and retrieve detailed information about bidding opportunities, including tender specifics, CPV category codes, and location data. Stay informed about government contracts and procurement notices from the official Norwegian national database.
tenders.gov.in API
Search and monitor current government tenders from India's Central Public Procurement Portal and GePNIC systems, filtering by organizations and accessing detailed tender information. Stay updated on the latest procurement opportunities and bids from Indian government agencies in one centralized location.