Skip to content
Scrappa Get API key
derStandard Immobilien API 1 credit/request

derStandard Immobilien Property Search API Documentation

GET https://scrappa.co/api/derstandard-immobilien/search?tenure=rent&location=wien&price_max=1200

Scrappa's GET /api/derstandard-immobilien/search returns Austrian property listings from derStandard Immobilien (immobilien.derstandard.at) for rent, sale or auction as structured JSON.

What you get

One request returns one page of 15 listings and the real match count in total. Each listing has id, url, title, tenure, property_type, published_at, price (value, kind and gross or net), costs (deposit, monthly costs, fees), area, area_details, rooms, amenities, availability, a full address, all images, external_urls (video or 3D tour) and the company block. Call the listing endpoint for the description, condition, energy data and files.

Filters are honoured

Every filter is applied by the source, so total and the paging describe the real result set. Unknown parameters and unknown values are rejected with 422 instead of being ignored. applied_filters echoes what was sent. tenure is required: rent, buy or auction. An auction search with no open auctions returns 200 with total 0.

Location

location takes a slug and osm_ids takes comma-separated OpenStreetMap ids, both from /api/derstandard-immobilien/autocomplete. Use one of the two. An unknown location returns an empty list with total 0.

Types and amenities

property_type is apartment, house, commercial, lot, investment or other (garage and misc). building_type, property_subtype and amenities take comma-separated lists. amenities is an "all of" filter: a listing must have every amenity you list.

Price and area

price_min and price_max are in EUR and apply to the main price of the listing (monthly rent for rent, purchase price for sale). Listings with "price on request" have price null and never match a price range.

Pagination

page is 1-based and the page size is fixed at 15. A page past the last result page returns an empty list with the real total. It never returns another page's listings. The source serves at most 666 pages per search, so deeper pages return 422 (page_out_of_range). Narrow the filters instead. The source caches identical queries for about 60 seconds.

Coordinates

Listings carry no map coordinates. Use address, the postal code and the listing endpoint's osm_ids and breadcrumb for geography.

derStandard Immobilien Property Search API Documentation 1 credit/request

Endpoint

