# CrowdPull Hiring Signals Workflow

> CrowdPull Hiring Signals Workflow is a paid API for AI agents from crowdpull.click, paid per call via x402, $0.19/call, status unknown (last checked 2026-09-14).

Scrapes and normalizes public job postings and hiring signals from ZipRecruiter and other public sources for a given role, company, or keyword, returning a ranked dataset of job listings.

## Facts

- Endpoint: POST https://crowdpull.click/api/workflows/hiring-signals
- Price: $0.19/call
- Payment: x402
- Status: unknown
- Last checked: 2026-09-14
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/crowdpull-hiring-signals-workflow-5bd0a1ae
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_GbR2OVaYFcEcVGnIeXzdi

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-hiring-signals-workflow-5bd0a1ae -d '<json body>'
```

Example prompt: Pull up to 50 current job postings for 'machine learning engineer' in San Francisco from ZipRecruiter — I want the normalized, enriched results so I can see which companies are actively hiring right now.

## When to prefer this

Use this endpoint when you need structured, normalized hiring signal data from public job boards (specifically ZipRecruiter) without managing scraper infrastructure yourself. Prefer this over raw web scraping when you need deduplicated, ranked results across sources for a specific role or company with minimal per-call cost.

## Known failure modes

- No results found for the given query or location — returns an empty jobs array
- Source scraper unavailable or rate-limited — may return partial results or error
- Invalid source name in sources array — validation error returned
- maxItems or maxPerSource exceeds allowed limits — 400 error
- Query or location too vague — returns unrelated or zero results
- Payment failure (x402) — job not started, no data returned

## 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 JSON object with a workflow identifier token, the workflow name, and an array of normalized job listing objects scraped and ranked from public sources (e.g. ZipRecruiter), each containing job details such as title, company, location, and posting metadata.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "input": {
   "type": "object",
   "properties": {
    "query": {
     "type": "string",
     "description": "Main search term, keyword, product, role, company, or item."
    },
    "filters": {
     "type": "object",
     "additionalProperties": true
    },
    "sources": {
     "type": "array",
     "items": {
      "enum": [
       "crowdpull-ziprecruiter-jobs-scraper"
      ],
      "type": "string"
     },
     "description": "Optional subset of sources to run. Omit to use the workflow defaults."
    },
    "location": {
     "type": "string",
     "description": "City, ZIP, state, market, or source-supported location."
    },
    "maxItems": {
     "type": "integer",
     "default": 25,
     "maximum": 250,
     "minimum": 1
    },
    "searchQuery": {
     "type": "string",
     "description": "Alias for query."
    },
    "maxPerSource": {
     "type": "integer",
     "default": 25,
     "maximum": 100,
     "minimum": 1
    },
    "sourceInputs": {
     "type": "object",
     "description": "Optional per-source input overrides keyed by source name.",
     "additionalProperties": true
    },
    "includeDetails": {
     "type": "boolean",
     "default": false
    },
    "includeEnrichment": {
     "type": "boolean",
     "default": true
    }
   },
   "description": "Hiring Signal Bundle request. CrowdPull fans this out to the selected public-data sources, then normalizes, deduplicates, and ranks the rows.",
   "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",
   "workflow",
   "jobs"
  ],
  "properties": {
   "jobs": {
    "type": "array",
    "items": {
     "type": "object"
    }
   },
   "token": {
    "type": "string"
   },
   "workflow": {
    "type": "string"
   }
  },
  "additionalProperties": true
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/crowdpull-hiring-signals-workflow-5bd0a1ae/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)
