NY APIstatejobs.ny.gov ↗
Retrieve full New York State job postings from StateJobsNY by vacancy ID. Returns title, agency, salary range, work schedule, location, and contact data.
What is the NY API?
The StateJobsNY API exposes one endpoint, get_vacancy, that returns 20+ structured fields from a single New York State government job posting. Given a numeric vacancy ID, it delivers the complete public record: job title, posting agency, parsed salary min/max, appointment type, work schedule flags (including telecommuting and flextime), location, and agency contact details — all in one response.
curl -X GET 'https://api.parse.bot/scraper/b13a58ad-1b66-42e9-a8f5-9fe2a82cf90b/get_vacancy?vacancy_id=223334' \ -H 'X-API-Key: $PARSE_API_KEY'
Returns the complete public job posting for one StateJobsNY vacancy: title, agency, salary grade/range (with parsed numeric min/max), employment and appointment type, work schedule (workweek, hours, workday times, flextime, overtime, compressed workweek, telecommuting flags), work location, duties description, minimum qualifications, additional comments, application deadline (applications_due, MM/DD/YY as shown on the site), agency contact details and the 'Notes on Applying' application instructions. One round trip per call. Text fields preserve the posting's line breaks. A field the posting leaves blank is returned as null; yes/no flags are booleans. A vacancy ID the site reports as nonexistent (including expired/removed postings) returns a stale_input / input_not_found error.
| Param | Type | Description |
|---|---|---|
| vacancy_idrequired | string | Numeric StateJobsNY vacancy ID as shown in the posting's 'Vacancy ID' field and its URL (one shape: 223334). |
{
"type": "object",
"fields": {
"url": "string public URL of the posting",
"title": "string job title",
"agency": "string posting agency name",
"contact": "object with agency contact name, telephone, fax, email, street, city, state, zip_code (strings or null)",
"location": "object with county, street_address, city, state, zip_code (strings or null)",
"ny_helps": "boolean or null, whether the posting is part of the NY HELPS program",
"schedule": "object with workweek, hours_per_week, workday_from, workday_to (strings or null) and boolean-or-null flags flextime_allowed, mandatory_overtime, compressed_workweek_allowed, telecommuting_allowed",
"salary_max": "integer parsed upper salary bound, or null when not parseable",
"salary_min": "integer parsed lower salary bound, or null when not parseable",
"vacancy_id": "string vacancy identifier as shown on the posting",
"date_posted": "string date the posting was submitted, MM/DD/YY",
"salary_grade": "string salary grade",
"salary_period": "string pay period word from the range (e.g. Annually), or null",
"bargaining_unit": "string bargaining unit",
"employment_type": "string Full-Time / Part-Time text",
"applications_due": "string application deadline, MM/DD/YY",
"appointment_type": "string appointment type (Permanent, Temporary, Provisional...)",
"notes_on_applying": "string application instructions, or null",
"salary_range_text": "string salary range exactly as posted",
"travel_percentage": "string travel percentage text",
"duties_description": "string duties text with line breaks, or null",
"additional_comments": "string additional comments text, or null",
"jurisdictional_class": "string jurisdictional class",
"occupational_category": "string occupational category",
"minimum_qualifications": "string minimum qualifications text with line breaks, or null"
},
"sample": {
"data": {
"url": "https://statejobs.ny.gov/public/vacancyDetailsView.cfm?id=223334",
"title": "Human Resources Specialist Trainee* OR Human Resources Specialist 1 (NY HELPS)",
"agency": "Public Service, Department of",
"contact": {
"fax": "518-473-9990",
"city": "Albany",
"name": "Human Resources Management - CD",
"email": "[email protected]",
"state": "NY",
"street": "3 Empire State Plaza",
"zip_code": "12223",
"telephone": null
},
"location": {
"city": "Albany",
"state": "NY",
"county": "Albany",
"zip_code": "12223",
"street_address": "3 Empire State Plaza"
},
"ny_helps": true,
"schedule": {
"workweek": "Mon-Fri",
"workday_to": "5 PM",
"workday_from": "9 AM",
"hours_per_week": "37.5",
"flextime_allowed": false,
"mandatory_overtime": false,
"telecommuting_allowed": true,
"compressed_workweek_allowed": true
},
"salary_max": 87034,
"salary_min": 59204,
"vacancy_id": "223334",
"date_posted": "09/08/26",
"salary_grade": "18",
"salary_period": "Annually",
"bargaining_unit": "M/C - Managerial/Confidential (Unrepresented)",
"employment_type": "Full-Time",
"applications_due": "09/21/26",
"appointment_type": "Permanent",
"notes_on_applying": "Please send a resume, cover letter, and proof of meeting the minimum qualifications to [email protected] or fax to Human Resources Management at (518)473-9990. Please reference \"Human Resources Specialist 1, NYHELPS posting 00089\" when applying.",
"salary_range_text": "From $59204 to $87034 Annually",
"travel_percentage": "5%",
"duties_description": "The Human Resources Specialist 1, Grade 18, will work in the Human Resources Management (HRM) Section of the Office of Administration (OA), and will perform duties that include but are not limited to:\n•\tPreparing or assisting in the preparation of requests related to examination planning...",
"additional_comments": "About the Department:\nThe New York State Department of Public Service (DPS or Department) works to: ensure safe, affordable, and reliable access to electric, gas, steam, water, and telecommunications services...",
"jurisdictional_class": "Competitive Class",
"occupational_category": "Administrative or General Management",
"minimum_qualifications": "General Public\nNon-Competitive (NY HELPS)**:\nFor appointment to a Human Resources Specialist Trainee 1, you must have four years of experience performing and supervising the performance of various human resources activities..."
},
"status": "success"
}
}About the NY API
What the API Returns
The get_vacancy endpoint accepts a single required parameter, vacancy_id — the numeric identifier shown in the posting's URL and "Vacancy ID" field (e.g., 223334). The response covers the full public record for that posting: title, agency, vacancy_id, and a url pointing to the canonical public page on statejobs.ny.gov.
Salary and Employment Details
Salary data is returned as both raw strings and parsed integers. salary_min and salary_max give numeric bounds directly usable in range comparisons without string parsing. The response also includes employment type, appointment type, and whether the posting is part of the NY HELPS program via the ny_helps boolean.
Schedule and Work Arrangement Flags
The schedule object captures workweek, hours_per_week, workday_from, and workday_to as strings, plus boolean-or-null flags for flextime_allowed, mandatory overtime, compressed workweek eligibility, and telecommuting availability. This makes it straightforward to filter postings by work arrangement without parsing free-text descriptions.
Location and Contact Objects
The location object provides county, street_address, city, state, and zip_code for the work site. The contact object returns the same address fields plus name, telephone, fax, and email for the hiring agency contact. Fields not present in a posting come back as null rather than being omitted.
The NY API is a managed, monitored endpoint for statejobs.ny.gov — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when statejobs.ny.gov changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official statejobs.ny.gov API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a job alert tool that monitors specific NY State agencies for new postings using vacancy ID ranges
- Filter NY State vacancies by telecommuting or flextime availability using the boolean schedule flags
- Compare salary grades across agencies by aggregating parsed
salary_minandsalary_maxintegers - Populate a career portal with structured NY HELPS program postings using the
ny_helpsflag - Map NY State job openings by county or city using the
locationobject fields - Display hiring agency contact information alongside postings without manual data entry using the
contactobject - Track appointment type and employment type distribution across New York State agencies
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does statejobs.ny.gov have an official developer API?+
What does `get_vacancy` return for salary fields when a posting lists a flat rate rather than a range?+
salary_min and salary_max may both be set to the same parsed integer, or one may be null if the salary string does not contain two distinct numeric bounds. Always check both fields rather than assuming a range is present.Can I search or list vacancies — for example, by agency or job title — rather than fetching one posting at a time?+
get_vacancy. There is no search or listing endpoint. You can fork this API on Parse and revise it to add a search or listing endpoint.