Request preview
GET
https://scrappa.co/api/derstandard-immobilien/search?tenure=rent&location=wien&price_max=1200
Auth header
x-api-key
Cost
1 credit/request
tenure = rent
Response preview
200 OK
{
    "success": true,
    "market": "austria",
    "currency": "EUR",
    "total": 1200,
    "returned": 1,
    "pagination": {
        "page": 1,
        "per_page": 15,
        "total_pages": 80,
        "has_more": true
    },
    "applied_filters": {
        "tenure": "rent",
...

Parameters

Start with the required fields, then add optional filters only when your use case needs them.

Runnable path

1 required parameter needed before sending a request.

15 optional filters available.

tenure string Required

rent, buy or auction.

Example value rent
location string Optional

Location slug from autocomplete, for example wien or bezirk-graz-umgebung.

Example value wien
osm_ids string Optional

Comma-separated OpenStreetMap ids from autocomplete. Not together with location.

Example value example
property_type string Optional

apartment, house, commercial, lot, investment or other.

Example value example
price_min integer Optional

Minimum price in EUR.

Example value 10
price_max integer Optional

Maximum price in EUR.

Example value 1200
area_min integer Optional

Minimum area in square metres.

Example value 10
area_max integer Optional

Maximum area in square metres.

Example value 10
rooms_min integer Optional

Minimum room count.

Example value 10
building_type string Optional

old_building, new_building or new_build_project. Comma-separated.

Example value example
property_subtype string Optional

attic, penthouse, maisonette or studio. Comma-separated.

Example value example
amenities string Optional

balcony, garden, elevator, furnished, terrace, parking_spot, pool or no_commission_fee. Comma-separated, all must apply.

Example value example
q string Optional

Free-text search in the listing.

Example value coffee shops
company_id string Optional

Only listings of one agency (company.id from a listing).

Example value 1234567890
sort string Optional

latest (default), price_asc, price_desc, area_asc or area_desc.

Example value relevance
page integer Optional

Result page, 1-based, up to 666.

Example value 1

Request Examples

PHP
<?php

$curl = curl_init();

curl_setopt_array($curl, [
    CURLOPT_URL => "https://scrappa.co/api/derstandard-immobilien/search?tenure=rent&location=wien&price_max=1200",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "GET",
    CURLOPT_HTTPHEADER => [
        "x-api-key: YOUR_API_KEY_HERE"
    ],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
    echo "cURL Error #:" . $err;
} else {
    echo $response;
}
PHP
<?php

use Illuminate\Support\Facades\Http;

$response = Http::timeout(30)
    ->withHeaders(['x-api-key' => 'YOUR_API_KEY_HERE'])
    ->get('https://scrappa.co/api/derstandard-immobilien/search?tenure=rent&location=wien&price_max=1200');

if ($response->successful()) {
    echo $response->body();
} else {
    echo "Error: " . $response->status();
}
JavaScript
const options = {
    method: 'GET',
    headers: {
        'x-api-key': 'YOUR_API_KEY_HERE'
    }
};

fetch('https://scrappa.co/api/derstandard-immobilien/search?tenure=rent&location=wien&price_max=1200', options)
    .then(response => {
        if (!response.ok) {
            throw new Error(`HTTP error! status: ${response.status}`);
        }
        return response.text();
    })
    .then(data => console.log(data))
    .catch(error => console.error('Error:', error));
JavaScript
const axios = require('axios');

const options = {
    method: 'GET',
    url: 'https://scrappa.co/api/derstandard-immobilien/search?tenure=rent&location=wien&price_max=1200',
    headers: {
        x-api-key: 'YOUR_API_KEY_HERE',
    }
};

try {
    const response = await axios(options);
    console.log(response.data);
} catch (error) {
    console.error('Error:', error.message);
}
Ruby
require 'net/http'
require 'uri'

uri = URI.parse("https://scrappa.co/api/derstandard-immobilien/search?tenure=rent&location=wien&price_max=1200")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == 'https'

request = Net::HTTP::Get.new(uri.request_uri)
request['x-api-key'] = 'YOUR_API_KEY_HERE'

begin
    response = http.request(request)
    puts response.body
rescue => e
    puts "Error: #{e.message}"
end
Python
import http.client
import json

conn = http.client.HTTPSConnection("scrappa.co")

headers = {
    'x-api-key': 'YOUR_API_KEY_HERE',
}

try:
    conn.request("GET", "/api/derstandard-immobilien/search?tenure=rent&location=wien&price_max=1200", headers=headers)
    res = conn.getresponse()
    data = res.read()
    print(data.decode("utf-8"))
except Exception as e:
    print(f"Error: {e}")
finally:
    conn.close()
Python
import requests

headers = {
    'x-api-key': 'YOUR_API_KEY_HERE',
}

try:
    response = requests.get('https://scrappa.co/api/derstandard-immobilien/search?tenure=rent&location=wien&price_max=1200', headers=headers)
    response.raise_for_status()
    print(response.text)
except requests.exceptions.RequestException as e:
    print(f"Error: {e}")
Java
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import java.io.IOException;

public class ApiExample {
    public static void main(String[] args) {
        OkHttpClient client = new OkHttpClient();

        Request request = new Request.Builder()
            .url("https://scrappa.co/api/derstandard-immobilien/search?tenure=rent&location=wien&price_max=1200")
        .addHeader("x-api-key", "YOUR_API_KEY_HERE")
            .build();

        try (Response response = client.newCall(request).execute()) {
            if (response.isSuccessful()) {
                System.out.println(response.body().string());
            } else {
                System.out.println("Error: " + response.code());
            }
        } catch (IOException e) {
            System.out.println("Error: " + e.getMessage());
        }
    }
}
Go
package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
)

func main() {
    client := &http.Client{}
    req, err := http.NewRequest("GET", "https://scrappa.co/api/derstandard-immobilien/search?tenure=rent&location=wien&price_max=1200", nil)
    if err != nil {
        fmt.Println("Error creating request:", err)
        return
    }
    req.Header.Set("x-api-key", "YOUR_API_KEY_HERE")

    resp, err := client.Do(req)
    if err != nil {
        fmt.Println("Error making request:", err)
        return
    }
    defer resp.Body.Close()

    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        fmt.Println("Error reading response:", err)
        return
    }

    fmt.Println(string(body))
}
Terminal
#!/bin/bash

curl -X GET \
    -H "x-api-key: YOUR_API_KEY_HERE" \
    "https://scrappa.co/api/derstandard-immobilien/search?tenure=rent&location=wien&price_max=1200"
C#
using System;
using System.Net.Http;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        using var client = new HttpClient();
        client.DefaultRequestHeaders.Add("x-api-key", "YOUR_API_KEY_HERE");

        try
        {
            var response = await client.SendAsync(new HttpRequestMessage(HttpMethod.Get, "https://scrappa.co/api/derstandard-immobilien/search?tenure=rent&location=wien&price_max=1200"));
            var content = await response.Content.ReadAsStringAsync();
            Console.WriteLine(content);
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error: {ex.Message}");
        }
    }
}
TypeScript
import axios from 'axios';

async function run(): Promise<void> {
    try {
        const response = await axios({
            method: 'GET',
            url: 'https://scrappa.co/api/derstandard-immobilien/search?tenure=rent&location=wien&price_max=1200',
            headers: {
        'x-api-key': 'YOUR_API_KEY_HERE',
            },
        });

        console.log(response.data);
    } catch (error) {
        console.error('Error:', error);
    }
}

