---
type: "firecrawl-provider"
description: "Montana Spatial Data Infrastructure (MSDI) framework layers from the Montana State Library: cadastral parcels with Department of Revenue assessment attributes, public lands, conservation easements, structures and address points, road centerlines and administrative boundaries. Bulk publication status (file URL, size, Last-Modified, ETag) from the ftpgeoinfo.msl.mt.gov IIS host; records from MSL's anonymous ArcGIS Online feature services (org qnjIrwR8z5Izc0ij) with a cursor pinned to the layer's dataLastEditDate, id lookups by PARCELID / NGUID / UniqueID / GlobalID, DateUpdate change filters for addresses and roads, and a constrained where-clause search. Land cover and hydrography are status-only."
use_when: "Montana Spatial Data Infrastructure (MSDI) framework layers from the Montana State Library: cadastral parcels with Department of Revenue assessment attributes, public lands, conservation easements, structures and address points, road centerlines and administrative boundaries. Bulk publication status (file URL, size, Last-Modified, ETag) from the ftpgeoinfo.msl.mt.gov IIS host; records from MSL's anonymous ArcGIS Online feature services (org qnjIrwR8z5Izc0ij) with a cursor pinned to the layer's dataLastEditDate, id lookups by PARCELID / NGUID / UniqueID / GlobalID, DateUpdate change filters for addresses and roads, and a constrained where-clause search. Land cover and hydrography are status-only."
categories: "Real estate"
capabilities: 5
credits_per_call: 5
---
# Montana State Library MSDI framework layers on Firecrawl Alexandria

Montana Spatial Data Infrastructure (MSDI) framework layers from the Montana State Library: cadastral parcels with Department of Revenue assessment attributes, public lands, conservation easements, structures and address points, road centerlines and administrative boundaries. Bulk publication status (file URL, size, Last-Modified, ETag) from the ftpgeoinfo.msl.mt.gov IIS host; records from MSL's anonymous ArcGIS Online feature services (org qnjIrwR8z5Izc0ij) with a cursor pinned to the layer's dataLastEditDate, id lookups by PARCELID / NGUID / UniqueID / GlobalID, DateUpdate change filters for addresses and roads, and a constrained where-clause search. Land cover and hydrography are status-only.

