# Louisiana Oil & Gas Wells & Drilling Permits (SONRIS) (`maniginam/louisiana-oil-gas-wells`) Actor

Search Louisiana's official SONRIS well records by parish, operator, and permit date, or monitor new drilling permits and status changes on a schedule.

- **URL**: https://apify.com/maniginam/louisiana-oil-gas-wells.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 well 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

## Louisiana Oil & Gas Wells & Drilling Permits (SONRIS)

Search every oil and gas well in Louisiana's official SONRIS database by parish, operator, and permit date.  Turn on monitor mode and schedule it to get only new drilling permits and wells whose status, spud date, or completion date changed since your last run.

### What does it do?

This Actor queries the public Office of Conservation well layer that the Louisiana Department of Energy and Natural Resources publishes through SONRIS GIS.  It returns one clean record per well with the API number, operator, parish, field, status, permit, spud, and completion dates, depths, coordinates, legal location, and direct links to the SONRIS well profile and scanned documents.

It reads the official public ArcGIS endpoint, so there is no browser, no proxy, and no login involved.  About 247,000 wells are available, from historic wells to permits issued this month.

### Who is it for?

- Oilfield service and equipment sales teams who want fresh permit leads every morning.
- Landmen, mineral and royalty buyers, and title researchers who track activity near specific tracts.
- Analysts who follow operator activity in the Haynesville, Austin Chalk, and Gulf Coast plays.
- Anyone who would otherwise copy rows out of SONRIS by hand.

### Input

| Field | Type | Description |
| --- | --- | --- |
| `parishes` | list of parishes | Pick from the 64 Louisiana parishes, spelled as SONRIS spells them, for example `DE SOTO`, `CADDO`, or `ST MARY`.  Empty means every parish. |
| `operatorContains` | text | Case-insensitive text that must appear in the operator name.  Letters, digits, spaces, and `& . , ' ( ) / -`, up to 80 characters. |
| `permittedSince` | date | Earliest permit date, `YYYY-MM-DD`. |
| `permittedUntil` | date | Latest permit date, `YYYY-MM-DD`, inclusive. |
| `maxResults` | number | Most wells to read in one run.  Default 1000, maximum 250,000. |
| `onlyNewOrChanged` | true or false | Monitor mode.  Outputs only wells that are new or changed since the previous run of the same search. |

Wells come newest permit first.  Wells with no permit date on file come last, newest serial number first.

Sample input:

```json
{
  "parishes": ["CADDO", "DE SOTO"],
  "permittedSince": "2026-09-01"
}
```

### Output

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

```json
{
  "wellSerialNumber": 255875,
  "apiNumber": "17-031-27654-00-00",
  "apiNumber14": "17031276540000",
  "wellName": "HA RA SUD;PETRO-HUNT 13-12HC",
  "wellNumber": "005-ALT",
  "operator": "WNR HAYNESVILLE OPERATING, LLC",
  "parish": "DE SOTO",
  "field": "SPIDER",
  "status": "PERMITTED",
  "statusCode": "01",
  "permitDate": "2026-10-13",
  "spudDate": null,
  "completionDate": null,
  "measuredDepthFt": 23469,
  "trueVerticalDepthFt": 12777.0,
  "latitude": 31.933371034,
  "longitude": -93.759964344,
  "coordinatesInLouisiana": true,
  "section": "013",
  "township": "11N",
  "range": "14W",
  "wellProfileUrl": "https://sonlite.dnr.state.la.us/ords/apex/r/sonris_pub/sonris_data_portal/well-profile?clear=CR,9000&ig[ig_master]_well_serial_num=255875",
  "documentsUrl": "https://sonlite.dnr.state.la.us/ords/r/sonris/ucmsearch/finddocuments?qtype=eq&idx=xwellserialnumber&val=255875",
  "sourceUpdatedAt": "2026-10-24T09:05:26+00:00",
  "changeType": "notTracked"
}
```

The sample search above returned 21 permits in Caddo and De Soto parishes from BPX Operating, EXCO Operating, JERA Upstream America, Expand Operating, WNR Haynesville Operating, and one other operator.  You can download results as JSON, CSV, Excel, or XML, or read them through the Apify API.

- `apiNumber` is the 14-digit API number split into state, county, well, sidetrack, and event parts.  `apiNumber14` keeps the raw digits for joining with other data.
- `changeType` is `new` or `changed` in monitor mode and `notTracked` otherwise.
- Dates are calendar days in Louisiana time.  A value the source stores in an unusable form comes through as null instead of stopping the run.
- `coordinatesInLouisiana` is true or false when coordinates are present and null when they are missing.

### Monitor mode

