> ## Documentation Index
> Fetch the complete documentation index at: https://ploti.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Find datasets

> Search what Ploti holds by what it contains, narrowed by place, topic and kind, and get the dataset id every other call takes

Before you read anything from Ploti, find the dataset that holds it. A dataset is one set of official records from one source, such as a county's parcels. A search takes plain words, such as "building permits" or "flood zones", and returns the matching datasets, ranked. Each comes with the **dataset id** every other call takes. You can narrow a search by place, topic or kind, and it tells you when a match exists outside your coverage areas, the counties your workspace pays for.

## Places

A place narrows a search, a read or a subscription to part of the country. `places list` returns the places your workspace covers, with ids you can pass anywhere a call takes a place:

| Place | Id | Example |
| - | - | - |
| A county | `<state>-county-<name>` | `fl-county-orange`, Orange County, Florida |
| A state | `<state>` | `fl`, statewide records such as contractor licenses |
| A state's counties | `<state>-counties` | `fl-counties`, every county your coverage has in Florida, as one place |
| The nation | `us` | records published nationally, such as FEMA flood zones |

A read also takes a plain name, such as `"Orange County, FL"`, or a city, such as `"Sanford, FL"`. A city is read as the area its boundary box covers.

A place narrows what you get back. It never opens data outside your coverage areas. A statewide dataset opens only when your coverage has a county in its state, and a national one opens with any coverage.

## Topics

A **topic** is the subject a dataset is filed under. Topics come from one fixed list, such as `parcels-property`, `zoning-land-use` or `development-activity` (permits, plans and inspections). `topics list` returns the list with a title and description for each. Each dataset has one primary topic, and every call that filters by topic uses it.

## Search

`datasets search` looks through titles, descriptions, columns, sample values and the text of documents, and ranks what matches. It takes one to four phrasings of what you want, so "building permits" and "construction permits issued" can be tried at once.

* **`place`** limits the search to a place. Left out, it searches your whole coverage.
* **`topics`** limits it to a list of topics, such as `["zoning-land-use"]`.
* **`kinds`** limits it to a list of [kinds of dataset](https://ploti.ai/docs/developers/dataset-kinds.md), from `layer`, `table`, `document`, `scanned_map` and `collection`.
* **`limit`** is how many matches to return: 12 unless you say, at most 30.

Each match names its `datasetId`, `kind`, `title`, `place` and `topic`, and whether it is `locked`. A dataset outside your coverage areas, or not included in your plan, comes back **locked**, and reading it answers `outside_coverage` or `locked`. See [Coverage, plan and credits](https://ploti.ai/docs/developers/keys-and-setup.md#coverage-plan-and-credits). The reply also counts matches elsewhere, so you know whether widening the place would help.

## Browse everything in a place

`datasets list` (`GET /v1/datasets`) returns every dataset of every kind in a place, unranked and without a query. With no place, it lists your whole coverage.

* It takes the same `kinds` and `topics` to narrow it.
* It answers 25 at a time, and at most 100 a page. Pass the reply's `nextOffset` as `offset` for the next page.
* Each row names its `datasetId` and `kind`.
* Locked datasets are left out unless you pass `includeLocked` (`--include-locked`, or `include_locked=True` in Python).

## Know a dataset before you read it

* **`datasets get`** describes a dataset: its columns and their types, its id column, and whether its records have shapes. Read it before writing a condition, so you use real column names.
* **`datasets values`** lists the codes a coded column takes, such as land use or flood zone codes, with their meanings when the source publishes them. Without a published list it returns the 50 commonest values.
* **`datasets profile`** shows, for up to 20 columns, how many rows hold a value, how many distinct values there are, and the smallest and largest.
* **`datasets provenance`** says where a dataset comes from: the public body that publishes it, the sources Ploti read, how values were derived and checked, and any known gaps.

A dataset id is a string such as `orange-parcels` or `ds_orange_fl_building_permits`. Don't parse it or build one yourself: use it exactly as a search returns it. Every call that reads a dataset takes it as `dataset`, and every reply names it as `datasetId`. The ids on these pages are examples.

```bash CLI theme={null}
ploti datasets search "building permits" --place "Orange County, FL"
ploti datasets get ds_orange_fl_building_permits
```

```python Python theme={null}
import ploti

found = ploti.datasets.search(["building permits"], place="Orange County, FL")
ploti.datasets.get("ds_orange_fl_building_permits")
```

```bash REST theme={null}
curl -X POST https://api.ploti.ai/v1/datasets/search \
  -H "Authorization: Bearer $PLOTI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"queries": ["building permits"], "place": "Orange County, FL"}'
```

```json MCP theme={null}
{
  "tool": "datasets_search",
  "arguments": {
    "queries": ["building permits"],
    "place": "Orange County, FL"
  }
}
```

```json Reply (trimmed) theme={null}
{
  "matches": [
    {
      "datasetId": "ds_orange_fl_building_permits",
      "kind": "table",
      "title": "Building permits",
      "place": "Orange County, FL",
      "topic": "development-activity",
      "locked": false
    }
  ],
  "locked": [],
  "truncated": false,
  "elsewhereCount": 4
}
```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.