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

# Datasets, places and topics

> What a dataset is, how it is identified and the columns every file carries

<Info>
  Data Feeds is in early access. [Contact us](mailto:support@ploti.ai) to set up
  a subscription; the API and sync client described here open to early access
  customers first.
</Info>

## Places

A place is a county, identified as `us-<state>-<FIPS>`, for example `us-fl-12095` for Orange County, Florida. `GET /v1/places` lists the counties in your workspace's coverage, with how many datasets each holds by topic.

## Topics

Every dataset is filed under one topic from a fixed list, such as `permits`, `zoning`, `code_enforcement`, `planning`, `sales` or `parcels`. `GET /v1/topics` returns the list. A subscription can name topics to receive only those.

## Datasets

A dataset is one public record set from one source, such as Orange County's building permits.

```json theme={null}
{
  "id": "ds_orange_fl_building_permits",
  "title": "Building permits",
  "place": {
    "id": "us-fl-12095",
    "name": "Orange County",
    "state": "FL",
    "kind": "county"
  },
  "topic": "permits",
  "source": {
    "publisher": "Orange County Division of Building Safety",
    "url": "https://...",
    "license": null
  },
  "geometry": { "type": "Point", "srid": 4326 },
  "keyColumns": ["permit_number"],
  "current": {
    "version": 42,
    "schemaVersion": "2.1",
    "publishedAt": "2026-10-18T06:12:40Z",
    "sourceCheckedAt": "2026-10-18T06:00:03Z",
    "rowCount": 184220
  },
  "refresh": { "cadence": "daily", "nextCheckAt": "2026-10-19T06:00:00Z" }
}
```

* `keyColumns` are the columns that identify a record across versions. When a source has no stable key the list is empty, and records are matched by their content.
* `refresh.cadence` is how often Ploti checks the source. A check that finds nothing new publishes no version; `current.sourceCheckedAt` still moves.
* Geometry is always WGS 84 (EPSG:4326).

## Record ids

Every record has a `_ploti_record_id`, derived from the dataset and its key columns. It stays the same across versions for as long as the key columns do, so you can upsert and delete by it.

For a dataset without key columns, the id is derived from the record's content: an edit at the source arrives as a delete of the old record and an upsert of the new one.

## Envelope columns

Every snapshot and changes file carries these columns ahead of the dataset's own:

| Column | Type | Meaning |
| - | - | - |
| `_ploti_record_id` | string | Stable record id. |
| `_ploti_dataset_id` | string | The dataset. |
| `_ploti_place_id` | string | The county, e.g. `us-fl-12095`. |
| `_ploti_version` | integer | The version this row is as of. |
| `_ploti_source_url` | string | Where the record is published. |
| `_ploti_fetched_at` | timestamp | When Ploti read it from the source. |

Changes files add `_ploti_op` (`upsert` or `delete`) and `_ploti_change` (`added`, `changed` or `removed`).

Because every dataset carries the same envelope, you can load many counties' datasets side by side and ask "what changed in this county since Tuesday" without knowing any dataset's columns.

## Datasets you cannot subscribe to

Some data in the Ploti app is licensed from third parties rather than collected from public sources. It is available in the app and to agents, but not through Data Feeds, and does not appear in `GET /v1/datasets`.


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