# CBRS Coastal Barrier Screener - CBRA Flood Insurance Bar (`malonestar/cbrs-coastal-barrier-screener`) Actor

Batch-screen coordinates against the USFWS Coastal Barrier Resources System. Returns System Unit vs Otherwise Protected Area, the flood-insurance prohibition date FEMA actually applies, the official 20 ft boundary buffer zone, distance to the CBRS boundary, and the official unit map link.

- **URL**: https://apify.com/malonestar/cbrs-coastal-barrier-screener.md
- **Developed by:** [Kyle Maloney](https://apify.com/malonestar) (community)
- **Categories:** Real estate, Developer tools, Agents
- **Stats:** 2 total users, 1 monthly users, 95.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.50 / 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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## CBRS Coastal Barrier Screener — CBRA Federal Flood Insurance Bar

Batch-screen coordinates against the **John H. Chafee Coastal Barrier Resources System (CBRS)** and get back the one fact that decides coastal deals: whether the **Coastal Barrier Resources Act (CBRA)** withdraws federal flood insurance and federal financial assistance at that location.

Property inside a CBRS unit is generally **ineligible for new National Flood Insurance Program coverage**. If a lender requires flood insurance, that can end a closing. This actor tells you, per coordinate:

- **In or out** of a CBRS unit, with the unit id, name and acreage.
- **System Unit vs Otherwise Protected Area** — legally different, with different consequences, reported separately rather than collapsed into one flag.
- **The flood insurance prohibition date** from the USFWS CBRS Prohibitions layer. This is the date FEMA actually applies: a structure built (or permitted and under construction) *before* it can still be federally insured. An in/out answer without this date is not actionable.
- **The official 20 ft CBRS Buffer Zone.** A point within about 20 feet (6 m) of a mapped boundary is flagged **boundary-adjacent**. The in/out answer still comes from the CBRS Units layer and still stands; what the flag adds is that USFWS does not issue *self-serve* documentation this close to a line, so a file that needs documentation should request an official CBRS Property Determination letter.
- **Distance to the nearest CBRS boundary**, in metres and feet, with the nearest unit.
- **The map vintage and a direct link to the official USFWS unit map**, so any answer can be checked against the legal map.

Keyless. No account or API key at the source. One billable row per coordinate.

> **This is a screening tool, not an official determination.** It reads the same USGS-hosted CBRS Mapper data USFWS publishes, but only USFWS issues an authoritative CBRA property determination. Use the [CBRS Validation Tool](https://apps.usgs.gov/fws/CBRSMapper-v2/) for self-serve documentation, or email `CBRAdeterminations@fws.gov` for a determination letter. Nothing here is legal, insurance or lending advice.

***

### Who this is for

| Persona | What they use it for |
|---|---|
| **Coastal real-estate due diligence** | Screen a pipeline of listings or a portfolio before spending money on a deeper look. A CBRS hit changes the underwriting. |
| **Mortgage and title underwriters** | Catch the CBRA flood-insurance bar before a loan file reaches closing, when a required policy cannot legally be written. |
| **Flood insurance agents and NFIP write-your-own carriers** | Pre-qualify a risk and get the prohibition date, which is what decides whether an existing structure is still insurable. A policy issued inside the CBRS in error must be cancelled and no claim can be paid. |
| **Coastal developers and site selectors** | Flag sites where most new federal expenditures and financial assistance are unavailable, before design spend. |
| **Phase I ESA and environmental consultants** | Add a CBRS overlay to a coastal site file alongside wetlands, flood and habitat screens. |
| **AI agents / MCP** | A clean, chainable geospatial tool: coordinates in, structured regulatory verdict out. |

### Example input

```json
{
  "assets": [
    { "lat": 29.67,     "lon": -85.35,     "label": "Cape San Blas, FL (System Unit P30)" },
    { "lat": 28.83752,  "lon": -80.82921,  "label": "Canaveral, FL (Otherwise Protected Area FL-07P)" },
    { "lat": 29.751884, "lon": -85.304598, "label": "P30 boundary (in unit and in the 20 ft buffer zone)" },
    { "lat": 29.751884, "lon": -85.304567, "label": "3 m outside P30 (outside every unit — boundary-adjacent)" },
    { "lat": 39.7392,   "lon": -104.9903,  "label": "Denver, CO (inland control)" }
  ],
  "includeBoundaryPrecision": true,
  "includeProhibitionDates": true,
  "includeProximity": true,
  "includeOfficialMapLinks": true,
  "searchRadiusMeters": 1609,
  "nearBoundaryMeters": 76,
  "maxAssets": 500
}
```

Every option defaults to **on**, so a bare `{"assets":[...]}` gets the full screen. Turning one off sets its fields to `null` — meaning *not checked* — never to `false`.

### Use as an MCP tool

The actor is exposed to AI agents through `mcp.apify.com`. Field-level descriptions in the output schema are written for an agent to read: each status field says what `null` means, and `flag_basis` gives the agent an audit trail it can quote back. Chain it after a geocoder and before a flood or wetlands screen.

***

### Output fields

One row per input coordinate. Every row carries every column.

#### Identity

| Field | Type | Meaning |
|---|---|---|
| `asset_label` | string | Your label, echoed back. Synthesised as `asset_N` if omitted. |
| `asset_lat` / `asset_lon` | number | The screened point (WGS84 decimal degrees). |
| `checked_at` | string | UTC ISO 8601 timestamp of the run. |
| `source_url` | string | The USGS CBRS Units layer queried. |
| `cbrs_validation_tool_url` | string | The official USFWS/USGS CBRS Validation Tool. |

#### The CBRS answer

| Field | Type | Meaning |
|---|---|---|
| `in_cbrs` | boolean or null | `true` inside a CBRS unit, `false` checked and outside every unit, **`null` = the CBRS Units layer did not answer**. Null is not a clear result. |
| `unit_id` | string or null | Unit identifier, e.g. `P30`, `FL-07P`. |
| `unit_name` | string or null | Unit name, e.g. `Cape San Blas`. |
| `unit_type` | string or null | Exactly `System Unit` or `Otherwise Protected Area`, as USFWS publishes it. |
| `unit_type_code` | string or null | `SYSTEM_UNIT`, `OPA` or `UNKNOWN`. |
| `is_system_unit` | boolean or null | Convenience boolean for `SYSTEM_UNIT`. |
| `is_otherwise_protected_area` | boolean or null | Convenience boolean for `OPA`. |
| `unit_objectid` | number or null | OBJECTID of the unit polygon in the USGS service. |
| `fast_acres` | number or null | Fastland (upland) acreage of the unit. |
| `wet_acres` | number or null | Associated aquatic and wetland acreage. |
| `total_acres` | number or null | fast\_acres + wet\_acres. |
| `shore_miles` | number or null | Shoreline miles of the unit. |
| `overlapping_unit_count` | number or null | How many unit polygons the point intersects. Normally 0 or 1. |
| `additional_unit_ids` | string or null | Ids of any further intersecting units. Null in the normal single-unit case; nothing fetched is dropped. |

#### CBRA consequences

| Field | Type | Meaning |
|---|---|---|
| `federal_flood_insurance_barred` | boolean or null | The CBRA prohibition on new NFIP coverage applies at this location. True inside any CBRS unit. A location flag, not a structure-level determination: read it with the two date fields below. Null when the layer did not answer. |
| `federal_expenditure_restricted` | boolean or null | True inside a System Unit, where most new federal expenditures and financial assistance are prohibited. False in an OPA, where the flood-insurance prohibition is the only CBRA restriction. |
| `federal_expenditure_restriction_scope` | string or null | `most_new_federal_expenditures`, `limited_purposes_only`, or `none`. |
| `flood_insurance_prohibition_date` | string or null | The date FEMA applies. A structure constructed (or permitted and under construction) before it can still be federally insured. |
| `flood_insurance_prohibition_year` | number or null | Year part of the above, for filtering. |
| `system_unit_designation_date` | string or null | Date the area became a System Unit. Genuinely null for OPAs. |
| `pre_prohibition_structures_may_be_insurable` | boolean or null | True when a prohibition date was retrieved. Null when it was not; never assume. |
| `substantial_improvement_rule_applies` | boolean or null | True for areas added 1982-2023, where an existing insured structure that is substantially improved or damaged (over 50 percent of market value) cannot have its policy renewed. False for areas added 2024 or later. |
| `flood_insurance_exception_available` | boolean or null | True inside an OPA, where coverage may still be available with written documentation that the structure is used consistently with the purposes for which the area is protected. |
| `flood_insurance_exception_note` | string or null | The date-based and use-based exceptions in plain language. |
| `cbra_determination_note` | string or null | Full narrative: the CBRA effect, any boundary-adjacent or near-boundary advisory, any partial-result warning, and the disclaimer. |
| `prohibition_unit_id` | string or null | Unit id on the CBRS Prohibitions polygon. |
| `prohibition_cbrs_type` | string or null | Unit type recorded on the CBRS Prohibitions polygon. |
| `unit_type_agreement` | boolean or null | Whether the units layer and the prohibitions layer agree on the type. |

#### Boundary precision

| Field | Type | Meaning |
|---|---|---|
| `in_cbrs_buffer_zone` | boolean or null | The point is **boundary-adjacent**: inside the official USFWS CBRS Buffer Zone, about 20 feet (6 m) either side of a mapped boundary. It is a proximity band, not a CBRS unit — read it alongside `in_cbrs`, which it never overrides. The buffer polygons carry no unit attribution (their only fields are `OBJECTID`, `BUFF_DIST` and the geometry), so a buffer hit cannot name a unit; `nearest_unit_id` and `distance_to_unit_boundary_ft` do that. |
| `buffer_zone_distance_ft` | number or null | The buffer **width** published on the polygon (20), not a measured distance to the boundary — for that use `distance_to_unit_boundary_ft`. Null when the point is not in the buffer zone, and on the 7 of 1,145 buffer polygons where USFWS publishes no `BUFF_DIST`. |
| `official_determination_required` | boolean or null | True in the buffer zone: the point is boundary-adjacent, so USFWS will not issue self-serve documentation and an official CBRS Property Determination letter is the way to document the answer. It does **not** mean `in_cbrs` is in doubt. |
| `determination_confidence` | string or null | `high`, `boundary_zone_official_determination_required` (boundary-adjacent — verify with USFWS if you need documentation), `boundary_zone_not_checked`, or `unknown`. |
| `distance_to_unit_boundary_m` / `distance_to_unit_boundary_ft` | number or null | Distance from the point to the relevant unit boundary, in metres and in feet. |
| `boundary_relation` | string or null | `inside_unit` or `outside_unit`. |
| `near_boundary` | boolean or null | Within `near_boundary_threshold_m` of a boundary, at whatever threshold you set. Advisory; the officially published band is the ~20 ft `in_cbrs_buffer_zone`. |
| `near_boundary_threshold_m` | number or null | Threshold used on this run. |
| `nearest_unit_id` / `nearest_unit_name` / `nearest_unit_type` / `nearest_unit_distance_m` | mixed | The closest unit within the search radius. |
| `units_within_search_radius` | number or null | How many units lie within `search_radius_m`. |
| `search_radius_m` | number or null | The radius used on this run. |

#### Vintage and provenance

| Field | Type | Meaning |
|---|---|---|
| `map_panel_no` | string or null | Official CBRS map panel number, e.g. `12-013B`. |
| `map_panel_state` | string or null | State on the panel. |
| `map_panel_title` | string or null | Panel title, e.g. `Cape San Blas Unit P30/P30P (1 of 2)`. |
| `map_date` | string or null | Date printed on the panel. |
| `map_effective_date` | string or null | The boundary vintage this result rests on. |
| `official_unit_map_url` | string or null | Direct link to the official USFWS map for the unit. |
| `historical_map_url` | string or null | USFWS record of historical changes for the panel. |
| `data_vintage_note` | string or null | Vintage in prose. |
| `source_unit_count` | number or null | National CBRS unit count at run time, captured by the live drift check. |
| `source_layers_queried` | string or null | Which USGS layers were consulted for this row. |
| `flag_basis` | string or null | Audit trail: which layer produced each flag, and which were not consulted. |

#### Status — read these before trusting a negative

| Field | Type | Meaning |
|---|---|---|
| `screen_status` | string | `complete`, `partial` (an optional layer did not answer), or `error`. |
| `cbrs_units_status` | string | `ok`, `unavailable`, `skipped`. |
| `cbrs_units_error` | string or null | Why the authoritative layer did not answer. |
| `prohibitions_status` | string | `ok`, `no_coverage`, `unavailable`, `not_requested`. |
| `buffer_zone_status` | string | `ok`, `unavailable`, `not_requested`. |
| `proximity_status` | string | `ok`, `unavailable`, `not_requested`. |
| `map_panel_status` | string | `ok`, `no_coverage`, `unavailable`, `not_requested`. |
| `layers_unavailable` | string or null | Which layers did not answer on this row. |
| `error` | string or null | Populated when the point could not be screened. |

***

### How a wrong answer is prevented

CBRS status is a fact people close on, so this actor is built to refuse rather than guess.

- **`null` never means "no".** `null` = not checked, `false` = checked and negative. If the CBRS Units layer does not answer, `in_cbrs` and both CBRA flags are `null` and the row says so. Earlier builds returned `false` there, which reads as "flood insurance is not barred" about a point that was never checked.
- **A total outage fails the run.** If the source cannot be reached, or every asset's units lookup fails, the run fails with an actionable message and emits nothing — so nothing is billed for an answer that does not exist.
- **Live source checks run before any row is emitted.** On every run the actor verifies the layer's own metadata and field list, the national unit count against an expected band, that `Unit_Type` still carries both `System Unit` and `Otherwise Protected Area`, that a coordinate known to sit inside a System Unit still resolves to one, that the response really is WGS84, and that no query was truncated. Any failure fails the run.
- **Projection is checked by coordinate magnitude and each feature's own extent**, not by distance from the query point. Coastal barriers are long: Cape Hatteras spans about 4.5 degrees. A distance-based guard would reject every open-coast site.
- **Queries are explicitly record-capped** and `exceededTransferLimit` is read, so a silently truncated response is reported as unavailable rather than used.
- **Boundary queries carry both `inSR` and `outSR`.** A missing `inSR` on the input geometry silently matches nothing, which looks exactly like a clear result.
- **A buffer-zone hit is not a CBRS hit, and does not cast doubt on one.** The USFWS buffer polygons are a ~20 ft proximity band with no unit attribution of their own, so `in_cbrs_buffer_zone` is reported next to `in_cbrs`, never over it. A boundary-adjacent point that is outside every unit is genuinely outside every unit; the flag exists because USFWS declines *self-serve documentation* that close to a line, not because the geometry is uncertain.

### Data sources

All from the USGS-hosted CBRS Mapper service (`gis1.wim.usgs.gov`), which publishes the USFWS CBRS data:

| Layer | Used for |
|---|---|
| 3 — CBRS Units | The in/out answer, unit id/name/type, acreage, shoreline miles |
| 1 — CBRS Prohibitions | Flood insurance prohibition date, System Unit designation date |
| 0 — CBRS Buffer Zone | The official ~20 ft boundary-adjacency band. 1,145 polygons whose only published fields are `OBJECTID`, `BUFF_DIST` (20 on 1,138, null on 7) and the geometry — no unit attribution |
| 5 — CBRS Map Panels | Map vintage, panel number, official USFWS map link |

Boundaries are revised by Congress and administratively by USFWS through the statutory 5-year review, so always read `map_effective_date` alongside the verdict.

### Pricing

Pay-per-result: **$10 per 1,000 rows ($0.01 per coordinate)**, on the automatic result event. Graduated discounts apply on paid Apify plans. A run that fails a source check emits no rows and bills nothing.

### FAQ

**Does a CBRS hit mean the property cannot get flood insurance?**
Not automatically. The CBRA prohibition applies to *new* federal coverage, and a structure built (or permitted and under construction) before the unit's `flood_insurance_prohibition_date` can still be federally insured. That date is on every row. Inside an Otherwise Protected Area there is a further exception for structures used consistently with the purposes for which the area is protected.

**What is the difference between a System Unit and an Otherwise Protected Area?**
Inside a System Unit, CBRA withdraws federal flood insurance *and* most new federal expenditures and financial assistance. Inside an OPA, the flood-insurance prohibition is the only CBRA restriction. The actor reports both separately (`federal_flood_insurance_barred`, `federal_expenditure_restricted`, `federal_expenditure_restriction_scope`).

**My point came back clear but `official_determination_required` is true. Why?**
The point is **boundary-adjacent** — within about 20 feet of a mapped CBRS boundary. The clear result is still a real answer: the CBRS Units layer was queried, the point is outside every unit, and CBRA's prohibitions do not apply there. What the flag adds is that USFWS does not issue self-serve in/out documentation this close to a line, so if your file needs documentation, request an official CBRS Property Determination letter. Note also that the buffer polygons carry no unit attribution, so the flag cannot say *which* unit's boundary is nearby — `nearest_unit_id` and `distance_to_unit_boundary_ft` do that.

**Is a clear coordinate the same as a clear parcel?**
No. CBRA eligibility turns on where the insurable *structure* sits. If only an undeveloped portion of a parcel is inside the CBRS and every insurable structure is completely outside it, federal flood insurance is not barred. Screen the structure, or several points across the parcel.

**Can I use this as the official determination?**
No. Use the [CBRS Validation Tool](https://apps.usgs.gov/fws/CBRSMapper-v2/) for self-serve documentation, or request a determination letter from USFWS at `CBRAdeterminations@fws.gov`. This actor is a screen that tells you when to do that.

**Why did my run fail instead of returning zero rows?**
Because a green run with no rows is indistinguishable from a green run with a wrong answer. If the source is unreachable or drifts from its verified shape, the run fails loudly and bills nothing.

### Related actors

| Actor | Why pair it |
|---|---|
| **NFIP Flood Loss Risk Screener** | Historical FEMA paid-claim history near the same coordinate. |
| **FEMA NRI County Risk Profile** | County and tract-level multi-peril risk context. |
| **NHD Surface Water & Section 404 Screener** | Jurisdictional surface water at the same site. |
| **FWS Wetlands Proximity Screener** | National Wetlands Inventory overlap and Section 404 exposure. |
| **Site Due Diligence Bundle** | Twenty regulatory layers for one coordinate in a single call, including this one. |

### Legal notice

This actor reproduces publicly available USFWS/USGS CBRS data and applies published USFWS and FEMA rules to it. It is informational only and is not an official CBRA determination, a flood-insurance eligibility decision, a survey, or legal advice. FEMA's implementing regulations are at 44 CFR Part 71. A federal flood insurance policy issued inside the CBRS in error must be cancelled and no claim can be paid, so confirm with USFWS before acting.

# Actor input Schema

## `assets` (type: `array`):

Points to check against the Coastal Barrier Resources System. Each item is an object with numeric lat and lon (WGS84 decimal degrees) and an optional label echoed into the output. One billable result row is produced per asset.

## `includeBoundaryPrecision` (type: `boolean`):

Query the official USFWS CBRS Buffer Zone layer (about 20 feet either side of a mapped boundary) and flag points that are boundary-adjacent. This does not change the in/out answer, which comes from the CBRS Units layer; it tells you that USFWS declines self-serve documentation that close to a line, so an official CBRS Property Determination letter is the way to document the point. Strongly recommended.

## `includeProhibitionDates` (type: `boolean`):

Query the CBRS Prohibitions layer for the flood insurance prohibition date and the System Unit designation date. FEMA uses the prohibition date to decide whether an existing structure inside the CBRS is still federally insurable, so this is the field that turns an in/out answer into an actionable one.

## `includeProximity` (type: `boolean`):

Measure the exact distance from each point to the nearest CBRS unit boundary and report the nearest unit within the search radius. Adds one query per asset.

## `includeOfficialMapLinks` (type: `boolean`):

Query the CBRS Map Panels layer for the panel number, the map effective date (the boundary vintage this result rests on) and a direct link to the official USFWS unit map so the answer can be verified against the legal map.

## `searchRadiusMeters` (type: `integer`):

How far to look for nearby CBRS units when computing boundary distance. 1609 m is one mile. Larger radii return a nearest unit for more inland points at the cost of larger responses.

## `nearBoundaryMeters` (type: `integer`):

Sets the informational near\_boundary flag when a point is within this distance of a CBRS boundary. 76 m is about 250 feet, a typical lot depth. This is advisory only, at whatever threshold you set; the officially published band is the 20 ft CBRS Buffer Zone.

## `maxAssets` (type: `integer`):

Safety cap on how many assets to screen in one run. Extra assets beyond this limit are skipped.

## Actor input object example

```json
{
  "assets": [
    {
      "lat": 29.67,
      "lon": -85.35,
      "label": "Cape San Blas, FL"
    }
  ],
  "includeBoundaryPrecision": true,
  "includeProhibitionDates": true,
  "includeProximity": true,
  "includeOfficialMapLinks": true,
  "searchRadiusMeters": 1609,
  "nearBoundaryMeters": 76,
  "maxAssets": 500
}
```

# Actor output Schema

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

The default dataset with one CBRS screening row per asset.

# 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 = {
    "assets": [
        {
            "lat": 29.67,
            "lon": -85.35,
            "label": "Cape San Blas, FL (System Unit P30)"
        },
        {
            "lat": 28.83752,
            "lon": -80.82921,
            "label": "Canaveral, FL (Otherwise Protected Area FL-07P)"
        },
        {
            "lat": 29.751884,
            "lon": -85.304598,
            "label": "P30 boundary, FL (in unit and in the 20 ft buffer zone)"
        },
        {
            "lat": 29.751884,
            "lon": -85.304567,
            "label": "3 m outside P30, FL (outside every unit - boundary-adjacent)"
        },
        {
            "lat": 39.7392,
            "lon": -104.9903,
            "label": "Denver, CO (inland control - genuinely clear)"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("malonestar/cbrs-coastal-barrier-screener").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 = { "assets": [
        {
            "lat": 29.67,
            "lon": -85.35,
            "label": "Cape San Blas, FL (System Unit P30)",
        },
        {
            "lat": 28.83752,
            "lon": -80.82921,
            "label": "Canaveral, FL (Otherwise Protected Area FL-07P)",
        },
        {
            "lat": 29.751884,
            "lon": -85.304598,
            "label": "P30 boundary, FL (in unit and in the 20 ft buffer zone)",
        },
        {
            "lat": 29.751884,
            "lon": -85.304567,
            "label": "3 m outside P30, FL (outside every unit - boundary-adjacent)",
        },
        {
            "lat": 39.7392,
            "lon": -104.9903,
            "label": "Denver, CO (inland control - genuinely clear)",
        },
    ] }

# Run the Actor and wait for it to finish
run = client.actor("malonestar/cbrs-coastal-barrier-screener").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 '{
  "assets": [
    {
      "lat": 29.67,
      "lon": -85.35,
      "label": "Cape San Blas, FL (System Unit P30)"
    },
    {
      "lat": 28.83752,
      "lon": -80.82921,
      "label": "Canaveral, FL (Otherwise Protected Area FL-07P)"
    },
    {
      "lat": 29.751884,
      "lon": -85.304598,
      "label": "P30 boundary, FL (in unit and in the 20 ft buffer zone)"
    },
    {
      "lat": 29.751884,
      "lon": -85.304567,
      "label": "3 m outside P30, FL (outside every unit - boundary-adjacent)"
    },
    {
      "lat": 39.7392,
      "lon": -104.9903,
      "label": "Denver, CO (inland control - genuinely clear)"
    }
  ]
}' |
apify call malonestar/cbrs-coastal-barrier-screener --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,malonestar/cbrs-coastal-barrier-screener"
        }
    }
}

```

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/QsKYomRWuaqacShcI/builds/jv20IEbKv8d83funk/openapi.json
