Get the data

Heads up on Original: the Commission does not publish this table on its own. It publishes Production Data Query Dump, which this was parsed out of — so Original gets you that whole file, not just this table. Every other format is this table alone.

Free. You will be asked to confirm an email address before the files are built — that is the only gate, and it is there so we can tell you when a large export is ready.

Preview the first 100 rows

What this is

One of the sixteen delimited tables inside the monthly Production Data Query dump. RRC publishes the dump as a single archive; EZRRC publishes each table inside it separately so you can take the one you need instead of a 3.6 GB zip.

547,000 leases. This is the table that makes production data legible: it maps the oil/gas code, district and lease number key to the lease name, the operating company, the field and the well number, and flags leases that are off schedule or severed.

What you can do with it

Turn a lease key into a name, a field and an operator.

Find every lease an operator holds, and find leases that have been severed — the Commission's enforcement action for delinquent filings.

Gotchas

The severance flag means the lease has been severed for a compliance failure and cannot legally sell product. It is one of the most consequential columns in the catalog and it is a single character.

A lease number is only unique with the oil/gas code and the district in it. Oil lease 027587 in District 08 and gas lease 027587 in District 08 are different leases; so is oil lease 027587 in District 09.

Record layout

13 columns.

pdq_og_regulatory_lease_dw 13 columns

Record layout for pdq_og_regulatory_lease_dw — 13 columns
# Column Type RRC name Meaning Lookup
1 oil_gas_code key join text Whether the lease is carried on the oil schedule or the gas schedule. Oil or gas schedule
2 district_no key join text RRC's INTERNAL district number, 01 to 14 plus 20 for statewide. This is not the district name the industry uses: internal 07 is District 6E, 08 is 7B, 09 is 7C, 10 is District 08, 11 is 8A, 13 is 09 and 14 is District 10. Join to the district directory rather than reading it as a label. RRC district (internal number)
3 lease_no key join text RRC lease number. Unique only within a district and a schedule, so a lease key is district + oil/gas code + lease number.
4 district_name text RRC district as the industry writes it, e.g. 7B, 8A, 6E.
5 lease_name text Lease name as filed.
6 operator_no join text The operator's six-digit RRC P-5 organization number. Join to the P-5 Organization dataset for the company's name, address and P-5 status.
7 operator_name text Operator name as carried in this file. Names drift between filings — join on the operator number, never on the name.
8 field_no join text The eight-digit RRC field number. The field's name is not in most files; join to the field directory to get it.
9 field_name text Field name.
10 well_no text Well number within the lease, as the operator designates it.
11 lease_off_sched_flag text Lease off sched flag
12 lease_severance_flag text Lease severance flag
13 ingested_at timestamptz When the upstream pipeline last wrote this row. Not an RRC field — it is EZRRC's provenance stamp, and it is what the freshness badge is measured against.

Code lookups used here

Every coded column in this dataset resolves to a real lookup table, so a well code of G can be read as what it actually means.

RRC district (internal number) 14 values

Read by district_no

RRC's internal sequential district numbering, 01 to 14 plus 20 for statewide. The production data, the UIC database and the high-cost gas certifications all use this. Internal 07 is District 6E, 08 is 7B, 09 is 7C, 10 is District 08, 11 is 8A, 13 is 09 and 14 is District 10. There is no internal 12.

