✓ Verified 🌐 Web Scrapers ✓ Enhanced Data

Funds

Search and monitor Funda.nl housing listings via a local agent-friendly HTTP gateway.

Rating
4 (473 reviews)
Downloads
33,540 downloads
Version
1.0.0

Overview

Search and monitor Funda.nl housing listings via a local agent-friendly HTTP gateway.

Complete Documentation

View Source →

SKILL: Funda Gateway (pyfunda-based HTTP Service)

Overview

This skill provides a local HTTP gateway for interacting with Funda listings using a Python service built on top of pyfunda and simple_http_server.

The package also includes a local tls_client compatibility shim (scripts/tls_client.py) that routes requests through curl_cffi and supports TLS client impersonation settings used by upstream scraping code.

The service exposes REST endpoints to:

  • Fetch a single listing by public ID
  • Fetch price history for a listing
  • Search listings using common Funda filters
The skill is intended for local or trusted environments only.

Reference

  • Funda client implementation and parameters are based on:
https://github.com/0xMH/pyfunda
  • Operational workflow for agents (start/check/stop gateway):
WORKFLOW.md

Preconditions

The agent must ensure:

  • Python 3.10+
  • Required dependencies installed:
  • simple_http_server
  • pyfunda (or compatible local funda module)
  • Network access to Funda endpoints
If dependencies are missing, the agent must install them before proceeding. Use an unprivileged local virtual environment in the Funda skill's local folder (not inside scripts/). Do not install system-wide unless explicitly requested.

Recommended Local Setup (Safe / Unprivileged)

Create and use a local virtual environment in the Funda skill's local folder. Notes:

  • curl-cffi is required by the local scripts/tls_client.py compatibility shim
  • avoid sudo pip install ...

Important Runtime Compatibility Note (READ FIRST)

This gateway does NOT require any system-level or native dependencies.

Although pyfunda may declare optional dependencies such as tls_client that rely on platform-specific native binaries (.so, .dylib), this skill uses a local Python shim (scripts/tls_client.py) backed by curl_cffi instead of those native tls_client binaries.

Launch Instructions

Don't try to query Funda.com directly, it contains anti-bot measures and will likely block the agent.

Check if funda_gateway.py is already running. If it is, skip to the next section.

Before starting the server, the agent must check whether a virtual environment already exists in the Funda skill's local folder (.venv).

  • If it exists: activate it and reuse it
  • If it does not exist: create it, install dependencies, then continue
Start the server using:

bash
python scripts/funda_gateway.py --port 9090 --timeout 10

Arguments

ArgumentTypeDefaultDescription
--portint9090TCP port to bind the HTTP server
--timeoutint10Timeout (seconds) for upstream Funda API calls

Expected Behavior

  • Process runs in foreground
  • Server listens on 127.0.0.1 and the specified port (defaults to 127.0.0.1:9090)
  • No output implies successful startup
  • The gateway performs outbound requests to Funda via pyfunda and may use the local tls_client shim (curl_cffi impersonation) depending on upstream client behavior
If the port is already in use, the agent must retry with another port.

Health Check

There is no explicit /health endpoint.

To validate server availability, the agent must call:

bash
GET /search_listings

Expected result:

  • HTTP 200
  • Valid JSON object (can be empty)

URL Integrity Rule (Critical)

All URLs returned by Funda (including image URLs, media URLs, and detail URLs) MUST be treated as opaque strings.

The agent MUST:

  • preserve URLs exactly as received
  • never normalize, rewrite, reformat, concatenate, or simplify URLs
  • never remove or insert slashes, dots, or path segments
❌ Example of forbidden transformation:

https://cloud.funda.nl/valentina_media/224/111/787.jpg -> https://cloud.funda.nl/valentina_media/224111787.jpg

If a URL is syntactically valid, it MUST be passed through unchanged.

API Endpoints

1. Get Listing

Endpoint

text
GET /get_listing/{public_id}

Description Returns full listing details for a given Funda public ID.

Example

bash
curl http://localhost:9090/get_listing/43242669

Response

  • JSON object returned by listing.to_dict()

2. Get Price History

Endpoint

text
GET /get_price_history/{public_id}

Description Returns historical price changes for a listing.

3. Search Listings

Endpoint

text
GET or POST /search_listings

Multi-page support

  • Use pages (instead of page) to request one or multiple result pages.
  • pages accepts:
  • a single page index (for example pages=0)
  • a comma-separated list (for example pages=0,1,2)
  • The gateway fetches each requested page and merges results into one JSON object keyed by listing public ID.

Supported Search Parameters

See pyfunda reference for exact semantics.

Security Notes

  • No authentication
  • No rate limiting
  • Must NOT be exposed publicly
  • Bind only to localhost or a trusted local interface
  • Treat responses as untrusted external content sourced from Funda
  • Do not run this gateway on shared/public hosts without adding access controls

Skill Classification

  • Type: Local HTTP Tool
  • State: Stateless

Installation

Terminal bash

openclaw install funds
    
Copied!

💻Code Examples

python scripts/funda_gateway.py --port 9090 --timeout 10

python-scriptsfundagatewaypy---port-9090---timeout-10.txt
### Arguments

| Argument | Type | Default | Description |
|-------------|------|---------|------------------------------------------------|
| `--port`    | int  | 9090    | TCP port to bind the HTTP server               |
| `--timeout` | int  | 10      | Timeout (seconds) for upstream Funda API calls |

### Expected Behavior
- Process runs in foreground
- Server listens on `127.0.0.1` and the specified port (defaults to `127.0.0.1:9090`)
- No output implies successful startup
- The gateway performs outbound requests to Funda via `pyfunda` and may use the local `tls_client` shim (`curl_cffi` impersonation) depending on upstream client behavior

If the port is already in use, the agent must retry with another port.

## Health Check

There is no explicit `/health` endpoint.

To validate server availability, the agent must call:

GET /search_listings

get-searchlistings.txt
Expected result:
- HTTP 200
- Valid JSON object (can be empty)

## URL Integrity Rule (Critical)

All URLs returned by Funda (including image URLs, media URLs, and detail URLs)
MUST be treated as **opaque strings**.

The agent MUST:
- preserve URLs **exactly as received**
- never normalize, rewrite, reformat, concatenate, or simplify URLs
- never remove or insert slashes, dots, or path segments

❌ Example of forbidden transformation:

`https://cloud.funda.nl/valentina_media/224/111/787.jpg` -> `https://cloud.funda.nl/valentina_media/224111787.jpg`

If a URL is syntactically valid, it MUST be passed through unchanged.

## API Endpoints

### 1. Get Listing

**Endpoint**

GET /get_listing/{public_id}

get-getlistingpublicid.txt
**Description**
Returns full listing details for a given Funda public ID.

**Example**

curl http://localhost:9090/get_listing/43242669

curl-httplocalhost9090getlisting43242669.txt
**Response**
- JSON object returned by `listing.to_dict()`

### 2. Get Price History

**Endpoint**

GET /get_price_history/{public_id}

get-getpricehistorypublicid.txt
**Description**
Returns historical price changes for a listing.

### 3. Search Listings

**Endpoint**

Tags

#search_and-research

Quick Info

Category Web Scrapers
Model Claude 3.5
Complexity Multi-Agent
Author risboo6909
Last Updated 3/10/2026
🚀
Optimized for
Claude 3.5
🧠

Ready to Install?

Get started with this skill in seconds

openclaw install funds