Citation Atlas

Citation Atlas API

Version 1.1.0 · data as of October 5, 2026 · OpenAPI 3.1 spec (openapi.json)

The same records as the weekly alert, as JSON or CSV: newly published OSHA citations, newly opened inspections, and penalty and status changes, for every state, filtered the way you want. Included with the All states + API plan ($79/month).

curl -H "Authorization: Bearer $CITATION_ATLAS_KEY" \
  "https://citationatlas.com/api/v1/weekly?state=TX&sector=construction&min_penalty=5000"

Authentication

Every request needs your API key in the Authorization header: Authorization: Bearer <key>. Don't put the key in a URL.

  1. Get your key. Subscribe to All states + API. Open your preferences page from the link in your welcome email or any weekly email, or request a sign-in link at Manage subscription (no passwords). The API section of that page shows your key and two ready-made curl commands.
  2. Reset it. On the same page, Reset links and API key issues a new key. The old key stops working immediately, and so do older emailed links (new emails carry fresh ones). Do this if a key leaks.
  3. When it stops working. Keys don't expire. A reset key returns 401; a key whose subscription is canceled, unpaid or moved to the State plan returns 403.

The key is a bearer secret: anyone with it can download your plan's data. Keep it in an environment variable or secret store, not in client-side code.

Endpoints

Base URL: https://citationatlas.com. Both endpoints are GET only (and HEAD) and return JSON unless you ask for CSV.

GET/api/v1/weekly: One week's records

Newly published citations, newly opened inspections and penalty/status changes for one alert week, filtered. With no filters: every state. Filters combine with AND; comma-separated values within one filter combine with OR. A state with at least one chosen county is limited to those counties.

ParameterTypeDescriptionExample
weekstring (date)Alert week (a Monday) from /api/v1/weeks. Default: the latest week.2026-10-05
statestringComma-separated two-letter postal codes. Default: every state and territory.TX,OK
sectorstringComma-separated industry sector slugs: accommodation-food, admin-waste-services, agriculture, arts-recreation, construction, education, finance-insurance, health-care, information, management, manufacturing, mining-oil-gas, other-services, professional-services, public-administration, real-estate, retail, transportation-warehousing, utilities, wholesale, other. Default: all.construction
countystringComma-separated five-digit county FIPS codes (at most 60). Records whose ZIP code has no county are excluded in states where you chose counties.48201
min_penaltyintegerCitations and changes with an initial (proposed) penalty of at least this many dollars. Openings are not affected.5000
openingsstring0 leaves out newly opened inspections.0
formatstringjson (default), csv (one file, record_type column) or zip (the CSV plus the license texts).csv
limitintegerJSON only. Page size, applied to each of citations, openings and changes (1 to 1000). Default: no limit.100
offsetintegerJSON only. Records to skip in each array; use next_offset from the previous page.0
StatusMeaning
200The week's records.
400Invalid parameter (message says which).
401Missing, invalid or revoked API key.
403The key is valid but the subscription is not an active All states + API plan.
404No data published yet, or the week is not available.
405Method other than GET or HEAD.
429Rate limit exceeded.
500Unexpected server error. Retry later.

GET/api/v1/weeks: Available weeks

Alert weeks available to /api/v1/weekly, newest first.

No parameters.

StatusMeaning
200Weeks, newest first.
401Missing, invalid or revoked API key.
403The key is valid but the subscription is not an active All states + API plan.
405Method other than GET or HEAD.
429Rate limit exceeded.
500Unexpected server error. Retry later.

format=csv returns one file with every matching record and a record_type column (citation, inspection_opened, change), the same as the weekly email's CSV: the official record URL in osha_record_url and the Establishment Search fallback in osha_search_url. format=zip adds the attribution and license texts. CSV cells that start with = + - @ are prefixed with an apostrophe so spreadsheets don't run them as formulas.

Response fields

Field tables below are generated from the OpenAPI spec, which is tested against the live functions' responses. New optional fields may be added within v1, so ignore fields you don't know. Dates are YYYY-MM-DD; money is US dollars.

The weekly response