RRC district (internal number) — 14 codes and their meanings
CodeMeans
01 District 01 — San Antonio (internal 01) Internal district number 01, which RRC prints as District 01 and administers from San Antonio.
02 District 02 — San Antonio (internal 02) Internal district number 02, which RRC prints as District 02 and administers from San Antonio.
03 District 03 — Houston (internal 03) Internal district number 03, which RRC prints as District 03 and administers from Houston.
04 District 04 — Corpus Christi (internal 04) Internal district number 04, which RRC prints as District 04 and administers from Corpus Christi.
05 District 05 — Kilgore (internal 05) Internal district number 05, which RRC prints as District 05 and administers from Kilgore.
06 District 06 — Kilgore (internal 06) Internal district number 06, which RRC prints as District 06 and administers from Kilgore.
07 District 6E — Kilgore (internal 07) Internal district number 07, which RRC prints as District 6E and administers from Kilgore.
08 District 7B — Abilene (internal 08) Internal district number 08, which RRC prints as District 7B and administers from Abilene.
09 District 7C — San Angelo (internal 09) Internal district number 09, which RRC prints as District 7C and administers from San Angelo.
10 District 08 — Midland (internal 10) Internal district number 10, which RRC prints as District 08 and administers from Midland.
11 District 8A — Midland (internal 11) Internal district number 11, which RRC prints as District 8A and administers from Midland.
13 District 09 — Wichita Falls (internal 13) Internal district number 13, which RRC prints as District 09 and administers from Wichita Falls.
14 District 10 — Pampa (internal 14) Internal district number 14, which RRC prints as District 10 and administers from Pampa.
20 District 20 — State Wide (internal 20) Internal district number 20, which RRC prints as District 20 and administers from State Wide.

Source: Generated from texas.pdq_gp_district.district_no

Oil or gas schedule 2 values

Read by oil_gas_code

Which schedule a lease is carried on. This is not decoration: an oil lease number and a gas lease number can be the same digits and mean different leases, so a lease key is only unique with this code and the district in it.

Oil or gas schedule — 2 codes and their meanings
CodeMeans
O Oil Carried on the oil proration schedule; lease numbers are oil lease numbers.
G Gas Carried on the gas proration schedule; lease numbers are gas well IDs.

Source: PDQ Dump user manual; values confirmed as the complete distinct set in texas.pdq_og_lease_cycle.oil_gas_code

What this joins to

The Railroad Commission never states these keys anywhere in the files. They are the reason the data is hard to use, so here they are with the exact columns on both sides.

PDQ Regulatory Lease Directory joins to PDQ Well Completion Directory on Oil gas code and District number and Lease number — one row here matches many rows there.

is produced by the wells

The wells that make up a lease. Texas reports oil production by lease, so this is as close as the production data gets to a well — it tells you which wells are on the lease, not what each one made.

pdq-regulatory-lease-directory.oil_gas_code = pdq-well-completion.oil_gas_code AND pdq-regulatory-lease-directory.district_no = pdq-well-completion.district_no AND pdq-regulatory-lease-directory.lease_no = pdq-well-completion.lease_no

PDQ Regulatory Lease Directory joins to Certificate of Authorization P-4 (Oil and Gas) on Oil gas code = Oil gas code and District number = District number and Lease number = Lease rrcid — one row here matches one row there.

is the lease in PDQ's directory

The strongest join on this tape, and the one that gets a lease NAME and a county onto a P-4. 548,047 of the 548,099 leases resolve to exactly one directory row, and every one of the directory's 548,047 rows resolves back -- the two files are the same population of leases seen from two sides. Both write RRC's INTERNAL district number, so no translation is needed here, unlike the proration ledgers below. Keep oil_gas_code in the join: PDQ carries oil leases and gas wells in one table on the same lease_no, and without it a lease matches the other schedule's row of the same digits. These two columns are different types — one is text, the other an integer — so a direct equality is rejected by Postgres. Cast the text side to integer, which also disposes of any leading zeros; casting the integer to text would not, because '000123' and 123 are not equal as text.

p4-certificate-of-authorization.oil_gas_code = pdq-regulatory-lease-directory.oil_gas_code AND p4-certificate-of-authorization.district_no = pdq-regulatory-lease-directory.district_no AND p4-certificate-of-authorization.lease_rrcid = pdq-regulatory-lease-directory.lease_no

PDQ Regulatory Lease Directory joins to PDQ Lease Production by Cycle on Oil gas code and District number and Lease number — one row here matches many rows there.

produced from the lease

Production rows carry a lease key and nothing else identifying. The regulatory lease directory is what turns that key into a lease name, an operator, a field number and a well number, and it is where the severance flag lives. Exact on all 5,000 sampled rows. The key is three columns, not one: the oil/gas code, the district and the lease number. Any two of them alone are ambiguous.

