MutuiSupermarket APImutuisupermarket.it ↗
Fetch live Italian mortgage quotes from MutuiSupermarket.it. Get rates, installments, bank details, insurance costs, and promo info for any loan profile.
What is the MutuiSupermarket API?
The MutuiSupermarket.it API exposes a single endpoint, search_mortgage_quotes, that returns the full ranked list of Italian mortgage offers — typically 15–35 quotes per call — matching a loan profile defined by amount, property value, duration, rate type, purpose, province, applicant age, monthly income, and energy class. Each quote includes the bank name, TAN, TAEG, monthly installment, insurance costs, promo flags, and a direct link to the product sheet on MutuiSupermarket.
curl -X GET 'https://api.parse.bot/scraper/dc093b80-3af1-4fec-844f-46bc43824439/search_mortgage_quotes?loan_amount=140000&property_value=220000' \ -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 mutuisupermarket-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: MutuiSupermarket SDK — compare Italian mortgage quotes."""
from parse_apis.mutuisupermarket_it_api import (
MutuiSupermarket, Purpose, RateType, InputFormatInvalid,
)
client = MutuiSupermarket()
# Fetch the full comparison wrapper to inspect metadata alongside quotes.
try:
comparison = client.comparisons.search(
loan_amount=140000,
property_value=220000,
purpose=Purpose.FIRST_HOME_PURCHASE,
rate_type=RateType.FIXED,
)
except InputFormatInvalid as e:
print("Bad input:", e.message)
raise
print(f"Total quotes: {comparison.total}, adjusted: {comparison.search_adjusted}")
if comparison.warning:
print("Warning:", comparison.warning)
# Show applied search parameters echoed by the site.
print(f"Search applied — duration: {comparison.search.duration_years}y, province: {comparison.search.province}")
# Browse top quotes via the paginated accessor, capped at 5 items.
for quote in client.quotes.search(
loan_amount=140000,
property_value=220000,
purpose=Purpose.FIRST_HOME_PURCHASE,
rate_type=RateType.FIXED,
limit=5,
):
print(
f"{quote.bank_name}: {quote.product_name} — "
f"installment €{quote.monthly_installment}/mo, "
f"TAN {quote.tan}%, TAEG {quote.taeg}%"
)
if quote.is_promo and quote.promo_text:
print(f" Promo: {quote.promo_text}")
# Drill into the cheapest quote's details.
cheapest = client.quotes.search(
loan_amount=140000,
property_value=220000,
rate_type=RateType.FIXED,
limit=1,
).first()
if cheapest is not None:
print(f"\nCheapest fixed: {cheapest.product_name} by {cheapest.bank_name}")
print(f" Upfront costs: €{cheapest.upfront_costs_total}, recurring: €{cheapest.recurring_costs_total}")
print(f" Total credit cost: €{cheapest.total_credit_cost}")
for benefit in cheapest.benefits:
print(f" ✓ {benefit.text}")
print("\nexercised: comparisons.search / quotes.search")
Runs a mortgage quote search on MutuiSupermarket and returns the full list of matching bank offers in one call (no pagination; the site returns the whole comparison list, typically 15-35 quotes, ordered as the site ranks them by monthly installment). Each quote carries the bank, product identity and page URL, computed monthly installment, TAN/TAEG, index and spread, upfront and recurring costs, substitute tax, insurance premiums (frequency codes AN = annual, UP = one-off), total credit amount and cost, promo/highlight info with end dates in DD/MM/YYYY, benefits, enabled durations and the full product-sheet descriptions (target customers, financeable amount, rate calculation, fees, insurance, early repayment penalty, guarantees, notes). Monetary values are euro; percentages are plain numbers (2.9 = 2.90%). Province, purpose, rate type and energy class combinations with no exact match make the site relax the criteria: search_adjusted becomes true and warning carries the site's notice (the quotes list can then be empty). Unknown province codes behave the same way. Invalid rate_type, purpose or energy_class values and non-positive numeric inputs are rejected with a stale_input error before any request.
| Param | Type | Description |
|---|---|---|
| purpose | string | Mortgage purpose (finalità). |
| province | string | Two-letter Italian province code of the property (also used as the applicant's home province), e.g. MI or RM. |
| rate_type | string | Interest rate type filter; TUTTI returns every rate type. |
| loan_amountrequired | integer | Requested mortgage amount in euro (ImportoMutuo). |
| energy_class | string | Property energy class. Omitted = unknown (site default), which also includes green-only offers in the list. |
| applicant_age | integer | Applicant age in years. |
| duration_years | integer | Mortgage duration in years. Banks publish their own enabled durations (see enabled_durations_years in each quote); 20 and 25 were exercised. |
| monthly_income | integer | Applicant net monthly income in euro. |
| property_valuerequired | integer | Value of the property in euro (ValoreImmobile). |
{
"type": "object",
"fields": {
"total": "integer number of quotes returned",
"quotes": "array of quote objects: bank_code, bank_name, bank_customer_rating (0-5), channel_type, product_code, product_name, product_url, rate_type_label, monthly_installment, initial_period_years/installment (mixed-rate products), cap, tan, tan_description, taeg, index_name, index_value, spread, upfront_costs_total, application_fee, appraisal_fee, appraisal_fee_is_estimate, other_upfront_costs, substitute_tax, recurring_costs_total, monthly_admin_fee, annual_admin_fee, fire/life/job_loss/cpi insurance premium + frequency, cpi_insurance_note, total_credit_amount, total_credit_cost, application_type, is_promo, is_consap, is_sponsored, promo_type, promo_text, promo_end_date, signing_deadline, highlight_label, rate_conditions, average_disbursement_time, benefits[] ({icon_id,text}), enabled_durations_years[], enabled_energy_classes, and product-sheet texts (target_customers, purposes, financeable_amount, min_amount, max_amount, available_durations, rate_calculation, upfront_costs_description, recurring_costs_description, insurance_description, early_repayment_penalty, required_guarantees, disbursement_timing, notes); text fields are null when the bank publishes none",
"search": "object echoing the parameters the site actually applied (loan_amount, property_value, duration_years, rate_type, purpose, province, applicant_age, monthly_income, energy_class)",
"warning": "site notice text when search_adjusted is true, otherwise null",
"search_adjusted": "boolean, true when the site relaxed the criteria because no exact match existed"
},
"sample": {
"data": {
"total": 31,
"quotes": [
{
"cap": null,
"tan": 2.9,
"taeg": 3.1342,
"notes": "Il mutuo è perfezionato sotto forma di \"mutuo fondiario\".",
"spread": 0,
"benefits": [
{
"text": "Offerta esclusiva per clienti MutuiSupermarket",
"icon_id": "43"
},
{
"text": "Spese di istruttoria ridotte",
"icon_id": "4"
},
{
"text": "Ampia offerta polizze facoltative",
"icon_id": "20"
}
],
"is_promo": true,
"purposes": "Acquisto prima casa",
"bank_code": "BCCM",
"bank_name": "BCC Milano",
"is_consap": false,
"index_name": "Tasso finito",
"max_amount": "€ 400.000",
"min_amount": "Non previsto",
"promo_text": "Promozione fino al 31/12/2026",
"promo_type": "PROSTD",
"index_value": 2.9,
"product_url": "https://www.mutuisupermarket.it/mutuo-a-tasso-fisso",
"channel_type": "F",
"is_sponsored": false,
"product_code": "BCCMACQFIS",
"product_name": "Mutuo Fisso ScegliMI Acquisto",
"appraisal_fee": 250,
"promo_end_date": "31/12/2026",
"substitute_tax": 350,
"application_fee": 1000,
"highlight_label": "Promozione fino al 31/12/2026",
"rate_conditions": "Condizioni valide per mutui deliberati entro il 31/12/2026",
"rate_type_label": "Fisso",
"tan_description": "Tasso finito",
"annual_admin_fee": 0,
"application_type": "F",
"rate_calculation": "Tasso fisso finito determinato in funzione della percentuale di intervento (LTV): Durata fino a 25 anni: 2,90%",
"signing_deadline": "31/12/2026",
"target_customers": "Persone fisiche residenti e acquistanti nel territorio di competenza della Banca con età ricompresa negli 80 anni a scadenza del mutuo.",
"monthly_admin_fee": 2.5,
"total_credit_cost": 60458.1247,
"cpi_insurance_note": "non obbligatoria per ottenere il mutuo, ma necessaria per ottenerlo alle condizioni sotto riportate",
"financeable_amount": "Importo massimo: fino all' 80% del valore dell'immobile posto a garanzia e non oltre € 400.000",
"available_durations": "10, 15, 20, 25 anni",
"disbursement_timing": "Erogazione contestuale all'atto, salvo verifica sulla singola pratica",
"monthly_installment": 656.64,
"other_upfront_costs": 0,
"product_sheet_title": "Preventivo completo Mutuo Fisso ScegliMI Acquisto",
"required_guarantees": "La garanzia è rappresentata da ipoteca di primo grado concessa sulla base dei requisiti del credito fondiario.",
"total_credit_amount": 138400,
"upfront_costs_total": 1250,
"bank_customer_rating": 4.5,
"initial_period_years": 0,
"cpi_insurance_premium": 0,
"insurance_description": "Coperture assicurative obbligatorie: Polizza incendio e scoppio immobile Casa Protetta di BCC Assicurazioni a premio annuo.",
"recurring_costs_total": 1867,
"enabled_energy_classes": "Ogni categoria di Classe Energetica da A a G",
"fire_insurance_premium": 44.68,
"life_insurance_premium": 0,
"cpi_insurance_frequency": "UP",
"early_repayment_penalty": null,
"enabled_durations_years": [
10,
15,
20,
25
],
"fire_insurance_frequency": "AN",
"life_insurance_frequency": "UP",
"appraisal_fee_is_estimate": true,
"average_disbursement_time": "dalla consegna dei documenti d'istruttoria alla banca: 81 giorni medi, 56 minimi (rilevazione MutuiSupermarket sugli ultimi 24 mesi)",
"upfront_costs_description": "Spese di istruttoria: € 1.000\r\nSpese di perizia: € 250",
"fire_insurance_is_estimate": false,
"initial_period_installment": 0,
"job_loss_insurance_premium": 0,
"recurring_costs_description": "Spese incasso rata: € 2,50",
"job_loss_insurance_frequency": "UP"
}
],
"search": {
"purpose": "APC",
"province": "MI",
"rate_type": "F",
"loan_amount": 140000,
"energy_class": null,
"applicant_age": 35,
"duration_years": 25,
"monthly_income": 2400,
"property_value": 220000
},
"warning": null,
"search_adjusted": false
},
"status": "success"
}
}About the MutuiSupermarket API
What the API returns
Calling search_mortgage_quotes with a loan_amount (required, in euro) and optional filters returns a quotes array plus a search object that reflects the parameters the site actually applied. Each quote object includes bank_name, bank_code, bank_customer_rating (0–5 scale), channel_type, product_name, product_code, product_url, and a full set of rate and cost fields. The total field tells you how many quotes were returned without needing to parse the array first.
Filtering the search
Beyond loan_amount, the endpoint accepts purpose (e.g. first home purchase, refinancing), rate_type (fixed, variable, or TUTTI for all types), province (two-letter Italian province code such as MI or RM), duration_years, applicant_age, monthly_income, and energy_class. Banks publish their own enabled durations; the enabled_durations_years field on each quote lets you know which terms that lender actually supports, so you can surface mismatches between the requested duration and what's available.
Adjusted results and warnings
When the site cannot find quotes that exactly match the requested criteria, it relaxes the constraints and sets search_adjusted to true. In that case the warning field carries the notice text the site displays to the user — useful for surfacing to end-users why results may differ from what they entered. When an exact match is found, warning is null.
Coverage and data freshness
The API covers the Italian mortgage market as listed on MutuiSupermarket.it, which aggregates offers from multiple Italian banks. Results reflect whatever offers are live on the site at the time of the call. There is no pagination — the full comparison list is returned in a single response.
The MutuiSupermarket API is a managed, monitored endpoint for mutuisupermarket.it — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when mutuisupermarket.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 mutuisupermarket.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?+
- Build an Italian mortgage comparison tool that displays TAN, TAEG, and monthly installment side-by-side across multiple banks
- Alert users when a lower-rate offer appears for their loan profile by polling search_mortgage_quotes on a schedule
- Pre-qualify applicants by filtering quotes by monthly_income and applicant_age to show only realistically accessible offers
- Surface green-mortgage options by passing a specific energy_class value and highlighting any promo flags in results
- Show province-specific rate variations by running parallel queries with different province codes for the same loan amount
- Embed a mortgage calculator widget that maps loan_amount and duration_years inputs to live bank installment figures
- Analyse fixed vs. variable rate spreads across the Italian market using the rate_type filter on identical loan profiles
| 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 MutuiSupermarket.it have an official developer API?+
What does the search_adjusted flag mean, and how should I handle it?+
search_adjusted is true, the site could not find quotes matching the exact criteria you submitted and relaxed one or more constraints. The warning field contains the human-readable explanation the site provides. You should surface this text to end-users so they understand results may not perfectly match their inputs. When search_adjusted is false, warning is null.Can I retrieve historical mortgage rate data or track rate changes over time?+
Does the API return individual bank branch contact details or full amortisation schedules?+
product_url linking to the full product sheet on MutuiSupermarket where that information may be found. You can fork this API on Parse and revise it to add an endpoint that fetches and parses a product sheet for the detailed schedule.How many quotes does a single call return, and is there pagination?+
search_mortgage_quotes call returns the full ranked list as the site produces it — typically 15–35 quote objects — along with a total integer confirming the count. All quotes are ordered by the site's default ranking, which sorts by monthly installment.