halleyweb.com APIhalleyweb.com ↗
Extract Italian municipal tender notices, CIG/CUP codes, amounts, dates, and PDF attachments from HalleyWeb-powered municipality portals.
curl -X GET 'https://api.parse.bot/scraper/029346f6-3c41-4aa8-b22b-7adbef02b05b/list_tender_notices?base_url=https%3A%2F%2Fwww.halleyweb.com%2F%3Cmunicipality_code%3E' \ -H 'X-API-Key: $PARSE_API_KEY'
Extract all tender notice titles, CIG codes, dates, amounts, and detail URLs from a municipality's HalleyWeb tender listing page. Returns an empty array if the municipality has no published tenders.
| Param | Type | Description |
|---|---|---|
| base_urlrequired | string | Municipality base URL on HalleyWeb, in the format https://www.halleyweb.com/<municipality_code> (e.g., https://www.halleyweb.com/c015050). |
{
"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": "Z7E3D6CFB1",
"title": "PROGETTO CINOFILO PER UN GIORNO CON LA POLIZIA LOCALE- IMPEGNO DI SPESA",
"amount": "3.500,00€",
"end_date": "31/12/2024",
"detail_url": "https://www.halleyweb.com/c015050/zf/index.php/bandi-di-gara/bandi-di-gara/bando/serialBando/185",
"start_date": "23/11/2023",
"procedure_type": "23-AFFIDAMENTO DIRETTO HS Security Italia 03969840127 HS Security Italia 03969840127"
}
],
"base_url": "https://www.halleyweb.com/c015050"
},
"status": "success"
}
}About the halleyweb.com API
The HalleyWeb API provides 5 endpoints for accessing public procurement data from Italian municipalities hosted on the HalleyWeb platform. Starting with list_tender_notices, you can retrieve all tender notices for a given municipality — including title, CIG code, start and end dates, contract amount, and procedure type — identified by its municipality code in the base URL.
What the API Covers
This API targets the tender notice ("bandi di gara") sections of Italian municipality portals on the HalleyWeb platform. Each municipality is addressed via a base_url parameter in the format https://www.halleyweb.com/<municipality_code>. The list_tender_notices endpoint returns an array of tender objects per municipality, each carrying title, detail_url, cig, start_date, end_date, amount, and procedure_type. Municipalities with no published tenders return an empty array — this is expected behavior, not an error.
Drilling Into Tender Details
Once you have a detail_url from the listing, get_tender_notice_detail returns the full page-level metadata for that notice: a title, a metadata object containing extracted CIG and CUP codes when present, and a pdfs array of document objects each with a label and url. list_tender_pdfs exposes the same response shape and is useful when your workflow is specifically focused on document discovery rather than metadata. Neither endpoint requires any parameter beyond the full detail page URL.
Document Inspection and Search
download_tender_pdf accepts a PDF URL (typically from pdfs[*].url) and returns file-level metadata: filename, size_bytes, content_type, and a status field. It does not return file contents. For keyword-driven workflows, search_tenders accepts a query string alongside a base_url and filters the full tender list against tender titles and CIG codes case-insensitively, returning the match count in total and matching objects in results.
Coverage Notes
Only municipalities whose portals are hosted on HalleyWeb are accessible through this API. Coverage varies: some municipalities have rich, regularly updated tender listings; others have none. The API normalizes the base_url and returns it in responses so you can confirm which municipality was queried.
- Monitor new public procurement opportunities across Italian municipalities by polling
list_tender_noticesfor multiple municipality codes. - Build a CIG-indexed database of Italian tender notices with amounts and procedure types for compliance or audit purposes.
- Automatically collect official tender documents by chaining
list_tender_notices→get_tender_notice_detail→download_tender_pdffor a given municipality. - Search for tenders matching a specific keyword or CIG code across a target municipality using
search_tenders. - Track tender deadlines by extracting
start_dateandend_datefields and alerting when notices approach expiry. - Identify all PDF attachments associated with a tender notice using
list_tender_pdfsbefore selectively downloading large files.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 250 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.
Does HalleyWeb provide an official public developer API?+
What does `download_tender_pdf` actually return — can I get the file contents?+
filename, size_bytes, content_type (the MIME type from response headers, which may be empty if the server omits it), and a status field that reads 'completed' on success. Use the url field from pdfs[*].url in your own HTTP client if you need the binary.What happens if a municipality has no published tenders?+
list_tender_notices returns an empty array for the tenders field. This is normal — not every municipality on the HalleyWeb platform maintains an active tender listing. The base_url field in the response confirms which municipality was queried, so you can distinguish a valid empty result from a misconfigured URL.Does the API cover tender award notices or contract execution data, not just the initial procurement notices?+
cig, amount, procedure_type, and attached PDFs from the notice stage. Award outcomes and contract execution records are not exposed. You can fork this API on Parse and revise it to add an endpoint targeting award notice sections if those are present on a given municipality portal.Can I search tenders across multiple municipalities in one call?+
search_tenders requires a single base_url per call — it filters tenders within one municipality. Multi-municipality search is not currently supported by a single endpoint. You can fork the API on Parse and revise it to loop over a list of municipality codes and aggregate results.