Blog by Sumana Harihareswara, Changeset founder

27 Sep 2026, 22:00 p.m.

Legistar Trek, Or, Exploring New York City Legislation

The other day I was walking with a friend who'd just been to a meeting with me and who's just recently started getting involved in local New York City political advocacy. During that meeting, I'd said something like, "I just looked up bill #[whatever] in Legistar and it only has 5 sponsors. But we're worried about it passing?"

He asked what Legistar is. I pulled up the website on my phone and explained, and I figured it might be nice to improve and share that explanation here too, along with tips for common things policy advocates want to do. As I was writing it, I learned more about the civic tech tools that NYC bike policy advocate and developer Jehiah Czebotar has built that can sometimes help you avoid having to use Legistar, so I'll talk about those too.

  1. What is Legistar?
  2. Specific bills
  3. Searching bills
  4. Committee, hearing, and meeting calendars
  5. Keeping up via RSS feeds or email alerts
    1. Noticing when Councilmembers start(ed) or stop(ped) cosponsoring bills
  6. Scorecards: who's voting for or against a set of bills?
  7. Nonexistent features, bugs, and things I wish Legistar did
  8. How it feels to explain this
  9. Footnotes

What is Legistar?

The company Granicus sells this piece of software called Legistar. I'll quote Baltimore's explanation:

Legistar is a web‑based platform that allows the Council to:
• Draft, track, and manage legislation (ordinances, resolutions, and other legislative documents) from introduction through adoption. Every bill is assigned a unique Legistar number. It is linked to its full text, staff reports, committee referrals, amendments, and voting history
• Publish agendas, minutes, and hearing schedules in real-time. Committees and full‑Council meetings post their forthcoming agendas so that public members can review background materials and submit testimony ahead of public hearings.
• Provide transparency and public access. Residents, journalists, and stakeholders can search by keyword, sponsor, date, or Legistar number to follow any legislation. This open‑data approach helps ensure accountability and enables civic engagement by making it easy to see who sponsored a bill, what amendments were proposed, and how each Councilmember voted.

In New York City, the City Council uses Legistar to manage all its legislation. Staffers use Legistar to upload and update bills, schedule committee meetings, and so on. Several other cities use Legistar too, but in New York City, if someone talks about "looking it up on Legistar," they mean our New York City-specific Legistar website (technically called our "Legislative Research Center" but I always hear people just call it Legistar).

So Legistar is where we can look up stuff about bills past and present, Councilmembers past and present, committees, hearings, and stuff like that. It's got a really annoying, unintuitive user interface, but over the years I've learned more about how to navigate it.*

You can browse all the public Legistar stuff without being logged in, but if you create a free login, you can subscribe to email alerts; more on that later.

There are other websites, like Czebotar's intro.nyc, that can make it easier to do the most common tasks, like looking up the most essential information about a specific bill (number, one-sentence summary, one-paragraph summary, status, who sponsored it, who voted for it, etc.).** But those other websites all draw from Legistar data, because that's the system the Council internally uses to manage its processes, and they usually end up redirecting/pointing you to the Legistar web interface if you need certain details or files. So it's good to learn how to navigate it.

Specific bills

Let's say you're researching a bill in progress, and you already know its bill number -- for example, bill 0078-2026, one of the 13 priority bills in the new legislative agenda that the Council's progressive caucus just published last month.

Each bill has its own page at a URL like https://legistar.council.nyc.gov/LegislationDetail.aspx?ID=7861511&GUID=05BA3489-38FD-436D-9B55-B35A46A6CD96, with LegislationDetail.aspx after the domain.

A screenshot of the Legistar view for bill Int 0078-2026, with several key areas highlighted.

A screenshot of Legistar's page for Int 0078-2026, with red circles around the file number, name, event history, bill text tab, and Alerts.

Some key metadata is more prominent, such as the bill's unique number and its short name. By default, the view shows the bill's action history log at the bottom of the page; select the "Text" tab instead to read the text of the bill.

If I'm interested in a bill, I often want to know who's sponsoring it (that list in the middle of the page). This bill has 11 Councilmember sponsors (not 12) out of 51 Councilmembers total. So, nowhere near a majority, but it's got at least a little momentum.