void run();
RUST
use reqwest::Client;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let client = Client::new();

    let response = client
        .get("https://scrappa.co/api/derstandard-immobilien/search?tenure=rent&location=wien&price_max=1200")
        .header("x-api-key", "YOUR_API_KEY_HERE")
        .send()
        .await?;

    println!("{}", response.text().await?);

    Ok(())
}

Response Schema

Example response fields are illustrative; inspect the JSON before integrating.

Example response fields

Scan these fields before integrating.

success market currency total returned pagination applied_filters listings +1 more

Common listings fields

id url title tenure
JSON Response
200 OK
{
    "success": true,
    "market": "austria",
    "currency": "EUR",
    "total": 1200,
    "returned": 1,
    "pagination": {
        "page": 1,
        "per_page": 15,
        "total_pages": 80,
        "has_more": true
    },
    "applied_filters": {
        "tenure": "rent",
        "location": "wien",
        "price_max": 1200,
        "sort": "latest"
    },
    "listings": [
        {
            "id": "15295442",
            "url": "https://immobilien.derstandard.at/detail/15295442",
            "title": "2-Zimmer Mietwohnung nur 6 Minuten von der U1-Station Reumannplatz entfernt",
            "tenure": "rent",
            "property_type": "apartment",
            "published_at": "2026-10-26T02:08:00.000Z",
            "price": {
                "value": 699,
                "currency": "EUR",
                "kind": "base_rent_plus_utilities",
                "type": "gross"
            },
            "costs": [
                {
                    "kind": "operating_costs",
                    "gross": null,
                    "net": 103.75,
                    "vat": null,
                    "text": null
                },
                {
                    "kind": "deposit",
                    "gross": null,
                    "net": null,
                    "vat": null,
                    "text": "3 Bruttomonatsmieten"
                }
            ],
            "area": {
                "kind": "living_space",
                "value": 44,
                "unit": "m2"
            },
            "area_details": {
                "living_space": 44,
                "room_count": 2,
                "balcony_count": 1
            },
            "rooms": 2,
            "amenities": [
                "balcony",
                "no_commission_fee"
            ],
            "availability": {
                "text": null,
                "available_from": null,
                "publish_on": null,
                "short_term_years": null
            },
            "address": {
                "street": null,
                "zip_code": "1100",
                "city": "Wien",
                "district": null,
                "state": "Wien",
                "country_code": "AUT"
            },
            "images": [
                "https://ic.ds.at/w73-Sw/plain/immoimporte/example/image-1.jpg"
            ],
            "external_urls": [],
            "company": {
                "id": "48a658ba-6831-4d77-b600-a52cad70399f",
                "name": "REMAX Capital",
                "website": null,
                "logo": "https://ic.ds.at/mNB3Jw/plain/immoupload/example/logo.jpg",
                "address": null
            }
        }
    ],
    "meta": {
        "endpoint_family": "search",
        "billable": true,
        "attempts": 1,
        "duration_ms": 640
    }
}

Errors

Handle these documented responses before retrying or showing customer-facing failures.

422

Page Out of Range

The `page` lies beyond page 666, the deepest page the source serves (`page_out_of_range`). Narrow the filters instead. A page just past the last result page returns an empty list with the real total. Non-billable.

{
    "meta": {
        "attempts": 0,
        "billable": false,
        "retryable": false,
        "endpoint_family": "search"
    },
    "error": {
        "code": "page_out_of_range",
        "message": "Page 99999 is too deep. The source serves at most 666 pages per search. Narrow the filters instead."
    },
    "success": false
}
422

Validation Error

A query parameter is missing, unknown or unusable. Unknown parameters are rejected, never ignored. Non-billable.

{
    "errors": {
        "tenure": [
            "The tenure field is required."
        ]
    },
    "message": "The tenure field is required."
}
503

Upstream Unavailable

derStandard Immobilien could not be reached or answered with an error (`upstream_unavailable`). When no outbound connection is available nothing is sent and `meta.attempts` is 0. Retryable and never billed. Clients are never rate limited.

{
    "meta": {
        "attempts": 2,
        "billable": false,
        "retryable": true,
        "endpoint_family": "search"
    },
    "error": {
        "code": "upstream_unavailable",
        "message": "derStandard Immobilien is temporarily unavailable. Please retry."
    },
    "success": false
}

Generate Code with AI

Copy a ready-made prompt with all the endpoint details, parameters, and example responses. Paste it into ChatGPT, Claude, or any AI assistant to instantly generate working code.

Try It Live

Test this endpoint in our interactive playground with real data.