New Restaurant Permits

Webhook and API

Every subscription can push each morning's matches to your own endpoint as signed JSON, and read any day's batch from a small JSON API.

Webhook

Set a URL in your settings. When your digest goes out we POST the same rows as JSON:

POST https://your-endpoint.example.com/hooks/nrp
Content-Type: application/json
X-NRP-Timestamp: 1793280000
X-NRP-Signature: sha256=<hex HMAC-SHA256 of "<timestamp>." + raw body>
X-NRP-Test: 0

The key is the webhook secret shown in your settings. X-NRP-Test: 1 marks the sample the "Test webhook" button sends. We wait up to 10 seconds for a 2xx and do not retry, so return quickly and queue your own work. Up to 2,000 rows per call; the full list is always in the email's CSV.

Verify in Python

import hmac, hashlib

def verify(raw_body: bytes, headers: dict, secret: str) -> bool:
    ts = headers["X-NRP-Timestamp"]
    sig = headers["X-NRP-Signature"].removeprefix("sha256=")
    mac = hmac.new(secret.encode(), ts.encode() + b"." + raw_body, hashlib.sha256)
    return hmac.compare_digest(mac.hexdigest(), sig)

API

Create a key in your settings, then:

GET https://newrestaurantpermits.com/nrp/v1/events?date=2026-10-29
X-API-Key: nrp_...
  • date: the digest day (defaults to today, Eastern). Returns that day's rows filtered by your watches.
  • all=1: the whole day's batch, unfiltered.
  • Rate limit: 120 requests per hour per key. Errors: 401 for a bad or inactive key, 429 over the limit, 400 for a bad date.

Response

{
  "date": "2026-10-29",
  "count": 1,
  "events": [{
    "event": "liquor_applied",
    "event_label": "New liquor license application",
    "event_date": "2026-10-26",
    "first_seen": "2026-10-29",
    "key": "liquor_applied|TX:669286",
    "venue_label": "Restaurant",
    "url": "https://newrestaurantpermits.com/r/tx-669286-twin-peaks-grand-prairie/",
    "record": {
      "id": "TX:669286", "st": "TX", "agency": "TABC", "kind": "liquor",
      "ltype": "MB,FB", "ltype_label": "Mixed Beverage Permit + Food and Beverage Certificate",
      "venue": "restaurant", "status": "Pending", "stage": "applied", "transfer": false,
      "trade": "Twin Peaks", "owner": "Summit Twin Restaurant Grand Prairie LLC", "owner_entity": true,
      "addr": "3120 S State Hwy 161", "addr2": "", "city": "Grand Prairie", "county": "Dallas",
      "zip": "75052", "lat": 32.7, "lon": -96.9, "mail": "", "phone": "",
      "filed": "2026-10-26", "seen": "2026-10-29", "chain": false,
      "lookup": "https://..."
    }
  }]
}

Fields

  • event: one of plan_review, liquor_applied, food_licensed, liquor_issued, ownership_change.
  • event_date is the agency's date; first_seen is the day the record first appeared in its public file. url is the filing's page on this site.
  • record.owner is the applicant as the agency lists it; owner_entity says whether it reads as a company. phone and mail (mailing address) are filled only when the agency publishes them, which is rare.
  • chain: true when the same trade name is on three or more premises in our data.

Wire it into your CRM

Webhook and API included at $25 a month. 7 days free.