I like that the way intro.nyc (example) shows that information and makes it clear who's not sponsoring a bill; this makes it easier to check whether your Councilmember's on board with an in-progress bill, and lobby them appropriately. (Caveat: sometimes the sponsor count is wrong. I've filed a bug report about that.)

Screenshot of a sample bill on intro.nyc, including a color-coded table of who is and is not sponsoring it.

Screenshot of a sample bill on intro.nyc, including a color-coded table of who is and is not sponsoring it.

The intro.nyc display doesn't include the bill action history, but makes a lot of other important information easier to skim.

To get that view on intro.nyc, search for the bill number (example) and select the plus sign next to the bill number. (Clicking on the bill number itself will redirect you to the bill on Legistar.)

Bill search results on intro.nyc, highlighting the plus icon one should select.

Bill search results on intro.nyc, highlighting the plus icon one should select.

If researching a bill, I likely also want to know what people have said about the bill in hearing testimony; that'll be in the Attachments list in Legistar, just above the bill's actions history. Heads-up that clicking on an attachment link often leads to your browser beginning to download a PDF or DOCX file, without asking you and without warning you about filesize. Bills that get pretty far in the legislative process, or even become laws, have a lot of attachments, such as a Fiscal Impact Statement prepared by the New York City Council Finance Division and the Mayor’s Office of City Legislative Affairs, and the text of the resulting Local Law (example). More on Fiscal Impact Statements (caution: Substack post by the conservative Manhattan Institute).

If you want a printer-friendly version of the bill text, the metadata about the legislative process, or both, choose the Reports tab at the top for a few options; each is a PDF.

Those are some basics; I haven't covered some other details, such as versions/amendments and Indexes.

Searching bills

It's worth clicking around the various tabs at the top of Legistar to explore what you can do. A common thing I want to do is search for a specific bill I've heard about, and often I am going by keyword and/or which Councilmember introduced it; a lamentable proportion of news stories about a bill do not provide the bill number.

Intro.nyc has pretty good basic bill search that sets sensible defaults, so it's good to try that first. But sometimes it's useful to play with the advanced options on Legistar.

So let's say I've heard that Crystal Hudson has introduced a bill that has to do with banning certain high-speed micromobility devices at the point of sale. I go to the main Legistar page at https://legistar.council.nyc.gov and choose the "Legislation" tab at the top.

Legistar's default search for legislation.

Legistar's default search for legislation. (link)

Narrowing the selection from "All Years" to the current legislative session ("Session 2026-2029") instantly triggers a search with a zillion results. Narrowing the search further from "All Types" to "Introduction" (the type of bill that adds/changes a city law) reduces the results a bit. I'm not sure what specific words are in the bill, and searching for keywords, I still get lots of records to sift through. Councilmembers introduce hundreds of bills every year!

So I select the "Advanced search >>>" option on the right to get to this power query interface:

Screenshot of a Legistar advanced legislation search. I've drawn red boxes around the fields I used, which are: Date: Session 2026 to 2029; Legislative text: bicycle; Sponsor: Crystal Hudson (with the "First primary sponsor" checkbox checked). 3 results.

Screenshot of a Legistar advanced legislation search, with red boxes around the fields I used: Date: Session 2026 to 2029; Legislative text: bicycle; Sponsor: Crystal Hudson (with the "First primary sponsor" checkbox checked). 3 results (in table below).

The three results from this search are much easier to sift:

File # Law Number Type Status Committee Prime Sponsor Council Member Sponsors Title
T2026-2361 Introduction Introduced Committee on Transportation and Infrastructure Crystal Hudson 3 A Local Law to amend the administrative code of the city of New York, in relation to prohibiting the operation of class 3 e-bicycles
Int 0244-2026 Introduction Committee Committee on Consumer and Worker Protection Crystal Hudson 27 A Local Law to amend the administrative code of the city of New York, in relation to prohibiting the sale and rental of class three bicycles with electric assist
Int 0236-2026 Introduction Committee Committee on Transportation and Infrastructure Crystal Hudson 4 A Local Law to amend the administrative code of the city of New York, in relation to the posting of signs notifying operators of bicycles, bicycles with electric assist, and electric scooters of the prohibition against operating such devices on sidewalks, park walkways, and boardwalks, and of related fines and penalties

(and each of the bill numbers is a hyperlink to its detail page). And now it's easy to figure out that 0244-2026 is the one I want.

On the page for 0244-2026, I read the bill action history and learn that it's been introduced, then referred to the Committee on Consumer and Worker Protection.

Committee/hearing/meeting calendars

A bunch of the work of the Council happens in topic-specific committees. (Choose the "Committees" tab at the top of the page to get a huge list.) In order for a New York City Council bill to move forward after a member introduces it, it has to get discussed in a public "hearing" (meeting) held by a committee relevant to the bill's topic. (The committee chair gets to decide what bills the committee hears.) Then that committee votes; if they vote to approve it, then (at the Speaker's discretion) it can move on to a vote of the full Council.

