Dallas / City Council·2024–2026·

For two years, the Dallas City Council kept itself in chambers for hours — averaging every time the gavel came down.

They voted on agenda items in that span across voting meetings between and . By the public vote record they approved outright, amended and passed another , denied , and deferred or held . Almost everything, in that telling, passes quietly: of the deliberation time, just —% went to items that finished unanimously or 14–1.

That telling is incomplete. Dallas OpenData publishes one roll call per item — and for an amended item, it logs the amendment, not the contested vote that followed. The City Secretary's official minutes carry what the dataset drops: recorded divisions, including items that passed looking unanimous but were fought over on the floor — most often by a motion to defer or a call to cut off debate. This page reads both records, and shows where they disagree.

§ 1 · How does Dallas compare?

Dallas council sessions run longer than any other major Texas city's.

Every major Texas city puts its council meetings on video. Here's the average length of the main voting session in each, over the same trailing-52-week window. Houston and Austin archive on Swagit (the same vendor Dallas uses); Fort Worth and El Paso on Granicus. San Antonio migrated off its public Granicus archive after 2021 and its current video source is not publicly scrape-able, so it's not included. Each city also runs separate briefings or work sessions, shown alongside where they exist.

Voting session = the council's main agenda meeting where items get decided. Cadence differs: Dallas meets every other Wednesday; Austin every other Tuesday; Houston holds one published council meeting per week (their formal session runs Tue–Wed, archived as a single video); Fort Worth and El Paso meet weekly. Sessions shorter than one hour (cancelled, recessed, or procedural) and Fort Worth's annual offsite retreat are excluded. Fort Worth's window is 5 months (Granicus RSS-capped); everyone else spans a full 52 weeks. San Antonio is omitted — they migrated off their public Granicus archive after 2021 and the current archive isn't publicly scrape-able.

§ 2 · How long is long?

Every voting meeting, plotted by when and how long.

Dallas's council meets every other Wednesday for its main voting session. The meetings start at 9 a.m. and, on a typical week, gavel out sometime after supper. Each dot below is one of those meetings, placed on the date it happened and the total hours the council was in chambers that day. The longest single session ran . The median is . Special-called voting sessions are shown with an open ring; their agendas are shorter.

Click any dot to open the Swagit video for that meeting. Dots without a filled interior are meetings whose item-level vote records have not yet been published on Dallas OpenData (see § 8).

Zoomed-in view of where those hours go, per item: on average, the more NO votes a single item drew, the longer the council spent debating it. A four-plus-NO item got about ten times the floor time of a unanimous one. By the public tally, unanimous items vastly outnumber contested ones — which is how the totals still tilt toward quiet votes. But that tally undercounts the contested ones; § 7 reads the official minutes to find the divisions it left out.

§ 3 · The shape of it

One dot per item that was discussed.

Items that the council votes on without individual discussion — about four-fifths of the docket — are passed on the consent agenda and excluded here. What remains is every item pulled off consent for individual deliberation. The horizontal axis measures how long that deliberation lasted. The vertical axis counts NO votes: zero at top is a unanimous yes, one below is a 14–1–style pass, and the rare dots further down represent real opposition.

Color is the outcome: light gray dots were approved, dark red dots were denied by council. Violet dots were passed as amended — and these carry a caveat. OpenData logs only one roll call per item; for an amended item that roll call is the amendment, not the final vote, so its true margin isn't in the public data at all. A violet dot ringed in white is one the official minutes show was actually contested on the floor even though the public tally reads it clean. Most denials sit on the top row because the motion put before the council was a motion to deny the applicant — so a 15–0 tally is the council unanimously saying no.

Unanimous approval    14–1 approval    Contested approval (2+ NO)    Amended (margin unrecorded)    Denied by council    Contested in the minutes   Click any point to open the Swagit video at that timestamp.

§ 4 · Where the hours went

Two clocks, same chamber.

The top bar is every minute the council was gaveled in — in all — broken into the sort of activity filling it. The bottom bar is just the they spent debating items pulled off consent, segmented by how those items ultimately voted.

§ 5 · Longest items that passed unanimously

Ten items that consumed the most deliberation time and met with no opposition.

Date Item Discussion Vote Known as

PH = public hearing. Duration includes resident speaking time (3 min each). Z items are zoning cases, typically with a public hearing too.

§ 6 · Meeting by meeting

Every voting meeting on the calendar, drawn to full length.

Each row is one meeting, scaled end-to-end to the time the council was actually in chambers. Colored segments on the left are individual items pulled off consent for discussion — white for unanimous approval, blue for 14–1, orange for contested, violet for passed-as-amended, and dark red for items the council denied. The gray tail is everything else that filled the meeting: the consent-agenda roll-call, the open-mic public speaking period, invocation and pledge, and recesses. The crosshatched tail past the end of the video is closed-session time, estimated from transcript time-of-day mentions; the Swagit archive drops out during private deliberation (see § 8). Meetings held after the OpenData vote cutoff are shown as all-gray rows — their duration is known from Swagit; the per-item breakdown just isn't published yet.

