Install
openclaw skills install @crawlora-org/hiring-demand-analysisCompare advertised hiring demand across roles, skills, locations, and seniority using Crawlora's jobs dataset. Use for labor-market snapshots, employer concentration, remote-work comparisons, and salary analyses with explicit coverage and compensation-unit controls.
openclaw skills install @crawlora-org/hiring-demand-analysisMeasure the advertised openings observed in a defined corpus. Postings are not completed hires, headcount growth, unique vacancies, or the entire labor market.
Set CRAWLORA_API_KEY to your key from crawlora.net.
Run the bundled scripts/crawlora.sh from this skill directory or by absolute
path. It sends x-api-key to https://api.crawlora.net/api/v1; keep the key in
the environment. Read reference/endpoints.md for
jobs search, global facets, company discovery, and posting detail.
/datasets/jobs/search; open roles are the default. include_closed=true
adds stored closed roles but does not reconstruct past point-in-time vacancies./datasets/jobs/facets?size=... for corpus context and labels. This
endpoint accepts only bucket size, not search filters. Its total_open,
remote_open, and buckets are global. Do not use them as the denominator or
skill distribution for a filtered search. Buckets are capped, not exhaustive.q spans title/company/description;
city, state, country, department, and job_family have their documented
matching behavior. workplace_type accepts onsite, hybrid, remote.
Skill and seniority facets are not equivalent to server-side search filters.
Inspect/classify returned rows when those dimensions define the analysis.page_size<=100, 10,000-result window).
Preserve posting_id, provider, employer, URL, raw location, structured fields,
posted date, open status, and available crawl timestamps. Deduplicate by posting
ID, then identify likely syndicated/reposted roles using employer, requisition,
title, location, and canonical URL. Keep ambiguous multi-location roles explicit.seniority_level and occupation fields as classifications, not employer
assertions. Seniority is entry, mid, or senior, with uncertain roles
assigned to mid; ambiguous occupations may lack a job_family entirely.compensation_min, compensation_max, currency,
period, and source wording. min_salary/max_salary require salary_currency
and match overlapping range bounds, not guaranteed pay. Currency filtering
alone does not normalize hourly/monthly/annual figures; verify period locally.
Do not annualize without explicit hours/weeks assumptions or treat base salary
as total compensation. Report pay-disclosure coverage before summaries.total is not the deduplicated population size.scripts/crawlora.sh /datasets/jobs/facets size=10
scripts/crawlora.sh /datasets/jobs/search q="data engineer" page_size=20
Return query/cohort definitions, coverage and exclusions, counts by relevant dimension, cited example postings, and limitations. A one-time snapshot describes observed demand; trend claims require comparable dated snapshots and stable coverage.
429, retry transient 5xx once, stop on 401/403, and check
application code. Stop on repeated pages; research does not apply to jobs or
contact employers, and a snapshot request does not create ongoing monitoring.