# Hiring Signals — Which jobs has this supplied company recently posted, with verifiable dates?

Dated live jobs, primary-source URLs, date meaning and coverage.

- Capability id: `job.find`
- Actor: `impressionable_lupine/company-recent-job-openings` (ID `DnTJ0PiYO5uNHgDKK`), default build `2.0.20`
- Apify Store: https://apify.com/impressionable_lupine/company-recent-job-openings
- Page: https://agents.retainly.dev/capabilities/hiring-signals
- Last metadata check: 2026-10-08T12:16:53.713706+00:00 (read-only; not live status)

## Workflow

Recent hiring evidence for account research and recruiting workflows.

Simpler alternative: If you already have an adapter for the company’s ATS or public job-board API (for example Ashby, Greenhouse, Lever or SmartRecruiters), call it directly; it incurs no Actor event charge and may be more complete for that source.

Do not choose for:
- Discovering companies from geography or industry criteria
- Proving hiring velocity from a single snapshot
- Identifying decision-makers or proving purchase intent

## Input

| Field | Required | Constraints | Description |
|---|---|---|---|
| `company_website` | yes | required, string, max 2048 chars | Public company domain or URL. One company per report. We follow its careers/ATS links; no source credentials needed. Do not supply an ATS URL directly. |
| `lookback_days` | no | optional, integer 1–365, default 30 | Default 30. UTC calendar-day window; only source-verifiable publication dates qualify. Republication is explicitly labeled. |
| `max_jobs` | no | optional, integer 1–100, default 30 | Default 30; output cap 1–100. Partial positives cost one report; complete dated negatives also cost one report. Unknown/failed checks are free. Raising this cap does not increase the 40-request budget. |

Minimal valid input:

```json
{
  "company_website": "https://linear.app",
  "lookback_days": 30,
  "max_jobs": 5
}
```

Input schema: https://agents.retainly.dev/schemas/hiring-signals/input_schema.json
Report schema: https://agents.retainly.dev/schemas/hiring-signals/report.schema.json

## Price and charge trigger

- Model: PAY_PER_EVENT, event `verified-report` (“Verified hiring report”), $0.03 USD, max 1 event per run.
- Store event description (verbatim): “One source-checked company hiring report, including verified no-recent-openings results.”
- Charge trigger: One event per eligible report: a verified positive (including a partial positive) or a complete source-scoped negative (status no_result with coverage_complete: true).
- No event when: An incomplete check with zero dated jobs is unknown and produces no event. invalid_input and upstream_error produce no event. Undated jobs cannot establish recency.
- Standard Actor platform usage included under the configuration checked on 8 Oct 2026; recheck before purchase.
- Caps are not discounts and do not guarantee a positive result. Unknown/invalid checks produce no eligible report event; caller model/workflow costs are separate.

## Statuses

| Status | Meaning | Eligible report event |
|---|---|---|
| `success` | Complete positive: verified recent openings with source-verified dates. | yes |
| `partial` | Positive with stated limits (for example, incomplete coverage or output cap reached). Verified dated jobs are still returned. | yes |
| `no_result` | Complete source-scoped negative: emitted only when coverage_complete is true, so it is one eligible event. A zero-job check with incomplete coverage is reported as upstream_error (unknown, no event). Not a claim about the whole web. | yes |
| `invalid_input` | Fix the caller input (for example, an ATS URL or unsafe URL was supplied). | no |
| `upstream_error` | Unknown: unsupported or blocked source, configuration or budget failure — and where a zero-job check with incomplete coverage lands (unknown, no event). Never a no-hiring claim. | no |

## Evidence and limits

- Verification scope: A current listing in the company-linked public careers or ATS source, with explicit publication metadata. Republishing is labeled.
- Coverage limits: Unsupported ATS, undated listings, blocked sources and incomplete coverage remain unknown. A verified negative covers only the checked sources.
- Request bounds: 40 requests, 24 MB total, 5 MB per page, 90-second network budget.

## Recorded example

Recorded example — observed 2026-10-08 11:43 UTC · owner-funded release test · not an independent purchase.
Subject: Linear. Run `eKbRTWiywg2bQQTZd`, build 2.0.20. Reports may precede final event charging; their billing fields alone do not establish a settled debit.
Full report with provenance: https://agents.retainly.dev/examples/hiring-signals.json

Input used:

```json
{
  "company_website": "https://linear.app",
  "lookback_days": 30,
  "max_jobs": 5
}
```

## Call it (after the caller authorizes spending)

Connecting does not authorize spending. Inspecting metadata never starts a run.

Inspect without purchase (MCP, anonymous endpoint `https://mcp.apify.com?tools=search-actors,fetch-actor-details`):

```json
{
  "name": "fetch-actor-details",
  "arguments": {
    "actor": "impressionable_lupine/company-recent-job-openings",
    "output": {
      "pricing": true,
      "inputSchema": true,
      "outputSchema": true,
      "metadata": true,
      "readme": true
    }
  }
}
```

Inspect without purchase (REST, no token):

```bash
# Free, read-only: public Actor metadata (pricing, builds). Does not start a run.
curl "https://api.apify.com/v2/acts/DnTJ0PiYO5uNHgDKK"
```

MCP `call-actor` (endpoint `https://mcp.apify.com?tools=actors,runs,storage`; run limits live in `callOptions`, never in `input`):

```json
{
  "name": "call-actor",
  "arguments": {
    "actor": "impressionable_lupine/company-recent-job-openings",
    "input": {
      "company_website": "https://linear.app",
      "lookback_days": 30,
      "max_jobs": 5
    },
    "waitSecs": 30,
    "callOptions": {
      "build": "2.0.20",
      "memory": 512,
      "timeout": 120,
      "maxTotalChargeUsd": 0.03
    }
  }
}
```

MCP follow-ups (same run):

```json
{
  "name": "get-actor-run",
  "arguments": {
    "runId": "<runId returned by call-actor>"
  }
}
```

```json
{
  "name": "get-dataset-items",
  "arguments": {
    "datasetId": "<datasetId returned by call-actor>",
    "clean": true
  }
}
```

REST API v2:

```bash
# Paid run in YOUR Apify account. Only after spending is authorized.
# Set APIFY_TOKEN securely in your client/shell; never paste it into URLs or shared files.
curl -X POST "https://api.apify.com/v2/acts/DnTJ0PiYO5uNHgDKK/runs?build=2.0.20&memory=512&timeout=120&maxTotalChargeUsd=0.03&waitForFinish=30" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"company_website":"https://linear.app","lookback_days":30,"max_jobs":5}'
```

```bash
# Save data.id (run ID) from the first response. On timeout/ambiguity, poll THIS run.
# Never start a second charged run to recover output.
curl "https://api.apify.com/v2/actor-runs/$RUN_ID" \
  -H "Authorization: Bearer $APIFY_TOKEN"
```

```bash
# data.defaultDatasetId from the run object (one report item).
curl "https://api.apify.com/v2/datasets/$DATASET_ID/items?format=json&clean=true" \
  -H "Authorization: Bearer $APIFY_TOKEN"
```

Recovery rule: Save the run ID from the first response; on timeout or ambiguous response, poll that same run; never start a second charged run to recover output.