pdq-lease-cycle.oil_gas_code = pdq-regulatory-lease-directory.oil_gas_code AND pdq-lease-cycle.district_no = pdq-regulatory-lease-directory.district_no AND pdq-lease-cycle.lease_no = pdq-regulatory-lease-directory.lease_no

PDQ Regulatory Lease Directory joins to Historical Ledger — Statewide Gas on District number = District and Lease number = Gas RRC ID — one row here matches one row there.

is the regulatory lease

The gas well's name, its current operator and its field, none of which is on this tape. 219,356 of the 219,384 wells resolve. Restrict PDQ to oil_gas_code = 'G'. These two columns are different types — one is text, the other an integer — so a direct equality is rejected by Postgres. Cast the text side to integer, which also disposes of any leading zeros; casting the integer to text would not, because '000123' and 123 are not equal as text.

historical-ledger-gas.district = pdq-regulatory-lease-directory.district_no AND historical-ledger-gas.gas_rrc_id = pdq-regulatory-lease-directory.lease_no

PDQ Regulatory Lease Directory joins to Historical Ledger — Statewide Oil on District number = District and Lease number = Lease number — one row here matches one row there.

is the regulatory lease

The route from a lease number to its NAME, its current operator and its field -- none of which is anywhere on this tape. It is the first join most people need here and it is exact: all 158,566 leases resolve. Restrict PDQ to oil_gas_code = 'O'. These two columns are different types — one is text, the other an integer — so a direct equality is rejected by Postgres. Cast the text side to integer, which also disposes of any leading zeros; casting the integer to text would not, because '000123' and 123 are not equal as text.

historical-ledger-oil.district = pdq-regulatory-lease-directory.district_no AND historical-ledger-oil.lease_no = pdq-regulatory-lease-directory.lease_no

PDQ Regulatory Lease Directory joins to Statewide Production Data — Oil on District number = District and Lease number = Lease number — one row here matches one row there.

is the regulatory lease

The route from a lease number to its NAME, its operator and its field -- none of which is anywhere on this tape. It is the first join most people need here, and the cleanest: 4,998 of 5,000 sampled leases match. Restrict PDQ to oil_gas_code = 'O'. These two columns are different types — one is text, the other an integer — so a direct equality is rejected by Postgres. Cast the text side to integer, which also disposes of any leading zeros; casting the integer to text would not, because '000123' and 123 are not equal as text.

statewide-production-data-oil.district = pdq-regulatory-lease-directory.district_no AND statewide-production-data-oil.lease_no = pdq-regulatory-lease-directory.lease_no

PDQ Regulatory Lease Directory joins to Statewide Production Data — Gas on District number = District and Lease number = Gas RRC ID — one row here matches one row there.

is the regulatory lease

The gas well's name, operator and field, none of which is on this tape. 4,995 of 5,000 sampled wells match. Restrict PDQ to oil_gas_code = 'G'. These two columns are different types — one is text, the other an integer — so a direct equality is rejected by Postgres. Cast the text side to integer, which also disposes of any leading zeros; casting the integer to text would not, because '000123' and 123 are not equal as text.

statewide-production-data-gas.district = pdq-regulatory-lease-directory.district_no AND statewide-production-data-gas.gas_rrc_id = pdq-regulatory-lease-directory.lease_no

PDQ Regulatory Lease Directory joins to High Cost Gas on District number = District and Lease number = Lease number — one row here matches many rows there.

certifies the lease

The certification file and the production system agree on the district (both use the internal numbering) and on the zero-padded lease number, so those two columns join exactly — 4,998 of 5,000 sampled certifications find their lease. They do not agree on the oil/gas code: the certification file writes 'GAS' and the production system writes 'G', which is why that column is not part of the join. Every row here is gas. This is also the route to the field: the certification carries no field number, but the lease directory it lands on does.

high-cost-gas.district = pdq-regulatory-lease-directory.district_no AND high-cost-gas.lease_number = pdq-regulatory-lease-directory.lease_no

PDQ Regulatory Lease Directory joins to Statewide Gas Well Database on District number = District number and Lease number = Gas RRC ID — one row here matches many rows there.

