# Build an employer job review sheet

Collect a small employer-board sample with salary fields and source links, then maintain one review row per posting.

## Quick start without code

Open https://apify.com/maydit/ashby-jobs-scraper, paste input.json into its JSON input editor, review current pricing and set a maximum run charge of $0.05. Run manually, check SUMMARY and the result count, then export CSV. Use your own Apify account.

## Downloadable manual runner

Save config.json and run-workflow.mjs in the same new folder. Requires Node.js 22 or newer; no npm install. Supply APIFY_TOKEN through a secure environment variable using your own token. Do not put it in config.json or a URL.

Run without flags for offline instructions:

    node run-workflow.mjs

After reviewing input, scope and current pricing, start one potentially chargeable run:

    node run-workflow.mjs --run

The runner requests 256 MiB, 180 seconds and a $0.05 maximum total charge. The input time budget is 120 seconds. This cap may stop a run before all requested data is saved. It never retries the launch POST, creates a schedule, sends messages, or writes to a remote destination. It uses the Actor's current default build.

If a launch response is uncertain, inspect Apify Console before doing anything else. Resume the accepted run using its ID, with the same config and a new output folder:

    node run-workflow.mjs --resume RUN_ID

The runner checks Actor identity, original input, terminal status, SUMMARY, result count and row identities. It stops on source failures and time/charge stops; a deliberate result cap is allowed and remains a bounded sample. It polls for at most 270 seconds; timeout does not abort or relaunch the Actor.

## Destination

CSV and JSON are written into a new local results folder. Import CSV as literal text (RAW), preserving JSON for exact types. Upsert on record_key and deduplicate replay_key. Add owner/review notes in your own sheet. No sheet is automatically connected. Empty or absent rows never authorize deletion.

## Steps

1. Choose explicit Ashby boards and set preset to none so a preset does not silently widen your scope. Start with five postings per board.
2. Preserve salary amount, currency and interval together. A missing structured range means unavailable in this response, not unpaid work or no salary elsewhere.
3. Keep workplaceType beside remote. The saved sample includes hybrid-labeled postings with a remote location option; check the employer page before classifying a role.
4. Import the CSV as literal values. Upsert by company and jobId; keep your own owner, review status and notes columns.
5. Repeat with the same scope. This starter keeps current observations; absence from a capped sample never closes a posting.

## Limits

- Five postings per board are a deterministic bounded sample, not a random sample or the newest five jobs.
- Structured compensation may be absent even when pay is mentioned in the full employer description.
- This is a posting review workflow, not applicant screening or a complete hiring-market analysis.

## Example pricing

At FREE-tier rates observed October 18, 2026, 15 saved rows × $0.001 plus $0.00005 Actor Start = $0.01505 in modeled event charges for this sample. This is not an owner invoice or a complete account-cost quote. Platform/API/storage and plan pricing may differ. Check https://apify.com/maydit/ashby-jobs-scraper/pricing before running.

## Evidence

Saved observation: 2026-10-18T13:04:35.104Z; build 1.0.5; 15 records. Historical output is included in sample.json and sample.csv. Later results can differ. Product: https://mayd-it.com/data-tools/actors/ashby-jobs-scraper/