FieldTypeDescription
weekstring (date)Monday of the alert week.
as_ofstring (date)Date of the DOL data snapshot.
newest_issuancestring (date)Newest citation issuance date in the data. Citations publish about 30 days after issuance.
statusesobjectStatus slug -> label.
sectorsobjectSector slug -> label.
change_basisstringHow changes were found: snapshot (diff against last week's data) or events (settlements recorded in the last 7 days; first week only). One of: snapshot, events.
osha_search_urlstring (uri)OSHA's Establishment Search: the fallback for any record's osha link.
osha_record_notestringWhat to tell people when the osha.gov record link shows a verification page or the homepage.
totalobjectRecords matching your filters, before offset and limit.
offsetintegerThe offset applied.
limitinteger | nullThe limit applied; null when none was given (everything returned).
next_offsetinteger | nullPass as offset for the next page; null on the last page.
citationsarray of CitationNewly published citations, largest initial penalty first.
openingsarray of OpeningNewly opened inspections, newest first. Empty with openings=0.
changesarray of ChangePenalty and status changes, largest penalty change first.
attribution optionalobjectPresent when any returned record has a contact. Keep it with the contact data wherever you redistribute it.
licenses optionalobjectPresent with attribution: file name -> full license text (CDLA-Permissive-2.0, Apache-2.0 + Foursquare NOTICE, CC0, ATTRIBUTION).

Fields on every record

Fields shared by citations, openings and changes. Citations, openings and changes all carry these.

FieldTypeDescription
idstringOSHA inspection number (activity number). Search it at OSHA's Establishment Search if the osha.gov link lands on the homepage.
namestring | nullEstablishment name, cleaned (State Plan case-number prefixes removed, title case). null when person is true.
personbooleantrue when the name looks like an individual (e.g. a sole proprietor). Then name, addr, page and hist are null and no contact is matched. Show it as "Name withheld (individual)".
addrstring | nullSite street address. null when withheld or missing.
citystring | nullSite city.
ststringTwo-letter state or territory postal code.
zipstring | nullFive-digit site ZIP code.
cfipsstring | nullFive-digit county FIPS code, from the ZIP code (Census 2020 ZCTA, largest land share). null for PO-box and unique ZIP codes.
countystring | nullCounty name for cfips.
naicsstring | nullNAICS industry code as recorded by OSHA.
sectorstringIndustry sector slug (labels in the response's sectors map); filter with sector.
openedstring (date) | nullDate the inspection was opened.
oshastring (uri)Official osha.gov inspection detail URL (the record of authority). osha.gov may ask you to verify you're human; if you land on the homepage, search the inspection number at OSHA's Establishment Search. Search URL: https://www.osha.gov/ords/imis/establishment.html
pagestring | nullPath of the establishment's Citation Atlas company page (prefix https://citationatlas.com), or null.
histHistory | null

Citation fields

An inspection whose citations were newly published in the DOL data this week. Citations list alleged violations and proposed penalties until they become final orders. Also has every field in Fields on every record.

FieldTypeDescription
issued_firststring (date)Date the first citation was issued.
issuedstring (date)Date the latest citation was issued (citations reach the public data about 30 days later).
itemsintegerAlleged violation items (deleted items excluded).
typesobjectAlleged items by violation type; types with no items are omitted.
initnumberInitial (proposed) penalty, USD, summed over the items.
curnumberCurrent penalty, USD, after any settlement or order. Show it next to init.
statusstringStatus label derived from the item statuses: open (Open), contested (Contested), informal (Informal settlement), formal (Formal settlement), final (Final order), deleted (Deleted), unknown (Status not determinable). Labels are in the response's statuses map.
stdsarray of stringStandards cited (up to 12), e.g. 1926.501(b)(13).
topicobject | nullMain standard: the section with the largest initial penalty (ties: most items).
wr_topicobject | nullSection of an alleged willful or repeat item, if any.
abate_firststring (date) | nullEarliest abatement due date, per OSHA record.
abate_laststring (date) | nullLatest abatement due date, per OSHA record.
contested_onstring (date) | nullContest date, per OSHA record.
final_orderstring (date) | nullFinal order date, per OSHA record (null while contested).
contest_eststring (date) | nullESTIMATED close of the contest window: 15 working days (federal holidays excluded) after the latest issuance. Only set when the record has no contest or final-order date and the status is open. The legal deadline runs from the employer's receipt of the citation, so label it as an estimate.
contact optionalContact

Opening fields

An inspection newly listed this week with no citations yet. Opening an inspection does not mean any violation was found. Also has every field in Fields on every record.

FieldTypeDescription
typestringInspection type. Accident and fatality types are folded into Unprogrammed. One of: Complaint, Referral, Programmed (planned), Programmed, Unprogrammed, Follow-up, Monitoring, Variance, Other.
shstring | nullSafety or health inspection. One of: Safety, Health.
contact optionalContact

Change fields

Change event: a cited inspection whose current penalty or status changed. With change_basis: snapshot (normal weeks) it compares this week's data with last week's; with change_basis: events (the first week) it lists settlements recorded in the last 7 days, from the initial penalty. Also has every field in Fields on every record.

FieldTypeDescription
initnumberInitial (proposed) penalty, USD.
issuedstring (date) | nullDate the latest citation was issued.
from_curnumberCurrent penalty before the change, USD (the initial penalty when from_is_initial).
to_curnumberCurrent penalty after the change, USD.
from_statusstring | nullStatus before the change; null for settlement events.
to_statusstringStatus now.
event optionalstringSettlement type (events basis only). One of: informal, formal.
event_date optionalstring (date)Date the settlement was recorded (events basis only).
from_is_initial optionalbooleantrue when from_cur is the initial proposed penalty (events basis only).

History

Inspection history at the same establishment (normalized name + ZIP code), from the full DOL history back to the 1970s. null when there is only one inspection on record or the name is withheld. A business that moved or renamed is undercounted.

FieldTypeDescription
nintegerInspections on record, including this one.
sinceintegerYear of the earliest inspection on record.
priorintegerInspections opened before this one.
prior_citedintegerHow many of the earlier inspections had citations.
prior_wrintegerAlleged willful or repeat items in the earlier inspections.
prior_initnumberTotal initial (proposed) penalties of the earlier inspections, USD.
last_priorstring (date) | nullOpen date of the most recent earlier inspection; null when there is none.

Contact

Public business listing matched to the establishment (Overture Maps Places). Present on about 44% of eligible records; never on government establishments or withheld individuals. Redistributing it carries license obligations: see attribution, licenses and /data-license/.

FieldTypeDescription
phonestring | nullListing phone, formatted (NNN) NNN-NNNN. May be a mobile number: TCPA, Do Not Call and state telemarketing rules apply to you.
webstring (uri) | nullListing website.
tierstringA: name and street address match. B: near-exact name in the same ZIP code (probable). One of: A, B.
basisstringWhat matched, in words: "name + address" or "name in same ZIP (probable)".
ovstringOverture Maps place id (GERS id) of the listing.
listed_asstringThe business name on the listing.
licarray of stringLicenses of the listing's sources, e.g. CDLA-Permissive-2.0, Apache-2.0.
closedbooleantrue when the listing is marked closed.

WeeksResponse

FieldTypeDescription
weeksarray of string (date)Alert weeks (Mondays), newest first.

Error

FieldTypeDescription
errorstringHuman-readable message.
codestringMachine-readable code. One of: invalid_parameter, unauthorized, forbidden, not_found, method_not_allowed, rate_limited, internal_error.
week optionalstringThe requested week (404 week not found only).

Status labels

Every citation has a status, derived from the statuses of its items in the public data. Show it with every record. The response's statuses map gives the label for each slug.

SlugLabelMeaning
openOpenCitations issued; not yet a final order in the public data.
contestedContestedUnder contest; not a final finding. Items and penalties may change.
informalInformal settlementResolved through an informal settlement agreement.
formalFormal settlementResolved through a formal settlement after a contest.
finalFinal orderThe citation items have become a final order.
deletedDeletedAll citation items were deleted or withdrawn.
unknownStatus not determinableItem statuses are mixed or incomplete in the public data.

Deadlines

  • Per OSHA record: abate_first and abate_last (abatement due), contested_on (contest date) and final_order (final order date) come straight from the DOL data.
  • Estimate: contest_est is our estimate of when the contest window closes: 15 working days after the latest issuance date, excluding federal holidays. It is set only when the record has no contest or final-order date and the status is open. The legal deadline runs from the employer's receipt of the citation, so always label it as an estimate. Because citations reach the public data about 30 days after issuance, most estimated deadlines have already passed when a record first appears.

Change events

changes lists cited inspections whose current penalty or status changed. The response's change_basis says how they were found:

  • snapshot (normal weeks): this week's penalty and status compared with last week's data. from_cur/from_status are last week's values, to_cur/to_status this week's.
  • events (the first week only): informal and formal settlements recorded in the last 7 days. These also carry event, event_date and from_is_initial: true (from_cur is the initial proposed penalty), and from_status is null.

Inspections that are also new citations this week appear only in citations. Changes are sorted by the size of the penalty change, largest first.

Example response

Real records from the week of 2026-10-05 (GET /api/v1/weekly?state=NY&limit=1). The phone number is partially hidden on this public page; the API returns it in full. License texts are abbreviated.

{
  "week": "2026-10-05",
  "as_of": "2026-10-05",
  "newest_issuance": "2026-09-03",
  "statuses": {
    "open": "Open",
    "contested": "Contested",
    "informal": "Informal settlement",
    "formal": "Formal settlement",
    "final": "Final order",
    "deleted": "Deleted",
    "unknown": "Status not determinable"
  },
  "sectors": {
    "agriculture": "Agriculture, forestry & fishing",
    "mining-oil-gas": "Mining, oil & gas",
    "utilities": "Utilities",
    "construction": "Construction",
    "manufacturing": "Manufacturing",
    "wholesale": "Wholesale trade",
    "retail": "Retail trade",
    "transportation-warehousing": "Transportation & warehousing",
    "information": "Information",
    "finance-insurance": "Finance & insurance",
    "real-estate": "Real estate & rental",
    "professional-services": "Professional & technical services",
    "management": "Management of companies",
    "admin-waste-services": "Administrative & waste services",
    "education": "Educational services",
    "health-care": "Health care & social assistance",
    "arts-recreation": "Arts, entertainment & recreation",
    "accommodation-food": "Accommodation & food services",
    "other-services": "Other services",
    "public-administration": "Public administration",
    "other": "Unclassified"
  },
  "change_basis": "events",
  "osha_search_url": "https://www.osha.gov/ords/imis/establishment.html",
  "osha_record_note": "osha.gov may ask you to verify you're human; if you land on the homepage, search the inspection number at OSHA's Establishment Search.",
  "total": {
    "citations": 24,
    "openings": 33,
    "changes": 2
  },
  "offset": 0,
  "limit": 1,
  "next_offset": 1,
  "citations": [
    {
      "id": "348855081",
      "name": "Empire Plastics, Inc.",
      "person": false,
      "addr": "2011 E. Main Street",
      "city": "Endwell",
      "st": "NY",
      "zip": "13760",
      "cfips": "36007",
      "county": "Broome County",
      "naics": "326199",
      "sector": "manufacturing",
      "opened": "2026-03-25",
      "osha": "https://www.osha.gov/ords/imis/establishment.inspection_detail?id=348855081",
      "page": "/company/empire-plastics-inc-endwell-ny-13760/",
      "hist": {
        "n": 9,
        "since": 1981,
        "prior": 8,
        "prior_cited": 6,
        "prior_wr": 0,
        "prior_init": 27240.0,
        "last_prior": "2016-04-20"
      },
      "issued_first": "2026-08-28",
      "issued": "2026-08-28",
      "items": 3,
      "types": {
        "S": 3
      },
      "init": 16551.0,
      "cur": 6620.0,
      "status": "informal",
      "stds": [
        "1910.147(c)(4)(ii)",
        "1910.147(c)(6)(i)",
        "1910.212(a)(1)"
      ],
      "topic": {
        "code": "1910.147",
        "short": "Lockout/Tagout"
      },
      "wr_topic": null,
      "abate_first": "2026-10-16",
      "abate_last": "2026-10-16",
      "contested_on": null,
      "final_order": "2026-09-22",
      "contest_est": null,
      "contact": {
        "phone": "(607) 754-••••",
        "web": null,
        "tier": "A",
        "basis": "name + address",
        "ov": "382151d2-11ff-419a-8d8b-adbf9de4ca3a",
        "listed_as": "Empire Plastics Inc",
        "lic": [
          "CDLA-Permissive-2.0"
        ],
        "closed": false
      }
    }
  ],
  "openings": [
    {
      "id": "349180802",
      "name": "Van Derhoof Roofing Co., Inc.",
      "person": false,
      "addr": "100 Hazelhurst Avenue",
      "city": "North Syracuse",
      "st": "NY",
      "zip": "13212",
      "cfips": "36067",
      "county": "Onondaga County",
      "naics": "238160",
      "sector": "construction",
      "opened": "2026-09-23",
      "osha": "https://www.osha.gov/ords/imis/establishment.inspection_detail?id=349180802",
      "page": null,
      "hist": null,
      "type": "Other",
      "sh": "Safety",
      "contact": {
        "phone": "(315) 475-••••",
        "web": "https://www.vanderhoofroofing.com",
        "tier": "A",
        "basis": "name + address",
        "ov": "b59cd971-2c05-44b1-a074-a7e94cefafc9",
        "listed_as": "Van Derhoof Roofing Co., Inc.",
        "lic": [
          "CDLA-Permissive-2.0"
        ],
        "closed": false
      }
    }
  ],
  "changes": [
    {
      "id": "348866526",
      "name": "ADD Ventures Construction Services LLC",
      "person": false,
      "addr": "Mountainview Condominiums Sierra Vista Lane",
      "city": "Valley Cottage",
      "st": "NY",
      "zip": "10989",
      "cfips": "36087",
      "county": "Rockland County",
      "naics": "238160",
      "sector": "construction",
      "opened": "2026-04-03",
      "osha": "https://www.osha.gov/ords/imis/establishment.inspection_detail?id=348866526",
      "page": "/company/add-ventures-construction-services-llc-valley-cottage-ny-10989/",
      "hist": null,
      "init": 31861,
      "issued": "2026-08-10",
      "from_cur": 31861,
      "to_cur": 19116,
      "from_status": null,
      "to_status": "informal",
      "event": "informal",
      "event_date": "2026-09-30",
      "from_is_initial": true
    }
  ],
  "attribution": {
    "text": "Contact data: Overture Maps Foundation (overturemaps.org), release 2026-09-23.1. Licensed per source: CDLA-Permissive-2.0, Apache-2.0 (Foursquare), CC0. License texts: https://citationatlas.com/data-license/",
    "release": "2026-09-23.1",
    "license_url": "https://citationatlas.com/data-license/",
    "phones": "Public business listing phones; may be mobile numbers. TCPA, Do Not Call and state telemarketing compliance is the API user's responsibility."
  },
  "licenses": {
    "ATTRIBUTION.txt": "(full text)",
    "LICENSE-CDLA-Permissive-2.0.txt": "(full text)",
    "LICENSE-Apache-2.0.txt": "(full text)",
    "NOTICE-Foursquare.txt": "(full text)",
    "LICENSE-CC0-1.0.txt": "(full text)"
  }
}

Pagination

By default /api/v1/weekly returns the whole week in one response (a national week is roughly 1 MB of JSON). To page through it, add limit (1 to 1000) and offset:

  • limit and offset apply to each of citations, openings and changes, in their documented order.
  • total gives the full count of each array for your filters.
  • next_offset is the offset for the next page, or null once every array is exhausted.
  • Pagination is JSON only: format=csv and format=zip always return every matching record.
  • A week's data doesn't change once published, so pages are stable. Pass the same week on every page so a new week can't arrive mid-way.

Rate limits

120 requests per API key per hour (UTC clock hour), across both endpoints. The data changes once a week, so a normal integration needs a handful of requests per week. Every authenticated response carries:

  • X-RateLimit-Limit: 120
  • X-RateLimit-Remaining: requests left this hour
  • X-RateLimit-Reset: Unix time when the hour resets

Over the limit you get 429 with a Retry-After header in seconds. Need more? Email [email protected].

Errors

Errors are JSON: {"error": "human-readable message", "code": "machine_code"}.

StatuscodeWhen
400invalid_parameterA parameter is malformed or unknown (the message names it).
401unauthorizedNo Authorization header, or the key is invalid or was reset.
403forbiddenThe key is valid but the subscription isn't an active All states + API plan (canceled, unpaid, or a State plan).
404not_foundNo data published yet, or the requested week isn't available.
405method_not_allowedAnything other than GET or HEAD.
429rate_limitedMore than the hourly limit for this key; wait for Retry-After seconds.
500internal_errorUnexpected error on our side; retry later.

curl, Python and JavaScript

curl

# the latest week, Texas and Oklahoma construction, citations of $5,000 or more, as JSON
curl -H "Authorization: Bearer $CITATION_ATLAS_KEY" \
  "https://citationatlas.com/api/v1/weekly?state=TX,OK&sector=construction&min_penalty=5000"

# available weeks, then one week as CSV
curl -H "Authorization: Bearer $CITATION_ATLAS_KEY" "https://citationatlas.com/api/v1/weeks"
curl -H "Authorization: Bearer $CITATION_ATLAS_KEY" -o week.csv \
  "https://citationatlas.com/api/v1/weekly?week=2026-10-05&format=csv"

Python

import os, time
import requests  # pip install requests

API = "https://citationatlas.com/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['CITATION_ATLAS_KEY']}"}

def get(path, **params):
    while True:
        r = requests.get(f"{API}/{path}", headers=HEADERS, params=params, timeout=60)
        if r.status_code == 429:  # rate limited: wait and retry
            time.sleep(int(r.headers.get("Retry-After", "60")))
            continue
        r.raise_for_status()
        return r.json()

week = get("weeks")["weeks"][0]
citations, offset = [], 0
while offset is not None:  # page through the week, 200 records at a time
    page = get("weekly", week=week, state="TX", openings=0, limit=200, offset=offset)
    citations += page["citations"]
    offset = page["next_offset"]

for c in citations[:5]:
    name = "Name withheld (individual)" if c["person"] else c["name"]
    print(f'{name} ({c["city"]}, {c["st"]}): {c["items"]} alleged items, '
          f'initial (proposed) penalty ${c["init"]:,.0f}, current ${c["cur"]:,.0f}, '
          f'status {page["statuses"][c["status"]]}; inspection {c["id"]}: {c["osha"]}')

JavaScript (Node 18+ or a server)

const API = "https://citationatlas.com/api/v1";
const headers = { Authorization: `Bearer ${process.env.CITATION_ATLAS_KEY}` };

async function get(path, params = {}) {
  const res = await fetch(`${API}/${path}?${new URLSearchParams(params)}`, { headers });
  if (res.status === 429) {
    await new Promise((r) => setTimeout(r, 1000 * Number(res.headers.get("Retry-After") || 60)));
    return get(path, params);
  }
  if (!res.ok) throw new Error(`${res.status} ${(await res.json()).error}`);
  return res.json();
}

const data = await get("weekly", { state: "NY,NJ", sector: "manufacturing", min_penalty: 10000 });
for (const c of data.citations) {
  const phone = c.contact?.phone ?? "no listing";
  console.log(c.person ? "Name withheld (individual)" : c.name, data.statuses[c.status], c.init, c.cur, phone, c.id);
}
if (data.attribution) console.log(data.attribution.text); // keep with any contact data you pass on

Data freshness

The data is rebuilt from the DOL bulk files every week; a new alert week (a Monday) appears in /api/v1/weeks after the Monday build. Citations publish about 30 days after issuance: "new" means newly published in the DOL data that week, not newly issued. newest_issuance is the newest issuance date in the snapshot and as_of the snapshot date. Newly opened inspections usually appear within two to three weeks of opening. The first week (2026-10-05) was bootstrapped from the newest 7 days of issuance and open dates.

Every record's osha field is the official osha.gov inspection detail page, the record of authority; id is the OSHA inspection number. osha.gov may ask you to verify you're human; if you land on the homepage, search the inspection number at OSHA's Establishment Search. The search page is in every JSON response as osha_search_url and in every CSV row as osha_search_url: https://www.osha.gov/ords/imis/establishment.html. If you show records to people, show the inspection number next to the link.

Contact data license and attribution

Phone numbers and websites (contact) come from Overture Maps Foundation Places, which is licensed per source: CDLA-Permissive-2.0, Apache-2.0 (Foursquare, with its NOTICE) and CC0. If you share or republish contact data you got from the API:

  • keep the attribution line (attribution.text) with it, and
  • include the license texts: JSON responses with contacts carry them in licenses, and format=zip bundles them with the CSV.

Full texts and credits: Data sources, credits and licenses. The OSHA records themselves are U.S. government works in the public domain.

Citations are allegations. They list alleged violations and proposed penalties; employers can contest them, and many are reduced or withdrawn in settlement. They are not findings of wrongdoing until they become final orders. Wherever you display these records, use that wording ("alleged", "initial (proposed) penalty"), show the status label and the current penalty next to the initial penalty, and link the official osha.gov record. Never reconstruct names we withhold (person: true). Opening an inspection does not mean a violation was found.

TCPA and Do Not Call. Phone numbers come from public business listings and may be mobile numbers. You are responsible for complying with the Telephone Consumer Protection Act, the National Do Not Call Registry and state telemarketing laws: no autodialed, prerecorded or text-message outreach without the consent those laws require, and scrub numbers against the Do Not Call Registry. A listing match (contact.tier, contact.basis) is not confirmation that the listing belongs to the inspected establishment.

Citation Atlas is not affiliated with DOL or OSHA, and nothing here is legal advice. See the terms. Wrong record? Request a correction. Questions about the API: [email protected].