is the lease

PDQ carries a gas well as a lease keyed on its statewide RRC ID, so this well's gas_rrc_id is PDQ's lease_no. 138,870 of the 138,901 wells resolve, and the directory row carries the operator number and field number this tape does not. Restrict the PDQ side to oil_gas_code = 'G': without it the join returns 140,840 rows rather than 138,870, the extra 1,970 being oil leases that share their digits and district with a gas well. These two columns are different types — one is text, the other an integer — so a direct equality is rejected by Postgres. Cast the text side to integer, which also disposes of any leading zeros; casting the integer to text would not, because '000123' and 123 are not equal as text.

statewide-gas-well-database.district_no = pdq-regulatory-lease-directory.district_no AND statewide-gas-well-database.gas_rrc_id = pdq-regulatory-lease-directory.lease_no

PDQ Regulatory Lease Directory joins to Statewide Oil Well Database on District number and Lease number — one row here matches many rows there.

is on the lease

From the well to its lease's directory entry, which is where the operator number, the operator name, the field number and the lease name are -- none of which is on this tape. 293,049 of the 293,069 wells resolve, one lease each. Restrict the PDQ side to oil_gas_code = 'O'. Without it the join returns 311,664 rows instead of 293,049: a gas well ID and an oil lease number can be the same digits in the same district, and 18,615 of them are. Both sides write RRC's INTERNAL district number, so no translation is needed here -- unlike the W-10 and G-10 status files, which print the designation. These two columns are different types — one is text, the other an integer — so a direct equality is rejected by Postgres. Cast the text side to integer, which also disposes of any leading zeros; casting the integer to text would not, because '000123' and 123 are not equal as text.

statewide-oil-well-database.district_no = pdq-regulatory-lease-directory.district_no AND statewide-oil-well-database.lease_no = pdq-regulatory-lease-directory.lease_no

PDQ Regulatory Lease Directory joins to PDQ Lease Disposition by Cycle on Oil gas code and District number and Lease number — one row here matches many rows there.

disposed of production from the lease

The lease key resolved to a name, operator and field.

pdq-lease-disposition-cycle.oil_gas_code = pdq-regulatory-lease-directory.oil_gas_code AND pdq-lease-disposition-cycle.district_no = pdq-regulatory-lease-directory.district_no AND pdq-lease-disposition-cycle.lease_no = pdq-regulatory-lease-directory.lease_no

PDQ Regulatory Lease Directory joins to Horizontal Drilling Permits on District name = District and Oil gas code = Oil gas and Lease number = Validated lease number — one row here matches many rows there.

was completed on the lease

The bridge this dataset exists for: from a horizontal permit to the lease or gas well it was finally validated against, and so to everything PDQ knows about that lease's production. Nothing else RRC publishes says which permit became which lease. PDQ carries the printed district in district_name, so the join goes through that and never through district_no. The lease number needs a cast on the oil side and none on the gas side, because daf318 writes six characters for both schedules and PDQ does not: a gas well ID is six digits there, an oil lease number FIVE. As printed, 52,553 of 52,801 gas rows match and 0 of 88,280 oil rows do. Strip the leading zero and pad back to five — lpad(ltrim(validated_lease_no, '0'), 5, '0') — and the oil side goes to 87,816 of 88,280. Both measured over the whole table. Restrict to validated_carryover = false: on 32,429 records RRC's own program left another permit's data in the validated block, and those columns are null here for that reason.

horizontal-drilling-permits.district = pdq-regulatory-lease-directory.district_name AND horizontal-drilling-permits.oil_gas = pdq-regulatory-lease-directory.oil_gas_code AND horizontal-drilling-permits.validated_lease_no = pdq-regulatory-lease-directory.lease_no

PDQ Regulatory Lease Directory joins to Oil Ledger — Leases on District name = District and Lease number = Lease number — one row here matches one row there.

is the regulatory lease

