{"uid":"cap_BLs2UhKUzKcwZQB5syd5c","slug":"agents-openwebninja-com-ziprecruiter-estimated-salary-0eeed7f8","name":"ZipRecruiter Estimated Salary","description":"The pay distribution ZipRecruiter publishes for a job title, nationally or in one US state\nor Canadian province. One upstream page, one row.\n\nThe row carries the house `/estimated-salary` contract keys, plus 18 `ziprecruiter_*`\nextras.\n\n**The median is the real median.** ZipRecruiter's own JSON-LD publishes a field labelled\n`median` that is actually the MEAN: it was byte-identical to the page's average on 16 of 16\npages measured, and on Truck Driver it reads 56,348 against a true median of 49,500, which\nis 13.8% high. Every scraper that reads the easy JSON-LD field ships that mean labelled as\na median. `median_salary` here is parsed out of the page's own data layer and is the real\nmedian; ZipRecruiter's figure is carried alongside as `ziprecruiter_json_ld_median` so the\ndifference is auditable in the response itself.\n\n**Figures are always annual** and `salary_period` is always `YEAR`.\nZipRecruiter leads 6 of 11 titles measured with an hourly figure, but its own structured\ndata is annual (`P1Y`) on 13 of 13 pages, including every hourly-preferring title. Driving\nthe row off the page's preference would make `median_salary` mean something different for\nTruck Driver than for Data Scientist. All four frequencies ride along in\n`ziprecruiter_pay_frequencies`, and the page's own preference is preserved as\n`ziprecruiter_preferred_pay_period`.\n\n**What only this source has:** p25 and p75, an 11-bucket salary histogram giving the real\ndistribution, a 59 to 64 row state and province table, the 10 top-paying cities, 5 related\ntitles with pay deltas, all four pay frequencies on one row, the count of open listings\nbehind the figures, the spread level, ZipRecruiter's own summary prose and its generated\nFAQ.\n\n**Coverage is national and state or province level only.** A city returns a 400 error\nbefore any request is made: ZipRecruiter publishes salary pages at state and national\nlevel. `location_type` and `years_of_experience`, which JSearch offers, return a 400 error\nhere.\n\nA title ZipRecruiter has never published, or a title with no figures for the requested\nstate, returns a 404 error. Coverage is decided per title and state pair:\n`Software-Engineer` has an Ontario page, `Truck-Driver` a national page only.\n\n**Billing:** `Requests` counts 1 per call.","url":"https://agents.openwebninja.com/realtime-ziprecruiter-data/estimated-salary?utm_source=zero.xyz","method":"GET","headers":{},"bodySchema":{"type":"object","required":["job_title"],"properties":{"fields":{"type":"string","description":"Comma-separated projection over the salary row, for example\n`median_salary,salary_period`. `job_title` and `location` are always included. An\nunknown field name returns a 400 error; use the salary row's own field names."},"country":{"enum":["us","ca"],"type":"string","default":"us","description":"Country market the figures belong to. Only `us` and `ca` are served.\n\n**Allowed values:** `us`, `ca`\n\n**Default:** `us`"},"location":{"type":"string","description":"US state, Canadian province or country, spelled out in full, for example `New York` or\n`Alberta`. Two-letter codes and city names return a 400 error: ZipRecruiter publishes\nfigures at state and national level. Omit for the national figure.\n\n**Default:** nationwide"},"job_title":{"type":"string","example":"Registered Nurse","description":"Job title to price, for example `Registered Nurse`. Matched against ZipRecruiter's own\nsalary pages, so a title it does not publish returns a 404 error."}}},"responseSchema":{"type":"object","required":["status","request_id","parameters","data"],"properties":{"data":{"type":"array","items":{"type":"object","required":["location","job_title","min_salary","max_salary","median_salary","min_base_salary","max_base_salary","median_base_salary","min_additional_pay","max_additional_pay","median_additional_pay","salary_period","salary_currency","salary_count","salaries_updated_at","publisher_name","publisher_link","confidence","ziprecruiter_average_salary","ziprecruiter_national_average_salary","ziprecruiter_p25_salary","ziprecruiter_p75_salary","ziprecruiter_pay_frequencies","ziprecruiter_salary_histogram","ziprecruiter_salaries_by_state","ziprecruiter_top_paying_cities","ziprecruiter_related_titles","ziprecruiter_total_listings","ziprecruiter_spread_level","ziprecruiter_location_granularity","ziprecruiter_preferred_pay_period","ziprecruiter_job_title_searched","ziprecruiter_salaries_updated_at_text","ziprecruiter_summary","ziprecruiter_faq","ziprecruiter_json_ld_median"],"properties":{"location":{"type":"string","example":"United States","nullable":true,"description":"The scope the figures describe: the state or province name on a state request, and the\ncountry name (`United States`, `Canada`) on a national one. Read from the page's own\nscope field."},"job_title":{"type":"string","example":"RN","nullable":true,"description":"ZipRecruiter's canonical title for the page, which can differ from what was sent:\n`Registered Nurse` resolves to `RN`. What was sent is echoed in `parameters`, and the\npage's own raw title is `ziprecruiter_job_title_searched`."},"confidence":{"type":"string","example":null,"nullable":true,"description":"Always `null`. ZipRecruiter states no estimator confidence. `ziprecruiter_spread_level`\ndescribes how widely the top-city figures spread, which is a different thing."},"max_salary":{"type":"number","example":131000,"nullable":true,"description":"90th percentile annual pay, the top of the middle 80%."},"min_salary":{"type":"number","example":56000,"nullable":true,"description":"10th percentile annual pay, the bottom of the middle 80%."},"salary_count":{"type":"integer","example":null,"nullable":true,"description":"Always `null`. ZipRecruiter states no sample size for its estimate. The count of open\npostings behind the page is a different quantity and is published as\n`ziprecruiter_total_listings`."},"median_salary":{"type":"number","example":82000,"nullable":true,"description":"The real annual median, parsed from the page's own data layer. The JSON-LD field\nlabelled `median` is the mean and reads up to 13.8% high; it is carried separately as\n`ziprecruiter_json_ld_median`."},"salary_period":{"enum":["HOUR","WEEK","MONTH","YEAR"],"type":"string","example":"YEAR","nullable":true,"description":"Always `YEAR`. ZipRecruiter's own structured data is annual on every page measured,\nincluding titles the page leads with an hourly figure, so annual keeps titles\ncomparable. The other frequencies are in `ziprecruiter_pay_frequencies`."},"publisher_link":{"type":"string","format":"uri","example":"https://www.ziprecruiter.com/Salaries/Registered-Nurse-Salary","nullable":true,"description":"The ZipRecruiter salary page these figures were read from, so any number on the row can\nbe checked against its source."},"publisher_name":{"type":"string","example":"ZipRecruiter","description":"Always `ZipRecruiter`. Constant by construction on this source."},"max_base_salary":{"type":"number","example":null,"nullable":true,"description":"Always `null`, for the same reason as `min_base_salary`."},"min_base_salary":{"type":"number","example":null,"nullable":true,"description":"Always `null`. ZipRecruiter publishes total pay only on this surface, with no\nbase-versus-additional split."},"salary_currency":{"type":"string","example":"USD","nullable":true,"description":"ISO 4217 currency of every figure on the row, from the page's own country field. `USD`\nfor US pages, `CAD` for Canadian ones."},"ziprecruiter_faq":{"type":"array","items":{"type":"object","required":["question","answer"],"properties":{"answer":{"type":"string","example":"The average annual pay for a registered nurse in the United States is $87,868 a year...","nullable":true,"description":"The answer, HTML stripped to plain text."},"question":{"type":"string","example":"How much does a Registered Nurse make?","nullable":true,"description":"The question, verbatim."}},"description":"One entry of ZipRecruiter's generated salary FAQ for this title and scope. Answers that\nquote a table are flattened to text with cells separated by ` | `."},"description":"ZipRecruiter's generated FAQ for this title and scope, typically 3 entries covering the\nheadline figure, the best-paying related titles and the top-paying cities. An empty\narray when the page carries none."},"max_additional_pay":{"type":"number","example":null,"nullable":true,"description":"Always `null`, for the same reason as `min_additional_pay`."},"median_base_salary":{"type":"number","example":null,"nullable":true,"description":"Always `null`, for the same reason as `min_base_salary`."},"min_additional_pay":{"type":"number","example":null,"nullable":true,"description":"Always `null`. ZipRecruiter states total pay only, with no bonus, commission or equity\ncomponent broken out."},"salaries_updated_at":{"type":"string","format":"date-time","example":"2026-09-12T00:00:00.000Z","nullable":true,"description":"ISO 8601 UTC timestamp of the date ZipRecruiter last refreshed the figures. The raw\ntext it prints is kept as `ziprecruiter_salaries_updated_at_text`."},"ziprecruiter_summary":{"type":"string","example":"The average annual pay for a registered nurse in the United States is $87,868 a year...","nullable":true,"description":"ZipRecruiter's own prose summary of the figures, HTML stripped to plain text. Ready to\nshow to an end user without writing the sentence yourself."},"median_additional_pay":{"type":"number","example":null,"nullable":true,"description":"Always `null`, for the same reason as `min_additional_pay`."},"ziprecruiter_p25_salary":{"type":"number","example":65500,"nullable":true,"description":"25th percentile annual pay. With p75 it gives the interquartile range."},"ziprecruiter_p75_salary":{"type":"number","example":104000,"nullable":true,"description":"75th percentile annual pay."},"ziprecruiter_spread_level":{"type":"string","example":"large","nullable":true,"description":"How widely the top-city figures spread: `large`, `medium` or `small`. ZipRecruiter's\nown label."},"ziprecruiter_average_salary":{"type":"number","example":87868,"nullable":true,"description":"The annual MEAN, published under its real name. It differs from `median_salary` on\nevery title measured."},"ziprecruiter_json_ld_median":{"type":"number","example":87868,"nullable":true,"description":"The figure ZipRecruiter's own JSON-LD labels `median`, carried so the discrepancy is\nauditable. It is the MEAN: byte-identical to the page average on 16 of 16 pages\nmeasured, and on Truck Driver it reads 56,348 against a true median of 49,500, 13.8%\nhigh. Compare it to `median_salary`."},"ziprecruiter_related_titles":{"type":"array","items":{"type":"object","required":["job_title","annual_salary","monthly_pay","weekly_pay","hourly_wage","difference_from_average","difference_percent"],"properties":{"job_title":{"type":"string","example":"Vice President Home Health Registered Nurse","nullable":true,"description":"The related title, usable directly as this endpoint's `job_title`."},"weekly_pay":{"type":"number","example":3180,"nullable":true,"description":"The same figure expressed weekly."},"hourly_wage":{"type":"number","example":79.51,"nullable":true,"description":"The same figure expressed hourly."},"monthly_pay":{"type":"number","example":13781,"nullable":true,"description":"The same figure expressed monthly."},"annual_salary":{"type":"number","example":165372,"nullable":true,"description":"Average annual pay for the related title."},"difference_percent":{"type":"number","example":88.21,"nullable":true,"description":"`difference_from_average` as a percentage of the searched title's annual mean."},"difference_from_average":{"type":"number","example":77504,"nullable":true,"description":"This title's annual figure minus the searched title's annual mean. Computed for all 5\nrows; ZipRecruiter publishes only 4 of them."}},"description":"One of the 5 related job titles ZipRecruiter lists for the searched title, with how much\nmore or less it pays. Each `job_title` can be fed straight back into this endpoint."},"description":"The 5 related titles ZipRecruiter lists, each with its pay delta against the searched\ntitle. Every one can be fed straight back into `job_title`."},"ziprecruiter_total_listings":{"type":"integer","example":506,"nullable":true,"description":"How many open ZipRecruiter postings sit behind this page right now. A demand signal\nfor the title, separate from the estimate's sample size. `0` is a real answer."},"ziprecruiter_pay_frequencies":{"type":"object","nullable":true,"required":["year","month","week","hour"],"properties":{"hour":{"type":"object","nullable":true,"required":["salary_period","average_salary","national_average_salary","median_salary","p10_salary","p25_salary","p75_salary","p90_salary","average_salary_delta"],"properties":{"p10_salary":{"type":"number","example":56000,"nullable":true,"description":"10th percentile."},"p25_salary":{"type":"number","example":65500,"nullable":true,"description":"25th percentile. ZipRecruiter names it \"average low\"; it equals the JSON-LD\n`percentile25` on every page measured, so it is published as what it is."},"p75_salary":{"type":"number","example":104000,"nullable":true,"description":"75th percentile. ZipRecruiter names it \"average high\"; it equals the JSON-LD\n`percentile75` on every page measured."},"p90_salary":{"type":"number","example":131000,"nullable":true,"description":"90th percentile."},"median_salary":{"type":"number","example":82000,"nullable":true,"description":"The real median for this frequency, read from the page's own data layer."},"salary_period":{"enum":["HOUR","WEEK","MONTH","YEAR"],"type":"string","example":"YEAR","description":"The period these figures are expressed in. ZipRecruiter publishes hourly, weekly,\nmonthly and annual figures, and those four are the values that appear."},"average_salary":{"type":"number","example":87868,"nullable":true,"description":"The MEAN for this frequency. This is the number ZipRecruiter's JSON-LD mislabels as its\nmedian; it is published here under its real name."},"average_salary_delta":{"type":"number","example":38500,"nullable":true,"description":"ZipRecruiter's own published spread figure for this frequency."},"national_average_salary":{"type":"number","example":87868,"nullable":true,"description":"The national mean for this title and frequency. Equal to `average_salary` on a national\nrequest; the national benchmark to compare against on a state request."}},"description":"One pay frequency, with the full distribution ZipRecruiter publishes for it. `null` when\nZipRecruiter carries no figure for that frequency. Every page measured carried all four."},"week":{"type":"object","nullable":true,"required":["salary_period","average_salary","national_average_salary","median_salary","p10_salary","p25_salary","p75_salary","p90_salary","average_salary_delta"],"properties":{"p10_salary":{"type":"number","example":56000,"nullable":true,"description":"10th percentile."},"p25_salary":{"type":"number","example":65500,"nullable":true,"description":"25th percentile. ZipRecruiter names it \"average low\"; it equals the JSON-LD\n`percentile25` on every page measured, so it is published as what it is."},"p75_salary":{"type":"number","example":104000,"nullable":true,"description":"75th percentile. ZipRecruiter names it \"average high\"; it equals the JSON-LD\n`percentile75` on every page measured."},"p90_salary":{"type":"number","example":131000,"nullable":true,"description":"90th percentile."},"median_salary":{"type":"number","example":82000,"nullable":true,"description":"The real median for this frequency, read from the page's own data layer."},"salary_period":{"enum":["HOUR","WEEK","MONTH","YEAR"],"type":"string","example":"YEAR","description":"The period these figures are expressed in. ZipRecruiter publishes hourly, weekly,\nmonthly and annual figures, and those four are the values that appear."},"average_salary":{"type":"number","example":87868,"nullable":true,"description":"The MEAN for this frequency. This is the number ZipRecruiter's JSON-LD mislabels as its\nmedian; it is published here under its real name."},"average_salary_delta":{"type":"number","example":38500,"nullable":true,"description":"ZipRecruiter's own published spread figure for this frequency."},"national_average_salary":{"type":"number","example":87868,"nullable":true,"description":"The national mean for this title and frequency. Equal to `average_salary` on a national\nrequest; the national benchmark to compare against on a state request."}},"description":"One pay frequency, with the full distribution ZipRecruiter publishes for it. `null` when\nZipRecruiter carries no figure for that frequency. Every page measured carried all four."},"year":{"type":"object","nullable":true,"required":["salary_period","average_salary","national_average_salary","median_salary","p10_salary","p25_salary","p75_salary","p90_salary","average_salary_delta"],"properties":{"p10_salary":{"type":"number","example":56000,"nullable":true,"description":"10th percentile."},"p25_salary":{"type":"number","example":65500,"nullable":true,"description":"25th percentile. ZipRecruiter names it \"average low\"; it equals the JSON-LD\n`percentile25` on every page measured, so it is published as what it is."},"p75_salary":{"type":"number","example":104000,"nullable":true,"description":"75th percentile. ZipRecruiter names it \"average high\"; it equals the JSON-LD\n`percentile75` on every page measured."},"p90_salary":{"type":"number","example":131000,"nullable":true,"description":"90th percentile."},"median_salary":{"type":"number","example":82000,"nullable":true,"description":"The real median for this frequency, read from the page's own data layer."},"salary_period":{"enum":["HOUR","WEEK","MONTH","YEAR"],"type":"string","example":"YEAR","description":"The period these figures are expressed in. ZipRecruiter publishes hourly, weekly,\nmonthly and annual figures, and those four are the values that appear."},"average_salary":{"type":"number","example":87868,"nullable":true,"description":"The MEAN for this frequency. This is the number ZipRecruiter's JSON-LD mislabels as its\nmedian; it is published here under its real name."},"average_salary_delta":{"type":"number","example":38500,"nullable":true,"description":"ZipRecruiter's own published spread figure for this frequency."},"national_average_salary":{"type":"number","example":87868,"nullable":true,"description":"The national mean for this title and frequency. Equal to `average_salary` on a national\nrequest; the national benchmark to compare against on a state request."}},"description":"One pay frequency, with the full distribution ZipRecruiter publishes for it. `null` when\nZipRecruiter carries no figure for that frequency. Every page measured carried all four."},"month":{"type":"object","nullable":true,"required":["salary_period","average_salary","national_average_salary","median_salary","p10_salary","p25_salary","p75_salary","p90_salary","average_salary_delta"],"properties":{"p10_salary":{"type":"number","example":56000,"nullable":true,"description":"10th percentile."},"p25_salary":{"type":"number","example":65500,"nullable":true,"description":"25th percentile. ZipRecruiter names it \"average low\"; it equals the JSON-LD\n`percentile25` on every page measured, so it is published as what it is."},"p75_salary":{"type":"number","example":104000,"nullable":true,"description":"75th percentile. ZipRecruiter names it \"average high\"; it equals the JSON-LD\n`percentile75` on every page measured."},"p90_salary":{"type":"number","example":131000,"nullable":true,"description":"90th percentile."},"median_salary":{"type":"number","example":82000,"nullable":true,"description":"The real median for this frequency, read from the page's own data layer."},"salary_period":{"enum":["HOUR","WEEK","MONTH","YEAR"],"type":"string","example":"YEAR","description":"The period these figures are expressed in. ZipRecruiter publishes hourly, weekly,\nmonthly and annual figures, and those four are the values that appear."},"average_salary":{"type":"number","example":87868,"nullable":true,"description":"The MEAN for this frequency. This is the number ZipRecruiter's JSON-LD mislabels as its\nmedian; it is published here under its real name."},"average_salary_delta":{"type":"number","example":38500,"nullable":true,"description":"ZipRecruiter's own published spread figure for this frequency."},"national_average_salary":{"type":"number","example":87868,"nullable":true,"description":"The national mean for this title and frequency. Equal to `average_salary` on a national\nrequest; the national benchmark to compare against on a state request."}},"description":"One pay frequency, with the full distribution ZipRecruiter publishes for it. `null` when\nZipRecruiter carries no figure for that frequency. Every page measured carried all four."}},"description":"All four pay frequencies in one response, each with its own full distribution. Read\n`hour` for an hourly role without a second request and without dividing an annual\nfigure by an assumed number of hours."},"ziprecruiter_salary_histogram":{"type":"object","nullable":true,"required":["bucket_count","bucket_min_list","bucket_probability_list","buckets"],"properties":{"buckets":{"type":"array","items":{"type":"object","required":["min_salary","max_salary","probability"],"properties":{"max_salary":{"type":"number","example":76500,"nullable":true,"description":"Upper bound, exclusive. `null` on the last bucket, which is open-ended."},"min_salary":{"type":"number","example":64000,"nullable":true,"description":"Lower bound of the bucket, in annual currency units."},"probability":{"type":"number","example":0.196,"nullable":true,"description":"Share of postings in this bucket, as a fraction. The 11 probabilities sum to roughly\n1.0."}},"description":"One bucket of the salary distribution. Bucket `i` spans `[min_salary, max_salary)`; the top\nbucket is open-ended, so its `max_salary` is `null`."},"description":"The same data zipped into explicit bounded buckets, which is what most consumers want\nto chart."},"bucket_count":{"type":"integer","example":11,"description":"Number of buckets. `11` on every page measured."},"bucket_min_list":{"type":"array","items":{"type":"number","nullable":true},"example":[15500,27500,40000],"description":"The raw lower bounds, in order, as ZipRecruiter publishes them."},"bucket_probability_list":{"type":"array","items":{"type":"number","nullable":true},"example":[0.0069,0.0048,0.0464],"description":"The raw probabilities, in the same order as `bucket_min_list`."}},"description":"The 11-bucket annual salary distribution ZipRecruiter publishes for the title. A real\ndistribution: it shows where the mass actually sits. `null` on the rare page that carries\nno histogram."},"ziprecruiter_salaries_by_state":{"type":"array","items":{"type":"object","required":["state","annual_salary","monthly_pay","weekly_pay","hourly_wage","difference_from_average","difference_percent"],"properties":{"state":{"type":"string","example":"Washington","nullable":true,"description":"The state or province name, spelled out. Usable directly as this endpoint's `location`.\nTwo rows use a display spelling that differs from the URL name (`Newfoundland`,\n`Yukon Territory`); both are accepted as `location` values."},"weekly_pay":{"type":"number","example":1913,"nullable":true,"description":"The same figure expressed weekly."},"hourly_wage":{"type":"number","example":47.85,"nullable":true,"description":"The same figure expressed hourly."},"monthly_pay":{"type":"number","example":8293,"nullable":true,"description":"The same figure expressed monthly."},"annual_salary":{"type":"number","example":99519,"nullable":true,"description":"Average annual pay for the title in this state or province."},"difference_percent":{"type":"number","example":13.26,"nullable":true,"description":"`difference_from_average` as a percentage of the page's annual mean."},"difference_from_average":{"type":"number","example":11651,"nullable":true,"description":"This row's annual figure minus the page's own annual mean. Computed for every row,\nbecause ZipRecruiter publishes the delta for only 3 or 4 of them."}},"description":"One row of the state and province pay table: 59 to 64 rows covering the 50 US states, the\nDistrict of Columbia and the Canadian provinces and territories. National requests only;\nan empty array on a state request."},"description":"Pay for this title in every US state and Canadian province ZipRecruiter has figures\nfor, 59 to 64 rows. National requests only: an empty array on a state request."},"ziprecruiter_top_paying_cities":{"type":"array","items":{"type":"object","required":["city","annual_salary","monthly_pay","weekly_pay","hourly_wage","difference_from_average","difference_percent","state"],"properties":{"city":{"type":"string","example":"San Mateo County, CA","nullable":true,"description":"The city as ZipRecruiter names it, often including the state code. This endpoint's\n`location` takes a state, province or country name."},"state":{"type":"string","example":null,"nullable":true,"description":"The separate state column, which ZipRecruiter ships empty on both page types, so it is\n`null` on every row measured."},"weekly_pay":{"type":"number","example":2487,"nullable":true,"description":"The same figure expressed weekly."},"hourly_wage":{"type":"number","example":62.18,"nullable":true,"description":"The same figure expressed hourly."},"monthly_pay":{"type":"number","example":10778,"nullable":true,"description":"The same figure expressed monthly."},"annual_salary":{"type":"number","example":129338,"nullable":true,"description":"Average annual pay for the title in this city."},"difference_percent":{"type":"number","example":47.2,"nullable":true,"description":"`difference_from_average` as a percentage of the page's annual mean."},"difference_from_average":{"type":"number","example":41470,"nullable":true,"description":"This row's annual figure minus the page's own annual mean."}},"description":"One of the 10 top-paying cities for the title: cities across the country on a national\nrequest, cities within the state on a state request."},"description":"The 10 highest-paying cities for this title, across the country on a national request\nand within the state on a state request."},"ziprecruiter_job_title_searched":{"type":"string","example":"Registered Nurse","nullable":true,"description":"The page's own raw title, before ZipRecruiter's canonicalisation. `Registered Nurse`\nwhere `job_title` reads `RN`."},"ziprecruiter_location_granularity":{"enum":["NATIONAL","STATE"],"type":"string","example":"NATIONAL","nullable":true,"description":"Which page answered: `NATIONAL` or `STATE`. Read from the page's own scope field, so it\nis the ground truth for what `location` describes."},"ziprecruiter_preferred_pay_period":{"enum":["HOUR","WEEK","MONTH","YEAR"],"type":"string","example":"HOUR","nullable":true,"description":"The frequency ZipRecruiter itself leads the page with: `HOUR` on 6 of 11 titles\nmeasured. An editorial signal about the role; `salary_period` stays annual so titles\nremain comparable."},"ziprecruiter_national_average_salary":{"type":"number","example":87868,"nullable":true,"description":"The national annual mean for this title. Equal to `ziprecruiter_average_salary` on a\nnational request; the benchmark a state figure is above or below on a state request."},"ziprecruiter_salaries_updated_at_text":{"type":"string","example":"September 12 2026","nullable":true,"description":"The refresh date exactly as ZipRecruiter prints it. The parsed form is\n`salaries_updated_at`."}},"description":"A salary distribution for one job title and one scope. The 18 house `/estimated-salary`\ncontract keys come first, in contract order, followed by 18 `ziprecruiter_*` extras, for 36\nkeys in total. Every key is always present, `null` or `[]` where ZipRecruiter has no value,\nso a consumer gets the same set of keys on every row. The `fields` projection narrows it,\nreturning exactly the keys asked for plus `job_title` and `location`."},"description":"Exactly one salary row, in an array, matching the shape of every other\nendpoint on this API and the house `/estimated-salary` contract."},"status":{"enum":["OK"],"type":"string","description":"Always `OK` on a successful request."},"parameters":{"type":"object","required":["job_title","country"],"properties":{"fields":{"type":"string","example":"median_salary,salary_period","description":"The projection exactly as sent. Absent when not supplied."},"country":{"enum":["us","ca"],"type":"string","example":"us","description":"The resolved country market, lowercased."},"location":{"type":"string","example":"New York","description":"The location exactly as sent, trimmed. Absent when no location was supplied."},"job_title":{"type":"string","example":"Registered Nurse","description":"The job title exactly as sent, trimmed."}},"description":"Echo of the parameters as the caller sent them, before any internal transformation. Only\nthe parameters actually supplied are present, except `country`, which always carries its\nresolved default."},"request_id":{"type":"string","description":"Unique id for this request, useful when contacting support."}}},"example":null,"exampleRequest":null,"tags":[],"displayCostAmount":"unknown","displayCostAsset":"USD","priceDynamic":true,"priceHint":null,"priceStatus":"unprobed","priceSource":"registry","requiresHandshake":false,"reviewCount":0,"rating":{"score":"0.00","successRate":"0.00","reviews":0,"stars":null,"state":"unrated"},"availabilityStatus":"unknown","priceObserved":null,"sessionDeposit":null,"pricing":{"kind":"unknown","summary":"price unknown","primary":{"kind":"dynamic","protocol":"mpp","network":"tempo","amountUsd":null,"per":"call","confidence":"unknown"},"accepted":[{"kind":"dynamic","protocol":"mpp","network":"tempo","amountUsd":null,"per":"call","confidence":"unknown"}]},"paymentMethods":[{"uid":"pm_hya2fyl0HkpETxyH3aQGe","protocol":"mpp","methodType":"crypto","chain":"tempo","mode":"charge","costAmount":"unknown","costPer":"request","priority":0,"asset":null,"unit":"request","depositMicros":null,"planRef":null}],"brandName":"agents.openwebninja.com","brandSlug":"agents-openwebninja-com-x402","brandBaseUrl":"https://agents.openwebninja.com","brandDocsUrl":null,"whatItDoes":"Returns ZipRecruiter's real-time pay distribution (min, median, max, p25, p75, histogram) for a job title nationally or by US state/Canadian province","exampleAgentPrompt":"What does a Registered Nurse make in California — give me the real median, the p25 and p75, and the full salary histogram from ZipRecruiter?","exampleUseCases":[{"title":"Job offer negotiation research","prompt":"I just got a job offer as a Data Scientist in New York — what's the real median salary, p25, and p75 for that role in New York state according to ZipRecruiter so I know if the offer is fair?"},{"title":"Nationwide compensation benchmarking","prompt":"What does a Software Engineer make nationally in the US? Give me the median, min, max, and the salary histogram from ZipRecruiter."},{"title":"Canadian provincial salary lookup","prompt":"How much does a Registered Nurse make in Ontario, Canada according to ZipRecruiter? I need the median and the pay range."}],"resultDescription":"A single data row per request containing the full ZipRecruiter pay distribution for the requested job title and location: annual min, median, and max salary (with true median parsed from the page data layer, not the mislabeled JSON-LD mean), p25 and p75 percentiles, an 11-bucket salary histogram, average salary, national average for comparison, pay frequency breakdowns, top paying cities, related job titles, total job listings count, spread level, and metadata including when the data was last updated.","failureModes":["404 returned if ZipRecruiter does not publish a salary page for the requested job title","400 returned if a two-letter state code or city name is passed instead of the full state/province name","400 returned if an unknown field name is passed in the fields projection parameter","404 returned if an unsupported country code is used (only 'us' and 'ca' are valid)","Response may reflect stale ZipRecruiter page data if ZipRecruiter has not recently updated their salary pages"],"whenToPreferThis":"Choose this endpoint when you need ZipRecruiter-sourced salary data with a true statistical median (not a mislabeled mean), p25/p75 percentiles, and an 11-bucket salary histogram — data points that no other ZipRecruiter scraper provides. Prefer this over generic salary APIs when you need auditable figures (the JSON-LD mean is included alongside the true median for comparison), or when you need the full pay distribution rather than just a single point estimate. Best suited for US national, US state-level, or Canadian province-level salary lookups by job title.","instructions":null,"reviewSummary":null,"reviewSummaryHighlights":null,"reviewSummaryConcerns":null,"reviewSummaryGeneratedAt":null,"activationCount":0,"lastUsedAt":null,"lastSuccessfullyRanAt":null,"lastHealthCheckAt":"2026-10-14T00:37:00.235Z","isFirstParty":false,"canonicalSlug":"agents-openwebninja-com-ziprecruiter-estimated-salary-0eeed7f8"}