Maybe I'm missing something; it feels like, if a bill is on the agenda for a future Committee hearing, that info should be on the bill's detail page. But I don't see it there. So: I click the Committee on Consumer and Worker Protection link. (Each Committee has its own page at a URL that has DepartmentDetail.aspx in it.)

I get a list of the committee's meetings, in reverse chronological order, starting in the future. I notice the next hearing is next week, and click on "Meeting details" for that row in the table; that takes me to info about that specific hearing, especially which bills they'll discuss. Some days after the hearing's done, the page updates with links to "minutes" (a PDF summarizing what legislative actions happened) and a videorecording, and the page about the bill itself updates its Attachments list to include a hearing transcript.

Legistar provides a few ways to browse and search upcoming and past hearings and other meetings, such as the "Calendar" of all scheduled meetings (linked from the "Calendar" tab at the top) and its search box. That page defaults to an itemized "List View"; choose "Calendar View" for a view that visually lays out the events by day, week, month, or the futuristic-workflow-tool-feeling "Timeline".

It is annoying that Legistar doesn't also make it easy to skim what bills are up for discussion in these hearings in the list view, without having to go to each individual hearing page. Check out the display at https://intro.nyc/events, which does this, and which lets you filter by committee!

Nothing on the Legistar page for a hearing points to this, but the Council's website provides a form for you to submit written testimony, or to register to testify at a future hearing. (Different options apply for in-person and virtual hearings.) "Written testimony may be submitted up to 72 hours after hearing has been adjourned."

Keeping up via RSS feeds or email alerts

On the page for a specific bill, in the upper right is an "RSS" link with Feed.ashx in it. For example, for Int 0518-2026, the RSS link is https://legistar.council.nyc.gov/Feed.ashx?M=LD&ID=7879110&GUID=BDDD32F1-1178-492D-80F2-205845356FD2. You can plug that into your feedreader to follow bill events.

Everything I've described up till now, you can do without creating a Legistar account. But if you do create a free account and sign in, you can get email alerts for events affecting specific bills, or changes to the legislative calendar that fit a set of search criteria, or bills that newly fit your search criteria.***

Screenshot of Legistar page for creating and configuring an email alert for a bill. User can edit the alert name and delivery frequency, and add an address to cc.

Screenshot of Legistar page for creating and configuring an email alert for a bill. User can edit the alert name and delivery frequency, and add an address to cc.

The user can edit the "Alert name" to change the email subject line; here, I've changed it to add a bill description to jog my memory. The search terms are pre-set based on what page the user was previously on. Frequency choices: every time a change happens, daily, weekly, or monthly. "Deliver to:" the email address in one's login profile, plus another email you can optionally add in the CC field here. The textual instructions in this screenshot, I offer in the footnotes of this post.***

Another example: search for meetings, in the current legislative session, that have the word "sidewalk" on their agenda, likely because they will discuss bills that include the word "sidewalk" in their names or summaries. Then select the Alerts button to set up a notification. You'll get a heads-up anytime a meeting is scheduled that fits those criteria, or the agenda for an existing meeting changes to fit them. (Caution that I don't think this will email you if a scheduled meeting stops meeting your search criteria.)

Click the "My Account" link in the upper right corner to get a list of your legislation and calendar alerts and modify or delete them.

Noticing when Councilmembers start(ed) or stop(ped) cosponsoring bills

Another example: you could run a Legistar search for bills sponsored by your Councilmember, then click the "Alerts" button, and set up an alert to email you every week with a list of legislation your Councilmember's newly decided to sponsor. Caution that, as far as I can tell, this does not alert you if that Councilmember stops cosponsoring something, as it only reports items newly added search results, and not removed items.

But also: this doesn't help retrospectively. Legistar doesn't include sponsorship changes in the bill's action history log, and doesn't seem to make it possible for me to read the history of what date each cosponsor signed on and became a bill cosponsor. This would help me understand whether a bill had most of its cosponsors upon its initial introduction, deduce what specific news events or advocacy campaigns may have inspired a member to cosponsor it, etc. Also: I would love to find/list Councilmembers who used to cosponsor a bill but then stopped, as Shahana Hanif did with Intro 303 in May (Example.)

I suspect right now you can't do this in retrospect with Legistar. You can create an email alert as soon as a bill is introduced, and keep apprised going forward, but I actually don't even know whether Legistar considers a sponsor addition or removal to be email-worthy.****

Alternatively: Czebotar maintains https://legislation.support/, which gives you a dashboard to track bills you support or oppose, including sponsor changes. For example, his list of 210 supported and 50 opposed bills in current legislative sessions includes federal, state, and city legislation. Anyone can bookmark the page tracking sponsorship changes, or follow its RSS feed (the site doesn't currently offer email alerts).

