# Tax Law Search (`zeus500k/tax-law-search`) Actor

Search Portugal and 36 verified U.S. state collections through one MCP. Citable excerpts, publisher links, historical editions and monthly refreshes. Use each source’s original language.

- **URL**: https://apify.com/zeus500k/tax-law-search.md
- **Developed by:** [Antonio Goncalves](https://apify.com/zeus500k) (community)
- **Features:** Limited permissions, Multi-tenant, Server interface
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 tax searches

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

## Tax Law Search

Give AI assistants citable tax sources through one MCP connection. Search by
country and, for the United States, state. Retrieve relevant excerpts, follow
the original publisher's link and resolve the exact source edition before citing
it. Supported jurisdictions share this one product and its existing pricing.

### Supported countries and coverage

Verified coverage as of **14 November 2026 (UTC)**:

| Country | Search selectors | Verified coverage |
| --- | --- | --- |
| Portugal | `country: "PT"` | Tax codes, guides, forms, treaties, rulings, circulars and selected amending legislation |
| United States | `country: "US"` plus a supported `state` postal code | Selected statutes, tax-agency publications and public-university guidance in the 36 states listed below |

**Verified U.S. states:** Alabama (`AL`), Alaska (`AK`), Arkansas (`AR`), California (`CA`), Colorado (`CO`), Delaware (`DE`), Florida (`FL`), Georgia (`GA`), Idaho (`ID`), Illinois (`IL`), Indiana (`IN`), Iowa (`IA`), Kentucky (`KY`), Louisiana (`LA`), Maine (`ME`), Maryland (`MD`), Michigan (`MI`), Minnesota (`MN`), Mississippi (`MS`), Montana (`MT`), Nebraska (`NE`), Nevada (`NV`), New Hampshire (`NH`), New Mexico (`NM`), New York (`NY`), North Carolina (`NC`), North Dakota (`ND`), Ohio (`OH`), Oklahoma (`OK`), Oregon (`OR`), Rhode Island (`RI`), South Carolina (`SC`), Tennessee (`TN`), Texas (`TX`), Utah (`UT`), Virginia (`VA`).

**U.S. federal/IRS sources and the remaining states are still being prepared or
validated. They are not yet included in supported coverage.** Use the verified
list above when choosing a collection; `list_tax_jurisdictions` also provides
live catalogue information. Coverage is selected and non-exhaustive: it does
not include every law, local tax rule, publication or historical release. Source
types and the depth of coverage differ by state; Tennessee currently contains
selected public-university tax guidance rather than the full state code.

### Search in the publication's original language

Use **Portuguese for Portugal** and **English for most U.S. sources**. Keep the
original legal terms, code names, acronyms and article or section numbers. If the
user's question is in another language, translate the search terms into the
publication's language before searching. Searches are not English-only, and
choosing a country or state does not automatically translate a query or source.

For example, search Portugal for `benefícios fiscais EBF`, not only its English
translation. Search California using its original legal terminology and section
numbers when known.

### Connect and search

Connect to `https://zeus500k--tax-law-search.apify.actor/mcp` using
your Apify API token in the `Authorization: Bearer <token>` header. All supported
jurisdictions use this connection. If your client uses the former Portuguese-specific
address, replace it with the URL above.

The three read-only tools are:

- `list_tax_jurisdictions()` — inspect the live country/state catalogue. Refer to
  the verified coverage above while additional collections are being validated.
- `search_tax_law(query, country, state?, limit?, source_type?)` — search the
  selected jurisdiction. `query` accepts 1–2,000 characters; `limit` is 1–10,
  default 5. Select `PT` for Portugal, or `US` and a supported state such as `CA`.
  Available source types differ by collection. Portugal supports `tax_code`,
  `guide`, `form`, `treaty`, `ruling`, `circular` and `legislation`.
- `get_tax_source(source_ref)` — resolve a returned reference to the original
  publisher URL, exact edition, source hash and retained history metadata. Keep
  the jurisdiction prefix: for example, `PT:<document_id>` or
  `US-CA:<document_id>`. Copy the actual reference from a search result.

Portugal example:

```json
{"query": "benefícios fiscais EBF", "country": "PT", "limit": 3}
```

U.S. state example:

```json
{"query": "California income tax filing requirements exemptions", "country": "US", "state": "CA", "limit": 5}
```

Use each result's `source_ref` with `get_tax_source`, then cite the original
`source_url`, title, edition and relevant excerpt. Results retain native document
and chunk references, SHA-256 hashes and archive references so the source can be
checked. An archive reference identifies a retained edition; it does not grant
access to private storage.

Searches stay within the requested jurisdiction. Unsupported selectors do not
silently fall back to another country or state. Once federal coverage is verified,
`country: "US"` with no `state` will select federal sources; it is not a combined
search across all states. Existing `search_portuguese_tax_law` and
`get_portuguese_tax_source` calls remain for compatibility.

### Monthly refreshes and historical editions

Verified collections have monthly refresh schedules. Previously imported editions,
source hashes and publisher/year metadata are retained when a new edition is
found. History starts with the editions actually collected; this is not a promise
of every past release. Publisher dates, year mentions and observation dates do
not establish legal applicability. Check the original publication for the tax
year, effective date and amendments relevant to the question. Verify scanned
pages, figures, formulas and complex tables against the original.

### Pricing

Each supported MCP request costs **$0.00001**, including initialization,
discovery, notifications, jurisdiction listing and source lookups. A successful
search adds **$0.01**. A successful search request therefore costs **$0.01001**;
a source lookup or discovery request costs **$0.00001**. Failed searches incur
only the request fee. The same prices apply across supported jurisdictions.
Platform usage is included; there is no startup or dataset-result charge. A
client may send several MCP requests while connecting.

The authenticated server interface attributes each request to its Apify user.
The service verifies platform attribution before accessing tax data and refuses
requests when authentication, billing or spending-limit checks fail.

### Scope

This service searches public sources; it does not provide personalized tax
advice. It does not accept private tax returns, file uploads, arbitrary URLs or
customer-account access. Clients receive source references rather than underlying
infrastructure credentials.

# Actor input Schema

## Actor input object example

```json
{}
```

# Actor output Schema

# 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("zeus500k/tax-law-search").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("zeus500k/tax-law-search").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 zeus500k/tax-law-search --silent --output-dataset

```

## MCP server setup

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

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/3gveTmdjeGcXljCk2/builds/GgzaT0kKjsQJUwfKS/openapi.json
