FastDOL

FastDOL — free tier with API key

🏛 GovernmentUNMONITORED
AUTH APIKEYCORS AGENT ?HTTPS COMMERCIAL ?

FastDOL exposes a free-tier JSON API. Register for an API key if required; we verified a public or demo endpoint.

HOW IT'S SCORED ⓘ
Status badge · for your READMEshipapis health badge: — · unmonitored
ON PROBE SCHEDULE

We probe a documented GET and expect 2xx JSON — full uptime and health score. Open provider docs ↗

Uptime historystarts after first probe

On our probe schedule. Uptime charts appear after the first check lands.

Example responsefrom provider docs — not verified by us
GET https://api.fastdol.com/v1/openapi.json

{
  "openapi": "3.0.2",
  "info": {
    "title": "FastDOL API",
    "description": "FastDOL aggregates employer compliance and enforcement data from every major\nUS federal source — OSHA, WHD, MSHA, EPA ECHO, NLRB, FMCSA, OFLC, SAM.gov,\nCMS, CPSC, NHTSA, SEC, USAspending, BLS — plus the UVA Corporate Prosecution\nRegistry, into one REST API keyed by a stable `employer_id`.\n\n**Authentication.** Every request takes an `X-Api-Key` header. Click\n**Authorize** and paste your key to try endpoints live below.\n\n**Base URL.** `https://api.fastdol.com` — all paths are under `/v1`.\n\n**Bulk access.** Filtered slices via the async **Bulk export** endpoint\n(≤100k rows); the entire dataset as weekly point-in-time Parquet via the\n**Snapshots** endpoints.\n",
    "contact": {
      "name": "FastDOL",
      "url": "https://www.fastdol.com/",
      "email": "ben@fastdol.com"
    },
    "version": "1.0.0"
  },
  "servers": [
    {
      "url": "https://api.fastdol.com",
      "description": "Production"
    }
  ],
  "paths": {
    "/v1/employers": {
      "get": {
        "tags": [
          "Employers"
        ],
        "summary": "Search employers",
        "description": "Search employers by name, EIN, zip, state, or NAICS.\n\nReturns a flat list of employer locations sorted by risk score (worst first).\nEach result includes `related_locations_count` showing how many locations\nshare the same normalized employer name — useful for national chains.",
        "operationId": "search_employers_v1_employers_get",
        "parameters": [
          {
            "name": "name",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 200
                },
                {
                  "type": "null"
                }
              ],
              "description": "Fuzzy employer name search",
              "title": "Name"
            },
            "description": "Fuzzy employer name search"
          },
          {
            "name": "ein",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 12
                },
                {
                  "type": "null"
                }
              ],
              "description": "Exact EIN match",
              "title": "Ein"
            },
            "description": "Exact EIN match"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/employers/parent": {
      "get": {
        "tags": [
          "Employers"
        ],
        "summary": "Parent-company rollup",
        "description": "Parent company risk rollup — aggregate risk across all locations.\n\nReturns company-wide statistics (total inspections, violations, penalties,\nrisk distribution) plus a paginated list of individual locations sorted\nby risk score (worst first).\n\nPremium feature for enterprise customers evaluating national employers.",
        "operationId": "get_parent_company_v1_employers_parent_get",
        "parameters": [
          {
            "name": "name",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "description": "Parent company name (e.g., 'Amazon', 'Walmart')",
              "title": "Name"
            },
            "description": "Parent company name (e.g., 'Amazon', 'Walmart')"
          },
          {
            "name": "state",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Filter locations by state",
              "title": "State"
            },
            "description": "Filter locations by state"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/employers/ein/{ein}": {
      "get": {
        "tags": [
          "Employers"
        ],
        "summary": "Look up by EIN",
        "description": "Lookup employers by FEIN (Federal Employer Identification Number).\n\nReturns all locations matching the given EIN. Insurance professionals\nidentify employers by FEIN — this is the primary lookup for underwriting\nintegrations.\n\nEIN format: 9 digits (e.g., '943067788' or '94-3067788').",
        "operationId": "get_employer_by_ein_v1_employers_ein__ein__get",
        "parameters": [
          {
            "name": "ein",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Ein"
            }
          },
          {
            "name": "state",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "State code filter",
              "title": "State"
            },
            "description": "State code filter"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/employers/{employer_id}": {
      "get": {
        "tags": [
          "Employers"
        ],
        "summary": "Get employer profile",
        "description": "Direct lookup by employer_id UUID.",
        "operationId": "get_employer_v1_employers__employer_id__get",
        "parameters": [
          {
            "name": "employer_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Employer Id"
            }
          },
          {
            "name": "X-Api-Key",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "X-Api-Key"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/employers/{employer_id}/inspections": {
      "get": {
        "tags": [
          "Employers"
        ],
        "summary": "List OSHA inspections",
        "description": "Get inspection history with violation detail for an employer.\n\nMetered: one lookup per call. Previously unmetered, which made it trivial\nfor a free-tier key to scrape the entire product by combining the sitemap\nendpoint (employer IDs) with this one (full inspection history per id).",
        "operationId": "get_inspections_v1_employers__employer_id__inspections_get",
        "parameters": [
          {
            "name": "employer_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Employer Id"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 100,
              "minimum": 1,
              "default": 20,
              "title": "Limit"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/employers/{employer_id}/severe-injuries": {
      "get": {
        "tags": [
          "Employers"
        ],
        "summary": "List severe-injury reports",
        "description": "Per-event OSHA Severe Injury Reports (29 CFR 1904.39) for an employer.\n\nEach row is an injury the employer self-reported within 24 hours\n-- in-patient hospitalization, amputation, or loss of an eye.\nDistinct from /employers/{id}/inspections (inspection-triggered):\nSIR is injury-triggered, so the same event may or may not have a\nrelated inspection (see inspection_activity_nr -- often NULL).\n\nMetered: one lookup per call, same as inspections / SEC enforcement.\nNewest event first.",
        "operationId": "get_severe_injuries_v1_employers__employer_id__severe_injuries_get",
        "parameters": [
          {
            "name": "employer_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Employer Id"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 100,
              "minimum": 1,
              "default": 20,
              "title": "Limit"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/employers/{employer_id}/whd-cases": {
      "get": {
        "tags": [
          "Employers"
        ],
        "summary": "List WHD wage cases",
        "description": "Per-case WHD (Wage & Hour Division) enforcement records for an\nemployer.\n\nEach row is one closed case carrying backwages assessed\n(`bw_amt`) and the count of underpaid employees\n(`ee_violtd_cnt`). Covers FLSA, FMLA, MSPA, H-1B/H-2A/H-2B, CCPA,\nand any other DOL WHD-administered statute.\n\nMetered: one lookup per call, same pattern as the other detail\nendpoints. Most-recent case first.",
        "operationId": "get_whd_cases_v1_employers__employer_id__whd_cases_get",
        "parameters": [
          {
            "name": "employer_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Employer Id"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 100,
              "minimum": 1,
              "default": 20,
              "title": "Limit"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/employers/{employer_id}/cms-deficiencies": {
      "get": {
        "tags": [
          "Employers"
        ],
        "summary": "List CMS nursing-home deficiencies",
        "description": "Per-citation CMS nursing-home deficiency list for a facility.\n\nEach row is one Health Deficiency citation from CMS Care Compare --\nsurvey date, deficiency tag (F-tag), the textual description,\nscope-severity letter (A-L), whether corrected, and the inspection\ncycle (standard survey vs complaint vs infection control).\n\nLookup: resolves cms_ccn from employer_profile. Only facilities with\na populated CMS Certification Number have deficiency rosters. Other\nemployers return 200 with empty results.\n\nSeverity coloring at the UI layer follows CMS conventions:\n  A-C: isolated potential harm (mild)\n  D-F: pattern potential harm (moderate)\n  G-I: actual harm (high)\n  J-L: immediate jeopardy (critical, burnt-umber)\n\nOrdered most-recent-survey first, then severity within survey.",
        "operationId": "get_cms_deficiencies_v1_employers__employer_id__cms_deficiencies_get",
        "parameters": [
          {
            "name": "employer_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Employer Id"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 200,
              "minimum": 1,
              "default": 50,
              "title": "Limit"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "BatchLookupItem": {
        "properties": {
          "name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Name",
            "description": "Employer name (fuzzy match)",
            "examples": [
              "Walmart"
            ]
          },
          "ein": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ein",
            "description": "Exact EIN; dashes optional",
            "examples": [
              "94-3067788"
            ]
          },
          "employer_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Employer Id",
            "description": "FastDOL employer_id (UUID) for an exact match"
          },
          "state": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "State",
            "description": "2-letter state code, to narrow",
            "examples": [
              "ID"
            ]
          },
          "zip": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Zip",
            "description": "5-digit ZIP, to narrow",
            "examples": [
              "83669"
            ]
          },
          "city": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "City",
            "description": "City, to narrow"
          }
        },
        "type": "object",
        "title": "BatchLookupItem"
      },
      "BatchLookupRequest": {
        "properties": {
          "lookups": {
            "items": {
              "$ref": "#/components/schemas/BatchLookupItem"
            },
            "type": "array",
            "title": "Lookups",
            "description": "1–100 lookup items per synchronous request (use CSV upload for more)."
          }
        },
        "type": "object",
        "required": [
          "lookups"
        ],
        "title": "BatchLookupRequest",
        "example": {
          "lookups": [
            {
              "name": "Walmart",
              "state": "ID",
              "zip": "83669"
            },
            {
              "name": "Amazon",
              "state": "CA"
            }
          ]
        }
      },
      "Body_upload_csv_v1_employers_upload_csv_post": {
        "properties": {
          "file": {
            "type": "string",
            "format": "binary",
            "title": "File",
            "description": "CSV file with employer names and optional location fields"
          }
        },
        "type": "object",
        "required": [
          "file"
        ],
        "title": "Body_upload_csv_v1_employers_upload_csv_post"
      },
      "CreateWebhookRequest": {
        "properties": {
          "url": {
            "type": "string",
            "maxLength": 2083,
            "minLength": 1,
            "format": "uri",
            "title": "Url"
          },
          "events": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Events"
          },
          "label": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Label"
          }
        },
        "type": "object",
        "required": [
          "url"
        ],
        "title": "CreateWebhookRequest"
      },
      "ExportFilters": {
        "properties": {
          "name": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ],
            "title": "Name",
            "description": "Employer name (fuzzy match)"
          },
          "ein": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 20
              },
              {
                "type": "null"
              }
            ],
            "title": "Ein",
            "description": "Exact EIN"
          },
          "state": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 2
              },
              {
                "type": "null"
              }
            ],
            "title": "State",
            "description": "Single 2-letter state code"
          },
          "states": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array",
                "maxItems": 60
              },
              {
                "type": "null"
              }
            ],
            "title": "States",
            "description": "Multiple state codes (OR)"
          },
          "zip": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 5
              },
              {
                "type": "null"
              }
            ],
            "title": "Zip",
            "description": "5-digit ZIP code"
          },
          "naics": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 6
              },
              {
                "type": "null"
              }
            ],
            "title": "Naics",
            "description": "Single NAICS prefix, 2-6 digits"
          },
          "naics_codes": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array",
                "maxItems": 50
              },
              {
                "type": "null"
              }
            ],
            "title": "Naics Codes",
            "description": "Multiple NAICS prefixes (OR)"
          },
          "parent_only": {
            "type": "boolean",
            "title": "Parent Only",
            "description": "Roll up to one row per parent company",
            "default": false
          }
        },
        "type": "object",
        "title": "ExportFilters",
        "description": "Filter surface for bulk exports — richer than the interactive\nsearch endpoint because enterprise analysts need structured queries\n(e.g. \"top 50K employers by fatality rate with OSHA penalties >\n$100K in construction NAICS\")."
      },
      "ExportRequest": {
        "properties": {
          "format": {
            "type": "string",
            "pattern": "^(csv|json)$",
            "title": "Format",
            "description": "Output format: csv or json (NDJSON)",
            "default": "csv"
          },
          "filters": {
            "$ref": "#/components/schemas/ExportFilters",
            "description": "At least one filter is required"
          },
          "max_rows": {
            "type": "integer",
            "maximum": 100000,
            "minimum": 1,
            "title": "Max Rows",
            "description": "Row cap, 1–100,000",
            "default": 50000
          },
          "sort_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Sort By",
            "description": "One of: employer_id, fatalities, inspections, penalties, violations, whd_backwages, whd_cases"
          },
          "sort_dir": {
            "type": "string",
            "pattern": "^(asc|desc)$",
            "title": "Sort Dir",
            "description": "asc or desc",
            "default": "desc"
          }
        },
        "type": "object",
        "title": "ExportRequest",
        "example": {
          "filters": {
            "has_fatalities": true,
            "min_penalties": 100000,
            "naics_codes": [
              "2361",
              "2362"
            ],
            "states": [
              "CA",
              "TX"
            ]
          },
          "format": "csv",
          "max_rows": 50000,
          "sort_by": "fatalities",
          "sort_dir": "desc"
        }
      },
      "FeedbackRequest": {
        "properties": {
          "type": {
            "type": "string",
            "title": "Type"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "contact_email": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Contact Email"
          }
        },
        "type": "object",
        "required": [
          "type"
        ],
        "title": "FeedbackRequest"
      },
      "HTTPValidationError": {
        "properties": {
          "detail": {
            "items": {
              "$ref": "#/components/schemas/ValidationError"
            },
            "type": "array",
            "title": "Detail"
          }
        },
        "type": "object",
        "title": "HTTPValidationError"
      }
    },
    "securitySchemes": {
      "ApiKeyAuth": {
        "type": "apiKey",
        "in": "header",
        "name": "X-Api-Key",
        "description": "Enterprise API key (issued by FastDOL, prefix `emp_live_`). Sent on every request."
      }
    }
  },
  "tags": [
    {
      "name": "Employers",
      "description": "Search, look up, and pull the full multi-agency compliance profile and per-source detail for any US employer establishment."
    },
    {
      "name": "Industry benchmarks",
      "description": "BLS SOII industry-average injury rates (TRIR/DART) by 4-digit NAICS, for peer comparison."
    }
  ],
  "security": [
    {
      "ApiKeyAuth": []
    }
  ]
}
Call itcurl · fetch · python
curl "https://api.fastdol.com/v1/openapi.json"
const res = await fetch("https://api.fastdol.com/v1/openapi.json");
const data = await res.json();
console.log(data);
import requests