§ 7 · What the record leaves out

Read the official minutes, and the chamber looks far more divided.

OpenData carries one roll call per item. The City Secretary's official minutes carry every record vote — and councils take a record vote precisely when something is contested. Across the window the minutes log recorded divisions, of them split. Most never reach the public dataset: were motions to defer or table an item, were motions to call the question and cut off debate. And items that the public tally shows passing clean were, on the floor, fought over — Pepper Square among them, where the public record reads 13–0 but the minutes show a motion to defer beaten 5–9 and debate gaveled shut 10–4.

The ranking counts how often each member landed on the losing side of a recorded division — the dissent the consent-agenda summary never surfaces.

A “minority appearance” is one record vote where the member voted with the side that lost — a NO on a motion that passed, or a YES on one that failed. Procedural and substantive motions are pooled. Source: City Secretary minutes, parsed per meeting.

Items that passed looking unanimous — and weren't.

Date Item What it was The division the minutes record

Every row passed with zero NO votes in Dallas OpenData. The division shown is the contested record vote the minutes carry for that item; names are who voted with the losing side. Click through to the Swagit video.

§ 8 · Method & sources

How this page was assembled.

Discussion time is measured from the chapter markers Swagit places in each published council meeting video. Each chapter corresponds to one agenda item. A chapter's length — from its start timestamp to the next chapter's start — is taken as the time the council spent on that item. Items passed en masse as part of the consent agenda receive no individual chapter, and are excluded from duration measurements on this page.

Vote totals and outcomes come from the City of Dallas Council Voting Record dataset on Dallas OpenData (ts5d-gdq6). Each row is one councilmember's vote on one item; the row also carries a final_action_taken label — APPROVED, AMENDED, DENIED, DEFERRED TO 3/27/24. This page uses that label, not the raw tally, to bucket outcomes: a 15–0 vote on a motion to deny is a unanimous denial, not an approval. AMENDED items get their own bucket and are never counted as unanimous — OpenData records only one roll call per item, and for an amended item that roll call is the amendment motion, not the contested final vote, so the item's true final margin is not in the dataset.

Record votes are recovered from the City Secretary's official minutes (the per-meeting Min.pdf on the Dallas City Hall document server). The minutes enumerate every record vote a meeting took — main motions, amendments, and the procedural maneuvers OpenData omits entirely: motions to defer or table, and motions to call the question. This page parses those Yes/No/Absent name blocks and maps each back to its agenda item by description. Final passages the minutes record only as “unanimously adopted” or “majority voting in favor” carry no name tally; the contested dissent is taken from the record votes that precede them. The two Johnsons — Mayor Eric Johnson and Councilmember Maxie Johnson, seated mid-2025 — are disambiguated per meeting (“Mayor Johnson” vs. “Johnson”).

Data currency. Meeting videos and chapter markers on this page run through the most recent cataloged session. The individual vote records on OpenData lag that catalog: at time of writing, the publishing cutoff is . Meetings held after that date appear in § 1 for their duration and in § 5 as empty rows. One older voting session — Oct 22, 2025 — is absent from OpenData entirely and is unrecoverable without the city republishing.

"Unanimous" / "14–1" / "contested" on this page describe the vote-shape of items the council approved: zero NO votes, one NO, or two-plus NO. Items the council denied are called out as such regardless of the YES/NO split — so a zoning case denied 14–0 does not land in the "unanimous" bucket. Absences, abstentions, and ABSNT-CB (absent on city business) are reported but do not factor into the shape classification.

Closed-session time is estimated from Swagit's auto-generated transcripts. The public video feed pauses during executive session — meeting chapters are contiguous in video time even when the council is privately deliberating for an hour or more — so the closed-session minutes do not appear in the archived video. But the mayor almost always states the time aloud on the way in ("it is 1:57 P.M., we'll reconvene at 3:00") and on the way back ("has completed its closed session ... at 5:12 P.M."). Those utterances are transcribed, and this page parses the entry- and exit-time-of-day pairs to recover each closed session's duration. The parser currently recovers of private deliberation across the window; individual sessions are tagged high (explicit entry and exit times), mid (reconvene-time only), and excluded when neither is parseable.

Not measured. This page does not break out speaking time by individual councilmember. Swagit's auto-generated transcripts stopped including speaker-turn markers after 2023, so per-member deliberation time would require independent audio transcription and voice diarization — a separate effort, planned.

Every point on the scatter and every row in the list links to the Swagit video at the item's start timestamp. The underlying SQLite database and pipeline are available in the project's code repository.