Skip to content
All data sources

CalGEM California Oil & Gas Wells API and MCP server

No authca-calgem

California oil, gas, and injection wells near a parcel: proximity, idle and orphan exposure, oil-field and gas-storage boundaries at a point, and the CalGEM construction-site well-review signal that can gate a local building permit. Abandoned oil wells are the plugged, idle, and orphan records here; pre-regulation and undocumented wells are not mapped. Spatially anchored only — no production or injection volumes, no permit pipeline, and no statewide well search.

CalGEM California Oil & Gas Wells is published by CalGEM WellSTAR (Well Statewide Tracking and Reporting System) and covers California.

It refreshes on a schedule, every day.

Last verified . That is when these facts were last rebuilt from the ParcelOps source registry, not when CalGEM WellSTAR (Well Statewide Tracking and Reporting System) last refreshed the data itself.

API access

Your AI client reaches CalGEM California Oil & Gas Wells through one ParcelOps MCP endpoint, so there is no separate key to hold for it and no per-source client to write. Reaching it takes no credentials of your own.

Where it came from

Freshness and coverage

FreshnessScheduled · every day · CalGEM states the well layer is regenerated daily. There is no record-level update timestamp anywhere in the payload, so freshness is publisher-asserted and NOT observable — observedAtField and updatedAtField are deliberately omitted. The service copyrightText still carries the pre-2020 DOGGR name and the ArcGIS Hub item modified date is 2022; neither is a freshness signal.
Places coveredCalifornia
Time coveredNot declared
CredentialsNo credentials required

What this source cannot tell you

  • Anything outside California. A request past that edge comes back empty rather than approximated.
  • Which years it spans, because the covered period is not declared.
  • Anything CalGEM WellSTAR (Well Statewide Tracking and Reporting System) does not publish. ParcelOps returns this source as it stands and never fills a blank field from a different one.
  • CalGEM well locations are permit-time surface locations (GISSource is frequently "Notice of Intent to Drill"), not as-drilled surveys, and a directionally drilled well's bottomhole is elsewhere. This connector answers "how many wells are within N meters of this point", never "is there a well on this parcel".
  • CalGEM states its well data varies in accuracy, scale, origin, and completeness, may be updated, amended, or deleted at any time without notice, and carries no warranty of fitness. This is not a title, survey, environmental clearance, or regulatory determination.
  • HPZ (SB 1137 health protection zone) is reported only as the per-well inHPZ attribute of NEARBY WELLS, never as a property of the parcel. The Health_Protection_Zones polygon layer is deliberately never queried: its dissolved multipart polygons return confident wrong answers, including "Verified HPZ" over Death Valley and a single feature covering San Francisco that spans a third of the state.
  • No production or injection volumes, no permit pipeline, no well-record documents. CalGEM serves those only as file-request downloads (SQL .BAK backups and PDFs), and the WellSTAR public search is a session UI with no JSON surface. A "how much did this well produce" question cannot be answered here.
  • Orphan-well answers carry a vintage because CalGEM republishes that screening list as a NEW service on a separate ArcGIS Online host every quarter, with counts that move sharply between vintages (5,295 in 2024, 946 in 2025, 932 in 2026 Q1, 1,048 in 2026 Q2). A stale URL is not obviously stale, so the count is never reported without its vintage.
  • Geothermal wells are excluded from v1. They live on a separate layer of the same service with an incompatible schema (APINumber, Lat83/Long83), and mapping them as if they were oil-and-gas wells would silently mis-field every record.
  • Absence of a mapped well is not evidence of clear ground: pre-regulation, undocumented, and non-CalGEM-jurisdiction wells are not in this layer.

Methods (5)

