# Gulf of America Offshore Drilling Permits & Rig Monitor (BSEE) (`maniginam/gulf-offshore-drilling-monitor`) Actor

Track new and changed Gulf of America offshore drilling permits from BSEE, with rig, water depth, location, and live borehole status.

- **URL**: https://apify.com/maniginam/gulf-offshore-drilling-monitor.md
- **Developed by:** [Gina Martiny](https://apify.com/maniginam) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 permit records

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Gulf of America Offshore Drilling Permits & Rig Monitor (BSEE)

Track every offshore drilling permit in the Gulf of America (Gulf of Mexico) from the official BSEE data center, with the rig, water depth, block, coordinates, and the live status of the well.  Turn on monitor mode and schedule it to get only new permits, permit revisions, rig moves, spuds, and wells that reached total depth since your last run.

### What does it do?

This Actor downloads two public files that the Bureau of Safety and Environmental Enforcement (BSEE) refreshes every morning: the Application for Permit to Drill (APD) file and the borehole file.  It keeps the Gulf of America permits, joins each one to its borehole by API number, and returns one clean record per permit with the operator, permit type, rig name and type, water depth, surface and bottom-hole area, block, and lease, coordinates, spud date, total depth, and current borehole status.

It reads the same bulk files BSEE offers for download, so there is no browser, no proxy, and no login involved.  About 20,000 Gulf permits are available, from 1990s wells to permits approved this week.

### Who is it for?

- Offshore service, equipment, and supply-boat sales teams who want to know which rig is going where next.
- Rig brokers and drilling contractors who follow competitor rig activity and operator programs.
- Energy analysts and investors who track deepwater drilling by operator, area, and water depth.
- Anyone who would otherwise download BSEE zip files and join them in a spreadsheet by hand.

### Input

| Field | Type | Description |
| --- | --- | --- |
| `operatorContains` | text | Case-insensitive text that must appear in the operator name, for example `shell` or `chevron`.  Up to 80 characters. |
| `areaCodes` | list of codes | Two-letter BSEE area codes matched against the surface or bottom-hole area, for example `GC` Green Canyon, `MC` Mississippi Canyon, `WR` Walker Ridge, or `KC` Keathley Canyon.  Empty means the whole Gulf. |
| `approvedSince` | date | Earliest date BSEE approved the permit, `YYYY-MM-DD`. |
| `approvedUntil` | date | Latest date BSEE approved the permit, `YYYY-MM-DD`, inclusive. |
| `minWaterDepthFt` | number | Only permits in at least this much water, for example `5000` for deepwater.  Up to 15,000. |
| `boreholeStatuses` | list of statuses | Only permits whose borehole currently has one of these BSEE statuses, for example `DRL` (drilling active) or `COM` (completed).  Empty means any status, including permits whose well has not been started. |
| `maxResults` | number | Most matching permits to check in one run, newest approval first.  Default 1000, maximum 50,000. |
| `onlyNewOrChanged` | true or false | Monitor mode.  Outputs only permits that are new or changed since the previous run of the same search. |

Permits come newest approval first.  BSEE files every revision of a permit as its own permit, so one well can appear several times, once per revision.

Sample input, for every well BSEE lists as drilling right now:

```json
{
  "boreholeStatuses": ["DRL"]
}
```

### Output

Each permit is one dataset item.  This is a real record from a run on October 25, 2026:

```json
{
  "permitId": -28242,
  "apiWellNumber": "608174049403",
  "apiNumberFormatted": "60-817-40494-03",
  "wellName": "A023",
  "sidetrackNumber": "03",
  "bypassNumber": "00",
  "operator": "Shell Offshore Inc.",
  "operatorNumber": "00689",
  "permitType": "Revised Sidetrack",
  "wellTypeCode": "D",
  "wellType": "Development",
  "waterDepthFt": 2945,
  "requestedSpudDate": "2026-08-03",
  "submittedAt": "2026-10-21T09:17:33",
  "approvedAt": "2026-10-21T11:28:24",
  "surfaceArea": "MC",
  "surfaceBlock": "807",
  "surfaceLease": "G07963",
  "bottomArea": "MC",
  "bottomBlock": "807",
  "bottomLease": "G07963",
  "latitude": 28.16944694,
  "longitude": -89.22300048,
  "rigName": "H&P 201",
  "rigType": "PLATFORM",
  "rigId": 94113,
  "rigFunction": "Drilling",
  "subseaBop": false,
  "boreholeStatusCode": "DRL",
  "boreholeStatus": "Drilling active",
  "boreholeStatusDate": "2026-08-05",
  "spudDate": "2026-08-05",
  "totalDepthDate": null,
  "totalMeasuredDepthFt": null,
  "trueVerticalDepthFt": null,
  "changeType": "notTracked"
}
```

The sample search above returned 74 permits for 16 wells on 12 rigs, from BP, Shell, LLOG, Eni, Cantium, and Anadarko.  You can download results as JSON, CSV, Excel, or XML, or read them through the Apify API.

- `permitId` is BSEE's APD serial number.  Permits filed through eWell carry negative serial numbers, which is how BSEE stores them.
- `apiNumberFormatted` splits the 12-digit API well number into state or area, block, well, and sidetrack parts.  `apiWellNumber` keeps the raw digits for joining with other BSEE data.
- `approvedAt` is when BSEE approved the permit, which BSEE's own APD search calls the approved date.  `submittedAt` is when BSEE received the application.  Both are BSEE's Central-time timestamps, published without a time zone.
- `boreholeStatusCode` is BSEE's code and `boreholeStatus` is its plain-English label.  The borehole fields are null when BSEE has no borehole for the permit yet.
- `changeType` is `new` or `changed` in monitor mode and `notTracked` otherwise.
- A value the source stores in an unusable form comes through as null instead of stopping the run.

### Monitor mode

Set `onlyNewOrChanged` to true and add a schedule, for example every weekday at 7 AM Central.  The Actor remembers each permit's approval time, rig, borehole status and status date, spud date, and total depth date for that exact search in a named key-value store.  The first run outputs every matching permit as `new`.  Later runs output only new permits and permits that moved, such as a permit that was revised, a rig that was swapped, a well that was spudded, or a well that reached total depth.  Unchanged permits are skipped and you are not charged for them.

A few things are worth knowing before you rely on it:

- History is keyed on the operator text, area codes, approval dates, minimum water depth, and borehole statuses of the search.  Area order and letter case do not matter, and neither does `maxResults`.  If you change any of the filters, including a "since" date that you move forward each week, the Actor starts a fresh history and reports every matching permit as `new` again.  Keep the filters fixed for a monitor.
- Each run only checks the newest `maxResults` permits of the search.  A well that spuds or reaches total depth on an older permit is only caught if that permit is inside the window, so set `maxResults` to 50,000 to watch every permit.  You still pay only for permits that changed.
- A borehole status filter such as `DRL` drops a well from the search once it stops drilling.  To hear when wells finish, monitor without a status filter and read `boreholeStatus` in the output.
- Two schedules running the same search at the same time share one history, and the run that finishes last wins.

### Pricing

This Actor uses pay-per-event pricing.

- **Permit record:** $5.00 per 1,000 permits delivered to your dataset ($0.005 each).
- **Actor start:** Apify's standard start event.
- There is no separate charge per dataset item.

A daily monitor of the deepwater areas usually delivers a handful of permits a day, so it costs well under a dollar a month.  A full pull of every Gulf permit, about 20,000 records, costs about $100.  The first run of a monitor delivers every matching permit, so it costs the same as a plain run of that search.  You can cap any run with Apify's maximum charge setting.  The Actor stops cleanly when your limit is reached, and you are only charged for permits that actually reach your dataset.

### Data source and freshness

Data comes from the BSEE Data Center raw data files for APDs and boreholes, published by the U.S. Department of the Interior's Bureau of Safety and Environmental Enforcement at data.bsee.gov.  BSEE regenerates both files daily, usually early in the morning Central time, so a run sees permits approved up to the previous business day.

BSEE describes the data center as a working database that may contain errors.  Some boreholes keep an old status for years.  For example, a 2010 Macondo sidetrack in Mississippi Canyon 252, drilled by the Deepwater Horizon, is still listed as drilling.  Check `boreholeStatusDate` and `spudDate` before you treat a `DRL` status as current.

If BSEE is down, slow, or returns something that is not the expected file, the run retries with backoff and then fails with a short message, keeping every permit it already delivered.  Run it again later.

### Is it legal to use this data?

The Actor reads public records that BSEE publishes for anyone to download.  BSEE states that the information on its site is public and may be distributed or copied, asks for credit, and recommends getting the data straight from a BSEE server, which is what this Actor does on every run.  Source: U.S. Department of the Interior, Bureau of Safety and Environmental Enforcement (BSEE), data.bsee.gov.  The data is provided as is, without any guarantee that it is complete or current, and it is not a legal document or navigation data.  Confirm anything important against the official BSEE records.  See BSEE's [site disclaimer](https://www.bsee.gov/bsee.gov/privacy-disclaimer) and [data center disclaimer](https://www.data.bsee.gov/Main/HtmlPage.aspx?page=Disclaimer).  This Actor is an independent tool and is not affiliated with or endorsed by BSEE or the U.S. government.

### FAQ

**Do I need a BSEE account or API key?**  No.  The Actor downloads the same public files that BSEE offers on its data center pages.

**Why does the same well show up several times?**  BSEE files each permit revision, such as a new rig or a revised sidetrack, as its own permit.  Each revision is one record, so you can see the history of a well's permits.

**How do I find area codes?**  Use the two-letter BSEE codes, for example `GC` Green Canyon, `MC` Mississippi Canyon, `WR` Walker Ridge, `KC` Keathley Canyon, `AT` Atwater Valley, `GB` Garden Banks, or `AC` Alaminos Canyon.  Shelf areas such as `ST` South Timbalier and `EI` Eugene Island work the same way.

**Does it include Pacific or Alaska permits?**  No.  The Actor keeps only Gulf of America permits.

# Actor input Schema

## `operatorContains` (type: `string`):

Case-insensitive text that must appear in the operator name, for example shell or chevron.  Leave empty for all operators.

## `areaCodes` (type: `array`):

Two-letter BSEE area codes, matched against the surface or bottom-hole area.  Examples: GC Green Canyon, MC Mississippi Canyon, WR Walker Ridge, KC Keathley Canyon, AT Atwater Valley, GB Garden Banks, AC Alaminos Canyon.  Leave empty for the whole Gulf.

## `approvedSince` (type: `string`):

Earliest date BSEE approved the permit (YYYY-MM-DD).  Leave empty for no lower bound.

## `approvedUntil` (type: `string`):

Latest date BSEE approved the permit (YYYY-MM-DD), inclusive.  Leave empty for no upper bound.

## `minWaterDepthFt` (type: `integer`):

Only permits in at least this much water, for example 5000 for deepwater.  Leave empty for any depth.

## `boreholeStatuses` (type: `array`):

Only permits whose borehole currently has one of these BSEE statuses, for example Drilling active.  Leave empty for any status, including permits with no borehole yet.

## `maxResults` (type: `integer`):

Upper limit on matching permits checked in this run, newest approval first.  Each published permit is one permit-record event.  To watch every Gulf permit in monitor mode, raise it to 50000; only new or changed permits are published and charged.

## `onlyNewOrChanged` (type: `boolean`):

When on, the Actor remembers each permit for these exact filters and publishes only permits that are new or whose approval time, rig, borehole status, spud date, or total depth date changed since the previous run.  Unchanged permits are skipped and not charged.  Use it with a daily schedule.

## Actor input object example

```json
{
  "areaCodes": [
    "GC",
    "MC",
    "WR",
    "KC"
  ],
  "maxResults": 1000,
  "onlyNewOrChanged": false
}
```

# Actor output Schema

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

No description

# 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 = {
    "areaCodes": [
        "GC",
        "MC",
        "WR",
        "KC"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("maniginam/gulf-offshore-drilling-monitor").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 = { "areaCodes": [
        "GC",
        "MC",
        "WR",
        "KC",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("maniginam/gulf-offshore-drilling-monitor").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 '{
  "areaCodes": [
    "GC",
    "MC",
    "WR",
    "KC"
  ]
}' |
apify call maniginam/gulf-offshore-drilling-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,maniginam/gulf-offshore-drilling-monitor"
        }
    }
}
```

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/FKRbmNFkzvgMjwgIB/builds/AffNzT97jPGL3wJ32/openapi.json
