Skip to content
Scrappa Get API key
WG-Gesucht API 1 credit/request

WG-Gesucht Listings

GET https://scrappa.co/api/wg-gesucht/listings?ids=13841674%2C14159892

Fetch full detail for specific WG-Gesucht offers in one call. Pass the offer ids returned by search, or a single id for one listing. Unlike a search card, a listing carries the district_id needed to join it to the districts endpoint. Ids the platform no longer serves are dropped rather than reported, so compare total_items against requested_ids: a partly-stale list is a billed 200 whose total_items is lower than the ids you sent. If every id has vanished the call answers a non-billable 404 with code listings_not_found and retryable false, because a fully expired id cache will still be expired on the next attempt. The upstream cap is 20 ids per call, the largest list the platform has been measured to honour; a longer list is rejected rather than silently truncated.

WG-Gesucht Listings 1 credit/request

Endpoint

Request preview
GET
https://scrappa.co/api/wg-gesucht/listings?ids=13841674%2C14159892
Auth header
x-api-key
Cost
1 credit/request
ids = 13841674,14159892
Response preview
200 OK
{
    "success": true,
    "data": {
        "listings": [
            {
                "offer_id": 13841674,
                "offer_title": "Helle 2-Zimmer-Wohnung in Prenzlauer Berg",
                "category": 2,
                "category_label": "Wohnung",
                "city_id": 8,
                "district_id": 114,
                "total_costs": 850,
                "number_of_rooms": 2,
                "property_size": 52,
...

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.

ids string Required

One to 20 offer ids. Pass them comma separated as ids=1,2,3 or as repeated ids[] parameters. Required.

Example value 13841674,14159892

Request Examples

PHP
<?php

$curl = curl_init();

curl_setopt_array($curl, [
    CURLOPT_URL => "https://scrappa.co/api/wg-gesucht/listings?ids=13841674%2C14159892",
    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/wg-gesucht/listings?ids=13841674%2C14159892');

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/wg-gesucht/listings?ids=13841674%2C14159892', 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/wg-gesucht/listings?ids=13841674%2C14159892',
    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/wg-gesucht/listings?ids=13841674%2C14159892")
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/wg-gesucht/listings?ids=13841674%2C14159892", 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/wg-gesucht/listings?ids=13841674%2C14159892', 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/wg-gesucht/listings?ids=13841674%2C14159892")
        .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/wg-gesucht/listings?ids=13841674%2C14159892", 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/wg-gesucht/listings?ids=13841674%2C14159892"
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/wg-gesucht/listings?ids=13841674%2C14159892"));
            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/wg-gesucht/listings?ids=13841674%2C14159892',
            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/wg-gesucht/listings?ids=13841674%2C14159892")
        .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 data meta
JSON Response
200 OK
{
    "success": true,
    "data": {
        "listings": [
            {
                "offer_id": 13841674,
                "offer_title": "Helle 2-Zimmer-Wohnung in Prenzlauer Berg",
                "category": 2,
                "category_label": "Wohnung",
                "city_id": 8,
                "district_id": 114,
                "total_costs": 850,
                "number_of_rooms": 2,
                "property_size": 52,
                "available_from_date": "2026-11-01T00:00:00+00:00",
                "images": [
                    "https://img.wg-gesucht.de/media/up/abc123.jpg"
                ]
            }
        ],
        "total_items": 2,
        "requested_ids": 2,
        "images_base_url": "https://img.wg-gesucht.de/"
    },
    "meta": {
        "duration_ms": 298,
        "endpoint_family": "listings"
    }
}

Errors

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

Not Found

The requested query combination is not served. This response is not billable.

Listings Not Found

None of the requested listing ids were found (`listings_not_found`). Terminal and not retryable: an expired id cache stays expired. A partly-stale list is a billed 200 instead, with total_items lower than requested_ids. This response is not billable.

Validation Error

A public parameter is invalid, including a missing scope field or a category and rent type the platform does not serve. This response is not billable.

Service Unavailable

The service could not obtain a complete result. This response is not billable.

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.