Altroconsumo APIaltroconsumo.it ↗
Look up Italian broadband coverage by address, check FTTH/FTTC/FWA/ADSL availability per operator, and retrieve activable home internet offers from Altroconsumo.
What is the Altroconsumo API?
The Altroconsumo API exposes 3 endpoints for querying Italian home internet coverage and offers. Starting with search_addresses to resolve a free-text Italian address into a canonical geocoded form, you can then call check_coverage to see which fixed-line technologies and operators are activable at that location, and get_internet_offers to pull the full filtered list of home internet plans Altroconsumo's comparison tool shows for that address.
curl -X GET 'https://api.parse.bot/scraper/64f0227f-541d-401c-9c93-6099c3b4149d/search_addresses?query=Via+Roma+1%2C+Milano' \ -H 'X-API-Key: $PARSE_API_KEY'
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 altroconsumo-it-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: Altroconsumo internet-offer comparison by Italian address."""
from parse_apis.altroconsumo_it_api import (
Altroconsumo, SortBy, InputNotFound,
)
client = Altroconsumo()
# Autocomplete an address fragment to get geocoded suggestions.
suggestion = client.addresses.search(query="Via Roma 1, Milano", limit=3).first()
if suggestion is None:
print("no address matched")
raise SystemExit
print(f"Matched: {suggestion.address} ({suggestion.locality})")
# Check broadband coverage at the matched address.
try:
coverage = suggestion.check_coverage()
except InputNotFound:
print("address not recognised by the coverage database")
raise SystemExit
print(f"Available: {coverage.available} Best speed: {coverage.max_download_mbps} Mbps")
for tech in coverage.technologies or []:
print(f" {tech.code} ({tech.label}): {tech.max_download_mbps} Mbps "
f"infra={tech.infrastructures}")
# List internet offers at the same address, cheapest first.
catalog = suggestion.list_offers(sort_by=SortBy.PRICE, page_size=5)
print(f"\n{catalog.total_matched} offers matched "
f"(out of {catalog.total_offers_in_catalog} in catalogue)")
for offer in catalog.offers or []:
print(f" {offer.provider.name} – {offer.name}: "
f"€{offer.monthly_price}/mo ↓{offer.download_speed} {offer.download_speed_unit}")
print("\nexercised: addresses.search / check_coverage / list_offers")
Returns address suggestions for a free-text Italian address fragment (street, civic number, town), one row per matching geocoded address. Each suggestion carries a canonical `address` string that check_coverage and get_internet_offers accept unchanged; `lat`/`lon` are geocoder coordinates. Up to a handful of suggestions are returned in one round trip; an unrecognised fragment returns an empty `suggestions` list. The site rate-limits this lookup to roughly 20 calls per minute, after which it answers with an error status passed through as an upstream error.
| Param | Type | Description |
|---|---|---|
| queryrequired | string | Free-text address fragment, at least 4 characters, e.g. a street, civic number and town in one shape such as 'Via Roma 1, Milano'. |
{
"type": "object",
"fields": {
"count": "number of suggestions returned",
"query": "the trimmed query that was searched",
"suggestions": "array of geocoded address suggestions: address (canonical string accepted by the other endpoints), street, locality (postcode, town, province), display_name (full geocoder label), has_street_number, lat, lon"
},
"sample": {
"data": {
"count": 1,
"query": "Via Roma 1, Milano",
"suggestions": [
{
"lat": 45.5373311,
"lon": 9.1883962,
"street": "Via Roma, 1",
"address": "Via Roma 1, 20091 Bresso, MI",
"locality": "20091 Bresso (MI)",
"display_name": "Chiesa parrocchiale dei Santi Nazario e Celso, 1, Via Roma, Bresso, Zona Omogenea Milano Nord, Milano, Lombardia, 20091, Italia",
"has_street_number": true
}
]
},
"status": "success"
}
}About the Altroconsumo API
Address Resolution and Coverage
search_addresses accepts a free-text Italian address fragment of at least 4 characters and returns an array of geocoded suggestions. Each suggestion includes a canonical address string, a street, a locality field containing postcode and town, and lat/lon coordinates. That canonical address value is designed to be passed directly to the other two endpoints, reducing geocoding mismatches.
check_coverage takes that address and returns a per-technology breakdown: for each of FTTH, FTTC, FWA, and ADSL it reports availability, maximum download speed in Mbps where known, the underlying infrastructure name, and a list of operators each with an activable flag. The response also includes a top_tier speed-tier label (e.g. gigabit), a data_date field showing when the coverage data was last published (DD/MM/YYYY format), a precision label (e.g. building), and a data_source attribution.
Offer Listing and Filtering
get_internet_offers combines a coverage check with offer catalogue filtering in one call. It accepts the same address input plus optional filters: technologies (comma-separated codes from FTTH, FTTC, FWA, ADSL), providers (comma-separated operator slugs matching those emitted by check_coverage), modem, calls (landline plan type), sort_by, limit (capped at 100), and offset for pagination. The response includes an offers array where each entry carries id, name, slug, provider (with id, name, slug, website, and an altroconsumo_ratings map of satisfaction scores), and offer-level details. The coverage summary embedded in the response reports available_technologies, max_download_mbps, and top_tier for the resolved address. total_matched, count, offset, and has_more support paginating through results, while total_offers_in_catalog shows the unfiltered catalogue size (typically around 50 offers).
The Altroconsumo API is a managed, monitored endpoint for altroconsumo.it — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when altroconsumo.it 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 altroconsumo.it 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.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Check whether FTTH is available at a specific Italian street address before recommending fiber plans.
- Build an address-aware broadband comparison tool filtering offers by technology and operator using get_internet_offers.
- Display Altroconsumo satisfaction ratings per provider alongside plan pricing for Italian consumers.
- Identify which operators have activable infrastructure at a given location via check_coverage's per-operator flags.
- Power an autocomplete address search for Italian addresses using search_addresses with a 4-character minimum query.
- Audit broadband coverage gaps across Italian localities by iterating addresses and recording data_date and available fields.
- Filter home internet offers by modem type or landline call plan to match specific household requirements.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Altroconsumo offer an official public developer API for their comparison tools?+
What does check_coverage return beyond a simple yes/no availability answer?+
activable flag. It also returns top_tier, data_date (DD/MM/YYYY), precision (e.g. building), data_source, and a site disclaimer.How does pagination work in get_internet_offers?+
limit (capped at 100) and offset parameters. The response includes count (offers on this page), total_matched (offers matching all active filters at the address), offset (applied skip), and a has_more boolean that is true when offset + count is below total_matched.