- Categories: Real estate
- Category index: [Real estate category](https://firecrawl.dev/alexandria/agents/categories/real-estate)
- Provider key: `ftpgeoinfo-msl-mt-gov`
- Access: Firecrawl credits
- Cost: 5 credits per call

## More

- [Human guide](https://firecrawl.dev/app/alexandria/ftpgeoinfo-msl-mt-gov)
- [OpenAPI spec](https://firecrawl.dev/alexandria/agents/providers/ftpgeoinfo-msl-mt-gov/openapi.json)

## Capabilities

- [Records changes](https://firecrawl.dev/alexandria/agents/providers/ftpgeoinfo-msl-mt-gov/gis-layers/records_changes): Addresses (structures and address points) or roads whose provider-maintained DateUpdate is later than `since`, as `DateUpdate > DATE 'YYYY-MM-DD'` (or `> TIMESTAMP` for a date-time), in keyset pages pinned to the layer's dataLastEditDate like records_list, optionally restricted to one county. Deletions are not reported (the publisher keeps no changelog). Parcels, easements, public lands and boundaries have no modified-since field, so they are not offered here: diff snapshots from records_list instead.
- [Records get](https://firecrawl.dev/alexandria/agents/providers/ftpgeoinfo-msl-mt-gov/gis-layers/records_get): One record by the publisher's own id: parcels by PARCELID (the 17-character DOR geocode; every row carrying it is returned, multipart parcels included), addresses and roads by NGUID, conservation_easements by UniqueID, public_lands and boundaries:<id> by GlobalID. Attribute-only. Fails with not_found when no row carries the id.
- [Records list](https://firecrawl.dev/alexandria/agents/providers/ftpgeoinfo-msl-mt-gov/gis-layers/records_list): The current records of one layer, in 2,000-row pages (1,000 for addresses) ordered by OBJECTID with a keyset cursor (`OBJECTID > last`) pinned to the layer's editingInfo.dataLastEditDate. Every page re-reads the layer document and fails with invalid_input / `publication_changed` when the pin moved, so pages from two publications are never mixed. parcels, addresses and roads are segmented by county (segment key: CountyName / County / County_L); conservation_easements, public_lands and boundaries:<id> list statewide. Attribute-only (no geometry). Every record carries source_record_id, source_url, publication_id and retrieved_at; parcel owner fields are grouped under `owner` with the MCA 2-6-1017 notice and can be excluded.
- [Search](https://firecrawl.dev/alexandria/agents/providers/ftpgeoinfo-msl-mt-gov/gis-layers/search): Per-query search on one record layer with a constrained ArcGIS SQL where clause (field comparisons, LIKE, AND/OR; no statements, comments or subqueries), e.g. "PropType = 'Vacant Land' AND TotalAcres > 100" on parcels or "St_Name = 'Main' AND Post_Comm = 'Bozeman'" on addresses, optionally within one county segment, paged with the same pinned keyset cursor as records_list. A where clause the server rejects (unknown field, bad syntax) fails with invalid_input. Zero matches is a valid empty page.
- [Source status](https://firecrawl.dev/alexandria/agents/providers/ftpgeoinfo-msl-mt-gov/gis-layers/source_status): Cheap version check for one MSDI layer: the ArcGIS layer's publication pin (editingInfo.dataLastEditDate as publication_id and published_at), maxRecordCount, the returnCountOnly record count (for parcels optionally one county), and the bulk publication files on ftpgeoinfo.msl.mt.gov from the theme folder's IIS listing with HEAD Content-Length, Last-Modified and ETag (the publisher posts no hashes; the ETag is the file's version). Layers: parcels, public_lands, conservation_easements, addresses, roads, boundaries:<layer id>, and the status-only land_cover and hydrography. Most files exceed the 32 MiB runner cap, so this is the hand-off: URL, size and ETag.

## 1. Choose this provider when

Montana Spatial Data Infrastructure (MSDI) framework layers from the Montana State Library: cadastral parcels with Department of Revenue assessment attributes, public lands, conservation easements, structures and address points, road centerlines and administrative boundaries. Bulk publication status (file URL, size, Last-Modified, ETag) from the ftpgeoinfo.msl.mt.gov IIS host; records from MSL's anonymous ArcGIS Online feature services (org qnjIrwR8z5Izc0ij) with a cursor pinned to the layer's dataLastEditDate, id lookups by PARCELID / NGUID / UniqueID / GlobalID, DateUpdate change filters for addresses and roads, and a constrained where-clause search. Land cover and hydrography are status-only.

## 2. Minimal request

Call `POST https://api.firecrawl.dev/v2/scrape` with `{ alexandria: { provider, capability, options } }`. For a batch, send `{ alexandria: [...] }` with up to 10 calls.

```json
{
  "provider": "ftpgeoinfo-msl-mt-gov",
  "capability": "gis-layers/records_changes",
  "options": {
    "layer": "addresses",
    "page_size": 3,
    "since": "2026-06-01"
  }
}
```

## 3. Add provider options

Use only the options needed for the task:

- `cursor` (string): next_cursor from the previous page. Carries the layer, the segment/filter, the pinned publication (editingInfo.dataLastEditDate) and the last OBJECTID. When the layer has been republished since, the call fails with invalid_input and issue code `publication_changed`: restart from page one. Pattern: ^[0-9a-f]+$. Example: `publication_changed`
- `layer` (string, required): layer Example: `addresses`
- `page_size` (number): Rows per page; default and maximum is the layer's maxRecordCount (2000; 1000 for addresses). A 2000-row parcel page is about 2.3 MB. Example: `10`
- `segment` (string): Optional county restriction: the County (addresses) / County_L (roads) value, e.g. 'Gallatin County'. Pattern: ^[A-Za-z][A-Za-z .'-]*$. Example: `<segment>`
- `since` (string, required): Return rows with DateUpdate strictly after this UTC date or date-time. Pattern: ^[0-9]{4}-[0-9]{2}-[0-9]{2}(T[0-9]{2}:[0-9]{2}:[0-9]{2}Z?)?$. Example: `<since>`

## 4. Request through your preferred interface

### JavaScript

```javascript
const result = await firecrawl.scrape({
  alexandria: {
    provider: "ftpgeoinfo-msl-mt-gov",
    capability: "gis-layers/records_changes",
    options: {
      layer: "addresses",
      page_size: 3,
      since: "2026-06-01",
    },
  },
});
```

### Python

```python
result = firecrawl.scrape_alexandria({
  "provider": "ftpgeoinfo-msl-mt-gov",
  "capability": "gis-layers/records_changes",
  "options": {
    "layer": "addresses",
    "page_size": 3,
    "since": "2026-06-01"
  }
})
```

### cURL

```sh
curl https://api.firecrawl.dev/v2/scrape \
  -H "Authorization: Bearer $FIRECRAWL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "alexandria": {
    "provider": "ftpgeoinfo-msl-mt-gov",
    "capability": "gis-layers/records_changes",
    "options": {
      "layer": "addresses",
      "page_size": 3,
      "since": "2026-06-01"
    }
  }
}'
```

### CLI

```sh
firecrawl scrape 'ftpgeoinfo-msl-mt-gov/gis-layers/records_changes' \
  --options '{"layer":"addresses","page_size":3,"since":"2026-06-01"}'
```


### MCP

Call the FCX MCP retrieve tool with this object:

```json
{
  "provider": "ftpgeoinfo-msl-mt-gov",
  "capability": "gis-layers/records_changes",
  "options": {
    "layer": "addresses",
    "page_size": 3,
    "since": "2026-06-01"
  }
}
```

Ask for only the returned fields needed by the task.

## 5. Full request shape

```json
{
  "provider": "ftpgeoinfo-msl-mt-gov",
  "capability": "gis-layers/records_changes",
  "options": {
    "layer": "addresses",
    "page_size": 3,
    "since": "2026-06-01"
  }
}
```

## 6. Response data

The response includes `success`, `provider`, `capability`, `creditsCost` and `data`. This example shows the provider payload in `data`:

```json
{
  "count": 3,
  "layer": "addresses",
  "layer_name": "Montana Structures and Addresses",
  "next_cursor": "7b2276223a312c2266223a226368616e676573222c226c61796572223a22616464726573736573222c2270696e223a313739313931373930373139392c226c6173745f6f6964223a343330353637312c2266696c746572223a2244617465557064617465203e20444154452027323032362d30362d303127227d",
  "observed_at_ms": 1792346212837,
  "page_size": 3,
  "publication_id": "addresses:1791917907199",
  "published_at": "2026-10-13T18:58:27Z",
  "records": [
    {
      "attributes": {
        "AddNum_Pre": null,
        "AddNum_Suf": null,
        "Add_Number": 2543,
        "Addtl_Desc": null,
        "Addtl_Loc": null,
        "Building": null,
        "Country": "US",
        "County": "Fergus County",
        "DatasetTyp": "Address data",
        "DateUpdate": "2026-06-07T04:54:46Z",
        "DiscrpAgID": "City of Lewistown",
        "Elevation": null,
        "Floor": null,
        "GNIS_ID": null,
        "GlobalID": "808c77ba-9624-409e-9d9a-da19c651dc10",
        "Inc_Muni": "Unincorporated",
        "LandmkName": null,
        "Latitude": null,
        "LocalID": "8375",
        "Longitude": null,
        "MT_PlcType": 100,
        "Milepost": null,
        "NGUID": "43375000.{2ac86806-32e8-4aaa-8862-2e11d0c559cf}",
        "Nbrhd_Comm": null,
        "OBJECTID": 4305247,
        "ParcelID": "08246517103010000",
        "Place_Type": "residence",
        "Placement": "Structure",
        "PostCodeEx": null,
        "Post_Code": "59457",
        "Post_Comm": "Lewistown",
        "Room": null,
        "Seat": null,
        "St_Name": "Tognetti",
        "St_PosDir": null,
        "St_PosMod": null,
        "St_PosTyp": "Road",
        "St_PreDir": null,
        "St_PreMod": null,
        "St_PreSep": null,
        "St_PreTyp": null,
        "State": "MT",
        "Uninc_Comm": null,
        "Unit": null
      },
      "global_id": "808c77ba-9624-409e-9d9a-da19c651dc10",
      "id_field": "NGUID",
      "object_id": 4305247,
      "publication_id": "addresses:1791917907199",
      "retrieved_at": "2026-10-18T17:56:52Z",
      "source_record_id": "43375000.{2ac86806-32e8-4aaa-8862-2e11d0c559cf}",
      "source_url": "https://services.arcgis.com/qnjIrwR8z5Izc0ij/ArcGIS/rest/services/Montana_Structures_and_Addresses_Framework/FeatureServer/0/query?where=NGUID+%3D+%2743375000.%7B2ac86806-32e8-4aaa-8862-2e11d0c559cf%7D%27&outFields=*&returnGeometry=false&f=json"
    },
    {
      "attributes": {
        "AddNum_Pre": null,
        "AddNum_Suf": null,
        "Add_Number": 402,
        "Addtl_Desc": null,
        "Addtl_Loc": null,
        "Building": null,
        "Country": "US",
        "County": "Fergus County",
        "DatasetTyp": "Address data",
        "DateUpdate": "2026-06-16T23:05:50Z",
        "DiscrpAgID": "City of Lewistown",
        "Elevation": null,
        "Floor": null,
        "GNIS_ID": null,
        "GlobalID": "e1c27290-ae39-4f97-903c-c2b4126be558",
        "Inc_Muni": "Unincorporated",
        "LandmkName": null,
        "Latitude": null,
        "LocalID": "10630",
        "Longitude": null,
        "MT_PlcType": 1,
        "Milepost": null,
        "NGUID": "43375000.{a4264705-ff8a-4d3f-94c2-b2a93198ae4d}",
        "Nbrhd_Comm": null,
        "OBJECTID": 4305635,
        "ParcelID": "08278917404020000",
        "Place_Type": "other",
        "Placement": "Structure",
        "PostCodeEx": null,
        "Post_Code": "59430",
        "Post_Comm": "Denton",
        "Room": null,
        "Seat": null,
        "St_Name": "Lower",
        "St_PosDir": null,
        "St_PosMod": null,
        "St_PosTyp": "Road",
        "St_PreDir": null,
        "St_PreMod": null,
        "St_PreSep": null,
        "St_PreTyp": null,
        "State": "MT",
        "Uninc_Comm": null,
        "Unit": null
      },
      "global_id": "e1c27290-ae39-4f97-903c-c2b4126be558",
      "id_field": "NGUID",
      "object_id": 4305635,
      "publication_id": "addresses:1791917907199",
      "retrieved_at": "2026-10-18T17:56:52Z",
      "source_record_id": "43375000.{a4264705-ff8a-4d3f-94c2-b2a93198ae4d}",
      "source_url": "https://services.arcgis.com/qnjIrwR8z5Izc0ij/ArcGIS/rest/services/Montana_Structures_and_Addresses_Framework/FeatureServer/0/query?where=NGUID+%3D+%2743375000.%7Ba4264705-ff8a-4d3f-94c2-b2a93198ae4d%7D%27&outFields=*&returnGeometry=false&f=json"
    },
    {
      "attributes": {
        "AddNum_Pre": null,
        "AddNum_Suf": null,
        "Add_Number": 312,
        "Addtl_Desc": null,
        "Addtl_Loc": null,
        "Building": null,
        "Country": "US",
        "County": "Fergus County",
        "DatasetTyp": "Address data",
        "DateUpdate": "2026-06-16T23:27:22Z",
        "DiscrpAgID": "City of Lewistown",
        "Elevation": null,
        "Floor": null,
        "GNIS_ID": null,
        "GlobalID": "eab59814-690a-44ad-8b29-913a4be25627",
        "Inc_Muni": "Moore",
        "LandmkName": null,
        "Latitude": null,
        "LocalID": "8266",
        "Longitude": null,
        "MT_PlcType": 1,
        "Milepost": null,
        "NGUID": "43375000.{391c4410-2cdc-4222-b36a-f9e3cb412868}",
        "Nbrhd_Comm": null,
        "OBJECTID": 4305671,
        "ParcelID": "08236316431010001",
        "Place_Type": "other",
        "Placement": "Structure",
        "PostCodeEx": null,
        "Post_Code": "59464",
        "Post_Comm": "Moore",
        "Room": null,
        "Seat": null,
        "St_Name": "1st",
        "St_PosDir": "Southwest",
        "St_PosMod": null,
        "St_PosTyp": "Street",
        "St_PreDir": null,
        "St_PreMod": null,
        "St_PreSep": null,
        "St_PreTyp": null,
        "State": "MT",
        "Uninc_Comm": null,
        "Unit": null
      },
      "global_id": "eab59814-690a-44ad-8b29-913a4be25627",
      "id_field": "NGUID",
      "object_id": 4305671,
      "publication_id": "addresses:1791917907199",
      "retrieved_at": "2026-10-18T17:56:52Z",
      "source_record_id": "43375000.{391c4410-2cdc-4222-b36a-f9e3cb412868}",
      "source_url": "https://services.arcgis.com/qnjIrwR8z5Izc0ij/ArcGIS/rest/services/Montana_Structures_and_Addresses_Framework/FeatureServer/0/query?where=NGUID+%3D+%2743375000.%7B391c4410-2cdc-4222-b36a-f9e3cb412868%7D%27&outFields=*&returnGeometry=false&f=json"
    }
  ],
  "segment": null,
  "service_url": "https://services.arcgis.com/qnjIrwR8z5Izc0ij/ArcGIS/rest/services/Montana_Structures_and_Addresses_Framework/FeatureServer/0",
  "since": "2026-06-01",
  "total_count": 102726
}
```

## API reference-derived contract

The following capability contract is generated from the same normalized Alexandria API reference exposed in the API spec.

### Records changes

- Capability: `gis-layers/records_changes`
- Description: Addresses (structures and address points) or roads whose provider-maintained DateUpdate is later than `since`, as `DateUpdate > DATE 'YYYY-MM-DD'` (or `> TIMESTAMP` for a date-time), in keyset pages pinned to the layer's dataLastEditDate like records_list, optionally restricted to one county. Deletions are not reported (the publisher keeps no changelog). Parcels, easements, public lands and boundaries have no modified-since field, so they are not offered here: diff snapshots from records_list instead.
- Instructions: Incremental collection of address points or road centerlines edited since the last run.
- Cost: 5 credits per call
- Capability file: [Records changes](https://firecrawl.dev/alexandria/agents/providers/ftpgeoinfo-msl-mt-gov/gis-layers/records_changes)

Accepted options:
- `cursor` (string): next_cursor from the previous page. Carries the layer, the segment/filter, the pinned publication (editingInfo.dataLastEditDate) and the last OBJECTID. When the layer has been republished since, the call fails with invalid_input and issue code `publication_changed`: restart from page one. Pattern: ^[0-9a-f]+$. Example: `publication_changed`
- `layer` (string, required): layer Example: `addresses`
- `page_size` (number): Rows per page; default and maximum is the layer's maxRecordCount (2000; 1000 for addresses). A 2000-row parcel page is about 2.3 MB. Example: `10`
- `segment` (string): Optional county restriction: the County (addresses) / County_L (roads) value, e.g. 'Gallatin County'. Pattern: ^[A-Za-z][A-Za-z .'-]*$. Example: `<segment>`
- `since` (string, required): Return rows with DateUpdate strictly after this UTC date or date-time. Pattern: ^[0-9]{4}-[0-9]{2}-[0-9]{2}(T[0-9]{2}:[0-9]{2}:[0-9]{2}Z?)?$. Example: `<since>`

Response schema example:
```json
{
  "count": 3,
  "layer": "addresses",
  "layer_name": "Montana Structures and Addresses",
  "next_cursor": "7b2276223a312c2266223a226368616e676573222c226c61796572223a22616464726573736573222c2270696e223a313739313931373930373139392c226c6173745f6f6964223a343330353637312c2266696c746572223a2244617465557064617465203e20444154452027323032362d30362d303127227d",
  "observed_at_ms": 1792346212837,
  "page_size": 3,
  "publication_id": "addresses:1791917907199",
  "published_at": "2026-10-13T18:58:27Z",
  "records": [
    {
      "attributes": {
        "AddNum_Pre": null,
        "AddNum_Suf": null,
        "Add_Number": 2543,
        "Addtl_Desc": null,
        "Addtl_Loc": null,
        "Building": null,
        "Country": "US",
        "County": "Fergus County",
        "DatasetTyp": "Address data",
        "DateUpdate": "2026-06-07T04:54:46Z",
        "DiscrpAgID": "City of Lewistown",
        "Elevation": null,
        "Floor": null,
        "GNIS_ID": null,
        "GlobalID": "808c77ba-9624-409e-9d9a-da19c651dc10",
        "Inc_Muni": "Unincorporated",
        "LandmkName": null,
        "Latitude": null,
        "LocalID": "8375",
        "Longitude": null,
        "MT_PlcType": 100,
        "Milepost": null,
        "NGUID": "43375000.{2ac86806-32e8-4aaa-8862-2e11d0c559cf}",
        "Nbrhd_Comm": null,
        "OBJECTID": 4305247,
        "ParcelID": "08246517103010000",
        "Place_Type": "residence",
        "Placement": "Structure",
        "PostCodeEx": null,
        "Post_Code": "59457",
        "Post_Comm": "Lewistown",
        "Room": null,
        "Seat": null,
        "St_Name": "Tognetti",
        "St_PosDir": null,
        "St_PosMod": null,
        "St_PosTyp": "Road",
        "St_PreDir": null,
        "St_PreMod": null,
        "St_PreSep": null,
        "St_PreTyp": null,
        "State": "MT",
        "Uninc_Comm": null,
        "Unit": null
      },
      "global_id": "808c77ba-9624-409e-9d9a-da19c651dc10",
      "id_field": "NGUID",
      "object_id": 4305247,
      "publication_id": "addresses:1791917907199",
      "retrieved_at": "2026-10-18T17:56:52Z",
      "source_record_id": "43375000.{2ac86806-32e8-4aaa-8862-2e11d0c559cf}",
      "source_url": "https://services.arcgis.com/qnjIrwR8z5Izc0ij/ArcGIS/rest/services/Montana_Structures_and_Addresses_Framework/FeatureServer/0/query?where=NGUID+%3D+%2743375000.%7B2ac86806-32e8-4aaa-8862-2e11d0c559cf%7D%27&outFields=*&returnGeometry=false&f=json"
    },
    {
      "attributes": {
        "AddNum_Pre": null,
        "AddNum_Suf": null,
        "Add_Number": 402,
        "Addtl_Desc": null,
        "Addtl_Loc": null,
        "Building": null,
        "Country": "US",
        "County": "Fergus County",
        "DatasetTyp": "Address data",
        "DateUpdate": "2026-06-16T23:05:50Z",
        "DiscrpAgID": "City of Lewistown",
        "Elevation": null,
        "Floor": null,
        "GNIS_ID": null,
        "GlobalID": "e1c27290-ae39-4f97-903c-c2b4126be558",
        "Inc_Muni": "Unincorporated",
        "LandmkName": null,
        "Latitude": null,
        "LocalID": "10630",
        "Longitude": null,
        "MT_PlcType": 1,
        "Milepost": null,
        "NGUID": "43375000.{a4264705-ff8a-4d3f-94c2-b2a93198ae4d}",
        "Nbrhd_Comm": null,
        "OBJECTID": 4305635,
        "ParcelID": "08278917404020000",
        "Place_Type": "other",
        "Placement": "Structure",
        "PostCodeEx": null,
        "Post_Code": "59430",
        "Post_Comm": "Denton",
        "Room": null,
        "Seat": null,
        "St_Name": "Lower",
        "St_PosDir": null,
        "St_PosMod": null,
        "St_PosTyp": "Road",
        "St_PreDir": null,
        "St_PreMod": null,
        "St_PreSep": null,
        "St_PreTyp": null,
        "State": "MT",
        "Uninc_Comm": null,
        "Unit": null
      },
      "global_id": "e1c27290-ae39-4f97-903c-c2b4126be558",
      "id_field": "NGUID",
      "object_id": 4305635,
      "publication_id": "addresses:1791917907199",
      "retrieved_at": "2026-10-18T17:56:52Z",
      "source_record_id": "43375000.{a4264705-ff8a-4d3f-94c2-b2a93198ae4d}",
      "source_url": "https://services.arcgis.com/qnjIrwR8z5Izc0ij/ArcGIS/rest/services/Montana_Structures_and_Addresses_Framework/FeatureServer/0/query?where=NGUID+%3D+%2743375000.%7Ba4264705-ff8a-4d3f-94c2-b2a93198ae4d%7D%27&outFields=*&returnGeometry=false&f=json"
    },
    {
      "attributes": {
        "AddNum_Pre": null,
        "AddNum_Suf": null,
        "Add_Number": 312,
        "Addtl_Desc": null,
        "Addtl_Loc": null,
        "Building": null,
        "Country": "US",
        "County": "Fergus County",
        "DatasetTyp": "Address data",
        "DateUpdate": "2026-06-16T23:27:22Z",
        "DiscrpAgID": "City of Lewistown",
        "Elevation": null,
        "Floor": null,
        "GNIS_ID": null,
        "GlobalID": "eab59814-690a-44ad-8b29-913a4be25627",
        "Inc_Muni": "Moore",
        "LandmkName": null,
        "Latitude": null,
        "LocalID": "8266",
        "Longitude": null,
        "MT_PlcType": 1,
        "Milepost": null,
        "NGUID": "43375000.{391c4410-2cdc-4222-b36a-f9e3cb412868}",
        "Nbrhd_Comm": null,
        "OBJECTID": 4305671,
        "ParcelID": "08236316431010001",
        "Place_Type": "other",
        "Placement": "Structure",
        "PostCodeEx": null,
        "Post_Code": "59464",
        "Post_Comm": "Moore",
        "Room": null,
        "Seat": null,
        "St_Name": "1st",
        "St_PosDir": "Southwest",
        "St_PosMod": null,
        "St_PosTyp": "Street",
        "St_PreDir": null,
        "St_PreMod": null,
        "St_PreSep": null,
        "St_PreTyp": null,
        "State": "MT",
        "Uninc_Comm": null,
        "Unit": null
      },
      "global_id": "eab59814-690a-44ad-8b29-913a4be25627",
      "id_field": "NGUID",
      "object_id": 4305671,
      "publication_id": "addresses:1791917907199",
      "retrieved_at": "2026-10-18T17:56:52Z",
      "source_record_id": "43375000.{391c4410-2cdc-4222-b36a-f9e3cb412868}",
      "source_url": "https://services.arcgis.com/qnjIrwR8z5Izc0ij/ArcGIS/rest/services/Montana_Structures_and_Addresses_Framework/FeatureServer/0/query?where=NGUID+%3D+%2743375000.%7B391c4410-2cdc-4222-b36a-f9e3cb412868%7D%27&outFields=*&returnGeometry=false&f=json"
    }
  ],
  "segment": null,
  "service_url": "https://services.arcgis.com/qnjIrwR8z5Izc0ij/ArcGIS/rest/services/Montana_Structures_and_Addresses_Framework/FeatureServer/0",
  "since": "2026-06-01",
  "total_count": 102726
}
```

### Records get

- Capability: `gis-layers/records_get`
- Description: One record by the publisher's own id: parcels by PARCELID (the 17-character DOR geocode; every row carrying it is returned, multipart parcels included), addresses and roads by NGUID, conservation_easements by UniqueID, public_lands and boundaries:<id> by GlobalID. Attribute-only. Fails with not_found when no row carries the id.
- Instructions: Fetch or re-check a single parcel, address point, road segment or easement by the id a previous list returned.
- Cost: 5 credits per call
- Capability file: [Records get](https://firecrawl.dev/alexandria/agents/providers/ftpgeoinfo-msl-mt-gov/gis-layers/records_get)

Accepted options:
- `exclude_owner` (boolean): parcels only: do not request the MCA 2-6-1017 owner fields (OwnerName, OwnerAddress1-3, OwnerCity, OwnerState, OwnerZipCode, DbaName, CareOfTaxpayer); `owner` is then null. Ignored on other layers. Example: `false`
- `id` (string, required): PARCELID (e.g. 06100534101010000), NGUID (e.g. 305115000.1663-LIB), UniqueID, or a GlobalID uuid with or without braces. Pattern: ^[A-Za-z0-9 ._{}-]+$. Example: `<id>`
- `layer` (string, required): parcels | public_lands | conservation_easements | addresses | roads | boundaries:<layer id>. Pattern: ^(parcels|public_lands|conservation_easements|addresses|roads|boundaries:[0-9]{1,3})$. Example: `<layer>`

Response schema example:
```json
{
  "count": 1,
  "id": "305115000.1663-LIB",
  "id_field": "NGUID",
  "layer": "addresses",
  "layer_name": "Montana Structures and Addresses",
  "observed_at_ms": 1792346202468,
  "publication_id": "addresses:1791917907199",
  "published_at": "2026-10-13T18:58:27Z",
  "records": [
    {
      "attributes": {
        "AddNum_Pre": null,
        "AddNum_Suf": null,
        "Add_Number": 626,
        "Addtl_Desc": "Bookmobile",
        "Addtl_Loc": null,
        "Building": null,
        "Country": "US",
        "County": "Gallatin County",
        "DatasetTyp": "Structure data",
        "DateUpdate": "2020-07-23T03:34:00Z",
        "DiscrpAgID": "Montana State Library",
        "Elevation": null,
        "Floor": null,
        "GNIS_ID": null,
        "GlobalID": "7a42f531-e1cf-4dca-8413-a66f1c09706a",
        "Inc_Muni": "Bozeman",
        "LandmkName": "Bozeman Public Library Bookmobile",
        "Latitude": null,
        "LocalID": null,
        "Longitude": null,
        "MT_PlcType": 1303,
        "Milepost": null,
        "NGUID": "305115000.1663-LIB",
        "Nbrhd_Comm": null,
        "OBJECTID": 14897,
        "ParcelID": null,
        "Place_Type": "library",
        "Placement": "Structure",
        "PostCodeEx": null,
        "Post_Code": "59715",
        "Post_Comm": "Bozeman",
        "Room": null,
        "Seat": null,
        "St_Name": "Main",
        "St_PosDir": null,
        "St_PosMod": null,
        "St_PosTyp": "Street",
        "St_PreDir": "East",
        "St_PreMod": null,
        "St_PreSep": null,
        "St_PreTyp": null,
        "State": "MT",
        "Uninc_Comm": null,
        "Unit": null
      },
      "global_id": "7a42f531-e1cf-4dca-8413-a66f1c09706a",
      "id_field": "NGUID",
      "object_id": 14897,
      "publication_id": "addresses:1791917907199",
      "retrieved_at": "2026-10-18T17:56:42Z",
      "source_record_id": "305115000.1663-LIB",
      "source_url": "https://services.arcgis.com/qnjIrwR8z5Izc0ij/ArcGIS/rest/services/Montana_Structures_and_Addresses_Framework/FeatureServer/0/query?where=NGUID+%3D+%27305115000.1663-LIB%27&outFields=*&returnGeometry=false&f=json"
    }
  ],
  "service_url": "https://services.arcgis.com/qnjIrwR8z5Izc0ij/ArcGIS/rest/services/Montana_Structures_and_Addresses_Framework/FeatureServer/0"
}
```

### Records list

- Capability: `gis-layers/records_list`
- Description: The current records of one layer, in 2,000-row pages (1,000 for addresses) ordered by OBJECTID with a keyset cursor (`OBJECTID > last`) pinned to the layer's editingInfo.dataLastEditDate. Every page re-reads the layer document and fails with invalid_input / `publication_changed` when the pin moved, so pages from two publications are never mixed. parcels, addresses and roads are segmented by county (segment key: CountyName / County / County_L); conservation_easements, public_lands and boundaries:<id> list statewide. Attribute-only (no geometry). Every record carries source_record_id, source_url, publication_id and retrieved_at; parcel owner fields are grouped under `owner` with the MCA 2-6-1017 notice and can be excluded.
- Instructions: Collect a full snapshot of a layer segment, page by page, after source_status said the publication moved.
- Cost: 5 credits per call
- Capability file: [Records list](https://firecrawl.dev/alexandria/agents/providers/ftpgeoinfo-msl-mt-gov/gis-layers/records_list)

Accepted options:
- `cursor` (string): next_cursor from the previous page. Carries the layer, the segment/filter, the pinned publication (editingInfo.dataLastEditDate) and the last OBJECTID. When the layer has been republished since, the call fails with invalid_input and issue code `publication_changed`: restart from page one. Pattern: ^[0-9a-f]+$. Example: `publication_changed`
- `exclude_owner` (boolean): parcels only: do not request the MCA 2-6-1017 owner fields (OwnerName, OwnerAddress1-3, OwnerCity, OwnerState, OwnerZipCode, DbaName, CareOfTaxpayer); `owner` is then null. Ignored on other layers. Example: `false`
- `layer` (string, required): parcels | public_lands | conservation_easements | addresses | roads | boundaries:<layer id>. Pattern: ^(parcels|public_lands|conservation_easements|addresses|roads|boundaries:[0-9]{1,3})$. Example: `<layer>`
- `page_size` (number): Rows per page; default and maximum is the layer's maxRecordCount (2000; 1000 for addresses). A 2000-row parcel page is about 2.3 MB. Example: `10`
- `segment` (string): County segment key. parcels: the CountyName value ('Gallatin', 'Lewis and Clark'); addresses and roads: the County / County_L value ('Gallatin County'; a bare county name is normalised by appending ' County'). Required for parcels, addresses and roads (statewide lists are 100-460 pages); not accepted for conservation_easements, public_lands or boundaries, which list statewide. Pattern: ^[A-Za-z][A-Za-z .'-]*$. Example: `<segment>`

Response schema example:
```json
{
  "count": 3,
  "layer": "parcels",
  "layer_name": "Montana Parcels",
  "next_cursor": "7b2276223a312c2266223a226c697374222c226c61796572223a2270617263656c73222c2270696e223a313739313931303335373332362c226c6173745f6f6964223a31363732373238382c227365676d656e74223a2247616c6c6174696e227d",
  "observed_at_ms": 1792346185084,
  "page_size": 3,
  "publication_id": "parcels:1791910357326",
  "published_at": "2026-10-13T16:52:37Z",
  "records": [
    {
      "attributes": {
        "AddressLine1": "",
        "AddressLine2": "",
        "AssessmentCode": "00REB10681",
        "COUNTYCD": 6,
        "CertificateOfSurvey": null,
        "CityStateZip": null,
        "ContinuousCropAcres": 0,
        "CountyAbbr": "GA",
        "CountyName": "Gallatin",
        "FallowAcres": 0,
        "FarmsiteAcres": 0,
        "ForestAcres": 0,
        "GISAcres": 3.52988256,
        "GlobalID": "7a52eb2c-ec58-4640-a476-2c08c958f315",
        "GrazingAcres": 1.82,
        "IrrigatedAcres": 0,
        "LegalDescriptionShort": "S34, T01 N, R01 W, ACRES 1.82, TRACT IN NW4",
        "LevyDistrict": "06-035420-15 20",
        "NonQualAcres": 0,
        "OBJECTID": 16727286,
        "PARCELID": "06100534101010000",
        "PropAccess": "",
        "PropType": "Vacant Land",
        "PropertyID": 595057,
        "Range": "01 W",
        "Section": "34",
        "Subdivision": null,
        "TaxYear": 2026,
        "TotalAcres": 1.82,
        "TotalBuildingValue": 0,
        "TotalLandValue": 101,
        "TotalValue": 101,
        "Township": "01 N",
        "WildHayAcres": 0
      },
      "global_id": "7a52eb2c-ec58-4640-a476-2c08c958f315",
      "id_field": "PARCELID",
      "object_id": 16727286,
      "owner": null,
      "publication_id": "parcels:1791910357326",
      "retrieved_at": "2026-10-18T17:56:25Z",
      "source_record_id": "06100534101010000",
      "source_url": "https://services.arcgis.com/qnjIrwR8z5Izc0ij/ArcGIS/rest/services/Montana_Cadastral_Framework/FeatureServer/1/query?where=PARCELID+%3D+%2706100534101010000%27&outFields=*&returnGeometry=false&f=json"
    },
    {
      "attributes": {
        "AddressLine1": "BRIDGER VISTA DR ",
        "AddressLine2": "",
        "AssessmentCode": "00RGI54796",
        "COUNTYCD": 6,
        "CertificateOfSurvey": "628C",
        "CityStateZip": "BOZEMAN, MT 59715",
        "ContinuousCropAcres": 0,
        "CountyAbbr": "GA",
        "CountyName": "Gallatin",
        "FallowAcres": 0,
        "FarmsiteAcres": 0,
        "ForestAcres": 0,
        "GISAcres": 39.62878788,
        "GlobalID": "07aaac6d-eebc-432e-a2d9-3e1e3101ff6f",
        "GrazingAcres": 0,
        "IrrigatedAcres": 0,
        "LegalDescriptionShort": "S14, T02 S, R07 E, C.O.S. 628C, PARCEL B-2, ACRES 40",
        "LevyDistrict": "06-037000-47 00",
        "NonQualAcres": 40,
        "OBJECTID": 16727287,
        "PARCELID": "06080014101100000",
        "PropAccess": "",
        "PropType": "Vacant Land",
        "PropertyID": 623542,
        "Range": "07 E",
        "Section": "14",
        "Subdivision": null,
        "TaxYear": 2026,
        "TotalAcres": 40,
        "TotalBuildingValue": 0,
        "TotalLandValue": 2430,
        "TotalValue": 2430,
        "Township": "02 S",
        "WildHayAcres": 0
      },
      "global_id": "07aaac6d-eebc-432e-a2d9-3e1e3101ff6f",
      "id_field": "PARCELID",
      "object_id": 16727287,
      "owner": null,
      "publication_id": "parcels:1791910357326",
      "retrieved_at": "2026-10-18T17:56:25Z",
      "source_record_id": "06080014101100000",
      "source_url": "https://services.arcgis.com/qnjIrwR8z5Izc0ij/ArcGIS/rest/services/Montana_Cadastral_Framework/FeatureServer/1/query?where=PARCELID+%3D+%2706080014101100000%27&outFields=*&returnGeometry=false&f=json"
    },
    {
      "attributes": {
        "AddressLine1": "JACKSON CREEK RD ",
        "AddressLine2": "",
        "AssessmentCode": "00RGI41554",
        "COUNTYCD": 6,
        "CertificateOfSurvey": "628C",
        "CityStateZip": "BOZEMAN, MT 59715",
        "ContinuousCropAcres": 0,
        "CountyAbbr": "GA",
        "CountyName": "Gallatin",
        "FallowAcres": 0,
        "FarmsiteAcres": 0,
        "ForestAcres": 0,
        "GISAcres": 30.66962619,
        "GlobalID": "23b9b4a8-0d9d-4a5d-8882-2689c9838266",
        "GrazingAcres": 0,
        "IrrigatedAcres": 0,
        "LegalDescriptionShort": "S14, T02 S, R07 E, C.O.S. 628C, PARCEL B-1, ACRES 30.959",
        "LevyDistrict": "06-037000-47 00",
        "NonQualAcres": 30.959,
        "OBJECTID": 16727288,
        "PARCELID": "06080014203010000",
        "PropAccess": "",
        "PropType": "Vacant Land",
        "PropertyID": 623368,
        "Range": "07 E",
        "Section": "14",
        "Subdivision": null,
        "TaxYear": 2026,
        "TotalAcres": 30.959,
        "TotalBuildingValue": 0,
        "TotalLandValue": 1881,
        "TotalValue": 1881,
        "Township": "02 S",
        "WildHayAcres": 0
      },
      "global_id": "23b9b4a8-0d9d-4a5d-8882-2689c9838266",
      "id_field": "PARCELID",
      "object_id": 16727288,
      "owner": null,
      "publication_id": "parcels:1791910357326",
      "retrieved_at": "2026-10-18T17:56:25Z",
      "source_record_id": "06080014203010000",
      "source_url": "https://services.arcgis.com/qnjIrwR8z5Izc0ij/ArcGIS/rest/services/Montana_Cadastral_Framework/FeatureServer/1/query?where=PARCELID+%3D+%2706080014203010000%27&outFields=*&returnGeometry=false&f=json"
    }
  ],
  "segment": "Gallatin",
  "service_url": "https://services.arcgis.com/qnjIrwR8z5Izc0ij/ArcGIS/rest/services/Montana_Cadastral_Framework/FeatureServer/1",
  "total_count": 53624
}
```

### Search

- Capability: `gis-layers/search`
- Description: Per-query search on one record layer with a constrained ArcGIS SQL where clause (field comparisons, LIKE, AND/OR; no statements, comments or subqueries), e.g. "PropType = 'Vacant Land' AND TotalAcres > 100" on parcels or "St_Name = 'Main' AND Post_Comm = 'Bozeman'" on addresses, optionally within one county segment, paged with the same pinned keyset cursor as records_list. A where clause the server rejects (unknown field, bad syntax) fails with invalid_input. Zero matches is a valid empty page.
- Instructions: Answer a question about specific parcels, addresses or roads without collecting the whole layer.
- Cost: 5 credits per call
- Capability file: [Search](https://firecrawl.dev/alexandria/agents/providers/ftpgeoinfo-msl-mt-gov/gis-layers/search)

Accepted options:
- `cursor` (string): next_cursor from the previous page. Carries the layer, the segment/filter, the pinned publication (editingInfo.dataLastEditDate) and the last OBJECTID. When the layer has been republished since, the call fails with invalid_input and issue code `publication_changed`: restart from page one. Pattern: ^[0-9a-f]+$. Example: `publication_changed`
- `exclude_owner` (boolean): parcels only: do not request the MCA 2-6-1017 owner fields (OwnerName, OwnerAddress1-3, OwnerCity, OwnerState, OwnerZipCode, DbaName, CareOfTaxpayer); `owner` is then null. Ignored on other layers. Example: `false`
- `layer` (string, required): parcels | public_lands | conservation_easements | addresses | roads | boundaries:<layer id>. Pattern: ^(parcels|public_lands|conservation_easements|addresses|roads|boundaries:[0-9]{1,3})$. Example: `<layer>`
- `page_size` (number): Rows per page; default and maximum is the layer's maxRecordCount (2000; 1000 for addresses). A 2000-row parcel page is about 2.3 MB. Example: `10`
- `segment` (string): Optional county restriction (parcels: CountyName; addresses: County; roads: County_L). Pattern: ^[A-Za-z][A-Za-z .'-]*$. Example: `<segment>`
- `where` (string, required): ArcGIS SQL-92 where clause over the layer's fields. Semicolons, comments (--, /*) and the words SELECT/UNION/INSERT/UPDATE/DELETE/DROP/EXEC are refused. Example: `<where>`

Response schema example:
```json
{
  "count": 1,
  "layer": "addresses",
  "layer_name": "Montana Structures and Addresses",
  "next_cursor": null,
  "observed_at_ms": 1792346224061,
  "page_size": 5,
  "publication_id": "addresses:1791917907199",
  "published_at": "2026-10-13T18:58:27Z",
  "records": [
    {
      "attributes": {
        "AddNum_Pre": null,
        "AddNum_Suf": null,
        "Add_Number": 626,
        "Addtl_Desc": "Bookmobile",
        "Addtl_Loc": null,
        "Building": null,
        "Country": "US",
        "County": "Gallatin County",
        "DatasetTyp": "Structure data",
        "DateUpdate": "2020-07-23T03:34:00Z",
        "DiscrpAgID": "Montana State Library",
        "Elevation": null,
        "Floor": null,
        "GNIS_ID": null,
        "GlobalID": "7a42f531-e1cf-4dca-8413-a66f1c09706a",
        "Inc_Muni": "Bozeman",
        "LandmkName": "Bozeman Public Library Bookmobile",
        "Latitude": null,
        "LocalID": null,
        "Longitude": null,
        "MT_PlcType": 1303,
        "Milepost": null,
        "NGUID": "305115000.1663-LIB",
        "Nbrhd_Comm": null,
        "OBJECTID": 14897,
        "ParcelID": null,
        "Place_Type": "library",
        "Placement": "Structure",
        "PostCodeEx": null,
        "Post_Code": "59715",
        "Post_Comm": "Bozeman",
        "Room": null,
        "Seat": null,
        "St_Name": "Main",
        "St_PosDir": null,
        "St_PosMod": null,
        "St_PosTyp": "Street",
        "St_PreDir": "East",
        "St_PreMod": null,
        "St_PreSep": null,
        "St_PreTyp": null,
        "State": "MT",
        "Uninc_Comm": null,
        "Unit": null
      },
      "global_id": "7a42f531-e1cf-4dca-8413-a66f1c09706a",
      "id_field": "NGUID",
      "object_id": 14897,
      "publication_id": "addresses:1791917907199",
      "retrieved_at": "2026-10-18T17:57:04Z",
      "source_record_id": "305115000.1663-LIB",
      "source_url": "https://services.arcgis.com/qnjIrwR8z5Izc0ij/ArcGIS/rest/services/Montana_Structures_and_Addresses_Framework/FeatureServer/0/query?where=NGUID+%3D+%27305115000.1663-LIB%27&outFields=*&returnGeometry=false&f=json"
    }
  ],
  "segment": null,
  "service_url": "https://services.arcgis.com/qnjIrwR8z5Izc0ij/ArcGIS/rest/services/Montana_Structures_and_Addresses_Framework/FeatureServer/0",
  "total_count": 1,
  "where": "LandmkName = 'Bozeman Public Library Bookmobile'"
}
```

### Source status

- Capability: `gis-layers/source_status`
- Description: Cheap version check for one MSDI layer: the ArcGIS layer's publication pin (editingInfo.dataLastEditDate as publication_id and published_at), maxRecordCount, the returnCountOnly record count (for parcels optionally one county), and the bulk publication files on ftpgeoinfo.msl.mt.gov from the theme folder's IIS listing with HEAD Content-Length, Last-Modified and ETag (the publisher posts no hashes; the ETag is the file's version). Layers: parcels, public_lands, conservation_easements, addresses, roads, boundaries:<layer id>, and the status-only land_cover and hydrography. Most files exceed the 32 MiB runner cap, so this is the hand-off: URL, size and ETag.
- Instructions: Start here to learn whether a layer moved since the last collection and to get the publication id that records_list pins; or to hand off a bulk file URL.
- Cost: 5 credits per call
- Capability file: [Source status](https://firecrawl.dev/alexandria/agents/providers/ftpgeoinfo-msl-mt-gov/gis-layers/source_status)

Accepted options:
- `county` (string): parcels only: one of the 56 Montana counties, as the CountyName value ('Lewis and Clark') or the bulk folder name ('LewisClark'). Selects the county's monthly parcel publication files and counts its parcels; without it the statewide files and count are returned. Pattern: ^[A-Za-z][A-Za-z .'-]*$. Example: `<county>`
- `layer` (string, required): parcels | public_lands | conservation_easements | addresses | roads | boundaries:<FeatureServer layer id, e.g. boundaries:5 for county boundaries> | land_cover | hydrography. Pattern: ^(parcels|public_lands|conservation_easements|addresses|roads|land_cover|hydrography|boundaries:[0-9]{1,3})$. Example: `<layer>`

Response schema example:
```json
{
  "county": "Gallatin",
  "files": [
    {
      "checked": "head",
      "etag": "6db0a4ef6055dd1:0",
      "last_modified": "2026-10-06T07:04:31Z",
      "listing_modified": "2026-10-06T01:04",
      "name": "Gallatin_GDB.zip",
      "size_bytes": 14144231,
      "url": "https://ftpgeoinfo.msl.mt.gov/Data/Spatial/MSDI/Cadastral/Parcels/Gallatin/Gallatin_GDB.zip"
    },
    {
      "checked": "head",
      "etag": "276823ee6055dd1:0",
      "last_modified": "2026-10-06T07:04:29Z",
      "listing_modified": "2026-10-06T01:04",
      "name": "Gallatin_SHP.zip",
      "size_bytes": 20771462,
      "url": "https://ftpgeoinfo.msl.mt.gov/Data/Spatial/MSDI/Cadastral/Parcels/Gallatin/Gallatin_SHP.zip"
    },
    {
      "checked": "listing",
      "etag": null,
      "last_modified": null,
      "listing_modified": "2026-10-06T01:03",
      "name": "MontanaCadastral_ParcelMetadata.xml",
      "size_bytes": 35131,
      "url": "https://ftpgeoinfo.msl.mt.gov/Data/Spatial/MSDI/Cadastral/Parcels/Gallatin/MontanaCadastral_ParcelMetadata.xml"
    }
  ],
  "layer": "parcels",
  "layer_name": "Montana Parcels",
  "max_record_count": 2000,
  "notice": "Montana State Library data: informational, provided without warranty, no open licence declared. Parcel owner fields are subject to MCA 2-6-1017 (an agency list of personal contact information may not be used as a distribution list for unsolicited contact).",
  "observed_at_ms": 1792346157093,
  "publication_id": "parcels:1791910357326",
  "published_at": "2026-10-13T16:52:37Z",
  "record_count": 53624,
  "service_url": "https://services.arcgis.com/qnjIrwR8z5Izc0ij/ArcGIS/rest/services/Montana_Cadastral_Framework/FeatureServer/1"
}
```