A reverse-chronological list of notes about legislation, such as "Sep 25 2026 - A339 / S2599 - Sponsored by Senator Jessica Scarcella-Spanton", each annotated with a bill description and tags such as "transportation", "NY-Senate", and "oppose".

A reverse-chronological list of notes about legislation, such as "Sep 25 2026 - A339 / S2599 - Sponsored by Senator Jessica Scarcella-Spanton", each annotated with a bill description and tags such as "transportation", "NY-Senate", and "oppose".

(This doesn't let you follow everything a specific legislator does, though.)

legislation.support can track legislation in the US Congress, New York State legislature, and New York City Council. It says it also can take in bills from other states via billtrack50.com, which I've never used and am curious about!

Scorecards: who's voting for or against a set of bills?

Plus, on legislation.support, after you make a list of bills and mark whether you support or oppose them, the site generates an auto-updating "scorecard" that makes it easy to grade individual legislators on what percentage of those bills they're voting the way you prefer. And you can share it!

For example: the City Council's Progressive Caucus has 13 bills on its current priority list. I added them to a legislation.support collection (a "profile") at https://legislation.support/nyc-progressive-caucus-2026 , and now anyone can read this scorecard grading the 51 sitting Councilmembers on what proportion of that agenda they're cosponsoring.

Screenshot of legislation.support scorecard for Progressive Caucus 2026. The table ranks Councilmembers top-to-bottom by what percentage of the bills (listed horizontally, with bill numbers, names, and links) they support. Top is Sandy Nurse, 100%.

Screenshot of legislation.support scorecard for Progressive Caucus 2026. The table ranks Councilmembers top-to-bottom by what percentage of the bills (listed horizontally, with bill numbers, names, and links) they support. Top is Sandy Nurse, 100%. Scorecard.

Past the bottom of that screenshot, the scorecard lists some caucus members in the 50%-60% range, which surprised me; seems low.

Nonexistent features, bugs, and things I wish Legistar did

Bugs:

  • The count of "Council Member Sponsors" is sometimes wrong. Example: for Resolution 0429-2026, Public Advocate Jumaane Williams is not a Councilmember and shouldn't be included in the sponsor count. For 0998-2026, Legistar correctly mentions the formal support of the various borough presidents but doesn't include them in the count of "13", and Legistar should do similarly when the Public Advocate supports a bill. I suspect this is happening because NYC Council's IT folks haven't configured the entity data for Williams correctly.
  • On the page for a committee (example), sometimes if I choose the "Votes" tab, Legistar glitches and shows me a code 500 error page.
  • Legistar's attachments search/filtering evidently has various bugs listed in this researcher's methodology statement (warning: I believe partially LLM-written).

I think it's reasonable to expect:

  • The page for a past committee hearing should include a link to the hearing transcript.
  • If a future committee hearing includes an in-progress bill on its docket, the page for that bill should display that fact in some way and link to that hearing.

Would be nice to have:

  • I'd dearly appreciate better sponsorship change alerts, as I mentioned above.
  • I'd love shorter URLs for bills, especially URLs that have the bill # in them. Councilmatic did this; example: https://nyc.councilmatic.org/legislation/int-1696-2017/ Legistar's bill URLs have long GUID strings in them that don't help me quickly distinguish between them when, for instance, I want to make sure I've pasted the correct URL into an email.
  • I'd like "Advanced search" to be its own URL I can link to; right now both simple and advanced search just live at https://legistar.council.nyc.gov/Legislation.aspx.
  • Shareable advanced search queries would be great; I want to give you a URL for "enacted bills passed in 2022-2023 that require someone to write and publish a report" instead of telling you "choose Date: 2022-2023; choose Status: Enacted; choose Index: Report Required".
  • Of course it would be nice if the user interface emphasized the information and functionality users are commonly seeking, instead of making a new user hunt through a multitude of things that the UI seemingly treats as equally important. But far too many UI refreshes that companies market as doing that instead make it impossible for experts to do complex things. So instead I'll be grateful for intro.nyc and wish we had some closure on Councilmatic.*

How it feels to explain this

I don't remember ever having explained Legistar before, but teaching my friend about it felt familiar. And that's probably because NYC municipal governance is a complex sociotechnical system I started learning several years ago. And whenever I've learned a complex sociotechnical system well enough to teach others about it, I've usually followed that by helping others learn about some widely-used piece of software, and showing them how to navigate some nonintuitive UI to find what they need.

This phase of understanding, where I not only regularly use the complex domain-specific software and can walk others through it, but also have opinions about pain points and substitutes, feels so much like home to me. I got here with git, and many parts of Wikimedia's tech archipelago, and Python packaging, and more that's harder to dredge up, decades later, and I couldn't count how many thousands? of people I've taught along the way. I'm enough of a maintainer that, while I lament the flaws in this infrastructure, I want to tread carefully when I distinguish bugs and missing features from nice-to-haves. As I said a few years ago, if you ever start maintaining anything as complicated as Python packaging, you will never again use the phrase, "why don't you just?"

I can get to similar levels of expertise with systems that mostly aren't software. I think I got to a similar place with New York City's defibrillator location data, and hope to get there again.

There can be something uncanny about the first time I explain a domain or a tool to someone else. I remember a decade back, at Recurse Center, explaining Python generator functions to one or two other people, and my memory is practically of an out-of-body experience, so distinct were my two different selves, one calmly and helpfully teaching something, the other watching from a foot away bewildered and agape in disbelief. Surely this novice will fail, will propagate errors from her understanding outward; surely the learner ought to find someone more expert to consult. Pretty unexpected.***** When the topic has to do with political activism, I sometimes feel a kinship with everyone over the decades who's resonated to Jerry Garcia's words: Somebody has to do something; it’s just incredibly pathetic that it has to be us.

And, as ever with teaching, I only ever get to hold on to the artifacts of teaching, not the act itself, nor the effects, most of which I will never witness.

There's delight, too, of course, pride when I think I've done it well, triumph when the learner understands and then extrapolates, and that at-home feeling I mentioned. It's not all disorientation and wistfulness. It's just that right now it's autumn, and as I started wrapping up this conclusion my thoughts turned to Mel, and I miss them.

Footnotes

* There used to be this easier-to-use site, NYC Councilmatic. It launched in 2015 at nyc.councilmatic.org as an unofficial site, then was supported/reimagined by DataMade and became in 2017? 2018? an official site people could use to view NYC Council legislative info, available at laws.council.nyc.gov. It called NYC Legistar's web API to gather fresh data once a day, and then displayed that data on the easier-to-browse Councilmatic site. Those sites don't work anymore and I don't know what happened. The Councilmatic open source project still exists and issue #161 for NYC Councilmatic, "Spin down NYC Council Councilmatic", mentions "discussions with the folks at the Council Speaker's Office" to resolve things, 6 years ago.

** Intro.nyc also offers cool reports of statistics (such as attendance records) and some complex searches that I don't know how to do in Legistar, such as: which bills that died at the end of the 2024-2025 legislative session did Councilmember Lincoln Restler re-introduce in the 2026-2029 session?

Sometimes I run across other sites that aim to also make Legistar info more browseable, like https://concretebills.com/ . That's a closed-source site that involves some amount of LLM-ish-ness, such as "Ask about this bill" AI-generated Q&A, so I'm wary of using and getting dependent on it; I used to think https://citymeetings.nyc/ was thought-provokingly useful despite being a genAI project, and then maintainer Vikram Oberoi said he'd be back in a few months, then ghosted. Intro.nyc is open source and has been around for at least 5 years, and maintainer Czebotar is responsive. So I'm more interested in trusting it.

*** Sample instructions, since I don't know where else you'd find them on the web without having to log in:

Alerts are e-mail updates of the latest relevant search results based on your choice of query.
Create a Legislation Details Alert
Your Alert is built on a particular Legislative File. Select Legislation and click Search Legislation. All of the stored Legislative Files will display. You can also enter search terms to limit your Legislative File results. Select a particular Legislative File ID on which to build your Alert. If the selected Legislative File is ever updated, you'll receive notification.
1 Click the Alerts button, after you select a Legislative File ID from the Legislation page. The Alerts button is located on the right-hand side of the Legislation page.
2 Edit the Alert Name; this will appear as the subject of the email you receive. (Optional)
3 Confirm the Legislative File displayed in Search Terms is correct. To change them, return to the Legislation page and generate a new search.
4 Select an occurrence of how often you would like to receive an alert.
5 Confirm the email address is correct; this should be the email address associated with your InSite login.
6 Enter a secondary email address in the CC field. (Optional)
7 Click the Add Alert button.

**** I thought it might be possible using the Legistar API (documentation), specifically MatterSponsorLastModifiedUtc. But I got a Legistar NYC API key, tried poking around, and couldn't find these kinds of sponsorship addition/removal log entries. I asked about this on Ask MetaFilter, and a MeFite's answer led me to learn about and appreciate the Czebotarverse of civic tech data and tools.

***** To my recollection, widely-used "impostor syndrome" workshop curricula don't cover Unsolved Mysteries-esque psychic phenomena.

Comments