res = requests.get("https://api.fastdol.com/v1/openapi.json")
print(res.json())

BROWSER CALLS BLOCKED (NO CORS/HTTPS) — USE THE CURL SNIPPET

Endpoints · 6On scheduleFULL DOCS ↗
On schedule — GET /v1/openapi.json awaits first probe
GET/v1/openapi.jsonPROBED

FastDOL — free tier with API key

GET/v1

V1 — documented GET route.

GET/v1/1

V1 details by ID (example: 1).

GET/v1?limit=10

V1 — documented GET route.

GET/v1/search?q=test

Search by query parameters.

GET/v1/

V1 — documented GET route.

Machine-readable spec

We probe a documented GET and expect 2xx JSON — full uptime and health score. Export includes every documented route below.

Response-shape history

Not tracked yet. Shape-change history starts once this API joins our probe schedule.

FastDOL: common questions

Is FastDOL free to use?

Yes — FastDOL is a free government API. Free tier: Free tier — key may be required. Whether the free tier allows commercial use is unclear — check the provider docs.

Does FastDOL need an API key?

Yes — FastDOL needs a free API key, which you pass on each request. Rate limits: Unpublished.

Can I call FastDOL from the browser?

Not directly — FastDOL doesn't send browser-friendly CORS headers, so call it from a server or proxy instead. Copy the curl or Python snippet on this page to get started.

Is FastDOL up right now?

FastDOL is catalogued but not yet on our probe schedule, so we don't publish a live status for it. Check the provider's own status page or docs for its current state.