A method is one call your agent can make against this source.

  • searchWellsNearPoint

    read

    List CalGEM wells within a radius of a point, nearest first, with status and operator filters.

    What you must providelatitudelongitude
    Records returnedwell
    How to get more resultsnone (limitField: limit)
    UnitsradiusMeters: m · distanceMeters: m
    Coordinate systemEPSG:4326
    FreshnessScheduled · every day (source-level)
    Input schema
    {
      "type": "object",
      "properties": {
        "latitude": {
          "type": "number",
          "minimum": -90,
          "maximum": 90,
          "description": "WGS84 latitude of the parcel or site."
        },
        "longitude": {
          "type": "number",
          "minimum": -180,
          "maximum": 180,
          "description": "WGS84 longitude of the parcel or site."
        },
        "radiusMeters": {
          "type": "integer",
          "minimum": 1,
          "maximum": 8000,
          "default": 1000,
          "description": "Search radius in METERS, passed to CalGEM verbatim. Defaults to 1000."
        },
        "wellStatus": {
          "type": "string",
          "enum": [
            "Plugged",
            "Active",
            "Idle",
            "Canceled",
            "New",
            "PluggedOnly",
            "Unknown",
            "NotCalGEMJurisdiction"
          ]
        },
        "wellType": {
          "type": "string",
          "maxLength": 32,
          "description": "Well-type code or label, e.g. OG or \"Oil & Gas\". 24 pairs; see getServiceInfo."
        },
        "operatorName": {
          "type": "string",
          "maxLength": 120,
          "description": "Operator-name substring. A filter within a spatial scope, not a search axis."
        },
        "limit": {
          "type": "integer",
          "minimum": 1,
          "maximum": 200,
          "default": 50
        },
        "format": {
          "type": "string",
          "enum": [
            "records",
            "geojson"
          ],
          "description": "geojson returns GeoJSON Features in records for map rendering."
        }
      },
      "required": [
        "latitude",
        "longitude"
      ],
      "additionalProperties": false
    }
    • summary.matchedRecords is the exact match count from a server-side count query; records are capped at limit and sorted nearest first.
    • Above 2000 matches the nearest set is ranked over the first 2000 by OBJECTID and says so in caveats.

    Radius is meters. Use getParcelWellRisk when counts matter more than records.

  • getParcelWellRisk

    read

    Roll up wells near a point: counts by status and type, nearest well, orphan and field flags.

    What you must providelatitudelongitude
    Records returnedwell, oil-field-boundary, gas-storage-project
    How to get more resultsnone
    UnitsradiusMeters: m · distanceMeters: m
    Coordinate systemEPSG:4326
    FreshnessScheduled · every day (source-level)
    Input schema
    {
      "type": "object",
      "properties": {
        "latitude": {
          "type": "number",
          "minimum": -90,
          "maximum": 90,
          "description": "WGS84 latitude of the parcel or site."
        },
        "longitude": {
          "type": "number",
          "minimum": -180,
          "maximum": 180,
          "description": "WGS84 longitude of the parcel or site."
        },
        "radiusMeters": {
          "type": "integer",
          "minimum": 1,
          "maximum": 8000,
          "default": 1000,
          "description": "Search radius in METERS, passed to CalGEM verbatim. Defaults to 1000."
        }
      },
      "required": [
        "latitude",
        "longitude"
      ],
      "additionalProperties": false
    }
    • The rollup is one record, returned as records[0], not a bag of top-level fields.
    • constructionSiteReviewLikely is an issue-spotting flag based on Public Resources Code section 3208.1, never a determination.
    • orphanWellCount is null, not zero, when the quarterly orphan service is unreachable.
    • hpzWellCounts describes the nearby WELLS, not the parcel.

    Small payload; prefer for dossier. Match radiusMeters to searchWellsNearPoint.

  • searchOrphanWells

    read

    List CalGEM orphan-well screening records near a point, in a county, or by API. Vintage-stamped.

    Records returnedorphan-well
    How to get more resultsnone (limitField: limit)
    UnitsradiusMeters: m · distanceMeters: m
    Coordinate systemEPSG:4326
    FreshnessScheduled · every day (source-level)
    Input schema
    {
      "type": "object",
      "properties": {
        "latitude": {
          "type": "number",
          "minimum": -90,
          "maximum": 90,
          "description": "WGS84 latitude of the parcel or site."
        },
        "longitude": {
          "type": "number",
          "minimum": -180,
          "maximum": 180,
          "description": "WGS84 longitude of the parcel or site."
        },
        "radiusMeters": {
          "type": "integer",
          "minimum": 1,
          "maximum": 16000,
          "default": 5000,
          "description": "Search radius in METERS. Only valid with latitude and longitude."
        },
        "county": {
          "type": "string",
          "maxLength": 60,
          "description": "California county name."
        },
        "operatorName": {
          "type": "string",
          "maxLength": 120,
          "description": "Operator-name substring. A filter within a spatial scope, not a search axis."
        },
        "api": {
          "type": "string",
          "pattern": "^\\d{8,14}$",
          "description": "CalGEM API number, digits only — e.g. 0403730295."
        },
        "limit": {
          "type": "integer",
          "minimum": 1,
          "maximum": 200,
          "default": 50
        }
      },
      "required": [],
      "additionalProperties": false
    }
    • The upstream service is republished under a new name every quarter on a separate host; every answer carries vintage and sourceUrl beside the envelope.
    • This is a prioritized screening list, not the full population of idle or deserted wells.

    Needs a scope: latitude+longitude, county, or api. Vintage is always echoed.

  • getWellByApi

    read

    Look up one CalGEM well by its API number and return the full WellSTAR record.

    What you must provideapi
    Records returnedwell
    How to get more resultsnone
    Coordinate systemEPSG:4326
    FreshnessScheduled · every day (source-level)
    Input schema
    {
      "type": "object",
      "properties": {
        "api": {
          "type": "string",
          "pattern": "^\\d{8,14}$",
          "description": "CalGEM API number, digits only — e.g. 0403730295."
        }
      },
      "required": [
        "api"
      ],
      "additionalProperties": false
    }
    • Oil-and-gas wells only. Geothermal wells use a different layer and identifier (APINumber).
  • getServiceInfo

    read

    Layer inventory, record counts, well status and type enums, license, and what CalGEM does not serve.

    FreshnessScheduled · every day (source-level)
    Input schema
    {
      "type": "object",
      "properties": {
        "service": {
          "type": "string",
          "enum": [
            "wells",
            "fieldBoundaries",
            "ugsProjectBoundaries",
            "orphanWells"
          ]
        }
      },
      "required": [],
      "additionalProperties": false
    }

    Read this before guessing a wellStatus or wellType code.

Where this source is used