Set `onlyNewOrChanged` to true and add a schedule, for example every weekday at 7 AM.  The Actor remembers each well's status, status code, spud date, and completion date for that exact search in a named key-value store.  The first run outputs every matching well as `new`.  Later runs output only new permits and wells that moved, such as a permit that was spudded or a well that was completed.  Unchanged wells 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 parishes, operator text, and permit dates of the search.  Parish order and letter case do not matter, and neither does `maxResults`.  If you change any of those three, including a "since" date that you move forward each week, the Actor starts a fresh history and reports every matching well as `new` again.  Keep the dates fixed for a monitor.
- Each run only scans the newest `maxResults` wells of the search, so set it high enough to cover every well you want watched.
- An operator transfer on its own does not count as a change.
- A well that drops out of the search, for example after an operator transfer takes it outside your operator text or the state removes the row, is not reported.  Compare datasets between runs if you need to see removals.
- If the saved history record is ever unreadable, the run fails without charging rather than reporting every well as `new` again.  Delete that record from the `louisiana-oil-gas-wells-monitor` store to start over.
- 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.

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

A daily permit monitor for a few parishes usually delivers only a handful of wells, so it costs pennies a month.  A full statewide pull of about 247,000 wells costs about $1,235, and 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 wells that actually reach your dataset.

#### Estimated compute cost

Default memory is 512 MB.  A small filtered run, such as the sample input above, typically finishes in under a minute and costs well under $0.01 in Apify compute on top of the event charges.  A full statewide pull of about 247,000 wells reads about 250 pages from SONRIS and usually takes 10 to 30 minutes, on the order of $0.10 to $0.50 in compute depending on SONRIS response times, plus about $1,235 in well-record events.

### Data source and freshness

Data comes from the SONRIS GIS Office of Conservation well layer published by the Louisiana Department of Energy and Natural Resources.  The map layer is refreshed by the state and can trail the SONRIS permit reports by days or weeks, so very recent permits may appear later than they do in the state's own daily reports.  `sourceUpdatedAt` tells you when the state last updated each row.

Source endpoint: `https://sonris-gis.dnr.la.gov/arcgis/rest/services/DNRSvc/OC/MapServer/0`

Some source rows carry coordinates outside Louisiana because of data-entry errors.  The Actor keeps the values as published and sets `coordinatesInLouisiana` to false so you can filter or fix them.

If SONRIS is down or its firewall blocks the request, the run fails with a short message and keeps every well it already delivered.  Run it again later.

### Is it legal to use this data?

The Actor reads public records that the State of Louisiana publishes for anyone to view, through the same public endpoint that powers the SONRIS map viewer.  The data is provided as is, without any guarantee that it is complete or current.  It is not a title opinion or legal advice, so confirm anything important against the official SONRIS records.  This Actor is an independent tool and is not affiliated with or endorsed by the State of Louisiana.

### FAQ

**Do I need a SONRIS account or API key?**  No.  The Actor reads the same public endpoint that powers the SONRIS map viewer.

**How do I find the right parish spelling?**  Pick parishes from the list in the input form.  SONRIS spells them in upper case without periods, for example `ST LANDRY`, `EAST BATON ROUGE`, or `DE SOTO`.

**Can I search by field or well status?**  Not yet.  Filter the dataset after the run, or open an issue on the Actor page to request it.

# Actor input Schema

## `parishes` (type: `array`):

Pick one or more Louisiana parishes.  Leave empty to search every parish.

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

Case-insensitive text that must appear in the operator name, for example EXPAND or COMSTOCK.  Letters, digits, spaces, and & . , ' ( ) / - only, up to 80 characters.  Leave empty for all operators.

## `permittedSince` (type: `string`):

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

## `permittedUntil` (type: `string`):

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

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

Upper limit on wells read from SONRIS in this run, newest permits first, then wells with no permit date.  Each published well is charged as one well-record event.

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

When on, the Actor remembers each well's status, spud date, and completion date for this exact search and outputs only wells that are new or whose lifecycle moved since the previous run.  Unchanged wells are skipped and not charged.  Wells that drop out of the search are not reported.  Use it with a schedule.

## Actor input object example

```json
{
  "parishes": [
    "CADDO",
    "DE SOTO"
  ],
  "permittedSince": "2026-09-01",
  "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 = {
    "parishes": [
        "CADDO",
        "DE SOTO"
    ],
    "operatorContains": "",
    "permittedSince": "2026-09-01"
};

// Run the Actor and wait for it to finish
const run = await client.actor("maniginam/louisiana-oil-gas-wells").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 = {
    "parishes": [
        "CADDO",
        "DE SOTO",
    ],
    "operatorContains": "",
    "permittedSince": "2026-09-01",
}

# Run the Actor and wait for it to finish
run = client.actor("maniginam/louisiana-oil-gas-wells").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 '{
  "parishes": [
    "CADDO",
    "DE SOTO"
  ],
  "operatorContains": "",
  "permittedSince": "2026-09-01"
}' |
apify call maniginam/louisiana-oil-gas-wells --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,maniginam/louisiana-oil-gas-wells"
        }
    }
}
```

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/OtgMMaeOUqgIJvYVE/builds/st62Ot8yh65W864BR/openapi.json
