{"uid":"cap_Rl0778HQBsoIl0XNcEwsJ","slug":"agents-openwebninja-com-ziprecruiter-job-search-55ec0f30","name":"ZipRecruiter Job Search","description":"Search ZipRecruiter job postings by keyword, with the filters ZipRecruiter honors\nserver-side: `location` with a kilometre `radius`, `date_posted`, `employment_types`,\n`experience_level`, `salary_min` / `salary_max`, `remote_jobs_only`, `zipapply_only` and\n`company_id`.\n\n**`include_details` defaults to `false`, and this is the single most important thing to\nunderstand about this endpoint.** A ZipRecruiter search card carries a roughly\n200-character teaser and nothing more. `job_description`, `job_highlights`,\n`employer_website`, `employer_reviews`, `job_onet_soc`, `ziprecruiter_description_html`,\n`ziprecruiter_job_industry`, `ziprecruiter_valid_through`, `ziprecruiter_ats_identifier`,\n`ziprecruiter_company_size`, `ziprecruiter_company_hq`, `ziprecruiter_company_industries`,\n`ziprecruiter_key_responsibilities` and `ziprecruiter_employer_faq` are all detail-only and\ncome back `null` on a plain search. Set `include_details=true` to fill them. The teaser is\nalways published separately as `ziprecruiter_short_description`, so a card-only response\nstill carries usable copy.\n\nFilling the details costs one extra upstream request per job, which is why it is opt-in.\nWith `include_details=true`, `num_pages` may be at most 5, which is 100 jobs; a larger\nvalue returns a 400 error.\n\n**Pagination** is 20 jobs per page. The ceiling is `ceil(total_results / 20)`, where\n`total_results` is ZipRecruiter's own count of matches, and the largest result set observed\nwas 946 jobs. Duplicates ZipRecruiter repeats across adjacent pages are removed, so a page\nmay yield fewer than 20 new jobs. The response is a flat array, so a call returning fewer\nthan `num_pages` x 20 jobs is how you know you have reached the end of the result set.\n\n**Scoping to one company** is what `company_id` is for, and the value is the\n`ziprecruiter_company_id` carried on every job. ZipRecruiter fails this filter OPEN in two\nways, both silent: a bad id returns the full unfiltered search, and a valid one\nintermittently drops the filter. Send `location` alongside `company_id`: that is what keeps\nthe drop rare. Measured on one id with five interleaved repeats per arm, the filter held\n5/5 with a location and 1/5 without, and the misses returned 6, 4 and 20 distinct\nemployers. So every returned card is checked against the requested id, a page that fails\nthe check is refetched, and an id that stays unscoped returns a 404 error.\n`total_results` is omitted for a company-scoped search: ZipRecruiter's count there swings\nfrom 1 to 540 across 20 identical calls. Note that roughly a third of postings carry the\nplaceholder id `zr_missing_company_default`, ZipRecruiter's marker for a posting whose\ncompany record is missing; it returns a 404 error here, so pick an id off a job whose\n`employer_name` is the company you want.\n\n**Sorting.** Results come back in ZipRecruiter's own relevance order. `sort_by`, `sort`,\n`order` and a `company` NAME each return a 400 error, because ZipRecruiter accepts and\nthen ignores them.\n\n**Billing:** `Requests` counts one per requested SERP page, plus one per detail page when\n`include_details=true`. Extra pages walked to refill a page after deduplication, and\nretries of a blocked page, are absorbed.","url":"https://agents.openwebninja.com/realtime-ziprecruiter-data/search?utm_source=zero.xyz","method":"GET","headers":{},"bodySchema":{"type":"object","required":["query"],"properties":{"page":{"type":"integer","default":1,"maximum":50,"minimum":1,"description":"1-based page of results to start from. ZipRecruiter returns 20 jobs per page. The real\nceiling is `ceil(total_results / 20)`, and the largest result set observed was 946\njobs.\n\n**Allowed values:** `1-50`\n\n**Default:** `1`"},"query":{"type":"string","example":"software engineer","description":"Free-text job search query, for example `software engineer` or `registered nurse`.\nExactly one `query` is accepted; a second one returns a 400 error."},"fields":{"type":"string","description":"Comma-separated projection over the job object, for example\n`job_title,employer_name,job_apply_link`. `job_id` and `job_title` are always included.\nAn unknown field name returns a 400 error."},"radius":{"type":"integer","minimum":1,"description":"Search radius around `location`, in KILOMETRES, converted to the miles ZipRecruiter\nexpects. Any positive integer is accepted. Requires `location`. ZipRecruiter's own\ndefault is 25 miles."},"country":{"enum":["us","ca"],"type":"string","default":"us","description":"Country market to search. Only `us` and `ca` are served.\n\n**Allowed values:** `us`, `ca`\n\n**Default:** `us`"},"location":{"type":"string","description":"Free-text location, for example `New York, NY` or `Toronto, ON`. This is what drives\ngeography on ZipRecruiter. Omit it to search the whole country."},"num_pages":{"type":"integer","default":1,"maximum":20,"minimum":1,"description":"Number of consecutive pages to fetch starting at `page`. Each page is 20 jobs.\nDuplicate listings ZipRecruiter repeats across pages are removed, so a page may yield\nfewer than 20 new jobs.\n\n**Allowed values:** `1-20`\n\n**Default:** `1`"},"company_id":{"type":"string","description":"Return only jobs from one company, identified by the `ziprecruiter_company_id` carried\non a previous `/search` result. Send `location` too: ZipRecruiter applies this filter\nfar more reliably with one. Every card is verified, and an unknown id returns a 404\nerror."},"salary_max":{"type":"integer","minimum":0,"description":"Maximum ANNUAL salary in whole dollars, for example `150000`. Must be greater than or\nequal to `salary_min`."},"salary_min":{"type":"integer","minimum":0,"description":"Minimum ANNUAL salary in whole dollars, for example `80000`. When set, ZipRecruiter\nlimits results to jobs that state a salary."},"date_posted":{"enum":["all","today","3days","week","month"],"type":"string","default":"all","description":"Only return jobs posted within this window. Applied by ZipRecruiter server-side, and\neach window maps exactly onto 1, 3, 7 and 30 days.\n\n**Allowed values:** `all`, `today`, `3days`, `week`, `month`\n\n**Default:** `all`"},"zipapply_only":{"type":"boolean","default":false,"description":"Set to `true` to return only jobs that support ZipApply, ZipRecruiter's one-click\napply. Applied by ZipRecruiter.\n\n**Default:** `false`"},"include_details":{"type":"boolean","default":false,"description":"Set to `true` to fetch each job's full description and detail-only fields. Costs one\nextra request per job, so it is much slower and is billed accordingly. Caps `num_pages`\nat 5.\n\n**Default:** `false`"},"employment_types":{"type":"string","description":"Comma-separated employment types to include, for example `FULLTIME,CONTRACTOR`. Values\nare OR-ed: a job matching any of them is returned. Applied by ZipRecruiter.\n\n**Allowed values:** `FULLTIME`, `PARTTIME`, `CONTRACTOR`, `TEMPORARY`,\n`CONTRACT_TO_HIRE`, `AS_NEEDED`, `OTHER`"},"experience_level":{"enum":["no_experience","junior","mid","senior"],"type":"string","description":"Only return jobs at this experience level. A single value; a comma-separated list is\nrejected, because ZipRecruiter's behaviour for multiple levels is unverified. Applied\nby ZipRecruiter.\n\n**Allowed values:** `no_experience`, `junior`, `mid`, `senior`"},"remote_jobs_only":{"type":"boolean","default":false,"description":"Set to `true` to return only remote jobs. Applied by ZipRecruiter server-side, so\nrecall is ZipRecruiter's own remote classification.\n\n**Default:** `false`"}}},"responseSchema":{"type":"object","required":["status","request_id","parameters","data"],"properties":{"data":{"type":"array","items":{"type":"object","required":["job_id","job_title","employer_name","employer_logo","employer_website","job_publisher","job_employment_type","job_employment_types","job_apply_link","job_apply_is_direct","apply_options","job_description","job_is_remote","job_posted_at","job_posted_at_timestamp","job_posted_at_datetime_utc","job_location","job_city","job_state","job_country","job_latitude","job_longitude","job_benefits","job_benefits_strings","job_google_link","job_salary","job_salary_string","job_min_salary","job_max_salary","job_salary_period","job_highlights","job_onet_soc","job_onet_job_zone","employer_reviews","job_uid","ziprecruiter_listing_key","ziprecruiter_short_description","ziprecruiter_description_html","ziprecruiter_share_url","ziprecruiter_canonical_job_url","ziprecruiter_updated_at","ziprecruiter_is_new","ziprecruiter_apply_type","ziprecruiter_apply_host","ziprecruiter_salary_source","ziprecruiter_salary_is_estimated","ziprecruiter_location_type","ziprecruiter_location_county","ziprecruiter_location_postal_code","ziprecruiter_location_id","ziprecruiter_company_id","ziprecruiter_company_slug","ziprecruiter_company_size","ziprecruiter_company_hq","ziprecruiter_company_industries","ziprecruiter_job_industry","ziprecruiter_valid_through","ziprecruiter_ats_identifier","ziprecruiter_key_responsibilities","ziprecruiter_employer_faq"],"properties":{"job_id":{"type":"string","example":"emlwcmVjcnVpdGVyOjkzNjIxNWNiNTAzZDhiZTI","description":"Stable, opaque id for this posting. Pass it straight back to `/job-details`. Encodes\nZipRecruiter's own seat id, so it survives re-fetches and is the same on every surface."},"job_uid":{"type":"string","example":"936215cb503d8be2","description":"ZipRecruiter's own raw seat id, 16 hex characters. Stable across surfaces and\nre-fetches, accepted directly by `/job-details`, and the right key for an enrichment\ncache."},"job_city":{"type":"string","example":"Manhattan","nullable":true,"description":"City. `null` on a state-level or remote-only listing."},"job_state":{"type":"string","example":"New York","nullable":true,"description":"The full state or province NAME, matching JSearch. The two-letter code appears inside\n`job_location`."},"job_title":{"type":"string","example":"Senior AI Engineer (AI Foundations)","nullable":true,"description":"The job title as ZipRecruiter publishes it. 100% fill."},"job_salary":{"type":"number","example":155750,"nullable":true,"description":"The headline salary figure: the midpoint when the posting states a range, the single\nbound otherwise, in the period given by `job_salary_period`. 69% fill. Populated only\nwhen ZipRecruiter itself displays the pay."},"job_country":{"type":"string","example":"US","nullable":true,"description":"Uppercase ISO 3166-1 alpha-2 country code. `US` or `CA` on this source."},"job_benefits":{"type":"array","items":{"enum":["medical","dental","vision","life_insurance","paid_time_off","retirement"],"type":"string"},"example":["medical","dental","vision","paid_time_off","retirement"],"nullable":true,"description":"Normalised benefit tags ZipRecruiter states on the posting. 44% fill; `null` when none\nare stated."},"job_latitude":{"type":"number","format":"float","example":null,"nullable":true,"description":"Always `null`. ZipRecruiter publishes coordinates on neither the card, the detail\npayload nor the JSON-LD."},"job_location":{"type":"string","example":"Manhattan, NY","nullable":true,"description":"The location as ZipRecruiter displays it on the posting. 100% fill."},"job_onet_soc":{"type":"string","example":"15-1132.00","nullable":true,"description":"The O*NET-SOC occupation code ZipRecruiter states, with the human title removed.\nDetail surface only, and capped at 73% because it comes from JSON-LD, which\nZipRecruiter ships on 73% of detail pages."},"apply_options":{"type":"array","items":{"type":"object","required":["publisher","apply_link","is_direct"],"properties":{"is_direct":{"type":"boolean","example":false,"description":"Always `false`. The destination is ZipRecruiter itself or an ad network relay."},"publisher":{"type":"string","example":"ZipRecruiter","description":"Always `ZipRecruiter`; every row on this surface is a ZipRecruiter listing."},"apply_link":{"type":"string","format":"uri","example":"https://www.ziprecruiter.com/c/Capital-One/Job/Senior-AI-Engineer-(AI-Foundations)/-in-Manhattan,NY?jid=936215cb503d8be2","description":"The canonical ZipRecruiter posting URL, identical to `job_apply_link`."}},"description":"One way to apply to this job. ZipRecruiter exposes exactly one, its own posting page, so\nthis array has either one entry or none."},"description":"Ways to apply. ZipRecruiter exposes exactly one, its own posting page, so this is a\none-entry array, or empty on the rare job with no resolvable URL."},"employer_logo":{"type":"string","format":"uri","example":"https://www.ziprecruiter.com/svc/fotomat/public-nosensitive-ziprecruiter-logos/company/60122984.png","nullable":true,"description":"The employer's logo. 69% fill from ZipRecruiter itself; the remainder is lifted from\nthe employer's own domain where one is known."},"employer_name":{"type":"string","example":"Capital One","nullable":true,"description":"The hiring company's name. 100% fill."},"job_is_remote":{"type":"boolean","example":false,"nullable":true,"description":"Whether the job can be done remotely. A real tri-state here: ZipRecruiter states a\nworkplace type on 100% of postings, so `false` is a supported answer.\nFully remote and remote-optional map to `true`; hybrid and in-person map to `false`."},"job_longitude":{"type":"number","format":"float","example":null,"nullable":true,"description":"Always `null`, for the same reason as `job_latitude`."},"job_posted_at":{"type":"string","example":"4 days ago","nullable":true,"description":"Relative publication age, for example `4 days ago` or `1 month ago`. Derived from\nZipRecruiter's own posted-at stamp. Its JSON-LD `datePosted` is a reindex stamp and\ndisagrees with reality on 58% of postings."},"job_publisher":{"enum":["ZipRecruiter"],"type":"string","example":"ZipRecruiter","description":"Always `ZipRecruiter`. Constant by construction on this source."},"job_apply_link":{"type":"string","format":"uri","example":"https://www.ziprecruiter.com/c/Capital-One/Job/Senior-AI-Engineer-(AI-Foundations)/-in-Manhattan,NY?jid=936215cb503d8be2","nullable":true,"description":"The canonical ZipRecruiter posting URL, with tracking parameters stripped. 100% fill,\nstable, and a page a human can apply from."},"job_highlights":{"type":"object","example":{"Qualifications":["At least 3 years of experience programming with Python, Go, Scala, or Java"],"Responsibilities":["Design, develop, test, deploy, and support AI software components."]},"description":"Description bullets grouped by section, keyed `Qualifications`, `Responsibilities` and\n`Benefits`. Recovered from the posting's own headed lists, plus ZipRecruiter's extracted\nkey responsibilities where it provides them. Detail surface only, 72% fill; `{}` when\nnothing was recovered, so it is always safe to enumerate. Only headings that map to one\nof the three sections are kept.","additionalProperties":{"type":"array","items":{"type":"string"}}},"job_max_salary":{"type":"number","example":177100,"nullable":true,"description":"Upper bound of the stated range, in the `job_salary_period` unit. 69% fill."},"job_min_salary":{"type":"number","example":134400,"nullable":true,"description":"Lower bound of the stated range, in the `job_salary_period` unit. 69% fill."},"job_description":{"type":"string","example":"Senior AI Engineer (AI Foundations)\n\nOverview:\n\nAt Capital One, we are creating responsible and reliable AI systems, changing banking for good.","nullable":true,"description":"The full posting text, HTML stripped to plain text with paragraph breaks preserved.\n**Detail surface only, and this is the field callers most often expect for free:** it\nis `null` on a `/search` response unless `include_details=true`, because a ZipRecruiter\nsearch card carries only a roughly 200-character teaser, published separately as\n`ziprecruiter_short_description`. 100% fill on the detail surface."},"job_google_link":{"type":"string","format":"uri","example":null,"nullable":true,"description":"Always `null`. This link is a Google for Jobs construction built around a Google docid,\nwhich ZipRecruiter does not issue."},"employer_reviews":{"type":"array","items":{"type":"object","required":["publisher","employer_name","score","num_stars","review_count","max_score","reviews_link"],"properties":{"score":{"type":"number","example":7.76,"description":"The rating, on the `max_score` scale, rounded to 2 decimals."},"max_score":{"type":"integer","example":10,"description":"The top of the scale. `10` for Breakroom."},"num_stars":{"type":"integer","example":8,"description":"`score` rounded to the nearest whole number, on the same scale as `max_score`."},"publisher":{"type":"string","example":"Breakroom","description":"Who published the rating. `Breakroom` on every sample measured."},"review_count":{"type":"integer","example":148,"nullable":true,"description":"How many responses the rating is based on."},"reviews_link":{"type":"string","format":"uri","example":"https://breakroom.cc/companies/capital-one","nullable":true,"description":"The Breakroom company page the rating comes from."},"employer_name":{"type":"string","example":"Capital One","nullable":true,"description":"The employer the rating is about, as the rating source names it."}},"description":"One employer rating, published by Breakroom. Note the scale: `max_score` is 10, and the\nscore is carried on that scale unchanged."},"nullable":true,"description":"Employer ratings published by Breakroom. Detail surface only, 14% fill; `null` when\nZipRecruiter shows no rating. Note the scale is 1 to 10, carried on the row as\n`max_score`."},"employer_website":{"type":"string","format":"uri","example":"https://capitalone.com","nullable":true,"description":"The employer's own website, from ZipRecruiter's company widget. Detail surface only,\n54% fill."},"job_onet_job_zone":{"type":"string","example":null,"nullable":true,"description":"Always `null`. The O*NET job zone is a Google enrichment; ZipRecruiter states the SOC\ncode only."},"job_salary_period":{"enum":["HOUR","DAY","WEEK","MONTH","YEAR",null],"type":"string","example":"YEAR","nullable":true,"description":"The period the salary figures are expressed in. 69% fill."},"job_salary_string":{"type":"string","example":"$134K - $177K/yr","nullable":true,"description":"ZipRecruiter's own salary text, verbatim, exactly as shown on the page. 69% fill."},"job_apply_is_direct":{"type":"boolean","example":false,"description":"Always `false`. A ZipApply job is applied to on ZipRecruiter, and an external job goes\nthrough a redirect whose destination is an ad network relay more often than an employer\nATS. See `ziprecruiter_apply_type` for the apply signal."},"job_employment_type":{"enum":["FULLTIME","CONTRACTOR","PARTTIME","INTERN","TEMPORARY","OTHER",null],"type":"string","example":"FULLTIME","nullable":true,"description":"The first entry of `job_employment_types`, for JSearch compatibility. `null` when\nZipRecruiter states no employment type. `INTERN` appears here as a reported value:\nZipRecruiter labels internships on the posting, while its search offers an\n`employment_types` filter without one."},"ziprecruiter_is_new":{"type":"boolean","example":null,"nullable":true,"description":"ZipRecruiter's own \"new\" badge on a search card. Search surface only, and `null` when\nthe payload carries no badge."},"job_benefits_strings":{"type":"array","items":{"type":"string"},"example":["Medical","Dental","Vision","Life","Retirement","PTO"],"nullable":true,"description":"ZipRecruiter's own benefit labels, split out of its single comma-joined display string.\nSame 44% fill as `job_benefits`; `null` when none are stated."},"job_employment_types":{"type":"array","items":{"enum":["FULLTIME","CONTRACTOR","PARTTIME","INTERN","TEMPORARY","OTHER"],"type":"string"},"example":["FULLTIME"],"description":"Every employment type stated on the posting, in JSearch's documented order so two\nidentically tagged jobs always serialise the same way. An empty array when\nZipRecruiter states none. `INTERN` is a reported value here; ZipRecruiter's search\noffers an `employment_types` filter without one."},"ziprecruiter_share_url":{"type":"string","format":"uri","example":"https://www.ziprecruiter.com/job-redirect/share?match_token=CqABChZubDRwVEpHZHBvb2lIeGYxVXE1WFJ3","nullable":true,"description":"ZipRecruiter's own short share link for the posting."},"job_posted_at_timestamp":{"type":"integer","example":1788992809,"nullable":true,"description":"Unix timestamp in seconds of the publication date. 100% fill."},"ziprecruiter_apply_host":{"type":"string","example":"dsp.prng.co","nullable":true,"description":"The hostname behind ZipRecruiter's external apply redirect, decoded. Provenance only:\nit is frequently an ad network relay. Use `job_apply_link` to apply."},"ziprecruiter_apply_type":{"enum":["OPEN_APPLY_FLOW","OPEN_EXTERNAL",null],"type":"string","example":"OPEN_EXTERNAL","nullable":true,"description":"How applying works. `OPEN_APPLY_FLOW` is ZipApply, applied on ZipRecruiter itself;\n`OPEN_EXTERNAL` leaves for a third-party destination. This is the apply signal to read."},"ziprecruiter_company_hq":{"type":"string","example":"McLean, VA, US","nullable":true,"description":"The company's headquarters location from ZipRecruiter's company widget. Detail surface\nonly, 54% fill."},"ziprecruiter_company_id":{"type":"string","example":"LvOba8F2oEpGlw2IxG/RnmjRZMM=","nullable":true,"description":"ZipRecruiter's internal company identifier, an opaque base64 blob, stringified like\nevery other id in this response."},"ziprecruiter_updated_at":{"type":"string","example":"2026-09-14T04:20:33.688364560Z","nullable":true,"description":"When ZipRecruiter last refreshed the listing, distinct from the publication date. Search\nsurface only: `null` on `/job-details`. Nanosecond precision, as ZipRecruiter publishes\nit."},"ziprecruiter_listing_key":{"type":"string","example":"nl4pTJGdpooiHxf1Uq5XRw","nullable":true,"description":"ZipRecruiter's internal listing key. Useful for diffing payloads, but NOT an identity:\nthe same job can carry different keys on different surfaces. Use `job_id` or `job_uid`."},"ziprecruiter_location_id":{"type":"string","example":"0a070499-f1f0-42d9-940e-76c39915e34a","nullable":true,"description":"ZipRecruiter's internal identifier for the location."},"ziprecruiter_company_size":{"type":"string","example":"10000+ Employees","nullable":true,"description":"Employee headcount band from ZipRecruiter's company widget, for example\n`1001 - 5000 Employees`. Detail surface only, 54% fill."},"ziprecruiter_company_slug":{"type":"string","example":"capital one","nullable":true,"description":"ZipRecruiter's canonical display name for the company. A display label only: scope a\nsearch to this employer with `ziprecruiter_company_id`."},"ziprecruiter_employer_faq":{"type":"array","items":{"type":"object","required":["question","answer"],"properties":{"answer":{"type":"string","example":"Key technical skills include expertise in programming languages such as Java, Python, or C++.","nullable":true,"description":"The answer, verbatim. May contain inline HTML where ZipRecruiter published it."},"question":{"type":"string","example":"What skills or qualities help someone succeed as a Senior Software Engineer?","nullable":true,"description":"The question, verbatim."}},"description":"One generated FAQ entry. ZipRecruiter writes these about the ROLE, so most answers\ndescribe the occupation; a few are Breakroom survey findings about the employer."},"nullable":true,"description":"ZipRecruiter's generated FAQ for the posting. Detail surface only. Despite the contract\nname, most entries are about the ROLE; some are Breakroom survey findings about the\nemployer."},"ziprecruiter_job_industry":{"type":"string","example":"Technology","nullable":true,"description":"The industry ZipRecruiter assigns to this JOB. From JSON-LD, so detail surface only and\ncapped at 73%."},"job_posted_at_datetime_utc":{"type":"string","format":"date-time","example":"2026-09-09T22:26:49.000Z","nullable":true,"description":"ISO 8601 UTC form of `job_posted_at_timestamp`."},"ziprecruiter_location_type":{"enum":["LOCATION_TYPE_NAME_IN_PERSON","LOCATION_TYPE_NAME_REMOTE","LOCATION_TYPE_NAME_REMOTE_OPTIONAL","LOCATION_TYPE_NAME_HYBRID",null],"type":"string","example":"LOCATION_TYPE_NAME_IN_PERSON","nullable":true,"description":"ZipRecruiter's own workplace-type enum, passed through verbatim. 100% fill, and the\nsource `job_is_remote` is derived from."},"ziprecruiter_salary_source":{"enum":["SOURCE_PROVIDED","SOURCE_PARSED","SOURCE_PREDICTED","SOURCE_MISSING",null],"type":"string","example":"SOURCE_PREDICTED","nullable":true,"description":"Where ZipRecruiter's pay figure came from. Always published, even when the salary\nfields are `null`, so a caller can see WHY a job has no salary: `SOURCE_MISSING` means\nthe employer stated no pay and ZipRecruiter modelled and then hid a figure, which this\nAPI suppresses."},"ziprecruiter_valid_through":{"type":"string","example":"2026-10-14","nullable":true,"description":"The date the posting expires, as ZipRecruiter states it in JSON-LD. Detail surface\nonly, capped at 73%."},"ziprecruiter_ats_identifier":{"type":"string","example":"R1000242","nullable":true,"description":"The employer's own requisition reference, from the posting's JSON-LD identifier. Detail\nsurface only, and present on 40 of the 43 measured pages that carry JSON-LD at all."},"ziprecruiter_location_county":{"type":"string","example":"New York","nullable":true,"description":"County or equivalent administrative area for the job location."},"ziprecruiter_description_html":{"type":"string","example":"Senior AI Engineer (AI Foundations)<p></p><p><b>Overview:</b></p><p>At Capital One, we are creating responsible ...</p>","nullable":true,"description":"The job description with ZipRecruiter's original HTML markup preserved, for callers who\nwant the formatting. Detail surface only, 100% fill there."},"ziprecruiter_canonical_job_url":{"type":"string","format":"uri","example":"https://www.ziprecruiter.com/c/Capital-One/Job/Senior-AI-Engineer-(AI-Foundations)/-in-Manhattan,NY?jid=936215cb503d8be2","nullable":true,"description":"The canonical ZipRecruiter posting URL. Identical to `job_apply_link`, exposed under\nits own name so the ZipRecruiter extras stand on their own."},"ziprecruiter_short_description":{"type":"string","example":"Senior AI Engineer (AI Foundations) Overview: At Capital One, we are creating responsible and reliable AI systems, changing banking for good.","nullable":true,"description":"The roughly 200-character teaser a ZipRecruiter search card carries. Card surface\nonly: always `null` on `/job-details`, where the full `job_description` is present\ninstead. Passed through verbatim, so unlike `job_description` it can carry\nZipRecruiter's own `<b>` search-highlight markup and undecoded HTML entities; strip or\ndecode it before display."},"ziprecruiter_company_industries":{"type":"array","items":{"type":"string"},"example":["Funds, Trusts and Financial Programs","Real Estate"],"nullable":true,"description":"Industries ZipRecruiter assigns to the COMPANY, distinct from the job's own industry.\nDetail surface only; `null` when the widget lists none."},"ziprecruiter_salary_is_estimated":{"type":"boolean","example":true,"nullable":true,"description":"Whether ZipRecruiter labels the displayed pay as an estimate. `null` when there is no\ndisplayed pay to label."},"ziprecruiter_key_responsibilities":{"type":"array","items":{"type":"string"},"example":null,"nullable":true,"description":"ZipRecruiter's machine-extracted responsibility summaries, rewritten from the posting.\nDetail surface only, present on roughly a third of detail pages; also merged into\n`job_highlights.Responsibilities`."},"ziprecruiter_location_postal_code":{"type":"string","example":"10012","nullable":true,"description":"Postal or ZIP code, as a string so leading zeros survive."}},"description":"A ZipRecruiter job posting. A superset of the 35-key JSearch `/search` contract, whose keys\ncome first in contract order, followed by 25 `ziprecruiter_*` extras, for 60 keys in total.\nEvery key is always present, `null` / `[]` / `{}` where ZipRecruiter has no value, so a\nconsumer gets the same set of keys on every job. The `fields` projection narrows it,\nreturning exactly the keys asked for plus `job_id` and `job_title`.\n\nFields marked \"detail surface only\" are `null` on a `/search` response unless\n`include_details=true`, and are filled on `/job-details`."},"description":"Matching jobs, deduplicated, in ZipRecruiter's own relevance order for the\nrequested window."},"status":{"enum":["OK"],"type":"string"},"parameters":{"type":"object","required":["query","page","num_pages","country","date_posted","remote_jobs_only","zipapply_only","include_details"],"properties":{"page":{"type":"integer","example":1,"description":"The first page fetched."},"query":{"type":"string","example":"software engineer","description":"The search query, trimmed."},"fields":{"type":"string","example":"job_title,employer_name","description":"The projection exactly as sent. Absent when not supplied."},"radius":{"type":"integer","example":40,"description":"The radius in KILOMETRES as sent, before conversion to miles."},"country":{"enum":["us","ca"],"type":"string","example":"us","description":"The resolved country market, lowercased."},"location":{"type":"string","example":"New York, NY","description":"The location as sent, trimmed. Absent when no location was supplied."},"num_pages":{"type":"integer","example":1,"description":"How many consecutive pages were requested."},"company_id":{"type":"string","example":"veWDjg7imzXye0FSbif3ZyRHsGc=","description":"The company id exactly as sent, trimmed. Absent when not supplied."},"salary_max":{"type":"integer","example":150000,"description":"The maximum annual salary as an integer. Absent when not supplied."},"salary_min":{"type":"integer","example":80000,"description":"The minimum annual salary as an integer. Absent when not supplied."},"date_posted":{"enum":["all","today","3days","week","month"],"type":"string","example":"all","description":"The resolved date window, lowercased."},"zipapply_only":{"example":false,"description":"The boolean `false` when the parameter was not supplied, otherwise the raw string\nexactly as the caller sent it."},"include_details":{"example":"true","description":"The boolean `false` when the parameter was not supplied, otherwise the raw string\nexactly as the caller sent it."},"employment_types":{"type":"string","example":"FULLTIME,CONTRACTOR","description":"The employment type list exactly as sent. Absent when not supplied."},"experience_level":{"type":"string","example":"senior","description":"The experience level exactly as sent. Absent when not supplied."},"remote_jobs_only":{"example":false,"description":"The boolean `false` when the parameter was not supplied, otherwise the raw string\nexactly as the caller sent it."}},"description":"Echo of the parameters as the caller sent them, before any internal transformation.\n`date_posted` is echoed as its resolved default `all`, and `radius` is echoed in\nkilometres, the unit the caller sends. Only the parameters\nactually supplied are present, except the four that always carry their resolved default.\n`remote_jobs_only`, `zipapply_only` and `include_details` echo the boolean `false` when the\ncaller omitted them and the caller's raw string when the caller supplied them."},"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_fWfNfI6RvyGVBbngAMjj4","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":"Search ZipRecruiter job postings by keyword with server-side filters for location, salary, employment type, experience level, and more, with optional full job detail enrichment.","exampleAgentPrompt":"Search ZipRecruiter for full-time senior software engineer jobs in Austin, TX within 40 km, posted in the last 7 days, paying at least $120k a year — and include the full job descriptions so I can see responsibilities and requirements.","exampleUseCases":[{"title":"Remote developer job hunt","prompt":"Find me remote software developer jobs on ZipRecruiter in the US — full-time only, posted in the last 3 days, paying at least $100k. Include full details like job description and key responsibilities."},{"title":"Local healthcare job search","prompt":"Search ZipRecruiter for registered nurse jobs in Chicago, IL within 30 km, with a minimum salary of $70k. Show me the first page of results with just the basic info for now."},{"title":"Company-specific job listings","prompt":"Pull all open jobs from ZipRecruiter for the company with ID 'abc123', located in San Francisco — I want the full details including employer FAQ and company size for each listing."}],"resultDescription":"Returns a paginated array of job postings from ZipRecruiter. Each result includes job ID, title, employer name, location, employment type, salary info, apply link, and a short teaser description. When include_details=true, also returns full job description, highlights, employer website, employer reviews, company size, company HQ, key responsibilities, valid through date, ATS identifier, and employer FAQ. Also includes total_results count and request metadata.","failureModes":["Missing required 'query' parameter returns 400 error","Providing two 'query' parameters returns 400 error","num_pages > 5 when include_details=true returns 400 error","Unknown field name in 'fields' projection returns 400 error","page value outside 1-50 returns 400 error","Invalid country code (not 'us' or 'ca') returns 400 error","company_id filter without location may yield poor results due to ZipRecruiter server-side behavior","Detail fields (job_description, highlights, etc.) return null when include_details is not set to true"],"whenToPreferThis":"Use this endpoint when you need to search ZipRecruiter job postings specifically, with ZipRecruiter's native filters (salary range, experience level, employment type, remote-only, ZipApply-only, company-specific). Prefer this over generic job search endpoints when you need ZipRecruiter-specific metadata such as ziprecruiter_company_id, ziprecruiter_apply_type, or ZipRecruiter canonical URLs. It is especially useful when the user wants to paginate through large result sets (up to 946 jobs) or needs full job details including employer FAQ and key responsibilities via include_details=true.","instructions":null,"reviewSummary":null,"reviewSummaryHighlights":null,"reviewSummaryConcerns":null,"reviewSummaryGeneratedAt":null,"activationCount":0,"lastUsedAt":null,"lastSuccessfullyRanAt":null,"lastHealthCheckAt":"2026-10-14T00:35:47.615Z","isFirstParty":false,"canonicalSlug":"agents-openwebninja-com-ziprecruiter-job-search-55ec0f30"}