Discover/Arcgis API
live

Arcgis APIopen-data-portal-san-rafael.hub.arcgis.com ↗

Access City of San Rafael parcel and zoning records via 2 endpoints. Filter by address substring or exact zoning code. Returns APN, situs address, geometry type, and more.

Endpoint health
verified 2h ago
get_layer_info
search_parcels
2/2 passing latest checkself-healing
Endpoints
2
Updated
2h ago

What is the Arcgis API?

The San Rafael Parcels and Zoning API exposes two endpoints that return parcel records and layer metadata from the City of San Rafael Open Data Portal. The search_parcels endpoint returns paginated rows with fields including APN, situs address, and zoning code, and accepts filters for address substring and exact zoning code. The get_layer_info endpoint returns the full field schema — names, types, aliases, and lengths — along with the current total record count and per-request record cap.

This call costs2 credits / call— charged only on success
Try it

No input parameters required.

→ api.parse.bot/scraper/69e64ee7-8382-4b23-86ba-435f567231a6/<endpoint>
Ready to send
Fill in the parameters and hit sign in to send to see live response data here.
Call it over HTTPgrab a free API key at signup
curl -X GET 'https://api.parse.bot/scraper/69e64ee7-8382-4b23-86ba-435f567231a6/get_layer_info' \
  -H 'X-API-Key: $PARSE_API_KEY'
All endpoints · 2 totalmissing one? ·

Returns the metadata of the data layer behind the San Rafael Parcels and Zoning dataset: the published data service URL, the layer ID and name, the geometry type, the object-id field, the per-request record cap, the current total record count, and the full field list (names, types, aliases, string lengths). Two cheap round trips; no inputs; never empty.

Input

No input parameters required.

Response
{
  "type": "object",
  "fields": {
    "fields": "array of {name, type, alias, length} objects; length is null for non-string fields",
    "layer_id": "integer layer ID within the service",
    "layer_url": "service_url joined with layer_id",
    "layer_name": "string layer name",
    "field_names": "array of field name strings in layer order",
    "service_url": "URL of the public data service that holds the dataset",
    "record_count": "integer total number of records in the layer right now",
    "geometry_type": "string geometry type of the layer",
    "object_id_field": "name of the unique object-id field",
    "max_record_count": "integer per-request record cap enforced by the service"
  },
  "sample": {
    "data": {
      "fields": [
        {
          "name": "FID",
          "type": "esriFieldTypeOID",
          "alias": "FID",
          "length": null
        },
        {
          "name": "ENTRYID",
          "type": "esriFieldTypeDouble",
          "alias": "ENTRYID",
          "length": null
        },
        {
          "name": "PROPID",
          "type": "esriFieldTypeString",
          "alias": "PROPID",
          "length": 10
        },
        {
          "name": "PARCEL",
          "type": "esriFieldTypeString",
          "alias": "PARCEL",
          "length": 8
        },
        {
          "name": "SITUS_ADDR",
          "type": "esriFieldTypeString",
          "alias": "SITUS_ADDR",
          "length": 75
        },
        {
          "name": "ZONING",
          "type": "esriFieldTypeString",
          "alias": "ZONING",
          "length": 50
        },
        {
          "name": "Shape__Area",
          "type": "esriFieldTypeDouble",
          "alias": "Shape__Area",
          "length": null
        },
        {
          "name": "Shape__Length",
          "type": "esriFieldTypeDouble",
          "alias": "Shape__Length",
          "length": null
        }
      ],
      "layer_id": 0,
      "layer_url": "https://services5.arcgis.com/sruoiBDPu8SihcGN/arcgis/rest/services/Parcel_Zoning_Latest/FeatureServer/0",
      "layer_name": "Parcel_Zoning_Latest",
      "field_names": [
        "FID",
        "ENTRYID",
        "PROPID",
        "PARCEL",
        "SITUS_ADDR",
        "ZONING",
        "Shape__Area",
        "Shape__Length"
      ],
      "service_url": "https://services5.arcgis.com/sruoiBDPu8SihcGN/arcgis/rest/services/Parcel_Zoning_Latest/FeatureServer",
      "record_count": 18276,
      "geometry_type": "esriGeometryPolygon",
      "object_id_field": "FID",
      "max_record_count": 2000
    },
    "status": "success"
  }
}

About the Arcgis API

Layer Metadata

