VivaReal property search
Homes and commercial property in Brazil on VivaReal with the site's filters: sale or rent, place (city or neighbourhood), property types, residential or commercial, price, bedrooms, bathrooms, suites, parking spaces, usable area, amenities and sort. Each result has id, link, title, types, prices (sale or rent, condo fee, yearly IPTU), bedrooms, bathrooms, suites, parking, areas, amenities, dates, full address with coordinates, photos, videos and the advertiser (agency name, CRECI licence, logo, page and phones; a private owner's phones are left out). Pass next_page back as page; null on the last page (the site shows up to 10,000 results).
Every response includes credits_used: the credits this call cost.
Parameters
| name | type | description |
|---|---|---|
location | string | City or neighbourhood name; the best match is used (see /vivareal/v1/places). Example: Curitiba |
city | string | City name, with state, instead of location. |
state | string | State name (e.g. São Paulo, Rio de Janeiro), with city. |
business | sale | rent | Sale or rent. Example: sale |
listing_type | used | development | used (default) or development (new launches). |
unit_types | string | Property types, comma-separated: APARTMENT, HOME, CONDOMINIUM, PENTHOUSE, FLAT, KITNET, TWO_STORY_HOUSE, FARM, RESIDENTIAL_ALLOTMENT_LAND, COMMERCIAL_PROPERTY, OFFICE, BUSINESS, SHED_DEPOSIT_WAREHOUSE, COMMERCIAL_BUILDING, COMMERCIAL_ALLOTMENT_LAND, PARKING_SPACE, HOTEL. |
usage | residential | commercial | Residential or commercial. |
price_min | number | Minimum price (BRL). |
price_max | number | Maximum price (BRL). |
area_min | number | Minimum usable area (m²). |
area_max | number | Maximum usable area (m²). |
bedrooms | string | Bedrooms, comma-separated (e.g. 2,3). |
bathrooms | string | Bathrooms, comma-separated. |
suites | string | Suites, comma-separated. |
parking_spaces | string | Parking spaces, comma-separated. |
amenities | string | Amenities, comma-separated: POOL, GYM, ELEVATOR, BARBECUE_GRILL, PARTY_HALL, PLAYGROUND, GATED_COMMUNITY, FURNISHED, PETS_ALLOWED, AIR_CONDITIONING, BALCONY, CONCIERGE_24H, SPORTS_COURT, SAUNA, ... |
sort | relevance | newest | price_asc | price_desc | Sort order. Example: relevance |
limit | integer | Results per page, 1-100. Example: 24 |
page | integer | Page number, starting at 1. Pass next_page back as page; it is null on the last page. Example: 1 |
Every endpoint also takes fresh, raw, fields (see lean responses and caching).
Example
curl "https://api.api.sh/vivareal/v1/search?location=Curitiba" \
-H "x-api-key: $APISH_KEY" import os, requests
res = requests.get(
"https://api.api.sh/vivareal/v1/search",
params={"location": "Curitiba"},
headers={"x-api-key": os.environ["APISH_KEY"]},
timeout=120,
)
res.raise_for_status()
data = res.json() const url = new URL("https://api.api.sh/vivareal/v1/search");
url.searchParams.set("location", "Curitiba");
const res = await fetch(url, { headers: { "x-api-key": process.env.APISH_KEY } });
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
const data = await res.json(); Response
A JSON object with the fields described above, plus raw (the source's own data), cached, fetched_at and credits_used. Errors return {"success": false, "error": "…"} with the HTTP status (see errors). A lookup that ran but found nothing (404) costs the price above; refused calls and errors on our side are free (what's charged).