# Polish Tax Interpretations & VAT Rulings API (EUREKA) (`kris_fili/poland-tax-interpretations`) Actor

Search 560,000+ official Polish tax interpretations (KIS), binding VAT rate rulings (WIS), tax explanations and Ministry of Finance guidance from the EUREKA database. Full text as Markdown, key sections and the outcome – ready for AI agents, RAG and Claude via MCP.

- **URL**: https://apify.com/kris_fili/poland-tax-interpretations.md
- **Developed by:** [Krzysztof Filipiak](https://apify.com/kris_fili) (community)
- **Categories:** AI, Business, Automation
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 results

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

## Polish Tax Interpretations & VAT Rulings API (EUREKA)

Search **over 550,000 official Polish tax documents** from **EUREKA**, the public database of the Polish Ministry of Finance – individual tax interpretations issued by the National Tax Information (KIS), binding VAT rate information (WIS), general interpretations, tax explanations, Ministry guidance and tax-related court rulings.

You get clean, structured JSON: signature, issue date, status, thesis, the **outcome** (was the taxpayer's position correct?), the **key sections** (facts, question, taxpayer's position, the authority's assessment) and the **full text as Markdown**. It is built for **AI agents, RAG pipelines and legal-tech tools** – and works from Claude, ChatGPT or Cursor through the Apify MCP server.

EUREKA itself offers only a website search – this Actor turns it into a simple API with clean, structured output.

### What you can do with it

- 🤖 **Give your AI agent Polish tax law grounding.** Let Claude or another LLM search real interpretations and quote signatures instead of guessing.
- 📚 **Build a RAG knowledge base** of interpretations on your topic (VAT, CIT, PIT, IP Box, leasing, transfer pricing…) in Markdown, ready for embeddings.
- 🧾 **Look up VAT rates (WIS).** Search binding rate information by product or service and get the rate, the classification, the legal basis and the validity period as separate fields.
- 🔔 **Monitor new interpretations** on a topic – run on a schedule with `sortBy: newest` and a date filter, and send results to Slack, e-mail or Google Sheets with Apify integrations.
- ⚖️ **Support tax advisors and accountants** with fast research: how often KIS agreed with taxpayers on a given issue, and why.

### Data available

| Document type | Approx. number |
|---|---|
| Individual tax interpretations (interpretacje indywidualne) | 525,000+ |
| Binding VAT rate information – WIS | 24,500+ |
| General interpretations, tax explanations, MF guidance, local government interpretations, court rulings and more | thousands |

The Ministry publishes new documents continuously. This Actor queries EUREKA live, so you always get the current state.

### How to use

1. Type a **phrase in Polish** – e.g. `leasing samochodu osobowego`, `ulga na złe długi`, `IP Box`, `catering stawka VAT`.
2. Choose the **document type** (individual interpretations by default, or WIS for VAT rates).
3. Choose the **detail level**:
   - **Summary** – signature, date, type, status, thesis, link (fast, cheapest),
   - **Key sections + outcome** – best for AI agents: the facts, the question, the taxpayer's position, the assessment and the outcome,
   - **Full text** – the whole document as Markdown.
4. Run it and download the results as JSON, CSV or Excel – or read them via API.

You can also paste a **signature** (e.g. `0114-KDIP4-2.4012.626.2026.3.MC`, or only its beginning) or **EUREKA document IDs/links** to fetch specific documents.

#### Example inputs

Search interpretations with key sections:

```json
{
  "query": "leasing samochodu osobowego",
  "documentType": "individual-interpretation",
  "detailLevel": "sections",
  "maxResults": 10,
  "maxTextCharacters": 15000
}
```

Find the VAT rate for a product (newest WIS first):

```json
{
  "query": "catering",
  "documentType": "binding-rate-information",
  "detailLevel": "sections",
  "sortBy": "newest",
  "maxResults": 5
}
```

Newest interpretations issued since a date (for monitoring):

```json
{
  "query": "IP Box",
  "sortBy": "newest",
  "dateFrom": "2026-10-01",
  "maxResults": 50
}
```

### Output example

```json
{
  "rank": 1,
  "id": "712074",
  "signature": "0114-KDIP4-2.4012.626.2026.3.MC",
  "issueDate": "2026-09-25",
  "publicationDate": "2026-10-07",
  "documentType": "Interpretacja indywidualna",
  "documentTypeEn": "Individual tax interpretation",
  "status": "Aktualna",
  "statusEn": "current",
  "issuingAuthority": "Dyrektor Krajowej Informacji Skarbowej",
  "thesis": "Prawo do odliczenia podatku VAT od wydatków związanych z samochodem osobowym.",
  "outcome": "incorrect",
  "outcomeSentence": "Stanowisko, które przedstawił Pan we wniosku jest nieprawidłowe.",
  "sections": {
    "facts": "Wnioskodawca jest osobą fizyczną zarejestrowaną jako czynny podatnik podatku od towarów i usług…",
    "question": "Czy wysokość odliczenia VAT od wydatków związanych z samochodem powinna być ustalana według sposobu wykorzystywania samochodu…",
    "applicantPosition": "Tak. Zdaniem Wnioskodawcy, o wysokości odliczenia decyduje sposób wykorzystywania samochodu…",
    "assessment": "Stanowisko, które przedstawił Pan we wniosku jest nieprawidłowe.",
    "justification": "Zgodnie z art. 86 ust. 1 ustawy z dnia 11 marca 2004 r. o podatku od towarów i usług…"
  },
  "textLength": 38765,
  "url": "https://eureka.mf.gov.pl/informacje/podglad/712074",
  "totalMatches": 1232
}
```

For WIS documents you also get:

```json
"bindingRateInformation": {
  "subject": "Usługa – prowadzenie zajęć taneczno-ruchowych dla dzieci w (...)",
  "classification": "Pozostałe usługi związane z rekreacją - wyłącznie w zakresie wstępu",
  "vatRate": "8%",
  "vatRatePercent": "8",
  "legalBasis": "art. 41 ust. 2 ustawy w zw. z art. 146ef ust. 1 pkt 2 ustawy w zw. z poz. 68 załącznika nr 3 do ustawy",
  "validFrom": "2026-10-16",
  "validTo": "2031-10-16"
}
```

**Outcome values:** `correct` (stanowisko prawidłowe), `incorrect` (nieprawidłowe), `partly-correct` (w części prawidłowe), `refusal` (procedural refusal / no ruling), or `null` when it cannot be determined. The outcome is detected automatically from the text – check `outcomeSentence` before relying on it.

A run summary (number of matches, results returned, settings) is saved as `SUMMARY` in the key-value store.

### Use it from Claude, ChatGPT or Cursor (MCP)

Add this Actor as a tool through the Apify MCP server:

`https://mcp.apify.com/?actors=kris_fili/poland-tax-interpretations`

Then simply ask, for example: *"Find recent Polish tax interpretations on VAT deduction for leased passenger cars and tell me whether KIS agreed with taxpayers. Quote the signatures."* The agent calls the Actor with `detailLevel: sections` and answers with real, verifiable sources.

Tip for agents: use `maxTextCharacters` (e.g. 15000) to keep long documents within the context window, then fetch the full text of the most relevant ones with `documentIds`.

### Pricing

Pay only for what you get (pay per event):

| Event | Price |
|---|---|
| Result – one document returned (signature, date, status, thesis, link) | $0.001 |
| Document details – full text, key sections, outcome or WIS fields (added to the result) | $0.002 |

Examples: 100 search results = **$0.10**. 10 documents with key sections = **$0.03**. Documents that are not found are free.

### Data source and legal note

- Data comes live from the official public EUREKA service of the Ministry of Finance of Poland: [eureka.mf.gov.pl](https://eureka.mf.gov.pl). This Actor is independent and not affiliated with the Ministry of Finance.
- Tax interpretations and other official documents are not protected by copyright in Poland (art. 4 of the Copyright Act). The Ministry anonymises them before publication; the Actor does not collect any other personal data.
- The Actor queries EUREKA politely (about 2 requests per second at most per run).
- Results are information, not tax advice. The authoritative version of each document is the one published in EUREKA (see `url`).

### FAQ

**Do I have to search in Polish?** Yes – the documents are in Polish, so the phrase should be too. AI agents translate automatically.

**Why are the newest documents first by default?** Polish tax law changes often. EUREKA's own relevance ranking tends to show interpretations from 2010–2015 first, so the default is newest first – you see the current approach of the tax authority. Switch `sortBy` to `relevance` if you prefer EUREKA's ranking.

**Why do some documents have no sections?** Sections are extracted for individual interpretations. Very old documents (before about 2017) and other document types have a less regular structure – you still get the full text.

**How fresh is the data?** The Actor reads EUREKA live on every run, so new interpretations appear as soon as the Ministry publishes them.

**Something does not work?** Open an issue on the Actor page.

***

### 🇵🇱 Po polsku

Wyszukiwarka **ponad 550 tys. oficjalnych dokumentów podatkowych z systemu EUREKA** Ministerstwa Finansów: interpretacje indywidualne KIS, wiążące informacje stawkowe (WIS), interpretacje ogólne, objaśnienia podatkowe i inne. Wyniki w formacie JSON: sygnatura, data wydania, status, teza, **rozstrzygnięcie** (stanowisko prawidłowe / nieprawidłowe), **najważniejsze sekcje** (stan faktyczny, pytanie, stanowisko wnioskodawcy, ocena organu) i **pełna treść w Markdown** – gotowe dla agentów AI (Claude, ChatGPT), baz wiedzy RAG, kancelarii i biur rachunkowych.

- Wpisz frazę po polsku, sygnaturę albo numery dokumentów EUREKA.
- Dla WIS dostajesz osobno: stawkę VAT, klasyfikację, podstawę prawną i okres ważności.
- Uruchamiaj regularnie (harmonogram), aby śledzić nowe interpretacje w swoim temacie.
- Cena: 0,001 USD za wynik, plus 0,002 USD za dokument z pełną treścią lub sekcjami.

Dane pobierane są na bieżąco z publicznego serwisu eureka.mf.gov.pl. Aktor nie jest powiązany z Ministerstwem Finansów. Wyniki mają charakter informacyjny i nie stanowią porady podatkowej.

# Actor input Schema

## `query` (type: `string`):

What to look for, in Polish – e.g. 'leasing samochodu osobowego', 'ulga na złe długi', 'IP Box', 'stawka VAT catering'. Leave empty to list the newest documents. You can also paste a signature (sygnatura) or an EUREKA link here.

## `documentType` (type: `string`):

Which part of EUREKA to search. Individual interpretations are answers of the National Tax Information (KIS) to taxpayers' questions; WIS are binding decisions on the VAT rate of a product or service.

## `detailLevel` (type: `string`):

Summary: signature, date, type, status, thesis and link – fast and cheapest. Key sections: also the facts, the question, the taxpayer's position, the authority's assessment and the outcome (position correct / incorrect). Full text: the whole document as Markdown plus the outcome. For WIS every level above Summary adds the VAT rate, classification and validity.

## `maxResults` (type: `integer`):

How many documents to return (EUREKA often has thousands of matches).

## `sortBy` (type: `string`):

Newest first (recommended) shows the current approach of the tax authority. Relevance uses EUREKA's own ranking, which often puts documents from 2010–2015 first – before many law changes. Relevance needs a search phrase.

## `exactPhrase` (type: `boolean`):

On (recommended): documents containing the whole phrase. Off: documents containing any of the words – many more, less precise results.

## `dateFrom` (type: `string`):

Only documents issued on or after this date, e.g. 2025-01-01.

## `dateTo` (type: `string`):

Only documents issued on or before this date.

## `onlyCurrent` (type: `boolean`):

Skip documents marked as outdated, changed, expired or archived.

## `signature` (type: `string`):

Exact signature or its beginning, e.g. 0114-KDIP4-2.4012.626.2026.3.MC or 0114-KDIP4. Searches all document types unless you choose one.

## `documentIds` (type: `array`):

Fetch specific documents, e.g. 712074 or https://eureka.mf.gov.pl/informacje/podglad/712074 (IDs come from the 'id' field of earlier results). The search phrase is then ignored.

## `maxTextCharacters` (type: `integer`):

Shorten the full text and each section to this many characters (0 = no limit). Some interpretations exceed 100,000 characters – a limit such as 20000 keeps AI context windows small.

## `includeLegalProvisions` (type: `boolean`):

Add the cited legal provisions (e.g. '\[VAT] Ustawa o podatku od towarów i usług-art. 86-ust. 1'), keywords and topics from EUREKA's index. Only with detail levels above Summary; makes the run slower.

## Actor input object example

```json
{
  "query": "leasing samochodu osobowego",
  "documentType": "individual-interpretation",
  "detailLevel": "summary",
  "maxResults": 20,
  "sortBy": "newest",
  "exactPhrase": true,
  "onlyCurrent": true,
  "maxTextCharacters": 0,
  "includeLegalProvisions": false
}
```

# Actor output Schema

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

No description

## `summary` (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 = {
    "query": "leasing samochodu osobowego"
};

// Run the Actor and wait for it to finish
const run = await client.actor("kris_fili/poland-tax-interpretations").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 = { "query": "leasing samochodu osobowego" }

# Run the Actor and wait for it to finish
run = client.actor("kris_fili/poland-tax-interpretations").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 '{
  "query": "leasing samochodu osobowego"
}' |
apify call kris_fili/poland-tax-interpretations --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,kris_fili/poland-tax-interpretations"
        }
    }
}
```

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/cXDtoOdRwmi5R3ShW/builds/kXAcbDjCQDZXWhL6L/openapi.json