The get_layer_info endpoint requires no inputs and returns a complete description of the underlying data layer. Key response fields include fields (an array of objects with name, type, alias, and length, where length is null for non-string fields), record_count (the live total number of parcels), max_record_count (the service's per-request cap), geometry_type, and object_id_field. This is the right starting point before querying records, since it tells you which field names and zoning codes exist in the dataset.

Parcel and Zoning Records

The search_parcels endpoint returns one row per parcel, ordered by fid ascending. Each record includes fid, entry_id, prop_id (the APN formatted with dashes), parcel (raw APN digits), and situs_address. Two optional filters narrow results: address_contains performs a case-insensitive substring match on the situs address field — useful for finding all parcels on a named street — while zoning requires an exact match against the stored zoning code (for example, PD(1). Without filters, the endpoint pages through the full dataset.

Pagination

Results are paginated using limit and offset parameters. The limit value is clamped to a maximum of 2000, matching the service's per-request cap reported by get_layer_info. The response includes total_count (matching records across all pages), count (records on the current page), and has_more (a boolean indicating whether additional pages exist). Combine offset with total_count to iterate the full result set programmatically.

Reliability & maintenanceVerified

The Arcgis API is a managed, monitored endpoint for open-data-portal-san-rafael.hub.arcgis.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when open-data-portal-san-rafael.hub.arcgis.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.

This isn't an official open-data-portal-san-rafael.hub.arcgis.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.

Last verified
2h ago
Latest check
2/2 endpoints passing
Maintenance
Monitored & self-healing
Will this API break when the source site changes?+
It's built not to. Every endpoint is health-checked on a schedule with automated test probes. When the source site changes and a check fails, the API is automatically queued for repair and re-verified — that's the self-healing layer. Each API page shows when its endpoints were last verified. And because marketplace APIs are shared, any fix reaches everyone using it.
Is this an official API from the source site?+
No — Parse APIs are independent, managed REST wrappers over publicly available data. That is the point: where a site has no official API (or only a limited one), Parse gives you a maintained, monitored endpoint for that data and keeps it working as the site changes — so you get a stable contract over a source that never promised one.
Can I fix or extend this API myself if I need a new endpoint or field?+
Yes — and you don't have to wait on us. This API was generated by the Parse agent, which stays attached. Describe the change in plain English ("add an endpoint that returns reviews", "fix the price field") in the revise box on the API page or via the revise_api MCP tool, and the agent rebuilds it against the live site in minutes. Contributing the change back to the public API is free.
What happens if I call an endpoint that has an issue?+
Errors are machine-readable: a bad call returns a clean status with the list of available endpoints and a repair hint, so an agent (or you) can recover or trigger a fix instead of failing silently. Confirmed failures feed the automatic repair queue.
Common use cases
  • Look up all parcels on a specific street using the address_contains filter against situs_address.
  • Pull every parcel assigned a particular zoning code using the exact zoning filter.
  • Enumerate all field names and types with get_layer_info before building a data pipeline.
  • Count total parcels in the city using record_count from the layer metadata endpoint.
  • Page through the full parcel dataset for bulk APN extraction using limit and offset.
  • Cross-reference prop_id (APN with dashes) against county assessor records for property research.
  • Identify parcels in planned-development zones by filtering for PD-prefixed zoning codes.
Pricing & limitsSee full pricing →
TierPriceCredits/monthRate limit
Free$0/mo2005 req/min
Hobby$30/mo1,00020 req/min
Developer$100/mo5,000100 req/min
Team$300/mo20,000300 req/min
Company$1,000/mo100,000500 req/min

Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.

Frequently asked questions
Does the City of San Rafael Open Data Portal have an official developer API?+
Yes. The portal is built on ArcGIS Hub and the underlying dataset is served through an Esri Feature Service, which has a documented REST API at developers.arcgis.com. The Parse API wraps this specific dataset with pre-built filtering and pagination so you do not need to construct query parameters manually.
What does `search_parcels` return for each record, and how do the address and zoning filters interact?+
Each record includes fid, entry_id, prop_id (APN with dashes), parcel (raw APN digits), and situs_address. If you supply both address_contains and zoning, only records matching both conditions are returned. If neither filter is supplied, all parcels are returned in fid ascending order, paged by limit and offset.
How do I know if I've retrieved all matching records when paginating?+
The response includes total_count (total matching records across the full layer), count (records on the current page), and has_more (a boolean). When has_more is false and count is less than limit, you have reached the last page. Note that limit values above 2000 are clamped to 2000, which matches the service's own per-request cap.
Does the API return parcel geometry — polygon coordinates for each parcel boundary?+
Not currently. The search_parcels endpoint returns attribute fields (APN, address, zoning code) but not geometry coordinates. The get_layer_info endpoint does return the geometry_type string for the layer. You can fork this API on Parse and revise it to request and return geometry from the underlying service for use cases that need polygon data.
Does the dataset cover parcels outside the City of San Rafael, such as unincorporated Marin County areas?+
No. The dataset is the City of San Rafael's own parcel and zoning layer and covers only parcels within city boundaries. It does not include unincorporated Marin County parcels or other municipalities. You can fork this API on Parse and revise it to point at a different ArcGIS layer if you need broader county-level coverage.
Page content last updated . Spec covers 2 endpoints from open-data-portal-san-rafael.hub.arcgis.com.
Related APIs in Government PublicSee all →
sfplanninggis.org API
Access data from sfplanninggis.org.
losangeles.gov API
Search for building permits, inspection records, and property details for Los Angeles addresses to access permit histories, parcel information, code enforcement records, and occupancy certificates. Track retrofit programs and get comprehensive permit summaries to research property compliance and construction activity in LA.
qPublic Property Records API
Search for properties on qPublic and access comprehensive details including owner information, valuations, building and land characteristics, sales history, tax exemptions, and fees. Retrieve complete property records to research real estate, verify ownership, or analyze property values.
geoportail-urbanisme.gouv.fr API
Find parcel information and urban planning documents for any French address, instantly accessing zoning details, land use regulations, and planning requirements from the official Géoportail database. Search by address to discover property classifications, construction rules, and relevant urban planning documentation for your location.
rentregistry.cityofberkeley.info API
Search Berkeley rental properties and access detailed rent information, registration statistics, and FAQs from the City of Berkeley's official Rent Registry. Look up unit-level rental data and property details to research housing costs and landlord registration records in Berkeley.
hub.arcgis.com API
Search and discover open data content across ArcGIS Hub to find datasets, maps, applications, documents, and sites relevant to your needs. Retrieve detailed information about specific items to access the data and resources you're looking for.
manateepao.gov API
Search for properties in Manatee County and retrieve detailed information including ownership records, sales history, and comparable sales data. Access parcel-level details such as land use, building area, living units, and transaction history across all property types.
digitalsf.org API
Access data from digitalsf.org.