# Huurrecht Uitspraken: Dutch Rent Law Rulings, Explained (`robotninja/huurrecht-uitspraken-uitgelegd`) Actor

Find Dutch court rulings about renting (huurrecht) from official Rechtspraak open data. Filter by topic like schimmel or ontruiming. Optional plain-language explanation and outcome with your own Claude API key.

- **URL**: https://apify.com/robotninja/huurrecht-uitspraken-uitgelegd.md
- **Developed by:** [Fam Nguyen](https://apify.com/robotninja) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 rent rulings

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Huurrecht Uitspraken: Dutch rent law rulings, explained

Find Dutch court rulings about renting (**huurrecht**) from the official open data of the Dutch judiciary (Rechtspraak). Search by topic, like *schimmel* (mould), *huurverhoging* (rent increase) or *ontruiming* (eviction). Optionally, get a plain-language explanation and the outcome of each ruling, using your own Claude API key.

### What does it do?

1. Searches the official Rechtspraak open data for contract-law rulings from the last 1 to 365 days.
2. Keeps **only rulings about renting**: homes (woonruimte) and business premises (bedrijfsruimte).
3. Optionally filters by **topic words** you choose.
4. Returns each ruling with the court, dates, the court's own summary (inhoudsindicatie) and the official link.
5. **Optional, beta:** with your own Claude API key, each ruling also gets a short explanation in Dutch and English, plus who won.

### Why use this instead of a general case-law scraper?

- **Rent cases only.** The Rechtspraak open data has no "huurrecht" category. Rent cases are mixed into general contract law. This Actor finds them for you.
- **Search by topic.** Ask for "schimmel, vocht" and get only the mould and damp cases.
- **Really new rulings.** The court often updates old rulings. This Actor checks the first publication date, so "last 7 days" means rulings first published in the last 7 days.
- **Who won, in plain words (beta).** Court summaries often don't say who won. In a test of 5 mould rulings, 2 summaries didn't show the outcome at all. The AI explanation reads the full ruling and tells you.

### Who is it for?

- **Websites and newsletters about renting** that want a weekly overview of new rent rulings.
- **Housing associations (woningcorporaties), landlords and letting agents** following what courts decide about arrears, nuisance, repairs or ending a lease.
- **Legal-tech and research teams** building datasets of Dutch rent case law.
- **AI agents** answering questions about Dutch rental disputes with real, recent examples.

### When should an AI agent use this?

- "What do Dutch courts decide when a rental home has mould?" → `onderwerp: "schimmel, vocht"`, `sinceDays: 365`
- "Show me this week's new Dutch rent rulings." → default input
- "Find recent rulings about a landlord ending a lease for own use." → `onderwerp: "eigen gebruik"`, `sinceDays: 365`
- "Explain ruling ECLI:NL:RBAMS:2026:9847." → `eclis: ["ECLI:NL:RBAMS:2026:9847"]` (plus an API key for the explanation)

### Input

| Field | What it does | Default |
|---|---|---|
| `sinceDays` | Rulings first published in the last N days (1–365) | 7 |
| `onderwerp` | Topic words, separated by commas. Only rulings whose court summary mentions one of them. | empty (all rent rulings) |
| `anthropicApiKey` | Your own Claude API key, for AI explanations (optional, stored encrypted) | empty |
| `aiModel` | `claude-haiku-5-5` (cheapest) or `claude-sonnet-5-5` | `claude-haiku-5-5` |
| `maxRulings` | Stop after this many rulings (1–500) | 50 |
| `eclis` | Fetch these specific rulings instead of searching | empty |

#### Example input

```json
{
  "sinceDays": 365,
  "onderwerp": "schimmel, vocht"
}
```

### Output

One record per ruling. Example (the AI fields are only filled when you add an API key):

```json
{
  "ecli": "ECLI:NL:RBAMS:2026:9847",
  "rechtbank": "Rechtbank Amsterdam",
  "datum": "2026-10-02",
  "publicatiedatum": "2026-10-05",
  "procedure": ["Bodemzaak", "Eerste aanleg - enkelvoudig"],
  "officieleSamenvatting": "Beëindiging van de huurovereenkomst wegens dringend eigen gebruik wordt afgewezen. ...",
  "aantalWoorden": 1975,
  "link": "https://uitspraken.rechtspraak.nl/details?id=ECLI:NL:RBAMS:2026:9847",
  "uitlegStatus": "uitgelegd",
  "soortHuur": "woonruimte",
  "onderwerp": "opzegging wegens dringend eigen gebruik",
  "uitkomst": "huurder",
  "watKreegWie": "De huurders mogen blijven; de verhuurder betaalt de proceskosten.",
  "uitlegNL": "De verhuurder wilde de huur opzeggen omdat hij zelf in de woning wilde wonen. De rechter vindt dat hij niet heeft aangetoond dat dat nu nodig is. De huurders mogen blijven.",
  "uitlegEN": "The landlord wanted to end the lease to move back in himself. The court found he had not shown he needs the home right now. The tenants can stay.",
  "disclaimer": "AI-uitleg, geen juridisch advies. Lees altijd de officiële uitspraak. / AI explanation, not legal advice. Always read the official ruling."
}
```

`uitkomst` (outcome) is one of: `huurder` (tenant won), `verhuurder` (landlord won), `gemengd` (both partly), `geen_eindbeslissing` (interim ruling, no final decision yet).

`uitlegStatus` tells you what happened with the explanation: `uitgelegd` (explained), `geen_sleutel` (no API key given), `fout` (AI error for this ruling), `ai_gestopt` (AI stopped, e.g. invalid key or no credit).

### AI explanations (beta): bring your own key

- Add your own **Claude API key** in the input. The AI costs go to your own Claude account: about **$0.001 per ruling** with Claude Haiku 5.5, or about $0.015 with Claude Sonnet 5.5.
- Your key is stored **encrypted** by Apify and only used to call the Claude API during your run. It is never written to the log or the output.
- If the AI fails (wrong key, no credit, service busy), you still get all rulings, just without explanation. The log tells you why.
- With a key, cases that turn out not to be landlord–tenant disputes (for example squatters) are left out of search results.
- This feature is **new**. Please report anything odd via the **Issues** tab.

### Pricing

You pay per ruling delivered; see the **Pricing** tab for the current price. Runs without results cost almost nothing. AI explanations are paid separately by your own Claude API key.

### Good to know

- **About 7 new rent rulings are published per week.** For topic questions, search a longer period (90–365 days).
- The topic filter reads the **court's own summary**, not the full text. Use synonyms, like `schimmel, vocht`.
- Only **published** rulings are included. Courts publish a selection of all their decisions.
- One run looks back at most 365 days and returns at most 500 rulings.

### Data source and legal

- Source: the official open data of the Dutch judiciary, [Rechtspraak Open Data](https://www.rechtspraak.nl/uitspraken/open-data) (data.rechtspraak.nl). The rulings are public domain. Private persons are pseudonymized by the courts.
- No website scraping: the Actor uses the official open-data web service and respects its limits.
- This Actor is independent and not affiliated with the Rechtspraak.
- **Not legal advice.** AI explanations can be wrong. Always read the official ruling via the link.

### FAQ

**Do I need an API key?** No. Without a key you get all rent rulings with the court's summary and link. The key only adds the AI explanation.

**Which courts are included?** All courts in the open data that publish rent rulings, from rechtbanken (district courts) to gerechtshoven (courts of appeal) and the Hoge Raad (Supreme Court).

**Can I run it every week?** Yes. Use Apify Schedules with `sinceDays: 7` to get each week's new rent rulings.

### Changelog

- **0.2:** optional AI explanations with your own Claude API key (beta).
- **0.1:** rent rulings from Rechtspraak open data, topic filter, first-publication-date check.

# Actor input Schema

## Actor input object example

```json
{}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("robotninja/huurrecht-uitspraken-uitgelegd").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("robotninja/huurrecht-uitspraken-uitgelegd").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call robotninja/huurrecht-uitspraken-uitgelegd --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,robotninja/huurrecht-uitspraken-uitgelegd"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/al2NBbdOdDrCA8sex/builds/pYlny76A4lvn4QtxO/openapi.json
