# CrowdPull OSHA Violations Scraper

> CrowdPull OSHA Violations Scraper is a paid API for AI agents from crowdpull.click, paid per call via x402, $0.05/call, status unknown (last checked 2026-09-14).

Scrapes OSHA workplace violation records from public government web pages into structured datasets, filtered by establishment name, location, state, and date range.

## Facts

- Endpoint: POST https://crowdpull.click/api/actors/osha-violations-scraper/call
- Price: $0.05/call
- Payment: x402
- Status: unknown
- Last checked: 2026-09-14
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/crowdpull-osha-violations-scraper-b0148585
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_Mj4vVvaXTosNCwuOfojg0

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability crowdpull-osha-violations-scraper-b0148585 -d '<json body>'
```

Example prompt: Pull up to 50 OSHA violation records for Amazon warehouses in Texas, looking at violations from January 2022 to December 2023 — I want the detailed records if available.

## When to prefer this

Choose this endpoint when you need structured OSHA workplace violation data from public government sources, especially when filtering by establishment name, geographic area, state, or date range. It is preferable over manual web browsing or generic scrapers because it is purpose-built for OSHA public records and returns consistently structured output. Use when compliance research, investigative journalism, due diligence, or safety auditing requires bulk or filtered OSHA citation data.

## Known failure modes

- No violations found for the given establishment/location/state combination, returning empty dataset
- Job times out if waitForFinishSeconds is too low for large result sets
- Invalid or unsupported URL passed to startUrls returns an error from the runner
- maxItems/maxResults exceeds 250, rejected by schema validation
- Source website is unavailable or has changed structure, causing scraper failure

## How this service works

CrowdPull turns public web pages into useful datasets for marketplaces, housing, reviews, jobs, social posts, drug prices, video, and public records.

## Output

Returns a job token and job object (with ID, status, and optional resultSetId) that the agent can poll to retrieve the scraped OSHA violation records once the async job completes.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "input": {
   "type": "object",
   "required": [],
   "properties": {
    "url": {
     "type": "string",
     "description": "Single public URL accepted by the selected source."
    },
    "urls": {
     "type": "array",
     "items": {
      "type": "string"
     },
     "description": "Public URLs accepted by the selected source."
    },
    "query": {
     "type": "string",
     "description": "Search query or keyword."
    },
    "state": {
     "type": "string"
    },
    "toDate": {
     "type": "string"
    },
    "fromDate": {
     "type": "string"
    },
    "location": {
     "type": "string",
     "description": "City, ZIP, state, neighborhood, or source-supported location."
    },
    "maxItems": {
     "type": "integer",
     "default": 25,
     "maximum": 250,
     "minimum": 1
    },
    "startUrls": {
     "type": "array",
     "items": {
      "type": "string"
     },
     "description": "Public source URLs to collect from."
    },
    "maxResults": {
     "type": "integer",
     "default": 25,
     "maximum": 250,
     "minimum": 1
    },
    "maxListings": {
     "type": "integer",
     "default": 25,
     "maximum": 250,
     "minimum": 1
    },
    "searchQuery": {
     "type": "string",
     "description": "Search query or keyword."
    },
    "includeDetails": {
     "type": "boolean",
     "default": false
    },
    "establishmentName": {
     "type": "string"
    }
   },
   "description": "OSHA Violations Scraper input. Pass the same public URLs, search terms, filters, and limits you would use on the source page. Extra source-specific fields are forwarded to the runner.",
   "additionalProperties": true
  },
  "options": {
   "type": "object",
   "properties": {
    "build": {
     "type": "string",
     "maxLength": 100,
     "minLength": 1
    },
    "memory": {
     "type": "integer",
     "maximum": 8192,
     "minimum": 128
    },
    "waitForFinishSeconds": {
     "type": "integer",
     "default": 10,
     "maximum": 60,
     "minimum": 0
    }
   },
   "description": "Optional CrowdPull job options. CrowdPull caps each paid job so low-cost agent calls cannot accidentally start a large collection.",
   "additionalProperties": false
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "type": "object",
  "required": [
   "token",
   "job"
  ],
  "properties": {
   "job": {
    "type": "object",
    "required": [
     "id",
     "status"
    ],
    "properties": {
     "id": {
      "type": "string"
     },
     "status": {
      "type": "string"
     },
     "resultSetId": {
      "type": "string"
     }
    },
    "additionalProperties": true
   },
   "token": {
    "type": "string"
   }
  },
  "additionalProperties": false
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/crowdpull-osha-violations-scraper-b0148585/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from crowdpull.click](https://www.zero.xyz/host/crowdpull.click/llms.txt)
