Buffalo Jobs Data
Job postings from 81 employers’ career sites in Buffalo and Western New York, read every day since August 10, 2026. Free to download and reuse.
Updated · 32 of 32 career sites read on the last run · 4,184 WNY postings so far
Today’s jobs
10 of 2,476 rows in jobs.csv: the newest job at each of the 10 employers with the most listed
| title | employer | city | pay |
|---|---|---|---|
| Rad Tech | Kaleida Health | Olean | $28.00–$38.02 an hour |
| Radiology Advanced Practice Provider | Catholic Health | Buffalo | $127,359–$191,049 a year |
| Director of Contact Center Customer Growth | M&T Bank | Williamsville | $128,900–$214,900 a year |
| Lead Infrastructure Engineer | Moog | Buffalo | $130,000–$170,000 a year |
| Senior Clinical Laboratory Technologist [RP-N] | Roswell Park Comprehensive Cancer Center | Buffalo | $73,755 a year |
| Manufacturing Team Member I- 1st shift | Integer Holdings (Greatbatch; Clarence/Alden) | Alden | $17.00 an hour |
| Warehouse Safety Supervisor | Tops Friendly Markets | Lancaster | $65,000–$70,000 a year |
| Food Service Worker | Wegmans Food Markets | West Seneca | $16.50–$17.00 an hour |
| Data & BI Senior Associate | KeyBank | Amherst | $80,000–$150,000 a year |
| Reservation Sales Agent, Buffalo Reservation Center, Remote | Delaware North / Patina Group | Buffalo | $16.50–$17.00 an hour |
What the data shows
91% of postings state the pay. That is 2,178 of the 2,387 WNY jobs listed today. New York has required pay ranges in job ads since 2023.
A posting stays up a median of 16 days from the day it appears on the employer’s site to the day it comes down, across 1,227 postings closed since August 10, 2026. Education postings stay up longest, at 30 days. Finance and insurance postings come down fastest, at 7.
| Sector | Median days listed | Closed postings |
|---|---|---|
| Education | 30 | 437 |
| Healthcare | 21 | 74 |
| Manufacturing | 16 | 211 |
| Technology | 15 | 94 |
| Retail, hospitality, and food | 13 | 54 |
| Finance and insurance | 7 | 353 |
67% of postings that mention a degree call it preferred or not required: 1,455 of 2,171. Some of these are our model’s reading of the posting, marked classified in the files.
5% are fully remote. Of 1,704 postings that state a work arrangement, 88 are remote and the rest are on-site or hybrid.
Columns
jobs.csv has one row per job listed today.
| id | Buffalo Projects job ID. Stays the same from day to day. |
|---|---|
| title | As the employer wrote it. |
| employer | The hiring employer. |
| scope | wny, or remote-us for fully remote jobs at WNY companies. Remote-us jobs are left out of WNY counts. |
| city | As posted. |
| region | State, as posted. |
| sector | The employer's sector. |
| work_mode | onsite, hybrid, remote, or unknown. |
| employment_type | full_time, part_time, seasonal, contract, and so on, or unknown. |
| seniority | intern, entry, mid, senior, lead, or executive. |
| seniority_basis | posting when the posting states it, classified when our model decided it. |
| degree | required, preferred, or not_required. |
| degree_basis | posting or classified, as for seniority. |
| pay_min | Lowest pay the posting states. Blank when it states none. |
| pay_max | Highest pay the posting states. |
| pay_period | hour, week, month, or year. |
| pay_currency | USD in nearly every row. |
| posted_at | The date the employer gives. |
| first_seen_at | When we first saw the posting. |
| deadline | Application deadline, when the posting gives one. |
| checked_at | When we last saw it on the employer's site. |
| source_organization | Whose career site we read it from. |
| application_url | The employer's application page. |
history.csv has one row each time a posting was listed. It has employer, title, sector, work_mode, seniority, degree, and the pay columns as above, plus these.
| job_key | Stable key for the posting across every snapshot. |
|---|---|
| source_id | The career site it was read from. |
| wny | false for remote jobs at WNY companies. |
| occupation_code | O*NET-SOC code our model assigned. Blank when it chose none. |
| occupation_title | The O*NET title for that code. |
| listed_at | When this listing went up. A posting relisted after removal has a second row. |
| removed_at | When it came down. Blank while it is still listed. |
| days_listed | removed_at minus listed_at, in days. Blank while listed, or when listed_when_source_first_read is true. |
| listed_when_source_first_read | true when the posting was already up the first time we read its source, so its real start is unknown. |
Notes and limits
- Each posting comes from the employer’s own hiring system (Workday, UKG, iCIMS and others), read every day. A posting leaves the data when the employer takes it down.
- These are the 81 employers we read, not every employer in the region. Large employers are easier to read completely, so they weigh more here than in the regional market.
- Pay is included only when the hiring system or the posting text states it. We do not estimate pay.
- The files hold the facts of each posting and a link to it. Full descriptions stay on the employer’s site.
- Durations leave out postings that were already up the first time we read their source, because their start date is unknown.
- Each week we compare a sample of postings with the employer’s site. In the latest check, 29 of 45 matched exactly. Accuracy log
- Employers who ask to be left out are removed from every file.
Full rules: methodology.
Occupation codes are O*NET-SOC. Includes information from the O*NET 31.0 Database by the U.S. Department of Labor, Employment and Training Administration (USDOL/ETA). Used under the CC BY 4.0 license. O*NET® is a trademark of USDOL/ETA. Buffalo Projects has modified all or some of this information. USDOL/ETA has not approved, endorsed, or tested these modifications.