The lease's entry in PDQ's regulatory directory, which carries its off-schedule and severance flags. 3,848 of 5,000 sampled leases match as the columns stand and all 5,000 once the district's leading zero is stripped; the operator number agrees on every one of them, which is what makes it the same lease rather than a collision. Restrict PDQ to oil_gas_code = 'O'. These two columns are different types — one is text, the other an integer — so a direct equality is rejected by Postgres. Cast the text side to integer, which also disposes of any leading zeros; casting the integer to text would not, because '000123' and 123 are not equal as text.

oil-ledger-leases.district = pdq-regulatory-lease-directory.district_name AND oil-ledger-leases.lease_no = pdq-regulatory-lease-directory.lease_no

PDQ Regulatory Lease Directory joins to Natural Gas Policy Act on District name = District and Lease number = Lease ID — one row here matches many rows there.

covers the gas well

From a GAS docket to the lease directory, on the printed district and the six-digit gas well ID. 148,806 of the 154,493 gas dockets that name a lease resolve, which is 96%. Restrict the PDQ side to oil_gas_code = 'G' if you want to be explicit, though the widths already do it: PDQ writes gas IDs six characters wide and oil lease numbers five, and 0 of the 154,493 gas dockets collide with an oil lease. An OIL docket needs its lease re-padded to five digits first and is not this join — see the dataset's gotchas. The join goes through district_name, not district_no: NGPA publishes the printed designation once the subscript is decoded, and PDQ's district_no is the internal number.

natural-gas-policy-act.district = pdq-regulatory-lease-directory.district_name AND natural-gas-policy-act.lease_id = pdq-regulatory-lease-directory.lease_no

PDQ Regulatory Lease Directory joins to Gas Ledger — Wells on District name = District and Lease number = Gas RRC ID — one row here matches one row there.

is the regulatory lease

The gas well's entry in PDQ's regulatory directory, which carries its off-schedule and severance flags. 4,232 of 5,000 sampled wells match as the columns stand and all 5,000 with the district normalised. Restrict PDQ to oil_gas_code = 'G'. These two columns are different types — one is text, the other an integer — so a direct equality is rejected by Postgres. Cast the text side to integer, which also disposes of any leading zeros; casting the integer to text would not, because '000123' and 123 are not equal as text.

gas-ledger-wells.district = pdq-regulatory-lease-directory.district_name AND gas-ledger-wells.gas_rrc_id = pdq-regulatory-lease-directory.lease_no

PDQ Regulatory Lease Directory joins to PDQ Onshore Lease Summary on Oil gas code and District number and Lease number — one row here matches many rows there.

summarises the lease

The onshore lease summary's key, resolved to the lease directory.

pdq-onshore-lease-summary.oil_gas_code = pdq-regulatory-lease-directory.oil_gas_code AND pdq-onshore-lease-summary.district_no = pdq-regulatory-lease-directory.district_no AND pdq-onshore-lease-summary.lease_no = pdq-regulatory-lease-directory.lease_no

PDQ Regulatory Lease Directory joins to Statewide API Data (dBase) on Lease number = Gas RRC ID — one row here matches many rows there.

is on the gas lease

The gas half of the map's lease column, resolved to the lease directory. 302,481 of the 306,668 gas entries match, and 289,503 of the 293,684 distinct gas well IDs. Safe without a district only because gas well IDs are effectively statewide: 102 of the 294,448 PDQ carries appear in more than one district. The width does the schedule restriction on its own — PDQ writes oil lease numbers five characters wide, so a six-character gas ID matches 0 non-gas rows. None of this holds for oil_lease_no, which is why there is no oil equivalent of this join; go through the well completion table instead.

statewide-api-data-dbase.gas_rrc_id = pdq-regulatory-lease-directory.lease_no

Where this comes from

Published by
Texas Railroad Commission — the original page
Original format
CSV Comma-separated text.
RRC publishes
Updated once a month (Last Saturday each month, with the PDQ dump.)
RRC download link
GoAnywhere MFT
Record layout manual
Our table
texas.pdq_og_regulatory_lease_dw

EZRRC is an independent mirror of public-domain data published by the Texas Railroad Commission. It is not affiliated with or endorsed by the RRC. For any legal or regulatory purpose, verify against the official RRC release.