NYC civil service lists by the numbers, 2026 edition: certifications, credits and how long lists last
- Published
- Last updated
- Last checked against sources
By DutyRank. Independent; not affiliated with DCAS, MTA or NYS UCS. What changed
In this snapshot, 234 of 426 eligible citywide lists established since January 15, 2021 with a recorded certification had an almost-whole first block (54.9%). The measure counts referrals for consideration, not hires. It uses current open-competitive lists with at least 10 entries and the source window explained below.[D1][D2]
Data as of · Frozen .
View the current report · Download CSV tables
- 54.9% almost-whole first blocks. The first recorded block covers at least 97% of the current list’s entries for 234 of 426 open-competitive lists established since January 15, 2021.[D1][D2]
- 40.3% marked for provisional replacement. That is 7,518 of 18,635 distinct certification issues since January 1, 2020, not a count of workers replaced.[D2]
- 2.4% with veterans’ credit. The open-competitive snapshot contains 8,721 credited entries out of 359,037; a person can appear on more than one list.[D1]
- 1,473 exact four-year anniversaries. This is out of 1,494 established list groups; 229 groups have an extension date.[D1]
- A Police Officer coverage gap since . This is the latest certification date recorded for that title in this dataset, although NYPD reports later hiring.[D2][2]
“Almost whole” means a first recorded block covering at least 97% of the current Active entries. It does not mean the whole list was interviewed, hired or still available. Of 481 lists meeting the citywide filters, 426 have a matching recorded block; the percentage excludes the others.[D1][D2]
In this snapshot, smaller lists more often meet that definition: 67.4% in the smallest class, compared with 26.7% in the largest (n = 15 lists).[D1][D2]
Same-day blocks. On the first certification day, 68 of the 426 lists had more than one block. This edition takes the block with the lowest issue number. Taking the largest block of that day instead gives 245 of 426 (57.5%), and the 100–499 class moves from 52.1% to 56.9%. Under both rules, the share falls as lists get larger.[D1][D2]
| Current size | Lists with a block | Almost whole | Share |
|---|---|---|---|
| 10–99 | 135 | 91 | 67.4% |
| 100–499 | 188 | 98 | 52.1% |
| 500–1,999 | 88 | 41 | 46.6% |
| 2,000+ | 15 | 4 | 26.7% |
Five title lines, with their own cohort
For the five own-title-code groups below, 57 of 59 lists meet the threshold. This comparison uses earlier certification coverage and excludes the shared Public Safety Exam code. The live tracker can attribute that shared list separately to Traffic Enforcement and School Safety, so its summed title–list denominator is different.[D1][D2]
| Title | With a block | Almost whole |
|---|---|---|
| Traffic Enforcement Agent | 15 | 15 |
| School Safety Agent | 11 | 11 |
| Correction Officer | 13 | 13 |
| Police Communications Technician | 13 | 12 |
| Environmental Police Officer | 7 | 6 |
Use the eligible-list guide to understand certification. These group comparisons cannot show how close an individual candidate is to appointment.
The provisional-replacement flag is “Yes” on 7,518 issues, “No” on 11,056, and missing on 61. The flagged share is 40.3%. An issue can involve several lists and many candidates; this is not the number of provisional employees removed or permanent appointments made.[D2]
A provisional appointment fills a competitive position when an appropriate list is unavailable. A later list creates a separate appointment process.[1]
Under Civil Service Law §65(3), a provisional appointment generally must end within 2 months after an appropriate list is established. An authorized waiver for disruption of essential services can extend that period to 4 months; §65(4) separately addresses inadequate or exhausted lists. The primer’s “up to 4 months” summary should therefore not be read as the ordinary deadline in every case.[4][1]
| Replacement flag | Issues |
|---|---|
| Yes | 7,518 |
| No | 11,056 |
| Not supplied | 61 |
These are credits already recorded in the snapshot, not an eligibility calculator. Receiving residency credit on one exam does not establish a right to it on another. The visible examples below describe list entries, not unique residents or veterans.[D1]
Residency credit
The published concentrations are in the titles below. Smaller cells and the exact citywide residency total are withheld so subtraction cannot reveal a suppressed group.[D1]
| Title | List entries | With credit | Share |
|---|---|---|---|
| Sanitation Worker | 31,309 | 27,092 | 86.5% |
| Firefighter | 20,687 | 14,777 | 71.4% |
| Police Officer | 40,323 | 26,890 | 66.7% |
Veterans’ credit
The citywide total combines non-disabled and disabled-veteran categories. The table shows the 6 highest shares among titles with at least 500 list entries and sufficiently large credited and noncredited groups; the download contains the other publishable title aggregates.[D1]
| Title | List entries | With credit | Share |
|---|---|---|---|
| Environmental Police Officer | 1,943 | 139 | 7.2% |
| Firefighter | 20,687 | 1,437 | 7.0% |
| Police Officer | 40,323 | 1,982 | 4.9% |
| Oiler | 1,397 | 68 | 4.9% |
| Deputy City Sheriff | 2,692 | 128 | 4.8% |
| Correction Officer | 11,777 | 492 | 4.2% |
The snapshot includes 1,582 list groups, of which 1,494 have an establishment date. Exactly 1,473 have an anniversary four calendar years later. This comparison uses calendar dates, including leap years, rather than rounding a number of days.[D1]
| Recorded feature | List groups | How to read it |
|---|---|---|
| An extension date | 229 | Anniversary alone is not enough to identify a list’s end date. |
| Published, no establishment date | 88 | The fields distinguish publication from establishment; a missing field is not a promised future action. |
| No publication date | 1,263 | The first-block calculation uses establishment as its fallback cutoff. |
A record in Active does not prove that its candidate remains available or that the list can legally be used today. The data does not supply a termination flag. Read how list duration and extensions work.[D1][1]
The chart counts distinct issue numbers in each event year. The 2026 bar stops at this snapshot and must not be compared as a full year with the preceding bars. A larger count means more recorded certification issues, not necessarily more hiring.[D2]
The chart starts in 2017. The source also holds 1 issue dated 2007 and 246 issues dated 2016, plus 1 without a date. These are outside the chart: the earlier years are not full-year coverage.[D2]
| Year | Issues | Coverage |
|---|---|---|
| 2017 | 2,380 | Full-year interval; source coverage may vary |
| 2018 | 2,933 | Full-year interval; source coverage may vary |
| 2019 | 2,894 | Full-year interval; source coverage may vary |
| 2020 | 1,170 | Full-year interval; source coverage may vary |
| 2021 | 2,185 | Full-year interval; source coverage may vary |
| 2022 | 3,454 | Full-year interval; source coverage may vary |
| 2023 | 3,476 | Full-year interval; source coverage may vary |
| 2024 | 3,589 | Full-year interval; source coverage may vary |
| 2025 | 2,453 | Full-year interval; source coverage may vary |
| 2026 | 2,308 | Through (YTD) |
The latest recorded Police Officer certification is . The source cannot establish why later certifications are missing, and the gap does not establish that NYPD stopped hiring.[D2]
NYPD’s later City Council testimony reports 2,041 hires in 2022, 2,356 hires in 2023 and 2,631 hires in 2024. Those figures come from a different reporting source and are not inferred from certification rows.[2]
- Who was hired. A certification is a referral for consideration. Repeated appearances are not repeated hires.
- How many people are still waiting. Active retains entries that may be off-side; one person can appear on several lists.
- The pass rate. These data do not supply all test takers as a denominator.
- Your appointment date or chance. No personal list-number inclusion, certification depth or forecast is published.
- Time from test to list. These datasets do not supply the necessary test date for each list.
DCAS publishes other reports with different measures, including appointments and removals. This report describes the two Open Data datasets and does not claim that those other outcomes are unreported. See the official reporting links in Sources.[3]
Retrieved from to . Each dataset’s update timestamp was unchanged between the checks before and after retrieval. This freezes one observed state; it does not guarantee the publisher will retain that state.
- [D1] Civil Service List (Active) ·
vx8i-nprf - Source rows updated . Dataset metadata.
- [D2] Civil Service List Certification ·
a9md-ynri - Source rows updated . Dataset metadata.
Which lists and which first block?
Current open-competitive lists established on or after 2021-01-15, with at least 10 entries; certifications queried from 2021-01-01. Current open-competitive lists under own codes 71651, 60817, 70410, 71012 and 70811, each with at least 10 entries; certifications since 2018. Shared code 33333 is excluded.
The calculation calls the same firstCertification function as the eligible-list tracker. It selects the earliest matching block on or after publication, or establishment when publication is missing. Same-day ties use issue number, agency and title. Within each block, distinct list numbers are counted; the share of current Active entries is capped at 100%.[D1][D2]
Exam numbers are normalized to four digits and joined with title codes. List numbers can be fractional, so the list’s size is a row count, not its highest number. Old certifications before the list cutoff are excluded.
Same-day ties matter for 68 of 426 lists. Under this edition’s rule (lowest issue number first), 234 of 426 lists are almost whole (54.9%). Taking the largest block of the first day instead gives 245 (57.5%). The sensitivity was computed on from this edition’s own cached inputs, whose fingerprints match the query receipts below.[D1][D2]
Data-quality flags
- Special Officer exam 5324. It has 921 entries, published , with no establishment date. The shared Public Safety Exam list 5325 (code 33333) has the same number of entries and was established the same day. It may be the same list under a second title code; the source does not say. Exam 5324 is counted in the Active totals and in the Special Officer row of
credits-by-title.csv. It is outside the first-certification cohort, which needs an establishment date.[D1] group_no. The data dictionary describes it as the list’s certification order.[5] In the Active dataset it is “000” on 404,404 entries in 439 title codes; “001” on 2,453 entries in 5 title codes. This report does not use the field: entries in a non-“000” group count toward the same list as the rest of that exam.[D1]- Police Officer
request_date. In 3 of 12 Police Officer certification issues with a request date (21,610 of 145,343 rows), the recorded request date is later than the certification date. This report does not use request dates.[D2]
These flags come from aggregate queries run on against the same source updates as this edition.
Active entries and title codes by group_no, citywide.
SHA-256 of the validated rows, re-serialized as indented JSON (not the raw HTTP response): d67f64c4312a5acd4951bddc24d9375a4726c423ce9919508203b6d65c05cd3c
Police Officer certification rows and issues whose request_date is later than cert_date.
SHA-256 of the validated rows, re-serialized as indented JSON (not the raw HTTP response): 00aaaf0fc49190207dcba42a0f077b3f40a5508c3bc8d4af26ef8ad32183b524
Police Officer certification rows and issues with any request_date.
SHA-256 of the validated rows, re-serialized as indented JSON (not the raw HTTP response): aaa0b43f395b2b2f2d931c9c4dc8cc49201553b16796e30018b421544bc98103
Biases and privacy
- Current Active lists are a surviving snapshot, not every list ever created.
- The first block is the first recorded in the queried source window, not a guarantee of complete historical coverage.
- Current list size can differ from its size when a historical block was issued.
- List entries are not unique people, unappointed candidates or hires.
- Certification issues are not appointments and can include several lists.
- No score distributions, individual list-number observations, per-list partial shares or waiting-time forecasts are published.
- Anniversary and extension fields do not prove a list’s current legal status.
- Rows without a year and the partial 2016 coverage are excluded from the annual chart, which begins in 2017.
Credits combine veteran categories and publish only titles with at least 500 entries and at least 10 credit and 10 noncredit entries. An additional veteran title is withheld if subtracting published rows from the citywide veteran total would reveal a group smaller than 10. No exact citywide residency total or suppressed residual is published; raw aggregate caches stay outside public artifacts.
Provisional counts group by issue number and reject conflicting flags. A published credit group must have at least 10 credited and 10 noncredited entries. The raw intermediate caches are not part of the public downloads.
Exact aggregate queries
These links reproduce the query definitions against the live source. Their results may differ after a refresh; use the frozen CSVs for this edition’s values.
Current list groups and their sizes; no candidate-level columns.
Retrieved ; completed .
SHA-256 of the validated rows, re-serialized as indented JSON (not the raw HTTP response): 0b3d174dd82f5fe463ae2d786261ad51003404db128c71b0c9bdbf8c7ba6a978
Certification blocks since 2021, counting distinct list numbers within each block.
Retrieved ; completed .
SHA-256 of the validated rows, re-serialized as indented JSON (not the raw HTTP response): 63a3628de844b816e3ae341cdbf4d3c2b00a1f5d1a8be2d04357b9380dba3fc6
Earlier coverage for the five own-title-code comparison; shared Public Safety Exam code 33333 is excluded.
Retrieved ; completed .
SHA-256 of the validated rows, re-serialized as indented JSON (not the raw HTTP response): 07349e3c872610b88f2b47aa28106ac7ab8b8a553f91ace96ec0698d6353999b
Residency-credit categories aggregated by open-competitive title; small cells are withheld from publication.
Retrieved ; completed .
SHA-256 of the validated rows, re-serialized as indented JSON (not the raw HTTP response): df6e327664f8d622c93f7a93df5a091d4a78ab8124acbe73022f1983e84b646c
Veteran and disabled-veteran credit categories, combined before publication.
Retrieved ; completed .
SHA-256 of the validated rows, re-serialized as indented JSON (not the raw HTTP response): 4de5c69115798933a306009c7f96d9f960db60dc52c10dfe6c1bb6466ec9fc25
One aggregate per certification issue, checking whether replacement flags conflict.
Retrieved ; completed .
SHA-256 of the validated rows, re-serialized as indented JSON (not the raw HTTP response): c973b3e9793261cd0f4cb4a56698ebb72459de051148ecc5e8673940fb9b9466
Distinct certification issues by event year; charts begin in 2017 and mark the snapshot year as partial.
Retrieved ; completed .
SHA-256 of the validated rows, re-serialized as indented JSON (not the raw HTTP response): eb9e5b8f6b0e5884e9f90dbc17b52bb815ad6ffca092c73ae698565d00be5940
Police Officer certification coverage across all available event dates.
Retrieved ; completed .
SHA-256 of the validated rows, re-serialized as indented JSON (not the raw HTTP response): 0b2fdc62d980a6111696072bda69fa9f4f2f904aea1f1d3a1b0b11a32c36be25
Counts of lists, list entries and certification issues are different units. Each file below defines its columns and source calculation.
whole-list-by-size.csv
| Column / type | Definition | Source or calculation |
|---|---|---|
size_bandstring | Current list-size class, in Active entries. | Active: count(*) |
eligible_listsinteger | Current eligible list groups in this cohort; each contains at least 10 entries. | Active: grouped count(*) and cohort filters |
certified_listsinteger | Eligible groups with a matching recorded certification on or after publication, or on or after establishment if publication is absent. | Active joined to Certification by title code and padded exam number |
almost_whole_listsinteger | Groups whose chronologically first matching block contains at least 97% of current Active entries. | Canonical firstCertification; distinct list_no within each block |
almost_whole_percentdecimal | 100 × almost_whole_lists ÷ certified_lists, rounded to two decimal places; blank if no observations. | DutyRank calculation |
whole-list-five-titles.csv
| Column / type | Definition | Source or calculation |
|---|---|---|
title_codestring | DCAS title code; shared Public Safety Exam code 33333 is excluded. | Active.list_title_code |
title_namestring | Title description from the source. | Active.list_title_desc |
eligible_listsinteger | Current eligible list groups in this cohort; each contains at least 10 entries. | Active: grouped count(*) and cohort filters |
certified_listsinteger | Eligible groups with a matching recorded certification on or after publication, or on or after establishment if publication is absent. | Active joined to Certification by title code and padded exam number |
almost_whole_listsinteger | Groups whose chronologically first matching block contains at least 97% of current Active entries. | Canonical firstCertification; distinct list_no within each block |
almost_whole_percentdecimal | 100 × almost_whole_lists ÷ certified_lists, rounded to two decimal places; blank if no observations. | DutyRank calculation |
provisional-certifications.csv
| Column / type | Definition | Source or calculation |
|---|---|---|
replacement_flagstring | Y, N or unknown; conflicting flags stop publication. | Certification.provisional_replacement |
certification_issuesinteger | Distinct certification issue numbers with this flag since 2020-01-01. | Certification: count(distinct cert_issue_no) |
share_percentdecimal | Percentage of all distinct issues in the period, including unknown flags. | DutyRank calculation |
credits-by-title.csv
| Column / type | Definition | Source or calculation |
|---|---|---|
credit_typestring | residency or veterans; veterans combines ordinary and disabled-veteran credit. | Active.residency_credit / veteran_credit |
title_codestring | DCAS title code; only titles with at least 500 entries and both credit/noncredit groups of at least 10 are included. | Active.list_title_code |
title_namestring | Title description from the source. | Active.list_title_desc |
list_entriesinteger | Entries on current open-competitive lists for the title, not unique people or people waiting. | Active: count(*) |
credit_entriesinteger | Entries carrying a nonempty value for this credit category. | Active: count(*) grouped by credit field |
credit_percentdecimal | 100 × credit_entries ÷ list_entries, rounded to two decimals. | DutyRank calculation |
lifecycle.csv
| Column / type | Definition | Source or calculation |
|---|---|---|
metricstring | Named inventory metric; all counts are current-source groups or entries. | Active grouped inventory |
countinteger | Observed count for the metric, not a legal-status determination. | Active: count(*) / grouped dates |
denominatorinteger | Comparison total; blank when no denominator is needed. | DutyRank calculation |
unitstring | list_groups, list_entries or title_codes. | DutyRank definition |
| Metric | Definition |
|---|---|
current_list_groups | List groups in the Active snapshot. A group is one combination of title code, exam number, list type and the four list-date fields. |
current_list_entries | Entries (rows) across all current list groups. One person can hold entries on several lists. |
current_title_codes | Distinct title codes with at least one current list group. |
open_competitive_list_groups | List groups whose list type is open competitive; the denominator is all current list groups. |
open_competitive_list_entries | Entries on open-competitive list groups; the denominator is all current entries. |
established_list_groups | List groups with an establishment date; the denominator is all current list groups. |
exact_four_year_anniversary | Established groups whose anniversary date is exactly four calendar years after establishment; the denominator is established groups that have an anniversary date. |
recorded_extension_date | List groups with any extension date recorded; the denominator is all current list groups. |
published_without_establishment | List groups with a publication date and no establishment date; the denominator is all current list groups. |
missing_publication_date | List groups without a publication date; the denominator is all current list groups. |
certifications-by-year.csv
| Column / type | Definition | Source or calculation |
|---|---|---|
yearinteger | Calendar year of the certification event. | date_extract_y(Certification.cert_date) |
certification_issuesinteger | Distinct issue numbers recorded in this year; not people or appointments. | Certification: count(distinct cert_issue_no) |
title_codesinteger | Distinct title codes with recorded certification events in the year. | Certification: count(distinct list_title_code) |
first_recorded_eventdate | Earliest cert_date recorded in the year; not the dataset refresh date. | min(Certification.cert_date) |
last_recorded_eventdate | Latest cert_date recorded in the year; not a promise of complete coverage. | max(Certification.cert_date) |
partial_yearboolean | true when the snapshot falls before the end of this calendar year. | Snapshot date compared with December 31 |
These UTF-8 CSVs contain aggregates only. Cite the permanent edition and state the snapshot date when reusing a figure.
- Almost-whole first certification by list size (CSV)
4 data rows ·
whole-list-by-size.csvFile fingerprint
8b14a64565c5fd26a7760a661154fb91fdc3368172621fed08785453dab1e4b7 - Almost-whole first certification for five own title codes (CSV)
5 data rows ·
whole-list-five-titles.csvFile fingerprint
130d61c9b540030480cee8e215cbf0d711dc8155922953d1ddb63b2c3a8431a5 - Provisional replacement flags since 2020 (CSV)
3 data rows ·
provisional-certifications.csvFile fingerprint
f6e69ed945ccd0890f7bc6cf718e29eafc2daa02d12b349c2654966071fef7c5 - Recorded credits on selected open-competitive titles (CSV)
80 data rows ·
credits-by-title.csvFile fingerprint
612df9a96905f3dc1a894c4d1c22472e607d532c80bb67af22ca10017f08ad31 - List inventory and recorded lifecycle dates (CSV)
10 data rows ·
lifecycle.csvFile fingerprint
bdd1f2247de3a0448c2fdcf109fd0a5be640cc5ffe88f68a3b217954fe1d3990 - Certification issues by recorded event year (CSV)
10 data rows ·
certifications-by-year.csvFile fingerprint
18393b688a0d30bb296a51a7b2032df426fe834e65a79df3f54982f96cbcf696
Each note links to the original publisher. Page and rule references help you find the evidence. Archive details identify the exact copy checked; archived documents are not republished here.
- DCAS Civil Service Primer, August 29, 2024 · Wayback snapshot
PDF pages 7, 15–21 and 28–29: provisional appointments; list publication, certification and call letters; off-side status.
Back to articleArchived copy and fingerprint
Archived copy on file, retrieved .
SHA-256 of the archived PDF, as downloaded:
8a403f84ca8574331cd7769aef3095d3a452ce122eaf8c202bfd97d9a3d06230 - NYC Council hearing transcript, NYPD, May 29, 2025
Page 25: Commissioner Tisch’s figures for hires in 2022, 2023 and 2024.
Back to articleArchived copy and fingerprint
Archived copy on file, retrieved .
SHA-256 of the archived PDF, as downloaded:
9307da9981af3bd80585f4523e7d0c824ed77b6aee940f2f12ddde3c5304d11a - DCAS Local Law 50 annual report for 2025 — cover letter
pp. 1–2: established lists and disposition actions; p. 3: removal actions
Back to articleArchived copy and fingerprint
Archived copy on file, retrieved .
SHA-256 of the archived PDF, as downloaded:
2b032c6f1dc5e4c219ec933858a18d89bb072a74cd44cfde4911d0532c0de2f6 - New York Civil Service Law §65 — provisional appointments
§65(3): ordinary two-month limit and authorized waiver up to four months; §65(4): inadequate or exhausted lists.
Back to articleArchived copy and fingerprint
Archived copy on file, retrieved .
SHA-256 of the archived text transcript:
83ea925a39c0de24c27de92f96aabd56dd24429db008f087b3d083a7eda98ea4 - DCAS Civil Service List (Active): data dictionary
Adjusted Final Average definition and credit-field labels.
Back to articleArchived copy and fingerprint
Archived copy on file, retrieved .
SHA-256 of the archived text capture:
48f7b3e3e82d80b7a30ad12e06e57d437ae0d5a5b55b05ab86bee9e67bb8659f
Other official reporting: the DCAS Local Law 50 report for 2025 covers appointments, removals and provisional actions. Its period and population differ from this snapshot.
DutyRank. “NYC civil service lists by the numbers, 2026 edition: certifications, credits and how long lists last.” Updated 2026-10-19. https://dutyrank.com/data/nyc-civil-service-lists/2026
Contact DutyRank at [email protected] with the figure, CSV name or source query you are checking. This analysis publishes aggregates only, never names. DutyRank is independent of DCAS and the hiring agencies.
This is the first frozen 2026 edition, dated . The current-report URL points to this edition’s figures. A future snapshot will be identified separately; a correction to this edition will describe the affected figures, reason and date here.
Revisions
No published figure or CSV changed. Added an addendum computed from this edition’s own inputs: the same-day-block sensitivity, the certification years outside the chart and three data-quality flags. Corrected the documentation: the CSV dictionary now says “on or after” publication, as the calculation does; query fingerprints are described as hashes of re-serialized rows; the Dataset’s temporal coverage is an interval; findings state their cohort and period; an unverified link and an unsourced sentence were removed.
Gave the frozen edition its own title; added an addendum from the edition’s own inputs (same-day-block sensitivity, years outside the chart, data-quality flags); corrected documentation. No published figure or CSV changed.
Published the first frozen 2026 edition with aggregate tables, CSV fingerprints and the source snapshot’s retrieval record.