diff --git a/.all-contributorsrc b/.all-contributorsrc index a4f032588..2159af06e 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -867,6 +867,15 @@ "code", "design" ] + }, + { + "login": "ericpastorm", + "name": "Eric", + "avatar_url": "https://avatars.githubusercontent.com/u/38719351?v=4", + "profile": "https://github.com/ericpastorm", + "contributions": [ + "code" + ] } ], "commitType": "docs" diff --git a/.prettierignore b/.prettierignore index aaf25be4b..45649aa44 100644 --- a/.prettierignore +++ b/.prettierignore @@ -17,3 +17,4 @@ llm playwright-report CLAUDE.md .cursor/ +tests/fixtures diff --git a/README.md b/README.md index 4c2752e29..4a143c6d9 100644 --- a/README.md +++ b/README.md @@ -187,94 +187,95 @@ Thanks to all our contributors! Darrel Herbst
Darrel Herbst

๐Ÿ’ป Dev1nxavier
Dev1nxavier

๐Ÿ’ป + Eric
Eric

๐Ÿ’ป Gerlin
Gerlin

๐Ÿ’ป Grace (Iron Yard/CaseNEX/IO Account)
Grace (Iron Yard/CaseNEX/IO Account)

๐Ÿ’ป ๐ŸŽจ Grace Zhang
Grace Zhang

๐Ÿ’ป Huanfeng
Huanfeng

๐Ÿ’ป - Ikko Eltociear Ashimine
Ikko Eltociear Ashimine

๐Ÿ’ป + Ikko Eltociear Ashimine
Ikko Eltociear Ashimine

๐Ÿ’ป J.I. Cruz
J.I. Cruz

๐Ÿ’ป Janice Lichtman
Janice Lichtman

๐Ÿ’ป Jasmine Rose
Jasmine Rose

๐Ÿ’ป Jeff Korenstein
Jeff Korenstein

๐Ÿ’ป KY233466
KY233466

๐Ÿ’ป Kep Kaeppeler
Kep Kaeppeler

๐Ÿ’ป - Kimin Kim
Kimin Kim

๐Ÿ’ป ๐Ÿ‘€ + Kimin Kim
Kimin Kim

๐Ÿ’ป ๐Ÿ‘€ Kittipong Deevee
Kittipong Deevee

๐Ÿ’ป Laura Umana
Laura Umana

๐Ÿ’ป Leopoldo Lening Celaya
Leopoldo Lening Celaya

๐Ÿ’ป Lexa Michaelides
Lexa Michaelides

๐Ÿ’ป Luke Rucker
Luke Rucker

๐Ÿ’ป Marcos Banchik
Marcos Banchik

๐Ÿ’ป - Mark Trepanier-Cajigas
Mark Trepanier-Cajigas

๐Ÿ’ป + Mark Trepanier-Cajigas
Mark Trepanier-Cajigas

๐Ÿ’ป Matthew Zagaja
Matthew Zagaja

๐Ÿ’ป Mephistic
Mephistic

๐Ÿ’ป ๐Ÿ‘€ Mike Yavorsky
Mike Yavorsky

๐ŸŽจ Miles Baird
Miles Baird

๐Ÿ’ป Minqi Chai
Minqi Chai

๐Ÿ““ Nansamba Ssensalo
Nansamba Ssensalo

๐Ÿ’ป - Nathan Sanders
Nathan Sanders

๐Ÿ’ป ๐Ÿ’ผ ๐Ÿ” + Nathan Sanders
Nathan Sanders

๐Ÿ’ป ๐Ÿ’ผ ๐Ÿ” Navdeep
Navdeep

๐Ÿ’ป Noah Burd
Noah Burd

๐Ÿ’ป Oliver Herman
Oliver Herman

๐Ÿ’ป Peter Schiller
Peter Schiller

๐Ÿ’ป Richard Kwon
Richard Kwon

๐Ÿ’ป Ridho Suhendar
Ridho Suhendar

๐Ÿ’ป - Riley Grant
Riley Grant

๐Ÿ’ป + Riley Grant
Riley Grant

๐Ÿ’ป RobertMrowiec
RobertMrowiec

๐Ÿ’ป ๐Ÿ‘€ Rodrigo Passos
Rodrigo Passos

๐Ÿ’ป ๐Ÿ‘€ Sam DeMarrais
Sam DeMarrais

๐Ÿ’ป Samuel BUHAN
Samuel BUHAN

๐Ÿ’ป ๐Ÿ““ Scott Solmonson
Scott Solmonson

๐Ÿ’ป Sean Moss
Sean Moss

๐Ÿ’ป - Simran Kaur
Simran Kaur

๐Ÿ’ป + Simran Kaur
Simran Kaur

๐Ÿ’ป Soundar Murugan
Soundar Murugan

๐Ÿ’ป Stacey Ali
Stacey Ali

๐Ÿ’ป Tim Blais
Tim Blais

๐Ÿ’ป Tom Magnusson
Tom Magnusson

๐Ÿ’ป Ujwal Kumar
Ujwal Kumar

๐Ÿ’ป VenkateshDevarakonda0706
VenkateshDevarakonda0706

๐Ÿ’ป - Veronica Adler
Veronica Adler

๐Ÿ’ป + Veronica Adler
Veronica Adler

๐Ÿ’ป YuhaoT
YuhaoT

๐Ÿ’ป ananyasinghz
ananyasinghz

๐Ÿ’ป arutfield
arutfield

๐Ÿ’ป bancona
bancona

๐Ÿ’ป d.ondrich
d.ondrich

๐Ÿ’ป djtanner
djtanner

๐Ÿ’ป - ekambains
ekambains

๐Ÿ’ป + ekambains
ekambains

๐Ÿ’ป iWumboUWumbo2
iWumboUWumbo2

๐Ÿ’ป ishana-goyal
ishana-goyal

๐Ÿ’ป jamesvas5307
jamesvas5307

๐ŸŽจ ๐Ÿง‘โ€๐Ÿซ ๐Ÿ““ jellyyams
jellyyams

๐Ÿ’ป jkinzer85
jkinzer85

๐Ÿ““ mertbagt
mertbagt

๐Ÿ’ป - mmailloux22
mmailloux22

๐Ÿ’ป + mmailloux22
mmailloux22

๐Ÿ’ป mvictor55
mvictor55

๐Ÿ’ผ ๐Ÿ“† ๐Ÿ” ๐Ÿ’ป pranay
pranay

๐Ÿ’ป ren0nie0
ren0nie0

๐Ÿ”ฌ roed
roed

๐Ÿ’ป sammymyi
sammymyi

๐ŸŽจ ๐Ÿ““ sashamaryl
sashamaryl

๐Ÿ’ป ๐Ÿง‘โ€๐Ÿซ ๐Ÿ”ฌ - shannonh800
shannonh800

๐Ÿ’ป + shannonh800
shannonh800

๐Ÿ’ป violet
violet

๐Ÿ’ป yasminekarni
yasminekarni

๐Ÿ’ป diff --git a/components/EditProfilePage/PersonalInfoTab.tsx b/components/EditProfilePage/PersonalInfoTab.tsx index b6d70364c..b8f83cf3a 100644 --- a/components/EditProfilePage/PersonalInfoTab.tsx +++ b/components/EditProfilePage/PersonalInfoTab.tsx @@ -10,7 +10,7 @@ import { TooltipButton } from "components/buttons" import { useTranslation } from "next-i18next" import styled from "styled-components" -type UpdateProfileData = { +export type UpdateProfileData = { fullName: string aboutYou: string twitter: string @@ -37,7 +37,7 @@ type Props = { legislatorsProps?: YourLegislatorsProps } -async function updateProfile( +export async function updateProfile( { profile, actions, uid }: Props, data: UpdateProfileData ) { @@ -197,30 +197,16 @@ export function PersonalInfoTab({ label={t("socialLinks.instagram")} defaultValue={social?.instagram} className="col-sm-12 col-md-6 mb-1" - iconSrc="./instagram.svg" + iconSrc="/instagram.svg" {...register("instagram")} /> - - )} diff --git a/components/LegislatorProfile/LegislatorComponents.tsx b/components/LegislatorProfile/LegislatorComponents.tsx index 1f25f37ab..38a48dbe2 100644 --- a/components/LegislatorProfile/LegislatorComponents.tsx +++ b/components/LegislatorProfile/LegislatorComponents.tsx @@ -130,6 +130,21 @@ export function LinkedIn() { ) } +export function Mastodon() { + return ( + + + + ) +} + export function Twitter() { return ( diff --git a/components/LegislatorProfile/LegislatorProfilePage.tsx b/components/LegislatorProfile/LegislatorProfilePage.tsx index 2f8d127e2..24ea34433 100644 --- a/components/LegislatorProfile/LegislatorProfilePage.tsx +++ b/components/LegislatorProfile/LegislatorProfilePage.tsx @@ -1,9 +1,12 @@ +import { collection, getDocs, limit, query, where } from "firebase/firestore" import { faChevronRight } from "@fortawesome/free-solid-svg-icons" import { FontAwesomeIcon } from "@fortawesome/react-fontawesome" import ErrorPage from "next/error" import { useTranslation } from "next-i18next" +import { useEffect, useState } from "react" import styled from "styled-components" +import { firestore } from "../firebase" import * as links from "../links" import { @@ -11,6 +14,7 @@ import { DistrictLabel, formatPhoneNumber, LinkedIn, + Mastodon, PartyLabel, Twitter } from "./LegislatorComponents" @@ -20,29 +24,11 @@ import { LegislatorTabs } from "./LegislatorTabs" import { useAuth } from "components/auth" import { Col, Container, Row, Spinner } from "components/bootstrap" import { useDistrict, useMember } from "components/db" +import { useMembersFinance } from "components/db/membersFinance" import { Internal } from "components/links" import { FollowUserButton } from "components/shared/FollowButton" import { CircleImage } from "components/shared/LabeledIcon" -type ProfilePlaceholder = { - social?: { - blueSky?: string - linkedIn?: string - twitter?: string - } - website?: string -} - -const tabs = [ - "Priorities", - "Bills", - "Elections", - "Finance", - "District", - "Her testimony", - "Votes" -] - const ButtonContainer = styled(Col).attrs(props => ({ className: `col-12 justify-content-md-end ${props.className}`, md: `3`, @@ -124,31 +110,41 @@ export function LegislatorProfilePage({ court: number memberCode: string }) { + const { user } = useAuth() const { member, loading: memberLoading } = useMember(court, memberCode) const { district, loading: districtLoading } = useDistrict( court, member?.Branch, member?.District ) + const { finance } = useMembersFinance(court, memberCode) const { t } = useTranslation("legislators") - // const { user } = useAuth() **uncomment when Following Button in enabled** - - /* replace with profile info for legislators with Maple accounts */ - let profile: ProfilePlaceholder = { - // social: { - // blueSky: "blueskyTest", - // linkedIn: "linkedinTest", - // twitter: "twitterTest" - // }, - // website: "test.com" - social: { - blueSky: "", - linkedIn: "", - twitter: "" - }, - website: "" + + const [legislatorId, setLegislatorId] = useState("") + const [legislatorData, setLegislatorData] = useState([]) + + async function getLegislatorUID(memberCode: string) { + let docList: any[] = [] + const q = query( + collection(firestore, "profiles"), + where("memberId", "==", memberCode), + where("public", "==", true), + limit(1) + ) + const docData = await getDocs(q) + + docData.forEach(doc => { + // doc.data() is never undefined for query doc snapshots + docList.push(doc.data()) + setLegislatorData(docList) + setLegislatorId(doc.id) + }) } + useEffect(() => { + getLegislatorUID(memberCode) + }, [memberCode]) + if (memberLoading) { return ( @@ -221,14 +217,14 @@ export function LegislatorProfilePage({ - {profile.website ? ( + {legislatorData[0]?.website ? (
ยท - {profile.website} + {legislatorData[0].website}
) : ( @@ -252,17 +248,18 @@ export function LegislatorProfilePage({ )}
- {profile?.social?.twitter || - profile?.social?.linkedIn || - profile?.social?.blueSky ? ( + {legislatorData[0]?.social.twitter || + legislatorData[0]?.social.linkedIn || + legislatorData[0]?.social.blueSky || + legislatorData[0]?.social.mastodon ? ( ยท ) : ( <> )} - {profile?.social?.twitter ? ( + {legislatorData[0]?.social.twitter ? ( )} - {profile?.social?.linkedIn ? ( + + {legislatorData[0]?.social.linkedIn ? ( )} - {profile?.social?.blueSky ? ( + + {legislatorData[0]?.social.blueSky ? ( )} + + {legislatorData[0]?.social.mastodon ? ( + + + + ) : ( + <> + )}
- {/* uncomment when legislator Maple accounts are linked to this page - - {user && legislatorAccountId ? ( + {user && legislatorId ? (
- +
) : ( <> - )} */} + )} - ? + + {finance?.totalRaised != null + ? "$" + Math.round(finance.totalRaised).toLocaleString() + : "?"} + {t("fundsRaised")} @@ -354,10 +369,18 @@ export function LegislatorProfilePage({ - + diff --git a/components/LegislatorProfile/LegislatorSidebar.tsx b/components/LegislatorProfile/LegislatorSidebar.tsx index 96cf42c9d..c35d166f4 100644 --- a/components/LegislatorProfile/LegislatorSidebar.tsx +++ b/components/LegislatorProfile/LegislatorSidebar.tsx @@ -2,12 +2,27 @@ import { Biography } from "./SidebarComponents/Biography" import { OtherTestimony } from "./SidebarComponents/OtherTestimony" import { UpcomingHearings } from "./SidebarComponents/UpcomingHearings" -export function LegislatorSidebar() { +export function LegislatorSidebar({ + court, + legislatorData, + legislatorId, + memberCode +}: { + court: number + legislatorData: any[] + legislatorId: string + memberCode: string +}) { return ( <> - + ) } diff --git a/components/LegislatorProfile/LegislatorTabs.test.tsx b/components/LegislatorProfile/LegislatorTabs.test.tsx new file mode 100644 index 000000000..39cb90de6 --- /dev/null +++ b/components/LegislatorProfile/LegislatorTabs.test.tsx @@ -0,0 +1,141 @@ +import "@testing-library/jest-dom" +import { fireEvent, render, screen } from "@testing-library/react" + +import { LegislatorTabs } from "./LegislatorTabs" + +const push = jest.fn().mockResolvedValue(true) +let mockRouter = { + asPath: "/legislators/194/ABC1", + isReady: true, + push +} + +jest.mock("next/router", () => ({ + useRouter: () => mockRouter +})) + +jest.mock("next-i18next", () => ({ + useTranslation: () => ({ + t: (key: string) => + ({ + "tabs.priorities": "Priorities", + "tabs.bills": "Bills", + "tabs.elections": "Elections", + "tabs.finance": "Campaign Finance", + "tabs.district": "District", + "tabs.testimony": "Testimony", + "tabs.votes": "Votes" + }[key] ?? key) + }) +})) + +jest.mock("./TabComponents/PrioritiesTab", () => ({ + PrioritiesTab: () => null +})) +jest.mock("./TabComponents/BillsTab", () => ({ + BillsTab: () => null +})) +jest.mock("./TabComponents/ElectionsTab", () => ({ + ElectionsTab: () => null +})) +jest.mock("./TabComponents/FinanceTab", () => ({ + FinanceTab: () => null +})) +jest.mock("./TabComponents/DistrictTab", () => ({ + DistrictTab: () => null +})) +jest.mock("./TabComponents/TestimonyTab", () => ({ + TestimonyTab: () => null +})) +jest.mock("./TabComponents/VotesTab", () => ({ + VotesTab: () => null +})) + +const renderTabs = () => + render() + +describe("LegislatorTabs", () => { + beforeEach(() => { + push.mockClear() + mockRouter = { + asPath: "/legislators/194/ABC1", + isReady: true, + push + } + }) + + it("selects the tab from the URL hash after the router is ready", () => { + mockRouter = { + ...mockRouter, + asPath: "/legislators/194/ABC1#elections", + isReady: false + } + const { rerender } = renderTabs() + + expect(screen.getByRole("tab", { name: "Priorities" })).toHaveAttribute( + "aria-selected", + "true" + ) + + mockRouter = { ...mockRouter, isReady: true } + rerender( + + ) + + expect(screen.getByRole("tab", { name: "Elections" })).toHaveAttribute( + "aria-selected", + "true" + ) + }) + + it.each([ + "/legislators/194/ABC1", + "/legislators/194/ABC1#not-a-legislator-tab" + ])("falls back to priorities for %s", asPath => { + mockRouter = { ...mockRouter, asPath } + renderTabs() + + expect(screen.getByRole("tab", { name: "Priorities" })).toHaveAttribute( + "aria-selected", + "true" + ) + }) + + it("adds the selected tab to the URL hash", () => { + renderTabs() + + fireEvent.click(screen.getByRole("tab", { name: "Campaign Finance" })) + + expect( + screen.getByRole("tab", { name: "Campaign Finance" }) + ).toHaveAttribute("aria-selected", "true") + expect(push).toHaveBeenCalledWith( + "/legislators/194/ABC1#finance", + undefined, + { shallow: true, scroll: false } + ) + }) + + it("updates the selected tab when browser history changes the hash", () => { + mockRouter = { + ...mockRouter, + asPath: "/legislators/194/ABC1#elections" + } + const { rerender } = renderTabs() + + expect(screen.getByRole("tab", { name: "Elections" })).toHaveAttribute( + "aria-selected", + "true" + ) + + mockRouter = { ...mockRouter, asPath: "/legislators/194/ABC1#bills" } + rerender( + + ) + + expect(screen.getByRole("tab", { name: "Bills" })).toHaveAttribute( + "aria-selected", + "true" + ) + }) +}) diff --git a/components/LegislatorProfile/LegislatorTabs.tsx b/components/LegislatorProfile/LegislatorTabs.tsx index 40c264453..2d1c96f90 100644 --- a/components/LegislatorProfile/LegislatorTabs.tsx +++ b/components/LegislatorProfile/LegislatorTabs.tsx @@ -1,4 +1,6 @@ import { useTranslation } from "next-i18next" +import { useRouter } from "next/router" +import { useEffect, useState } from "react" import { TabPane } from "react-bootstrap" import TabContainer from "react-bootstrap/TabContainer" import styled from "styled-components" @@ -19,17 +21,26 @@ import { TabNavWrapper, TabType } from "components/EditProfilePage/StyledEditProfileComponents" +import { MembersFinance } from "components/db/membersFinance" -const tabCategory = [ - "priorities", - "bills", - "elections", - "finance", - "district", - "testimony", - "votes" -] -type TabCategories = (typeof tabCategory)[number] +const tabCategories = { + priorities: "priorities", + bills: "bills", + elections: "elections", + finance: "finance", + district: "district", + testimony: "testimony", + votes: "votes" +} as const +type TabCategory = (typeof tabCategories)[keyof typeof tabCategories] + +const isTabCategory = (value?: string | null): value is TabCategory => + Object.values(tabCategories).some(category => category === value) + +const tabCategoryFromPath = (path: string): TabCategory => { + const hash = path.split("#", 2)[1] + return isTabCategory(hash) ? hash : tabCategories.priorities +} const TabNavLink = styled(Nav.Link).attrs(props => ({ className: `rounded-top m-0 p-0 ${props.className}` @@ -66,55 +77,81 @@ const TabNavItem = ({ export function LegislatorTabs({ district, districtLoading, - tabCategory + legislatorId, + name, + finance }: { district?: District | undefined districtLoading?: boolean - tabCategory?: TabCategories + legislatorId: string + name: string + finance?: MembersFinance }) { + const router = useRouter() const { t } = useTranslation("legislators") + const [activeTab, setActiveTab] = useState( + tabCategories.priorities + ) + + useEffect(() => { + if (router.isReady) setActiveTab(tabCategoryFromPath(router.asPath)) + }, [router.asPath, router.isReady]) + + const handleTabSelect = (nextTab: string | null) => { + if (!isTabCategory(nextTab)) return + + setActiveTab(nextTab) + + const [path, currentHash] = router.asPath.split("#", 2) + if (currentHash === nextTab) return + + void router.push(`${path}#${nextTab}`, undefined, { + shallow: true, + scroll: false + }) + } const tabs = [ { title: t("tabs.priorities"), - eventKey: "priorities", + eventKey: tabCategories.priorities, content: }, { title: t("tabs.bills"), - eventKey: "bills", + eventKey: tabCategories.bills, content: }, { title: t("tabs.elections"), - eventKey: "elections", + eventKey: tabCategories.elections, content: }, { title: t("tabs.finance"), - eventKey: "finance", - content: + eventKey: tabCategories.finance, + content: }, { title: t("tabs.district"), - eventKey: "district", + eventKey: tabCategories.district, content: }, { title: t("tabs.testimony"), - eventKey: "testimony", - content: + eventKey: tabCategories.testimony, + content: }, { title: t("tabs.votes"), - eventKey: "votes", + eventKey: tabCategories.votes, content: } ] return ( - + {tabs.map((t, i) => ( diff --git a/components/LegislatorProfile/SidebarComponents/Biography.tsx b/components/LegislatorProfile/SidebarComponents/Biography.tsx index e190ac443..cdbed8755 100644 --- a/components/LegislatorProfile/SidebarComponents/Biography.tsx +++ b/components/LegislatorProfile/SidebarComponents/Biography.tsx @@ -1,5 +1,149 @@ -import { TabBlock } from "../LegislatorComponents" +import { useTranslation } from "next-i18next" +import { useEffect, useState } from "react" +import { useForm } from "react-hook-form" +import styled from "styled-components" -export function Biography() { - return - Biography +import { Form } from "../../bootstrap" +import { Profile, ProfileHook, useProfile } from "../../db" +import Input from "../../forms/Input" + +import { useAuth } from "components/auth" +import { + updateProfile, + UpdateProfileData +} from "components/EditProfilePage/PersonalInfoTab" + +const BioBlock = styled.div` + background-color: white; + border-color: #b8c0c9; + border-radius: 5px; + border-style: solid; + border-width: 1px; + font-size: 11px; + padding: 16px; +` + +const BioButton = styled.button` + font-size: 9px; + padding: 2px; +` + +const BioTitle = styled.div` + font-weight: 700; + color: #0b0a3e; + text-transform: uppercase; + letter-spacing: 0.05em; + margin-bottom: 10px; +` + +export function Biography({ + court, + legislatorData, + legislatorId, + memberCode +}: { + court: number + legislatorData: any[] + legislatorId: string + memberCode: string +}) { + const { user } = useAuth() + const uid = user?.uid + + let pageOwner = false + if (uid === legislatorId) { + pageOwner = true + } + + const userResult = useProfile() + + if (userResult.profile && pageOwner) { + // the user is the legislator who owns this page + // therefore they get edit privledges + return ( + + ) + } + + // the user is not the legislator who owns this page + // therefore they get read-only privledges + return +} + +function EditableBiography({ + actions, + court, + memberCode, + profile +}: { + actions: ProfileHook + court: number + memberCode: string + profile: Profile +}) { + const { + register, + formState: { errors, isDirty }, + handleSubmit + } = useForm() + + const { about }: Profile = profile + + const onSubmit = handleSubmit(async update => { + await updateProfile({ profile, actions }, update) + location.assign(`/legislators/${court}/${memberCode}`) + setFormUpdated(false) + }) + + const { t } = useTranslation("legislators") + const [formUpdated, setFormUpdated] = useState(false) + + useEffect(() => { + setFormUpdated(isDirty) + }, [isDirty, setFormUpdated]) + + return ( + +
+
+ + {t("biography")} + + + {t("submit")} + +
+ +
+
+ ) +} + +function ReadonlyBiography({ legislatorData }: { legislatorData: any[] }) { + const { t } = useTranslation("legislators") + + return ( + + {t("biography")} +
+ {legislatorData[0]?.about ? legislatorData[0].about : t("notClaimed")} +
+
+ ) } diff --git a/components/LegislatorProfile/TabComponents/FinanceTab.tsx b/components/LegislatorProfile/TabComponents/FinanceTab.tsx index 4c263d26a..18a5ce105 100644 --- a/components/LegislatorProfile/TabComponents/FinanceTab.tsx +++ b/components/LegislatorProfile/TabComponents/FinanceTab.tsx @@ -1,5 +1,283 @@ -import { TabBlock } from "../LegislatorComponents" +import { useTranslation } from "next-i18next" +import { MembersFinance } from "components/db/membersFinance" -export function FinanceTab() { - return - Finance +function formatCurrency(n?: number | null): string { + if (n == null || isNaN(n)) return "$0" + return "$" + Math.round(n).toLocaleString() +} + +function formatPct(value: number, total: number): string { + if (total === 0) return "0%" + return Math.round((value / total) * 100) + "%" +} + +interface CategoryRow { + name: string + value: number +} + +export function FinanceTab({ finance }: { finance?: MembersFinance }) { + const { t } = useTranslation("legislators") + + if (!finance) { + return

{t("finance.noData")}

+ } + + const inKindTotal = + (finance.inKind?.individual?.amount ?? 0) + + (finance.inKind?.committee?.amount ?? 0) + + (finance.inKind?.union?.amount ?? 0) + + (finance.inKind?.unitemized?.amount ?? 0) + + const candidateFundsTotal = + (finance.candidateFunds?.loans?.amount ?? 0) + + (finance.candidateFunds?.contributions?.amount ?? 0) + + const categories: CategoryRow[] = [ + { + name: t("finance.breakdown.individual"), + value: finance.breakdown?.individual?.amount ?? 0 + }, + { + name: t("finance.breakdown.committee"), + value: finance.breakdown?.committee?.amount ?? 0 + }, + { + name: t("finance.breakdown.union"), + value: finance.breakdown?.union?.amount ?? 0 + }, + { + name: t("finance.breakdown.unitemized"), + value: finance.breakdown?.unitemized?.amount ?? 0 + }, + { name: t("finance.breakdown.candidateFunds"), value: candidateFundsTotal }, + { name: t("finance.breakdown.inKind"), value: inKindTotal } + ] + .filter(c => c.value > 0) + .sort((a, b) => b.value - a.value) + + const total = categories.reduce((sum, c) => sum + c.value, 0) + const processingFees = finance.breakdown?.processingFees?.amount ?? 0 + + const smallDonorTotal = + (finance.breakdown?.smallDonors?.itemized?.amount ?? 0) + + (finance.breakdown?.unitemized?.amount ?? 0) + + const cycleYears = Object.keys(finance.years ?? {}).map(Number) + const cycleYear = cycleYears.length + ? Math.max(...cycleYears) + : new Date().getFullYear() + + const totalSpentAsOf = finance.lastUpdated + ? finance.lastUpdated + .toDate() + .toLocaleDateString("en-US", { month: "short", year: "numeric" }) + : "" + + const formatFullDate = (ts?: { toDate: () => Date }) => + ts + ? ts.toDate().toLocaleDateString("en-US", { + month: "short", + day: "numeric", + year: "numeric" + }) + : "" + + const bankDataAsOf = formatFullDate(finance.bankDataAsOf) + const depositDataAsOf = formatFullDate(finance.depositDataAsOf) + + const statBoxes = [ + { + label: t("finance.stats.totalRaised"), + value: formatCurrency(finance.totalRaised), + subtitle: t("finance.stats.totalRaisedSubtitle", { + count: finance.contributorCount ?? 0 + }), + footnote: t("finance.stats.totalRaisedFootnote", { date: bankDataAsOf }) + }, + { + label: t("finance.stats.totalSpent"), + value: formatCurrency(finance.totalSpent), + subtitle: t("finance.stats.totalSpentSubtitle", { date: totalSpentAsOf }), + footnote: undefined as string | undefined + }, + { + label: t("finance.stats.smallDonors"), + value: formatPct(smallDonorTotal, total), + subtitle: t("finance.stats.smallDonorsSubtitle"), + footnote: undefined as string | undefined + }, + { + label: t("finance.stats.cashOnHand"), + value: formatCurrency(finance.cashOnHand), + subtitle: t("finance.stats.cashOnHandSubtitle"), + footnote: undefined as string | undefined + } + ] + + return ( +
+
+ {t("finance.electionCycleHeading", { year: cycleYear })} +
+ +
+ {statBoxes.map(({ label, value, subtitle, footnote }) => ( +
+
+
+ {value} +
+
+ {label} +
+
+ {subtitle} +
+ {footnote && ( +
+ {footnote} +
+ )} +
+
+ ))} +
+ +
+ {t("finance.breakdownHeading")} +
+ + {categories.length === 0 ? ( +

{t("finance.noContributions")}

+ ) : ( +
+
+ {t("finance.table.category")} +
+ + {t("finance.table.amount")} + + + {t("finance.table.share")} + +
+
+ + {categories.map((c, i) => ( +
+ {c.name} +
+ + {formatCurrency(c.value)} + + + + {formatPct(c.value, total)} + + +
+
+ ))} + +

+ {depositDataAsOf + ? t("finance.sourceWithDate", { date: depositDataAsOf }) + : t("finance.source")} +

+
+ )} + + {processingFees > 0 && ( +

+ {t("finance.processingFees", { + amount: formatCurrency(processingFees) + })} +

+ )} +
+ ) } diff --git a/components/LegislatorProfile/TabComponents/TestimonyTab.tsx b/components/LegislatorProfile/TabComponents/TestimonyTab.tsx index eb3bc6e04..74f6383fa 100644 --- a/components/LegislatorProfile/TabComponents/TestimonyTab.tsx +++ b/components/LegislatorProfile/TabComponents/TestimonyTab.tsx @@ -1,5 +1,98 @@ +import { useMemo } from "react" +import { useTranslation } from "next-i18next" +import styled from "styled-components" + import { TabBlock } from "../LegislatorComponents" -export function TestimonyTab() { - return - Testimony +import { useAuth } from "components/auth" +import { usePublishedTestimonyListing } from "components/db/testimony/usePublishedTestimonyListing" +import { NoResults } from "components/search/NoResults" +import { TestimonyItem } from "components/TestimonyCard/TestimonyItem" + +const DisclaimerBlock = styled.div` + align-items: flex-start; + background-color: #f0f4ff; + border-color: #b8c0c9; + border-radius: 5px; + border-style: solid; + border-width: 1px; + color: #1a3185; + display: flex; + font-size: 13px; + gap: 10px; + line-height: 1.6; + margin-top: 14px; + margin-bottom: 14px; + padding: 12px 16px; +` + +function Disclaimer({ fullname }: { fullname?: string }) { + const { t } = useTranslation("legislators") + + return ( + + + + + + +
+ {fullname} {t("canSubmit")} +
+
+ ) +} + +export function TestimonyTab({ + legislatorId, + name +}: { + legislatorId: string + name: string +}) { + const { t } = useTranslation("testimony") + const { user } = useAuth() + + const testimony = usePublishedTestimonyListing({ + uid: legislatorId + }) + + const testimonies = useMemo(() => { + const legislatorTestimonies = testimony.items.result ?? [] + + // Sort by publishedAt (newest first), then take 4 most recent + return [...legislatorTestimonies] + .sort((a, b) => b.publishedAt.toMillis() - a.publishedAt.toMillis()) + .slice(0, 4) + }, [testimony.items.result]) + + return ( + <> + + {testimonies.length > 0 && legislatorId ? ( +
+ {testimonies.map(testimony => ( + + + + ))} +
+ ) : ( + + {t("viewTestimony.noTestimonies")} + + )} + + ) } diff --git a/components/LegislatorProfile/TabComponents/TestimonyTab_PendingProfileLink.tsx b/components/LegislatorProfile/TabComponents/TestimonyTab_PendingProfileLink.tsx deleted file mode 100644 index 12b8174fd..000000000 --- a/components/LegislatorProfile/TabComponents/TestimonyTab_PendingProfileLink.tsx +++ /dev/null @@ -1,95 +0,0 @@ -import { useMemo } from "react" -import { useTranslation } from "next-i18next" -import styled from "styled-components" - -import { TabBlock } from "../LegislatorComponents" - -import { useAuth } from "components/auth" -import { usePublishedTestimonyListing } from "components/db/testimony/usePublishedTestimonyListing" -import { NoResults } from "components/search/NoResults" -import { TestimonyItem } from "components/TestimonyCard/TestimonyItem" - -const DisclaimerBlock = styled.div` - align-items: flex-start; - background-color: #f0f4ff; - border: "1px #d1d6e7 solid"; - border-radius: 5px; - color: #1a3185; - display: flex; - font-size: 13px; - gap: 10px; - line-height: 1.6; - margin-top: 14px; - margin-bottom: 14px; - padding: 12px 16px; -` - -function Disclaimer({ fullname }: { fullname?: string }) { - const { t } = useTranslation("legislators") - - return ( - - - - - - -
- {fullname} {t("canSubmit")} -
-
- ) -} - -export function Testimony({ - fullname, - pageId -}: { - fullname?: string - pageId?: string -}) { - const { t } = useTranslation("testimony") - const { user } = useAuth() - - const testimony = usePublishedTestimonyListing({ - uid: pageId - }) - - const allTestimonies = useMemo(() => { - const legislatorTestimonies = testimony.items.result ?? [] - - // Combine and sort by publishedAt (newest first), then take 4 most recent - return [...legislatorTestimonies] - .sort((a, b) => b.publishedAt.toMillis() - a.publishedAt.toMillis()) - .slice(0, 4) - }, [testimony.items.result]) - - return ( - <> - - {allTestimonies.length > 0 ? ( -
- {allTestimonies.map(testimony => ( - - - - ))} -
- ) : ( - {t("viewTestimony.noTestimonies")} - )} - - ) -} diff --git a/components/OurTeam/Partners.tsx b/components/OurTeam/Partners.tsx index 5ab695e1b..c80bea983 100644 --- a/components/OurTeam/Partners.tsx +++ b/components/OurTeam/Partners.tsx @@ -14,7 +14,7 @@ export const LocalizedContent = (props: { components={{ a: ( +} + +export function useMembersFinance(court: number, memberId?: string) { + const { loading, result, error } = useAsync(getFinance, [court, memberId]) + return useMemo( + () => ({ finance: result, loading, error }), + [loading, result, error] + ) +} + +async function getFinance( + court: number, + memberId?: string +): Promise { + if (!memberId) return undefined + const data = await loadDoc( + `/generalCourts/${court}/membersFinance/${memberId}` + ) + return data as MembersFinance | undefined +} diff --git a/components/db/profile/urlCleanup.ts b/components/db/profile/urlCleanup.ts index 26d09b13a..f2fe17e5c 100644 --- a/components/db/profile/urlCleanup.ts +++ b/components/db/profile/urlCleanup.ts @@ -7,7 +7,7 @@ export function cleanSocialLinks(network: keyof SocialLinks, link: string) { const index: number = path.indexOf(".com/") + 5 path = path.substring(index) } - if (network === "mastodon" && path.startsWith("@")) { + if (path && network === "mastodon" && path.startsWith("@")) { path = path.substring(1) } } diff --git a/components/homepage/FeaturesSection.tsx b/components/homepage/FeaturesSection.tsx index 750fc86c0..60f0f98a2 100644 --- a/components/homepage/FeaturesSection.tsx +++ b/components/homepage/FeaturesSection.tsx @@ -34,7 +34,7 @@ export default function FeaturesSection() {
{t("hearings.appPreviewAlt")}
diff --git a/functions/src/events/HearingScraper.ts b/functions/src/events/HearingScraper.ts index 5e65286eb..7e19f8bac 100644 --- a/functions/src/events/HearingScraper.ts +++ b/functions/src/events/HearingScraper.ts @@ -138,9 +138,11 @@ export class HearingPostProcessor { | FirebaseFirestore.DocumentSnapshot, { limit, + bucketName, refetch = false }: { limit?: number + bucketName?: string refetch?: boolean } ): Promise { @@ -185,7 +187,9 @@ export class HearingPostProcessor { videos = data.videos } - let nextVideos = await this.submitNextTranscription(eventId, videos) + let nextVideos = await this.submitNextTranscription(eventId, videos, { + bucketName + }) count += 1 if (!nextVideos) return false while (nextVideos) { @@ -196,7 +200,9 @@ export class HearingPostProcessor { if (limit && count >= limit) { return true } - nextVideos = await this.submitNextTranscription(eventId, nextVideos) + nextVideos = await this.submitNextTranscription(eventId, nextVideos, { + bucketName + }) count += 1 } return true @@ -204,7 +210,12 @@ export class HearingPostProcessor { async submitNextTranscription( eventId: number, - videos: Video[] + videos: Video[], + { + bucketName + }: { + bucketName?: string + } = {} ): Promise { const nextTranscription = videos.findIndex(item => !item.transcriptionId) if (nextTranscription < 0) { @@ -212,7 +223,8 @@ export class HearingPostProcessor { } const result = await assemblyAI().submitTranscription({ EventId: eventId, - videoUrl: videos[nextTranscription].url + videoUrl: videos[nextTranscription].url, + bucketName: bucketName }) if (result.status === ("error" as const)) { functions.logger.error(`Error during ${result.type}: ${result.error}`) diff --git a/functions/src/index.ts b/functions/src/index.ts index 95b515dd3..e11b30569 100644 --- a/functions/src/index.ts +++ b/functions/src/index.ts @@ -58,10 +58,12 @@ export { unfollowUser, getFollowers } from "./subscriptions" +export { scrapeElections } from "./legislators" export { transcription } from "./webhooks" export { matchOcpfMembers } from "./ocpf/matchOcpfMembers" +export { scrapeOcpfFinance } from "./ocpf/scrapeOcpfFinance" export * from "./triggerPubsubFunction" diff --git a/functions/src/legislators/ElectionScraper.ts b/functions/src/legislators/ElectionScraper.ts new file mode 100644 index 000000000..0f2c33272 --- /dev/null +++ b/functions/src/legislators/ElectionScraper.ts @@ -0,0 +1,50 @@ +import { runWith, RuntimeOptions } from "firebase-functions" +import { db } from "../firebase" +import { fetchElectionsData } from "./scrapeElections" + +export class ElectionScraper { + private schedule + private timeout + private memory + + constructor( + schedule: string = "every 24 hours", + timeout: number = 480, + memory: RuntimeOptions["memory"] = "256MB" + ) { + this.schedule = schedule + this.timeout = timeout + this.memory = memory + } + + get function() { + return runWith({ + timeoutSeconds: this.timeout, + memory: this.memory, + maxInstances: 1 + }) + .pubsub.schedule(this.schedule) + .onRun(() => this.run()) + } + + private async run(yearTo?: number, yearFrom?: number) { + const date = new Date() + yearTo = yearTo ?? date.getFullYear() + yearFrom = yearFrom ?? (date.getMonth() < 6 ? yearTo - 1 : yearTo) + + const list = await fetchElectionsData(yearFrom, yearTo) + + if (!list) return + + const writer = db.bulkWriter() + + for (let item of list) { + const id = item.id + writer.set(db.doc(`/electionResults/${id}`), item, { merge: true }) + } + + await writer.close() + } +} + +export const scrapeElections = new ElectionScraper().function diff --git a/functions/src/legislators/electionTypes.ts b/functions/src/legislators/electionTypes.ts new file mode 100644 index 000000000..efc5824ac --- /dev/null +++ b/functions/src/legislators/electionTypes.ts @@ -0,0 +1,120 @@ +import { + Array, + Union, + Literal, + String, + Boolean, + Number, + Optional, + Static, + Record +} from "runtypes" + +export const officeIds = { + President: 1, + "U.S. Senate": 6, + "U.S. House": 5, + Governor: 3, + "Lieutenant Governor": 4, + "Attorney General": 12, + "Secretary of the Commonwealth": 45, + Treasurer: 53, + Auditor: 90, + "Governor's Council": 529, + "State Senate": 9, + "State Representative": 8, + "Party State Committee Man": 521, + "Party State Committee Woman": 522, + "Delegate to the National Convention": 543, + "Alternate Delegate to the National Convention": 544, + "District Attorney": 530, + "Clerk of Courts": 15, + "Clerk of Superior Court (Civil)": 534, + "Clerk of Superior Court (Criminal)": 535, + "Clerk of Supreme Judicial Court": 536, + "County Charter Commission": 532, + "Register of Deeds": 384, + Sheriff: 386, + "County Treasurer": 389, + "Probate Judge": 434, + "Register of Probate": 537, + "Council of Governments Executive Committee": 531 +} as const +export const offices = Object.keys(officeIds) as (keyof typeof officeIds)[] +export type Office = keyof typeof officeIds + +export const parties = [ + "General", + "American", + "Democratic", + "Green-rainbow", // Green-rainbow has the case Green-Rainbow in some scenarios + "Independent Voters", + "Libertarian", + "Republican", + "Working Families", + "United Independent Party", + "United Independent", + "Independent", + "Green", + "Workers Party" +] as const +export type Party = (typeof parties)[number] +export const Party = Union( + Literal(parties[0]), + ...parties.slice(1).map(Literal) +) + +export const stages = ["Primaries", ...parties] +export type StageSelection = (typeof stages)[number] +export const StageSelection = Union( + Literal(stages[0]), + ...stages.slice(1).map(Literal) +) + +export const ElectionCandidate = Record({ + name: String, + writeIn: Boolean, + votes: Number, + // Note: During a primary election, no candidate is assigned a party + party: Optional(String) +}) + +export type ElectionCandidate = Static + +export const ElectionResult = Record({ + candidates: Array(ElectionCandidate), + otherVotes: Number, + blankVotes: Number, + noPreferenceVotes: Number.optional(), + totalVotes: Number +}) + +export type ElectionStage = Static + +export const ElectionStage = Record({ + party: Party, + special: Boolean +}) + +export type ElectionResult = Static + +export const ElectionInfo = Record({ + id: Number, + // Aligned with Candidates[], for use with Firestore array-contains + // More specific than name; for example, a dual election (such as for president/vice president) + // has a name "Harris and Walz", but the link is to the page for Kamala Harris + candidateUrls: Array(String), + // As far as I can tell, the only place exact date is shown + // is the search menu and PDFs + year: Number, + office: String, + // Seemingly non-standardized + districts: String, + // For general elections, party === "General" + party: Party, + special: Boolean, + // If this is missing, candidateUrls is deliberately [] + result: Optional(ElectionResult) +}) + +export type ElectionInfo = Static diff --git a/functions/src/legislators/index.ts b/functions/src/legislators/index.ts new file mode 100644 index 000000000..7cd688a9a --- /dev/null +++ b/functions/src/legislators/index.ts @@ -0,0 +1 @@ +export { scrapeElections } from "./ElectionScraper" diff --git a/functions/src/legislators/scrapeElections.test.ts b/functions/src/legislators/scrapeElections.test.ts new file mode 100644 index 000000000..d932a1629 --- /dev/null +++ b/functions/src/legislators/scrapeElections.test.ts @@ -0,0 +1,55 @@ +import { electionsPageInfo } from "./scrapeElections" + +import fs from "fs" +import path from "path" +import { JSDOM, VirtualConsole } from "jsdom" + +const FIXTURES_DIR = path.resolve( + __dirname, + "../../../tests/fixtures/electionResults" +) + +const electionTable = fs.readFileSync( + path.join(FIXTURES_DIR, "2016_general_table.html"), + "utf8" +) + +global.fetch = jest.fn().mockResolvedValue({ + ok: true, + status: 200, + text: async () => electionTable +}) as jest.Mock + +describe("electionsPageInfo test", () => { + for (const htmlFile of [ + "2016_general.html", + "2022_to_2026.html", + "2024_republican_primaries.html" + ]) { + const basename = path.basename(htmlFile, ".html") + + it(basename, async () => { + const html = fs.readFileSync(path.join(FIXTURES_DIR, htmlFile), "utf8") + + const virtualConsole = new VirtualConsole() + virtualConsole.on("jsdomError", error => { + if (error.message.includes("Could not parse CSS stylesheet")) { + return + } + console.error(error) + }) + const dom = new JSDOM(html, { virtualConsole }) + + const actual = await electionsPageInfo(dom) + const expected = JSON.parse( + fs.readFileSync(path.join(FIXTURES_DIR, `${basename}.json`), "utf8") + ) + + expect(actual).toHaveLength(expected.length) + + for (const [i, expectedItem] of expected.entries()) { + expect(actual[i]).toEqual(expectedItem) + } + }) + } +}) diff --git a/functions/src/legislators/scrapeElections.ts b/functions/src/legislators/scrapeElections.ts new file mode 100644 index 000000000..fe7cb22e9 --- /dev/null +++ b/functions/src/legislators/scrapeElections.ts @@ -0,0 +1,377 @@ +import { JSDOM, VirtualConsole } from "jsdom" +import { logger } from "firebase-functions" +import { + ElectionStage, + parties, + Party, + ElectionInfo, + StageSelection, + ElectionResult, + ElectionCandidate, + Office, + officeIds +} from "./electionTypes" + +const REQUEST_DELAY_MS = process.env.NODE_ENV === "test" ? 0 : 3000 + +let queue: Promise = Promise.resolve() + +function waitAfterPrevious( + fn: () => Promise, + delayMs: number +): Promise { + const run = queue.then(async () => { + const result = await fn() + + await new Promise(resolve => setTimeout(resolve, delayMs)) + + return result + }) + + // Keep the queue alive even if this request fails + queue = run.catch(() => {}) + + return run +} + +const limitedFetch = (url: string) => + waitAfterPrevious(async () => (await fetch(url)).text(), REQUEST_DELAY_MS) + +const baseURL = "https://electionstats.state.ma.us" + +function parsePartyString(affiliationText: string): { + writeIn: boolean + party?: string +} { + const writeIn = /\bwrite-in\b/i.test(affiliationText) + + let party + affiliationText = affiliationText + .replace(/\(?write-in\)?/i, "") + .replace(/unenrolled/i, "") + .trim() + if (affiliationText) { + party = affiliationText + } + + return { + writeIn, + ...(party ? { party } : {}) + } +} + +function precinctHeaderText(th: Element | undefined): string | undefined { + const a = th?.querySelector("a[title]") ?? th?.querySelector("a[oldtitle]") + return ( + a?.getAttribute("title") ?? + a?.getAttribute("oldtitle") ?? + th?.textContent?.trim() + ) +} + +async function fetchElectionData( + url: string +): Promise<[ElectionResult, string[]]> { + const text = await limitedFetch(url) + + const virtualConsole = new VirtualConsole() + virtualConsole.on("jsdomError", error => { + if (error.message.includes("Could not parse CSS stylesheet")) { + return + } + logger.error(error) + }) + + const dom = new JSDOM(text, { virtualConsole }) + const document = dom.window.document + + const table = document.querySelector("table.precinct_data") + if (!table) { + throw new Error(`No result table in ${url}`) + } + const headers = Array.from(table.querySelectorAll("thead tr th")).map( + th => precinctHeaderText(th) ?? "" + ) + const totalRow = table.querySelector("tbody tr.total") + if (!totalRow) { + throw new Error(`${url} has no table row for 'total'`) + } + const cells = Array.from(totalRow.querySelectorAll("td")) + const values = new Map() + // Avoid leftward descriptive titles + headers.reverse() + cells.reverse() + headers.forEach((header, i) => { + const text = cells[i]?.textContent?.replace(/,/g, "").trim() + if (text && /^\d+$/.test(text)) { + values.set(header, parseInt(text)) + } + }) + + const candidates = Array.from( + document.querySelectorAll(".candidate_key .item") + ).map(item => { + const nameElem = item.querySelector(".display_name > a") + const name = nameElem?.textContent?.trim() + if (!nameElem || !name) { + throw new Error(`${item.outerHTML} does not have ".display_name > a"`) + } + if (!values.has(name)) { + throw new Error( + `The table ${ + item.outerHTML + } does not have votes for the name ${name} (from ${JSON.stringify( + values, + null, + 2 + )})` + ) + } + const votes = values.get(name)! + return { + name, + party: parsePartyString( + item.querySelector(".party")?.textContent?.trim() ?? "" + ), + votes, + candidateUrl: `${baseURL}${nameElem.href}` + } + }) + + candidates.sort((a, b) => b.votes - a.votes) + + const candidateVotes = candidates.map(candidate => { + return { + name: candidate.name, + votes: candidate.votes, + ...candidate.party + } + }) + + const noPreference = values.has("No Preference") + ? { noPreferenceVotes: values.get("No Preference") } + : {} + + const [otherVotes, blankVotes, totalVotes] = [ + values.get("All Others"), + values.get("Blanks"), + values.get("Total Votes Cast") + ] + if (!totalVotes) { + throw new Error(`${url} has no 'Total' column`) + } + return [ + { + candidates: candidateVotes, + otherVotes: otherVotes ?? 0, + blankVotes: blankVotes ?? 0, + totalVotes, + ...noPreference + }, + candidates.map(candidate => candidate.candidateUrl) + ] +} + +function parseElectionStage(input: string): ElectionStage | null { + const escape = (s: string) => s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&") + + const partyPattern = parties + .map(escape) + .sort((a, b) => b.length - a.length) + .join("|") + + const regex = new RegExp(`^(Special )?(${partyPattern}) (Primary|Election)$`) + + const match = input.match(regex) + if (!match) { + return null + } + + const [, special, party, stage] = match + + // Only "General Election" is valid. + if (stage === "Election" && party !== "General") { + return null + } + + // Only non-General parties have primaries. + if (stage === "Primary" && party === "General") { + return null + } + + return { + party: Party.check(party), + special: special !== undefined + } +} + +function parseElectionTable(table: Element): [ElectionResult, string[]] | null { + if (table.querySelector(".other-candidates")) { + return null + } + const candidateRows = table.querySelectorAll( + ":scope > tr:not(.non_candidate):not(.more_info)" + ) + + const candidates = Array.from(candidateRows).map(row => { + const nameElem = row.querySelector(".candidate .name a") + const name = nameElem?.textContent?.trim() || "" + const partyText = + row.querySelector(".candidate .party")?.textContent?.trim() || "" + const link = nameElem?.href + + const voteText = row + .querySelector("td:nth-child(2)") + ?.textContent?.replace(/,/g, "") + if (!name || !voteText || !link) { + throw new Error( + `One of name, voteText, or candidate link is missing from ${row.outerHTML}` + ) + } + + const candidate = { + name, + votes: parseInt(voteText, 10), + ...parsePartyString(partyText) + } + + const ret: [ElectionCandidate, string] = [candidate, `${baseURL}${link}`] + return ret + }) + + candidates.sort((a, b) => b[0].votes - a[0].votes) + + const getSummaryValue = (selector: string): number | null => { + const row = table.querySelector(selector) + + const text = row + ?.querySelector("td:nth-child(2)") + ?.textContent?.replace(/,/g, "") + if (!text) { + return null + } + + return parseInt(text, 10) + } + + const [otherVotes, blankVotes, totalVotes] = [ + getSummaryValue("tr.n_all_other_votes"), + getSummaryValue("tr.n_blank_votes"), + getSummaryValue("tr.n_total_votes") + ] + const noPreference = getSummaryValue("tr.n_no_preference_votes") + if (!totalVotes) { + throw new Error(`No total votes row in ${table.outerHTML}`) + } + return [ + { + candidates: candidates.map(item => item[0]), + otherVotes: otherVotes ?? 0, + blankVotes: blankVotes ?? 0, + totalVotes, + ...(noPreference ? { noPreferenceVotes: noPreference } : {}) + }, + candidates.map(item => item[1]) + ] +} + +export async function electionsPageInfo( + dom: JSDOM +): Promise<(ElectionInfo | null)[]> { + const elements = Array.from( + dom.window.document.querySelectorAll('[id^="election-id-"]') + ) + const info = elements.map(async electionElem => { + try { + const match = electionElem.id.match(/^election-id-(\d+)$/) + if (!match) { + throw new Error( + `In ${electionElem.id}, the id was not parseable as an integer` + ) + } + const electionId = parseInt(match[1], 10) + const electTDs = Array.from(electionElem.children).filter( + child => child.tagName === "TD" + ) + const yearText = electTDs[0].textContent + if (!yearText) { + throw new Error(`Year not present in ${electionElem.outerHTML}`) + } + const year = parseInt(yearText, 10) + const office = electTDs[1].textContent?.trim() + const districts = electTDs[2].textContent?.trim() + if (!year || !office || !districts) { + throw new Error( + `Year, office, or districts not present in ${electionElem.outerHTML}` + ) + } + const stage = parseElectionStage(electTDs[3].textContent?.trim() ?? "") + if (!stage) { + throw new Error( + `${stage} is not a recognized election stage: ${electTDs[3].outerHTML}` + ) + } + if (electTDs[4].querySelector(":scope > .no_candidates")) { + return ElectionInfo.check({ + id: electionId, + year, + office, + districts, + candidateUrls: [], + ...stage + }) + } + const candidateTable = electTDs[4].querySelector(":scope tbody") + if (!candidateTable) { + throw new Error(`No candidate table in ${electionElem.outerHTML}`) + } + const [result, candidateUrls] = + parseElectionTable(candidateTable) ?? + (await (async () => { + const electionDetailsUrl = `${baseURL}/elections/view/${electionId}/` + return await fetchElectionData(electionDetailsUrl) + })()) + + return ElectionInfo.check({ + id: electionId, + year, + office, + districts, + ...stage, + candidateUrls, + result + }) + } catch (error) { + logger.error(error) + return null + } + }) + return Promise.all(info) +} + +export async function fetchElectionsData( + startYear: number, + endYear: number, + office?: Office, + stage: StageSelection | null = "General" +): Promise { + const officeId = office ? `/office_id:${officeIds[office]}` : "" + const electionStage = stage ? `/stage:${stage}` : "" + const url = `${baseURL}/elections/search/year_from:${startYear}/year_to:${endYear}${officeId}${electionStage}` + const text = await limitedFetch(url) + const virtualConsole = new VirtualConsole() + virtualConsole.on("jsdomError", error => { + if (error.message.includes("Could not parse CSS stylesheet")) { + return + } + console.error(error) + }) + const dom = new JSDOM(text, { virtualConsole }) + const elections: (ElectionInfo | null)[] = await electionsPageInfo(dom) + if (elections.length === 1200) { + logger.error( + `The url ${url} has reached the maximum number of election results provided, please use a more refined query` + ) + } + return elections.filter((item): item is ElectionInfo => item !== null) +} diff --git a/functions/src/ocpf/scrapeOcpfFinance.ts b/functions/src/ocpf/scrapeOcpfFinance.ts new file mode 100644 index 000000000..bb39e1edc --- /dev/null +++ b/functions/src/ocpf/scrapeOcpfFinance.ts @@ -0,0 +1,633 @@ +// TODO: After validating output against the OCPF website, flip to: +// export const scrapeOcpfFinance = functions.pubsub.schedule("every 24 hours").onRun(...) +import * as functions from "firebase-functions" +import { getAuth } from "firebase-admin/auth" +import axios from "axios" +import unzipper from "unzipper" +import * as readline from "readline" +import { db, Timestamp } from "../firebase" +import { currentGeneralCourt } from "../shared" +import { + OcpfMemberMapping, + MembersFinance, + MembersFinanceBreakdown, + MembersFinanceCandidateFunds, + MembersFinanceInKind, + MembersFinanceYearData +} from "./types" + +// Set to null to run all members. Use individual CPF_ID to validate single-member output. +const TEST_CPF_ID: number | null = null // For testing, can use 16883, Rebecca L. Rausch, RLR0 + +const OCPF_BASE_URL = "https://ocpf2.blob.core.windows.net/downloads/data2" + +const YEARS = ["2025", "2026"] + +// Annual rollup report types to be excluded. +// Including these would double-count both receipts and expeditures. +// Note: 32, 36, 45, and 52 not relevant to individual legislators, but not harmful to exclude +const YEAR_END_REPORT_TYPE_IDS = new Set([ + 11, // Year-End Report (Depository) + 24, // Year-End Report (Non-Depository) + 32, // Year-End Report (PAC) + 36, // IEPAC Year-End Report + 45, // Year-End Report (Ballot Question Committee) + 52, // Year-End Report (Local Party Committee) + 113 // Year-End Report (Municipal) +]) + +// Committee lifecycle reports: like Year-End reports, these roll up a date +// range already covered by periodic Bank Reports (verified empirically โ€” +// CPF 16576's Dissolution Report exactly matched the sum of two Bank Reports +// covering the same period, $1,583.64). Kept separate from +// YEAR_END_REPORT_TYPE_IDS because their date range doesn't align to a +// calendar year, so they shouldn't feed the yearEndCheck reconciliation. +const LIFECYCLE_REPORT_TYPE_IDS = new Set([ + 12, // Dissolution Report + 14, // Transition-Out Report + 15 // Transition-In Report +]) + +// โ”€โ”€ Accumulator types โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + +interface MutableBreakdownEntry { + count: number + amount: number +} + +interface MemberAccumulator { + cpfId: number + totalRaised: number + totalSpent: number + cashOnHand: number + cashOnHandEndDateMs: number // End_Date (as ms) of the most recent Bank Report (type 70) seen + startBalance: number + startBalanceStartDateMs: number // Start_Date (as ms) of the earliest Bank Report (type 70) seen + depositEndDateMs: number // End_Date (as ms) of the most recent Deposit Report (type 60) seen + contributorCount: number + breakdown: { + individual: MutableBreakdownEntry + committee: MutableBreakdownEntry + union: MutableBreakdownEntry + unitemized: { amount: number } + smallDonors: { itemized: MutableBreakdownEntry } + processingFees: MutableBreakdownEntry + } + candidateFunds: { + loans: MutableBreakdownEntry + contributions: MutableBreakdownEntry + } + inKind: { + individual: MutableBreakdownEntry + committee: MutableBreakdownEntry + union: MutableBreakdownEntry + unitemized: { amount: number } + } + years: Record< + string, + { + totalRaised: number + totalSpent: number + breakdown: { + individual: MutableBreakdownEntry + committee: MutableBreakdownEntry + union: MutableBreakdownEntry + unitemized: { amount: number } + smallDonors: { itemized: MutableBreakdownEntry } + processingFees: MutableBreakdownEntry + } + } + > + yearEndCheck: Record< + string, + { receiptsTotal: number; expendituresTotal: number } | null + > +} + +function emptyEntry(): MutableBreakdownEntry { + return { count: 0, amount: 0 } +} + +function newAccumulator(cpfId: number): MemberAccumulator { + const yearInit = () => ({ + totalRaised: 0, + totalSpent: 0, + breakdown: { + individual: emptyEntry(), + committee: emptyEntry(), + union: emptyEntry(), + unitemized: { amount: 0 }, + smallDonors: { itemized: emptyEntry() }, + processingFees: emptyEntry() + } + }) + return { + cpfId, + totalRaised: 0, + totalSpent: 0, + cashOnHand: 0, + cashOnHandEndDateMs: 0, + startBalance: 0, + startBalanceStartDateMs: Infinity, + depositEndDateMs: 0, + contributorCount: 0, + breakdown: { + individual: emptyEntry(), + committee: emptyEntry(), + union: emptyEntry(), + unitemized: { amount: 0 }, + smallDonors: { itemized: emptyEntry() }, + processingFees: emptyEntry() + }, + candidateFunds: { loans: emptyEntry(), contributions: emptyEntry() }, + inKind: { + individual: emptyEntry(), + committee: emptyEntry(), + union: emptyEntry(), + unitemized: { amount: 0 } + }, + years: Object.fromEntries(YEARS.map(y => [y, yearInit()])), + yearEndCheck: Object.fromEntries(YEARS.map(y => [y, null])) + } +} + +// โ”€โ”€ Cloud Function โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + +export const scrapeOcpfFinance = functions + .runWith({ timeoutSeconds: 540, memory: "512MB" }) + .https.onRequest(async (req, res) => { + if (req.method !== "POST") { + res.status(405).send("Method Not Allowed. Use POST.") + return + } + if (process.env.FUNCTIONS_EMULATOR !== "true") { + const authHeader = req.headers.authorization + if (!authHeader?.startsWith("Bearer ")) { + res.status(401).send("Unauthorized") + return + } + try { + const decoded = await getAuth().verifyIdToken(authHeader.slice(7)) + if (decoded["role"] !== "admin") { + res.status(403).send("Forbidden") + return + } + } catch { + res.status(401).send("Unauthorized") + return + } + } + + // โ”€โ”€ A. Load member mapping โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + const mappingDoc = await db.doc("/config/ocpfMemberMapping").get() + const mapping = (mappingDoc.data() ?? {}) as OcpfMemberMapping + + // Build cpfId โ†’ memberCode reverse map + let cpfIdToMemberCode = new Map( + Object.entries(mapping).map(([memberCode, entry]) => [ + entry.cpfId, + memberCode + ]) + ) + + if (TEST_CPF_ID !== null) { + cpfIdToMemberCode = new Map( + [...cpfIdToMemberCode.entries()].filter( + ([cpfId]) => cpfId === TEST_CPF_ID + ) + ) + functions.logger.info("TEST MODE: filtering to single member", { + cpfId: TEST_CPF_ID + }) + } + + functions.logger.info("Loaded member mapping", { + totalMembers: Object.keys(mapping).length, + activeInRun: cpfIdToMemberCode.size + }) + + // โ”€โ”€ B. Download each year's ZIP; parse reports.txt then report-items.txt โ”€โ”€ + const accumulators = new Map() + + // reportId โ†’ memberCode, for joining with report-items + const reportIdToMemberCode = new Map() + + for (const year of YEARS) { + const url = `${OCPF_BASE_URL}/ocpf-${year}-reports.zip` + functions.logger.info(`Downloading ${url}`) + const buf = await downloadBuffer(url) + await parseReports( + buf, + year, + cpfIdToMemberCode, + accumulators, + reportIdToMemberCode + ) + + functions.logger.info(`Streaming report-items for ${year}`) + await streamReportItems(buf, reportIdToMemberCode, accumulators, year) + } + + // โ”€โ”€ Reconciliation: year-end report vs. summed periodic totals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + // Year-end reports (type 11, etc.) are excluded from accumulation because + // their Receipts_Total/Expenditures_Total are annual rollups that duplicate + // the periodic (Bank Report) totals. + // This check runs only once a year-end report exists (i.e. + // after the calendar year closes) and compares it against what we've summed. + // + // Verified empirically (CPF 16883, 2025): summed Bank Report totals matched + // the Year-End Report exactly ($104,770.60), confirming the type-60 skip + // logic below does not double-count totalRaised/totalSpent. A mismatch here + // would point to some other report type being mis-handled โ€” do not ignore + // it, investigate before trusting the displayed totals. + // + // Note: this only reconciles totalRaised/totalSpent (report-level totals). + // It does NOT catch the separate, known gap between totalRaised (Bank + // Report, after payment-processor fees) and the Contribution Breakdown + // categories total (Deposit Report items, before deduction of fees). This gap is + // found by record type 319 (processing fees), which + // is currently unhandled in accumulateItem's switch. + for (const [memberCode, acc] of accumulators) { + for (const year of YEARS) { + const check = acc.yearEndCheck[year] + if (!check) continue + const summedRaised = acc.years[year]?.totalRaised ?? 0 + const summedSpent = acc.years[year]?.totalSpent ?? 0 + const raisedDiff = Math.abs(check.receiptsTotal - summedRaised) + const spentDiff = Math.abs(check.expendituresTotal - summedSpent) + if (raisedDiff > 0.02 || spentDiff > 0.02) { + functions.logger.warn( + "Year-end totals mismatch โ€” investigate periodic report accumulation", + { + memberCode, + year, + yearEnd: { + receiptsTotal: check.receiptsTotal, + expendituresTotal: check.expendituresTotal + }, + summed: { + receiptsTotal: summedRaised, + expendituresTotal: summedSpent + }, + diff: { receipts: raisedDiff, expenditures: spentDiff } + } + ) + } + } + } + + // โ”€โ”€ C. Write Firestore docs โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + const now = Timestamp.now() + // Firestore batches are limited to 500 operations. MA general courts have ~200 members + // so this is fine, but if we ever exceed 500 members this will need to be chunked. + const batch = db.batch() + + for (const [memberCode, acc] of accumulators) { + const doc = db.doc( + `/generalCourts/${currentGeneralCourt}/membersFinance/${memberCode}` + ) + const data: MembersFinance = { + ocpfCpfId: acc.cpfId, + totalRaised: acc.totalRaised, + totalSpent: acc.totalSpent, + cashOnHand: acc.cashOnHand, + startBalance: acc.startBalance, + contributorCount: acc.contributorCount, + lastUpdated: now, + bankDataAsOf: Timestamp.fromMillis(acc.cashOnHandEndDateMs), + depositDataAsOf: Timestamp.fromMillis(acc.depositEndDateMs), + breakdown: acc.breakdown as MembersFinanceBreakdown, + candidateFunds: acc.candidateFunds as MembersFinanceCandidateFunds, + inKind: acc.inKind as MembersFinanceInKind, + years: Object.fromEntries( + Object.entries(acc.years).map(([y, yd]) => [ + y, + { + totalRaised: yd.totalRaised, + totalSpent: yd.totalSpent, + breakdown: yd.breakdown as MembersFinanceBreakdown, + finalized: acc.yearEndCheck[y] !== null + } as MembersFinanceYearData + ]) + ) + } + batch.set(doc, data) + } + + await batch.commit() + + functions.logger.info("scrapeOcpfFinance complete", { + processed: accumulators.size, + years: YEARS + }) + + res.status(200).json({ + results: { processed: accumulators.size, years: YEARS } + }) + }) + +// โ”€โ”€ Helpers โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ + +async function downloadBuffer(url: string): Promise { + const response = await axios.get(url, { responseType: "arraybuffer" }) + return Buffer.from(response.data as ArrayBuffer) +} + +const REPORT_COLUMN_ALIASES: Record = { + cpfId: ["cpf_id"], + reportId: ["report_id"], + reportTypeId: ["report_type_id"], + receiptsTotal: ["receipts_total"], + receiptsUnitemizedTotal: ["receipts_unitemized_total"], + expendituresTotal: ["expenditures_total"], + startBalance: ["start_balance"], + endBalance: ["end_balance"], + startDate: ["start_date"], + endDate: ["end_date"] +} + +const ITEM_COLUMN_ALIASES: Record = { + reportId: ["report_id"], + recordTypeId: ["record_type_id"], + amount: ["amount"] +} + +function buildIndex( + headers: string[], + aliases: Record +): Record { + const normalized = headers.map(h => h.toLowerCase().replace(/\s+/g, "_")) + const index: Record = {} + for (const [field, aliasList] of Object.entries(aliases)) { + for (const alias of aliasList) { + const i = normalized.indexOf(alias) + if (i !== -1) { + index[field] = i + break + } + } + if (!(field in index)) { + throw new Error( + `Required column '${field}' not found. Headers: ${headers.join(", ")}` + ) + } + } + return index +} + +function col(cols: string[], idx: number): string { + return (cols[idx] ?? "").trim().replace(/^"|"$/g, "") +} + +async function parseReports( + buf: Buffer, + year: string, + cpfIdToMemberCode: Map, + accumulators: Map, + reportIdToMemberCode: Map +): Promise { + const directory = await unzipper.Open.buffer(buf) + const entry = directory.files.find( + f => f.type === "File" && f.path.toLowerCase() === "reports.txt" + ) + if (!entry) throw new Error(`reports.txt not found in zip`) + + const text = (await entry.buffer()).toString("utf8") + const lines = text.split(/\r?\n/) + const rawHeaders = lines[0].split("\t").map(h => h.trim()) + const idx = buildIndex(rawHeaders, REPORT_COLUMN_ALIASES) + + let matched = 0 + for (let i = 1; i < lines.length; i++) { + const line = lines[i] + if (!line.trim()) continue + + const cols = line.split("\t") + const cpfId = parseInt(col(cols, idx.cpfId), 10) + const memberCode = cpfIdToMemberCode.get(cpfId) + if (!memberCode) continue + + const reportId = parseInt(col(cols, idx.reportId), 10) + if (isNaN(reportId)) continue + const reportTypeId = parseInt(col(cols, idx.reportTypeId), 10) + const receiptsTotal = parseFloat(col(cols, idx.receiptsTotal)) || 0 + const receiptsUnitemized = + parseFloat(col(cols, idx.receiptsUnitemizedTotal)) || 0 + const expendituresTotal = parseFloat(col(cols, idx.expendituresTotal)) || 0 + const startBalance = parseFloat(col(cols, idx.startBalance)) || 0 + const endBalance = parseFloat(col(cols, idx.endBalance)) || 0 + + let acc = accumulators.get(memberCode) + if (!acc) { + acc = newAccumulator(cpfId) + accumulators.set(memberCode, acc) + } + + if (YEAR_END_REPORT_TYPE_IDS.has(reportTypeId)) { + // Annual rollup โ€” skip accumulation to avoid double-counting the periodic + // totals already summed above. Store for the reconciliation check below. + if (acc.yearEndCheck[year] === null) { + acc.yearEndCheck[year] = { receiptsTotal, expendituresTotal } + } + matched++ + continue + } + + if (LIFECYCLE_REPORT_TYPE_IDS.has(reportTypeId)) { + // Dissolution/Transition rollup โ€” same double-counting risk as Year-End, + // but not tied to a calendar year, so skipped without feeding yearEndCheck. + matched++ + continue + } + + // Credit Card (type 80) and Reimbursement (type 90) reports are supplemental: + // they itemize spending that the depository bank already captured as bank + // transactions in the monthly Bank Report's Expenditures_Total. Verified + // empirically โ€” for two members the sum of all Bank Reports matched the + // Year-End Report exactly without including type 80/90 amounts, confirming + // their Expenditures_Total is already counted. Their items (354 Credit Card + // Sub-Items, 351 Reimbursement Sub-Items) are not used by accumulateItem(), + // so there is no reason to register their report IDs. + if (reportTypeId === 80 || reportTypeId === 90) { + matched++ + continue + } + + reportIdToMemberCode.set(reportId, memberCode) + + // Deposit Reports (type 60) carry gross contribution amounts (before fees). + // The same money appears net-of-fees in Bank Report (type 70) Receipts_Total, + // so adding both would double-count. Skip the totals for type 60 but keep + // its report_id registered (for 201/202/203/204 item-level breakdown) and + // its unitemized amount (Bank Reports have blank for that field). + if (reportTypeId !== 60) { + acc.totalRaised += receiptsTotal + acc.totalSpent += expendituresTotal + } + acc.breakdown.unitemized.amount += receiptsUnitemized + + if (acc.years[year]) { + if (reportTypeId !== 60) { + acc.years[year].totalRaised += receiptsTotal + acc.years[year].totalSpent += expendituresTotal + } + acc.years[year].breakdown.unitemized.amount += receiptsUnitemized + } + + // Report_Type_ID 70 = Bank Report โ€” use End_Balance from the report with the latest End_Date + const endDate = col(cols, idx.endDate) + const endDateMs = endDate ? new Date(endDate).getTime() : 0 + if (reportTypeId === 70 && endDateMs > acc.cashOnHandEndDateMs) { + acc.cashOnHand = endBalance + acc.cashOnHandEndDateMs = endDateMs + } + // Start_Balance from the Bank Report with the earliest Start_Date, i.e. cash + // on hand at the start of the election cycle. + const startDate = col(cols, idx.startDate) + const startDateMs = startDate ? new Date(startDate).getTime() : Infinity + if (reportTypeId === 70 && startDateMs < acc.startBalanceStartDateMs) { + acc.startBalance = startBalance + acc.startBalanceStartDateMs = startDateMs + } + // Deposit Reports are filed more frequently than Bank Reports, so this + // date is normally later โ€” tracked to show readers why the Contributions + // Breakdown (sourced from Deposit Reports) and Total Raised (sourced from + // Bank Reports) can reflect different "as of" dates. + if (reportTypeId === 60 && endDateMs > acc.depositEndDateMs) { + acc.depositEndDateMs = endDateMs + } + + matched++ + } + + functions.logger.info(`Parsed reports.txt for ${year}`, { matched }) +} + +async function streamReportItems( + buf: Buffer, + reportIdToMemberCode: Map, + accumulators: Map, + year: string +): Promise { + const directory = await unzipper.Open.buffer(buf) + const entry = directory.files.find( + f => f.type === "File" && f.path.toLowerCase() === "report-items.txt" + ) + if (!entry) throw new Error(`report-items.txt not found in zip`) + + const stream = entry.stream() + const rl = readline.createInterface({ input: stream, crlfDelay: Infinity }) + + let isFirst = true + let idx: Record = {} + let processed = 0 + let skipped = 0 + + for await (const line of rl) { + if (!line.trim()) continue + + if (isFirst) { + const rawHeaders = line.split("\t").map(h => h.trim()) + idx = buildIndex(rawHeaders, ITEM_COLUMN_ALIASES) + isFirst = false + continue + } + + const cols = line.split("\t") + const reportId = parseInt(col(cols, idx.reportId), 10) + const memberCode = reportIdToMemberCode.get(reportId) + if (!memberCode) { + skipped++ + continue + } + + const acc = accumulators.get(memberCode) + if (!acc) { + skipped++ + continue + } + + const recordTypeId = parseInt(col(cols, idx.recordTypeId), 10) + const amount = parseFloat(col(cols, idx.amount)) || 0 + + accumulateItem(acc, recordTypeId, amount, year) + processed++ + } + + functions.logger.info(`Streamed report-items.txt for ${year}`, { + processed, + skipped + }) +} + +function accumulateItem( + acc: MemberAccumulator, + recordTypeId: number, + amount: number, + year: string +): void { + const addTo = ( + entry: MutableBreakdownEntry, + alsoYearBreakdown?: MutableBreakdownEntry + ) => { + entry.count++ + entry.amount += amount + if (alsoYearBreakdown) { + alsoYearBreakdown.count++ + alsoYearBreakdown.amount += amount + } + } + + const yb = acc.years[year]?.breakdown + + switch (recordTypeId) { + case 201: // Individual Contribution + addTo(acc.breakdown.individual, yb?.individual) + acc.contributorCount++ + if (amount < 200) { + addTo(acc.breakdown.smallDonors.itemized, yb?.smallDonors?.itemized) + } + break + case 202: // Committee Contribution + addTo(acc.breakdown.committee, yb?.committee) + break + case 203: // Union/Association Contribution + addTo(acc.breakdown.union, yb?.union) + break + case 204: // Non-contribution receipt (refunds, misc.) โ€” not real fundraising. + // Bank Report Receipts_Total (summed into totalRaised in parseReports) + // includes this cash since it did hit the bank, but OCPF's own public + // "Receipts" figure nets it out. Subtract here, once identified, to + // match that definition. Verified empirically against ocpf.us: for + // CPF 16883 (Rausch), totalRaised minus this exact amount ($101.39) + // matched the site's displayed 2026 YTD Receipts to the penny. + acc.totalRaised -= amount + if (acc.years[year]) acc.years[year].totalRaised -= amount + break + case 206: // Candidate Loan + case 331: // Out-of-pocket expense (as loan) + addTo(acc.candidateFunds.loans) + break + case 332: // Out-of-pocket expense (as contribution) + addTo(acc.candidateFunds.contributions) + break + case 401: // Individual In-kind + addTo(acc.inKind.individual) + break + case 402: // Committee In-kind + addTo(acc.inKind.committee) + break + case 403: // Union In-kind + addTo(acc.inKind.union) + break + case 420: // Aggregated un-itemized in-kind + acc.inKind.unitemized.amount += amount + break + case 319: // Payment-processor fee (see breakdown.processingFees doc comment) + addTo(acc.breakdown.processingFees, yb?.processingFees) + break + // 205 (Bank Interest) and 220 (Aggregated un-itemized) totals sourced from reports.txt, not items + default: + break + } +} diff --git a/functions/src/ocpf/types.ts b/functions/src/ocpf/types.ts index ae61e2ce9..89b5b1b1f 100644 --- a/functions/src/ocpf/types.ts +++ b/functions/src/ocpf/types.ts @@ -38,4 +38,60 @@ export interface MembersFinanceBreakdown { committee: FinanceBreakdownEntry union: FinanceBreakdownEntry unitemized: { amount: number } + // Subset of `individual` โ€” itemized (type 201) contributions under $200. + // Combined with `unitemized` on the frontend for the "Small Donors" stat. + smallDonors?: { + itemized: FinanceBreakdownEntry + } + // type 319 โ€” payment-processor fees deducted between the gross Deposit + // Report amount (reflected in individual/committee/union above) and the + // net Bank Report amount (reflected in totalRaised). Not a contribution + // category; used only to explain the gap between the two on the frontend. + processingFees?: FinanceBreakdownEntry +} + +export interface MembersFinanceCandidateFunds { + loans: FinanceBreakdownEntry // types 206 + 331 + contributions: FinanceBreakdownEntry // type 332 +} + +export interface MembersFinanceInKind { + individual: FinanceBreakdownEntry // type 401 + committee: FinanceBreakdownEntry // type 402 + union: FinanceBreakdownEntry // type 403 + unitemized: { amount: number } // type 420 +} + +export interface MembersFinanceYearData { + totalRaised: number + totalSpent: number + breakdown: MembersFinanceBreakdown + finalized: boolean +} + +// Firestore: /generalCourts/{court}/membersFinance/{memberCode} +export interface MembersFinance { + ocpfCpfId: number + // Net receipts: Bank Report Receipts_Total, minus non-contribution + // receipts (type 204 โ€” refunds/misc from Deposit Reports). Matches OCPF's own public + // "Receipts" definition. + totalRaised: number + totalSpent: number + cashOnHand: number + // Start_Balance of the earliest Bank Report (type 70) in the tracked window, + // i.e. cash on hand at the start of the current election cycle. + // TODO: Surface this on the Finance tab. + startBalance: number + contributorCount: number // count of type-201 rows (row = one itemized contribution) + lastUpdated: FirebaseFirestore.Timestamp + // End_Date of the most recent Bank Report (type 70) โ€” the basis for totalRaised/cashOnHand. + bankDataAsOf?: FirebaseFirestore.Timestamp + // End_Date of the most recent Deposit Report (type 60) โ€” the basis for the + // breakdown categories. Normally later than bankDataAsOf, since Deposit + // Reports are filed more frequently than Bank Reports. + depositDataAsOf?: FirebaseFirestore.Timestamp + breakdown: MembersFinanceBreakdown + candidateFunds: MembersFinanceCandidateFunds + inKind: MembersFinanceInKind + years: Record } diff --git a/public/homepage/feature-preview-ballot-question.png b/public/homepage/feature-preview-ballot-question.png deleted file mode 100644 index ea5cbcb4a..000000000 Binary files a/public/homepage/feature-preview-ballot-question.png and /dev/null differ diff --git a/public/homepage/feature-preview-browse-bills.png b/public/homepage/feature-preview-browse-bills.png new file mode 100644 index 000000000..5623ca87b Binary files /dev/null and b/public/homepage/feature-preview-browse-bills.png differ diff --git a/public/locales/en/forindividuals.json b/public/locales/en/forindividuals.json index ea232840f..196dd4223 100644 --- a/public/locales/en/forindividuals.json +++ b/public/locales/en/forindividuals.json @@ -5,21 +5,21 @@ "callToAction": { "header": "Why use MAPLE", "title": "Make your voice count in the laws that shape our future.", - "bodytext": "With a quick search on MAPLE, you can see what bills the state legislature is considering about the topics that matter to you. You can find out what policy changes are proposed, see what other constituents and organizations are saying about them, and-most important-you can submit written testimony directly to our representatives in the State House to make your perspective part of the conversation." + "bodytext": "With a quick search on MAPLE, you can see what bills the state legislature is considering about the topics that matter to you. You can find out what policy changes are proposed, see what other constituents and organizations are saying about them, and you can submit written testimony directly to our representatives in the State House to make your perspective part of the conversation." }, "benefits": { "header": "What we offer", "youMatter": { "title": "Weigh in on the issues that matter to you", - "bodytext": "Before the Massachusetts state legislature can pass a bill, they convene three committees to hear public testimony on the policy changes that bill proposes. Don't miss out on the chance to make your perspective heard; submit your testimony to use your voice to shape public policy for our Commonwealth." + "bodytext": "Whether the proposed policy will touch you personally or you are an expert in the subject matter of the bill, it is critical that our communitiesโ€™ needs are shaping the policy going through the State House. MAPLE makes it easy to submit your testimony and use your voice to shape public policy for our Commonwealth." }, "multipleSides": { "title": "Hear from multiple sides and perspectives", - "bodytext": "As a non-partisan platform, all stakeholders can use MAPLE to share their perspective on issues and bills. See what others are saying to get more informed about the most important public policy issues of the day." + "bodytext": "As a non-partisan platform, all stakeholders can use MAPLE to share their perspective on issues and bills. MAPLE allows you to see what other people are saying about public policy issues, which can help inform both your own understanding of the bill and where other members of the Commonwealth are coming from." }, "trustedOrgs": { "title": "See what the organizations you trust are saying", - "bodytext": "Organizations use MAPLE to share their priorities and positions with the world. Look for testimony from the groups you belong to and trust on MAPLE to help you learn about the issues that matter to you." + "bodytext": "Organizations use MAPLE to share their priorities and positions. On MAPLE, you can see how groups you trust are testifying on behalf of a bill and learn more about the issues that matter to you." }, "anyLanguage": { "title": "Read and write testimony in any language", diff --git a/public/locales/en/forlegislators.json b/public/locales/en/forlegislators.json index 4e17c7da6..c1d6168c2 100644 --- a/public/locales/en/forlegislators.json +++ b/public/locales/en/forlegislators.json @@ -5,7 +5,7 @@ "callToAction": { "header": "Why use MAPLE", "title": "Gain free, nonpartisan insight into how constituents are thinking about any proposed measure.", - "bodytextOne": "Even before you create your own account, you can search our lightning-fast platform for all testimony submitted by MAPLE users about any bill. Our advanced features let you filter to bills sponsored by your office, bills concerning your city, or bills that you choose to follow.", + "bodytextOne": "Even before you create an account, you can search all testimony that has been submitted by MAPLE users about any bill, past or present. Our advanced features let you filter to bills sponsored by your office, bills concerning your city, or bills that you choose to follow.", "bodytextTwo": "Why trust MAPLE? We are a nonpartisan, nonprofit, volunteer-developed civic technology initiative focused on increasing engagement between the legislature and its constituents. We offer our product as an open source public good; we are committed not to charging our users and we will never sell the data from our platform." }, "benefits": { @@ -15,12 +15,12 @@ "bodytext": "When you visit any bill page on MAPLE, you can see every piece of testimony submitted by MAPLE users along with their district information. You can easily seek out your own constituents' testimony and see how opinions vary across the Commonwealth." }, "seeTestimony": { - "title": "See testimony on all bills before all committees in one place", - "bodytext": "MAPLE makes it easy for users to submit testimony on any bill, before any committee. Anyone can see testimony on a bill as soon as it is submitted." + "title": "See testimony on all bills, before all committees, in one place", + "bodytext": "MAPLE makes it easier for users to submit testimony on any bill, regardless of what committee itโ€™s in. As soon as someone hits 'publish and send,' that testimony is both made available to the public and can be sent individually to the userโ€™s legislators and the chairs of the relevant Committee." }, "simplifyTestimony": { "title": "Simplify the testimony process for your constituents", - "bodytext": "Do your constituents need assistance finding the right committee, the right chairperson, and the right email address to submit their testimony on a bill? Send them to MAPLE! Our platform makes it easy for anyone to direct their testimony to the right committee chairpersons as well as to their own constituents." + "bodytext": "Do your constituents need assistance finding the right committee, the right chairperson, and the right email address to submit their testimony on a bill? Send them to MAPLE! Our platform makes it easy for anyone to direct their testimony to the right committee chairpersons as well as their own legislators." }, "languageAccess": { "title": "Extend access to constituents who speak any language", diff --git a/public/locales/en/fororgs.json b/public/locales/en/fororgs.json index 2e8d19010..c8d672607 100644 --- a/public/locales/en/fororgs.json +++ b/public/locales/en/fororgs.json @@ -4,44 +4,44 @@ "personaLabel": "Organizations", "callToAction": { "header": "Why use MAPLE", - "title": "Get your message out and rally your supporters in civic discourse.", + "title": "Get your message out and engage your members in civic discourse.", "bodytext": "It takes only a couple minutes to sign up for your organization's account on MAPLE, giving you immediate access to publish and share your testimony, designate your priority bills, connect with your members and followers, and research legislation." }, "benefits": { "header": "What we offer", "reach": { "title": "Help your priorities & positions reach a wider audience", - "bodytext": "Your organization's testimony will be highlighted to MAPLE visitors when they look up bills, with easy tools for sharing on social media. Testimony published on MAPLE will be seen by legislators, residents, members of the media, and other stakeholders. The more organizations share their testimony on the platform, the more people will see it. You can even designate bills as your legislative priorities to signal your focus for each session." + "bodytext": "Testimony published on MAPLE reaches a broad range of stakeholders, from legislators to residents to the media and more. When your organization publishes testimony, the bill pages on MAPLE will highlight that testimony so visitors can quickly see where you stand. You can even designate bills as your legislative priorities to signal your focus for each session. The more that organizations share their testimony, the more people will see it. Your organization's testimony will be highlighted to MAPLE visitors when they look up bills, with easy tools for sharing on social media." }, "connect": { - "title": "Connect with your members, and grow your reach", - "bodytext": "MAPLE users can discover your profile when searching for their policy interests and follow your organization to get updates on your priorities and positions. MAPLE helps alert your constituents to the most important bills on issues you care about, and helps you explain why you support or oppose them" + "title": "Connect with your members and grow your reach", + "bodytext": "MAPLE users can discover your profile when searching for their policy interests and follow your organization to get updates on your priorities and positions. MAPLE works to alert your constituents to the most important bills on the issues relevant to your organization while allowing you room to explain your support or opposition." }, "language": { "title": "Extend access to members who speak any language", - "bodytext": "MAPLE uses machine translation to make the legislative process more accessible to non-native English speakers. Both our website content and the testimonies we post can be automatically translated to any language on demand, meaning that non-English speakers can write testimony in the language in which they are most comfortable and legislative offices can click a button to translate it to English. While machine translation is not perfect, it offers a big step forward in language accessibility for constituents who do not have access to expert translation." + "bodytext": "MAPLE uses machine translation to make the legislative process more accessible to non-native English speakers. Both our website content and the testimonies we post can be automatically translated to any language on demand, meaning that non-English speakers can write testimony in the language in which they are most comfortable and legislative offices can click a button to translate it to English. While machine translation is not perfect, it offers a big step forward in language accessibility for constituents who do not have access to expert translation." }, "coordinate": { "title": "Coordinate legislative communication campaigns with ease", "bodytext": "By linking to a bill page on MAPLE, your constituents can submit their own testimony with just a few clicks. MAPLE makes it easy for users of any experience level to draft, format, and submit their testimony to the right legislators for any bill." }, "seeEveryone": { - "title": "See what everyone's saying", - "bodytext": "Even if you don't sign in, you can use MAPLE to browse testimony submitted on any bill. Get a lay of the land and track public opinion at a glance using our endorse / oppose ratios. Read the full testimony of any user to find other stakeholders you may want to connect with or learn from." + "title": "See what the public is saying", + "bodytext": "Even if you don't sign in, you can use MAPLE to browse testimony submitted on any bill. Get a lay of the land and track public opinion at a glance using our endorse / oppose ratios. Read the full testimony of any user and find other stakeholders who you may want to connect with or learn from." }, "curateHistory": { "title": "Curate your testimony history", - "bodytext": "When you submit your testimony through MAPLE, it automatically appears in an indexed & organized listing on your profile page. Use your profile to automatically generate a record of your lobbying efforts for your website, for member communications, or for semi-annual filings. You can also publish previously submitted tesitmony on MAPLE at any time." + "bodytext": "When you submit your testimony through MAPLE, it automatically appears in an indexed & organized listing on your profile page. Use your profile to automatically generate a record of your lobbying efforts for your website, for member communications, or for semi-annual filings. You can also publish previously submitted testimony on MAPLE at any time." }, "legislativeResearch": { "title": "Speed up your legislative research", - "bodytext1": "MAPLE is fast. (Really fast.). Try", + "bodytext1": "Finding bills on MAPLE is really fast. Try", "linkText": "searching for a bill", "bodytext2": "to see just how much MAPLE can speed up your legislative research process; no sign in required!" }, "changeNorms": { "title": "Help change the norms in Massachusetts", - "bodytext": "The Commonwealth can be a leader in legislative transparency and good government. Help shift the norms in Massachusetts by making your testimony available for anyone to read." + "bodytext": "The Commonwealth can be a leader in legislative transparency and good government. As a community, we can help shift the norms in Massachusetts. Making your testimony accessible and centralized supports your members and followers in their own critical civic engagement." }, "signUp": "Ready to sign up for MAPLE?" }, @@ -50,8 +50,8 @@ "title": "Join MAPLE's Coalition to make the 193rd General Court the most transparent in Massachusetts history!", "p1": "Organizations that join MAPLE's Coalition of Lead Organizations (CLO) commit to publishing all of their public testimony submitted to the 193rd General Court through the MAPLE platform. The 193rd General Court is the session that runs from January of 2023 through 2024.", "p2": "In addition to all the benefits outlined above, these organizations will have their profiles featured prominently on the MAPLE website during the two-year legislative session. Any organization can contact MAPLE to be considered for membership in the CLO. Organizations will be prioritized to join the CLO based on the size of the constituency they represent.", - "p3": "Maple is a nonpartisan project and does not take political positions; membership in the CLO does not indicate endorsement of any political position by MAPLE or its parent organization, members, or collaborators.", - "callToAction": "Join the MAPLE coalition-reach out to info@mapletestimony.org" + "p3": "MAPLE is a nonpartisan project and does not take political positions; membership in the CLO does not indicate endorsement of any political position by MAPLE or its parent organization, members, or collaborators.", + "callToAction": "Join the MAPLE coalition โ€” reach out to info@mapletestimony.org" }, "cta": { "headline": "Get started with MAPLE today!", diff --git a/public/locales/en/goalsandmission.json b/public/locales/en/goalsandmission.json index e78755867..4a49b42b5 100644 --- a/public/locales/en/goalsandmission.json +++ b/public/locales/en/goalsandmission.json @@ -6,14 +6,14 @@ "overview": "MAPLE is a free public platform for submitting and reading testimony on Massachusetts legislation. We aim to achieve these goals:", "increase": "Increase access to legislative information and opportunities to contribute to the legislative process.", "engage": "Engage a wider set of stakeholders and perspectives in policy-making.", - "strengthen": "Strengthen the relationships between constituents and legislators.", + "strengthen": "Strengthen the relationships between constituents and legislators.", "encourage": "Encourage common understanding and illuminate consensus." }, "mission": { "title": "Our Mission", "overview": "Make it easy to meaningfully fulfill your civic responsibilities in Massachusetts", "connect": "MAPLE seeks to better connect its constituents to one another, and to our legislators. We hope to create a space for you to meaningfully engage in state government, learn about proposed legislation that impacts our lives in the Commonwealth, and share your expertise and stories. MAPLE aims to meaningfully channel and focus your civic energy towards productive actions for our state and local communities.", - "disclosure": "We believe it's important for everyone in the Commonwealth to have access to the same information about public policy that our legislators consider when writing law. Prior to a ", + "disclosure": "We believe it's important for everyone in the Commonwealth to have access to the same information about public policy that our legislators consider when writing law. Prior to a ", "disclosureLink": "rules change ", "disclosure2": "in June, 2025, the MA legislature (formally known as โ€œThe General Courtโ€) had no policy or obligation to disclose the written testimony they received to the public. As a result, it has been difficult to understand what communications and perspectives are informing our legislators' decisions. Often, even members of the legislature have not been able to easily access the public testimony given on a bill.", "callout": "MAPLE seeks to fill this void.", diff --git a/public/locales/en/learn.json b/public/locales/en/learn.json index 347243eb0..439bbdc86 100644 --- a/public/locales/en/learn.json +++ b/public/locales/en/learn.json @@ -40,27 +40,27 @@ { "badge": "who", "headline": "Anyone can submit testimony", - "body": "Legislators value testimony most when it comes from their own constituents. Testimony from Massachusetts residents is typically directed to both the committee responsible for the bill and the legislators representing you in your district." + "body": "Every Massachusetts resident has the right to weigh in on the proposed laws that shape our future. Testimony is typically directed to both the committee responsible for the bill and the legislators representing you in your district." }, { "badge": "what", "headline": "It should be distinctive and relevant", - "body": "Writing your own text and explaining why you are interested in an issue gives legislators valuable, personalized insight into their constituents. Form letters still count, but a personalized, individual letter will always have greater impact." + "body": "Writing your own words and explaining why you are interested in an issue gives legislators valuable, personalized insight into their constituents. Form letters still count, but a personal letter will always have greater impact." }, { "badge": "when", - "headline": "Submit before the hearing date", - "body": "Committees generally accept testimony up until the public hearing date for a bill. You can use Maple's bill pages on this site or this link to identify relevant dates. Submit before the hearing for the greatest impact." + "headline": "Get it in before the hearing date", + "body": "Committees generally accept testimony up until a bill's public hearing date, but earlier is always better. While some committees will accept testimony after this date, submitting prior to the hearing date ensures it will be considered. In addition to written testimony, you can also attend a hearing to testify in person." }, { "badge": "where", - "headline": "Use MAPLE to submit testimony", - "body": "Browse our bill and ballot question pages to find the measures that matter to you. Select one and follow the prompts to compose your testimony. When you are happy with your testimony, MAPLE sends it to the relevant committee personnel." + "headline": "Write to the committee chairs", + "body": "This is what MAPLE was built for! MAPLE not only makes it easy to learn about bills that impact you but it also identifies the correct legislators for you to email and makes your testimony available for all to benefit from. Some committees accept online submissions via malegislature.gov but not all. Emails and letters are always accepted." } ], "why": { - "headline": "Legislators need your input in order to represent you", - "body": "If you don't share your perspective, it may not be taken into account when policymakers make decisions about the laws that govern all our lives. By speaking up, you can make the laws of Massachusetts work better for all of us. MAPLE is designed to make it more accessible.", + "headline": "The key role of testimony is to let your legislators know how you feel about an issue", + "body": "If you don't share your perspective, it can't be taken into account when policymakers make decisions about the laws that govern our lives. By speaking up, you can make the laws of Massachusetts work better for all of us. MAPLE is designed to make this process more accessible.", "mattersHeading": "Why it Matters:", "matters": [ { @@ -84,7 +84,7 @@ "steps": [ { "title": "Testify in writing", - "body": "Written testimony should target bills being considered by the legislature. All Committees should formally accept testimony on each bill in the time between the start of the legislative session and the public hearing of that bill. This is what MAPLE can help with!" + "body": "Written testimony should target bills being considered by the legislature. You can submit testimony by email, letter, or in some cases, a webform on the MA Legislature website. Hearings marked โ€œwritten testimony onlyโ€ do not accept webform submissions but emails are always accepted and that's what MAPLE can help with!" }, { "title": "Testify in person", @@ -102,40 +102,41 @@ } ] }, - "tipsLink": "Need help? <0>Read our testimony writing tips", + "tipsLink": "Ready to write? <0>Read our testimony writing tips", "tips": [ { "label": "Be Timely", "body": "Written testimony should target bills being considered by the legislature and should be submitted before the committee hearing date in order to have the most impact." - }, + }, { "label": "Be Original", "body": "Legislators receive a lot of form letters. These communications are important, but almost always an individual and personalized letter will have greater impact." - }, + }, { "label": "Be Informative", - "body": "Introduce yourself. Explain why you are concerned about an issue and why you think one policy choice would be better than another. Whether you're a longtime advocate or first-time testifier, your testimony is important." + "body": "Be sure to introduce yourself, share why you are concerned about an issue, and why you think one policy choice would be better than another. Whether you're a longtime advocate or first-time testifier, your testimony is important." }, + { "label": "Be Direct", "body": "State whether you support or oppose a bill. Be clear and specific about the policies you want to see. You don't need to know specific legal precedents or legislative language to provide valuable input." }, { "label": "Be Respectful", - "body": "No matter how strongly you hold your position, there may be people of good intent who feel differently. Respectful testimony will carry more weight with legislators โ€” especially those you may need to persuade." + "body": "No matter how strongly or sincerely you hold your position, there will be people of good intent who feel differently. We all deserve to have our perspectives considered. Respectful testimony will carry more weight with legislators โ€” especially those you may need to persuade." } ] }, "writingTips": { "breadcrumb": "Writing Effective Testimony", "title": "How to Write Effective Testimony", - "subhead": "You don't need legal training or a policy background. You need a clear position, a reason you care, and the district you live in โ€” this page walks through the rest.", + "subhead": "Submitting testimony doesnโ€™t require a law degree or a policy background โ€” only a clear position, a reason you care, and the district you live in. This page provides some initial guidance to help you get started.", "principles": { - "headline": "Five things to make testimony impactful" + "headline": "Five ways to make testimony more impactful" }, "include": { "headline": "What every letter should include", - "intro": "Make sure a reader can answer these five questions after reading your testimony.", + "intro": "Make sure a reader can understand these five things after reading your testimony.", "items": [ { "title": "Which bill you are writing about", @@ -191,9 +192,9 @@ "num": "01", "title": "A Bill is Introduced", "lead": "Every law starts as an idea. Any Massachusetts resident can petition their legislator to file a bill.", - "body": "Bills can be filed at any time during the two-year session, but most are filed before the session begins โ€” the standard deadline falls in December of the preceding year. Bills filed after that deadline require special approval. They receive a unique identifier โ€” H. for House-originated bills, S. for Senate. The same idea can be filed in both chambers simultaneously. Bills are publicly available on the MA Legislature website and through MAPLE.", + "body": "Nearly all bills filed in the Massachusetts Legislature are filed in the first two weeks of the session. This means that, every other year, the first two to three weeks of January see thousands of bills being filed in the House and Senate. Bills filed after that initial deadline require special committee approval. When a bill is filed, it receives a unique identifier โ€” H. for House-originated bills, S. for Senate. The same idea can be filed in both chambers at the same time. Bills are publicly available on the MA Legislature website and through MAPLE. On MAPLE, you can track the progress of a bill across iterations and even if the bill changes identifiers.", "stat": { - "value": "6,000+", + "value": "7,000+", "label": "bills filed each session", "href": "/bills" } @@ -202,7 +203,7 @@ "num": "02", "title": "Committee Referral", "lead": "Every bill is routed to a Joint Committee based on its subject matter.", - "body": "There are 33 Joint Legislative Committees covering topics from Education to Public Safety. Joint Committees include members from both the House and Senate. This is where the real work of examining a bill begins. Every bill is entitled to a hearing โ€” but most bills are sent to study after that hearing, which ends their progress for that session.", + "body": "There are 33 Joint Legislative Committees in Massachusetts covering different subject areas from Education to Public Safety. Joint Committees include members from both the House and Senate. Every bill is entitled to a hearing where public testimony can be considered. Committee staff review the incoming bills and group related measures onto a single hearing agenda and set a hearing date.", "stat": { "value": "33", "label": "Joint Committees", @@ -213,14 +214,14 @@ "num": "03", "title": "Public Hearing & Testimony", "lead": "This is your moment. Anyone can submit written testimony or speak in person.", - "body": "Committees schedule public hearings where citizens, advocacy groups, experts, and government officials can all testify. Written testimony submitted before the hearing is accepted and reviewed by committee staff. Legislators pay attention to volume โ€” and especially to constituent voices from their own districts.", + "body": "Public hearings are the time when citizens, advocacy groups, experts, and government officials can all testify. Written testimony submitted before the hearing is reviewed by committee staff. Legislators pay special attention to constituent voices from their own districts, but also pay attention to volume.", "callout": "MAPLE makes it easy to find a bill's hearing date and submit testimony directly to the committee chairs via email." }, { "num": "04", "title": "Committee Report", "lead": "The committee decides a bill's fate โ€” advance, amend, or let it die.", - "body": "After reviewing testimony and staff analysis, the committee votes whether to report the bill favorably, unfavorably, or with amendments. A bill reported favorably advances to the full chamber. Most bills are 'sent to study' โ€” a formal committee recommendation that ends the bill's progress for that session. A bill can be refiled in the next session and go through the process again." + "body": "After reviewing testimony and staff analysis, the committee votes whether to report the bill favorably, unfavorably, or with amendments. A bill reported favorably advances to the full chamber. Most bills are 'sent to study', which is a formal committee recommendation that ends the bill's progress for that session. A bill can be refiled in the next session and go through the process again." }, { "num": "05", @@ -232,7 +233,7 @@ "num": "06", "title": "Governor's Action", "lead": "The Governor has 10 days to sign, veto, or return a bill with amendments.", - "body": "A signed bill is 'chaptered' and becomes part of Massachusetts General Laws. A vetoed bill can be overridden by a 2/3 vote in each chamber. If the Governor returns the bill with amendments, the legislature can accept the amendments, override them, or let the bill die. If the Governor takes no action within 10 days and the legislature is still in session, the bill becomes law automatically. If the legislature has adjourned, the same inaction kills the bill โ€” this is called a pocket veto." + "body": "A bill signed by the governor is โ€˜chapteredโ€™ and becomes part of the Massachusetts General Laws. If the governor vetoes a bill, that veto can be overridden by a 2/3 vote in each chamber. If the governor returns the bill with amendments, the legislature can accept the amendments, override them, or let the bill die. If the governor takes no action within 10 days and the legislature is still in session, the bill becomes law automatically. If the legislature has adjourned, the same inaction kills the bill, which is sometimes referred to as a pocket veto." } ] } diff --git a/public/locales/en/legislators.json b/public/locales/en/legislators.json index 886f6a1ba..c422d3e01 100644 --- a/public/locales/en/legislators.json +++ b/public/locales/en/legislators.json @@ -1,13 +1,50 @@ { + "addBio": "Add your biography", "billsSponsored": "Bills Sponsored", - "canSubmit": "can submit testimony on any bill or ballot question, just like any constituent. Her stance and reasoning are shown exactly as submitted โ€” MAPLE does not edit or editorialize.", + "biography": "Biography", + "canSubmit": "can submit testimony on any bill or ballot question, just like any constituent. Their stance and reasoning are shown exactly as submitted โ€” MAPLE does not edit or editorialize.", "contact": "Contact", "cosponsored": "Cosponsored", "districtDetails": "District details are not available yet.", + "editBio": "Edit your biography", + "finance": { + "breakdown": { + "candidateFunds": "Candidate's own funds", + "committee": "Committees / PACs", + "inKind": "In-kind contributions", + "individual": "Individual donors", + "union": "Unions & associations", + "unitemized": "Micro-donations (under $50)" + }, + "breakdownHeading": "Contributions Breakdown", + "electionCycleHeading": "{{year}} Election Cycle", + "noContributions": "No itemized contributions recorded yet.", + "noData": "Finance data not yet available for this legislator.", + "processingFees": "Category amounts above are shown before {{amount}} in payment-processing fees deducted, which is why they total more than \"Total Raised\" above.", + "source": "Source: MA OCPF ยท ocpf.us", + "sourceWithDate": "Source: MA OCPF ยท ocpf.us\nIncludes contributions through {{date}}", + "stats": { + "cashOnHand": "Cash on Hand", + "cashOnHandSubtitle": "End of reporting period", + "smallDonors": "Small Donors", + "smallDonorsSubtitle": "Under $200 contributions", + "totalRaised": "Total Raised*", + "totalRaisedFootnote": "*after processing fees, through {{date}}", + "totalRaisedSubtitle": "From {{count}} contributors", + "totalSpent": "Total Spent", + "totalSpentSubtitle": "As of {{date}}" + }, + "table": { + "amount": "Amount", + "category": "Category", + "share": "Share" + } + }, "fundsRaised": "Funds Raised", "home": "Home", "legislators": "Legislators", "loading": "Loading district...", + "notClaimed": "This legislator has not claimed their MAPLE account", "party": { "democratic": "Democratic Party", "party": "Party", @@ -15,6 +52,7 @@ }, "stateRepresentative": "State Representative", "stateSenator": "State Senator", + "submit": "Submit", "tabs": { "bills": "Bills", "district": "District", diff --git a/public/locales/en/mapleAI.json b/public/locales/en/mapleAI.json index 3bb7b11da..bdb6223ec 100644 --- a/public/locales/en/mapleAI.json +++ b/public/locales/en/mapleAI.json @@ -29,8 +29,8 @@ "desc1Title": "Limitations", "desc1Main": "While we believe AI significantly enhances your experience on MAPLE, it has limitations. AI-generated summaries and tags are based on limited information about the bill in question and existing law and may not always capture every nuance or recent events. Legislative information is also complex and can use archaic or legal language that is difficult for AI models to properly understand and summarize. Transcriptions of oral hearings can be flawed and may lack context not present in the audio recording. Finally, like us humans, AI can make mistakes in both understanding and explaining policies.", "desc2Title": "Risks", - "desc2Main": "If the bill summaries produced by AI models are wrong or misleading, they present a risk of misinforming the public about legislative proposals. We have mitigated risk by testing and iterating on the implementation of our summarization system in collaboration with academic researchers at Boston Universityโ€™s Spark! program. While we cannot guarantee that the system will never make mistakes, we have found it to be generally accurate and helpful in the summaries it provides. Likewis, we have reviewed the reliability of our AI transcription service and believe that it meets current industry standards in accuracy and reliability, but know that it can have errors in transcription that could introduce confusion for users relying on them to understand the discussion at the hearing.", - "desc3Title": "Data privacy", + "desc2Main": "If the bill summaries produced by AI models are wrong or misleading, they present a risk of misinforming the public about legislative proposals. We have mitigated risk by testing and iterating on the implementation of our summarization system in collaboration with academic researchers at Boston Universityโ€™s Spark! program. While we cannot guarantee that the system will never make mistakes, we have found it to be generally accurate and helpful in the summaries it provides. Likewise, we have reviewed the reliability of our AI transcription service and believe that it meets current industry standards in accuracy and reliability, but know that it can have errors in transcription that could introduce confusion for users relying on them to understand the discussion at the hearing.", + "desc3Title": "Data Privacy", "desc3Pre": "We only run", "desc3Italic": "publicly available", "desc3Main": "information through AI models and do not expose any private or sensitive data to AI models or third party APIs. Data we do pass through AI models includes bill and law text and oral hearing recordings, all of which is already previously published by the legislature. In the future, we may also use AI to summarize testimony documents that you publish to MAPLE, but only testimony that you have chosen to display publicly. Like other information on public websites, this text is already available to be accessed and processed by any search engine, web crawler, or AI model." diff --git a/scripts/firebase-admin/backfillElections.ts b/scripts/firebase-admin/backfillElections.ts new file mode 100644 index 000000000..bb604a39a --- /dev/null +++ b/scripts/firebase-admin/backfillElections.ts @@ -0,0 +1,22 @@ +import { Record, Number } from "runtypes" +import { Script } from "./types" +import { fetchElectionsData } from "functions/src/legislators/scrapeElections" + +const Args = Record({ + startYear: Number +}) + +export const script: Script = async ({ db, args }) => { + const { startYear } = Args.check(args) + const currentYear = new Date().getFullYear() + const writer = db.bulkWriter() + for (let year = startYear; year <= currentYear; year++) { + const data = await fetchElectionsData(year, year) + for (const item of data) { + ;(await db.doc(`/electionResults/${item.id}`).get()).ref.set(item, { + merge: true + }) + } + } + await writer.close() +} diff --git a/scripts/firebase-admin/backfillHearingTranscription.ts b/scripts/firebase-admin/backfillHearingTranscription.ts index c14bc7d5e..fc004a2b8 100644 --- a/scripts/firebase-admin/backfillHearingTranscription.ts +++ b/scripts/firebase-admin/backfillHearingTranscription.ts @@ -24,7 +24,8 @@ export const script: Script = async ({ db, args }) => { try { const hearingProcessor = new HearingPostProcessor() const changed = await hearingProcessor.addVideosToHearing(doc, { - refetch: refetchVideos + refetch: refetchVideos, + bucketName: bucketName }) if (changed) { console.log(`Transcriptions submitted for hearing ${eventId}`) @@ -52,7 +53,8 @@ export const script: Script = async ({ db, args }) => { try { const hearingProcessor = new HearingPostProcessor() const changed = await hearingProcessor.addVideosToHearing(doc, { - refetch: refetchVideos + refetch: refetchVideos, + bucketName: bucketName }) if (changed) { diff --git a/test.log b/test.log new file mode 100644 index 000000000..bc56b738f --- /dev/null +++ b/test.log @@ -0,0 +1,3759 @@ +yarn run v1.22.22 +$ ts-node --swc -P tsconfig.script.json scripts/firebase-admin run-script backfillElections --env local --startYear 2024 +https://electionstats.state.ma.us/elections/search/year_from:2024/year_to:2024 +
+
+
 
+
+
+ + + + + + + + +
+ + + Years:ย  +2026 +2025 +2024 +2023 +2022 +2021 +2020 +2018 +2017 +2016 +2015 +2014 +2013 +2012 +2011 +2010 +2009 +2008 +2007 +2006 +2005 +2004 +2003 +2002 +2001 +2000 +1999 +1998 +1997 +1996 +1995 +1994 +1993 +1992 +1991 +1990 +1988 +1987 +1986 +1985 +1984 +1983 +1982 +1981 +1980 +1979 +1978 +1977 +1976 +1975 +1974 +1972 +1971 +1970 +ย  to ย  +2026 +2025 +2024 +2023 +2022 +2021 +2020 +2018 +2017 +2016 +2015 +2014 +2013 +2012 +2011 +2010 +2009 +2008 +2007 +2006 +2005 +2004 +2003 +2002 +2001 +2000 +1999 +1998 +1997 +1996 +1995 +1994 +1993 +1992 +1991 +1990 +1988 +1987 +1986 +1985 +1984 +1983 +1982 +1981 +1980 +1979 +1978 +1977 +1976 +1975 +1974 +1972 +1971 +1970 +Date:ย ย  +Mar 31, 2026 +Mar 3, 2026 +Feb 3, 2026 +Jun 10, 2025 +May 13, 2025 +Apr 15, 2025 +Nov 5, 2024 +Sep 3, 2024 +Mar 5, 2024 +Feb 6, 2024 +Nov 7, 2023 +Oct 10, 2023 +May 30, 2023 +May 2, 2023 +Nov 8, 2022 +Sep 6, 2022 +Jan 11, 2022 +Dec 14, 2021 +Nov 30, 2021 +Nov 2, 2021 +Mar 30, 2021 +Mar 2, 2021 +Nov 3, 2020 +Sep 1, 2020 +Jun 2, 2020 +May 19, 2020 +Mar 3, 2020 +Feb 4, 2020 +Nov 6, 2018 +Sep 4, 2018 +Apr 3, 2018 +Mar 6, 2018 +Feb 6, 2018 +Dec 5, 2017 +Nov 7, 2017 +Oct 17, 2017 +Oct 10, 2017 +Sep 19, 2017 +Jul 25, 2017 +Jun 27, 2017 +Nov 8, 2016 +Sep 8, 2016 +May 10, 2016 +Apr 12, 2016 +Mar 1, 2016 +Feb 2, 2016 +Nov 3, 2015 +Oct 6, 2015 +Mar 31, 2015 +Mar 3, 2015 +Nov 4, 2014 +Sep 9, 2014 +Apr 29, 2014 +Apr 1, 2014 +Mar 4, 2014 +Jan 7, 2014 +Dec 10, 2013 +Nov 5, 2013 +Oct 15, 2013 +Oct 8, 2013 +Sep 10, 2013 +Aug 13, 2013 +Jun 25, 2013 +May 28, 2013 +Apr 30, 2013 +Apr 2, 2013 +Mar 5, 2013 +Nov 6, 2012 +Sep 6, 2012 +Mar 6, 2012 +Jan 10, 2012 +Dec 13, 2011 +Oct 18, 2011 +Sep 20, 2011 +Aug 23, 2011 +May 10, 2011 +Apr 12, 2011 +Nov 2, 2010 +Sep 14, 2010 +Jun 15, 2010 +May 18, 2010 +May 11, 2010 +Apr 13, 2010 +Jan 19, 2010 +Dec 8, 2009 +Jun 16, 2009 +May 19, 2009 +Nov 4, 2008 +Sep 16, 2008 +Mar 4, 2008 +Feb 5, 2008 +Dec 11, 2007 +Nov 13, 2007 +Oct 23, 2007 +Oct 16, 2007 +Oct 9, 2007 +Sep 25, 2007 +Sep 11, 2007 +Sep 4, 2007 +Jun 26, 2007 +May 29, 2007 +May 15, 2007 +Apr 17, 2007 +Mar 20, 2007 +Nov 7, 2006 +Sep 19, 2006 +Feb 7, 2006 +Jan 10, 2006 +Sep 27, 2005 +Aug 30, 2005 +Apr 12, 2005 +Mar 15, 2005 +Nov 2, 2004 +Sep 14, 2004 +Mar 2, 2004 +Feb 3, 2004 +May 13, 2003 +Apr 1, 2003 +Nov 5, 2002 +Sep 17, 2002 +Apr 23, 2002 +Mar 12, 2002 +Jan 8, 2002 +Dec 11, 2001 +Oct 23, 2001 +Oct 16, 2001 +Sep 25, 2001 +May 22, 2001 +Apr 24, 2001 +Nov 7, 2000 +Mar 7, 2000 +Feb 8, 2000 +Dec 21, 1999 +Nov 23, 1999 +Oct 26, 1999 +Aug 31, 1999 +Jul 6, 1999 +Jun 8, 1999 +Jun 1, 1999 +May 25, 1999 +May 11, 1999 +May 4, 1999 +Apr 27, 1999 +Apr 13, 1999 +Mar 16, 1999 +Nov 3, 1998 +Sep 15, 1998 +Mar 10, 1998 +Feb 10, 1998 +Jan 6, 1998 +Dec 9, 1997 +Apr 8, 1997 +Mar 11, 1997 +Nov 5, 1996 +Apr 23, 1996 +Apr 16, 1996 +Mar 26, 1996 +Mar 19, 1996 +Mar 5, 1996 +Jan 9, 1996 +Dec 12, 1995 +Dec 10, 1995 +Nov 7, 1995 +Sep 22, 1995 +Sep 19, 1995 +Sep 12, 1995 +Nov 8, 1994 +Jun 7, 1994 +May 10, 1994 +Mar 1, 1994 +Feb 15, 1994 +Feb 1, 1994 +Jan 18, 1994 +Nov 30, 1993 +Nov 2, 1993 +Oct 12, 1993 +Sep 14, 1993 +Aug 17, 1993 +May 11, 1993 +Nov 3, 1992 +Sep 15, 1992 +Apr 7, 1992 +Mar 17, 1992 +Mar 10, 1992 +Feb 11, 1992 +Jan 7, 1992 +Nov 12, 1991 +Oct 22, 1991 +Oct 15, 1991 +Sep 24, 1991 +Sep 17, 1991 +Aug 27, 1991 +Jun 4, 1991 +Apr 30, 1991 +Nov 6, 1990 +May 1, 1990 +Apr 3, 1990 +Nov 8, 1988 +Mar 8, 1988 +Sep 15, 1987 +Aug 18, 1987 +Nov 4, 1986 +Jun 4, 1985 +May 7, 1985 +Apr 9, 1985 +Mar 12, 1985 +Nov 6, 1984 +May 29, 1984 +May 1, 1984 +Mar 13, 1984 +Feb 28, 1984 +Jan 31, 1984 +Sep 20, 1983 +Sep 13, 1983 +Aug 16, 1983 +Aug 13, 1983 +May 10, 1983 +May 3, 1983 +Apr 19, 1983 +Apr 12, 1983 +Apr 5, 1983 +Mar 22, 1983 +Nov 2, 1982 +Jun 16, 1981 +May 26, 1981 +Apr 28, 1981 +Nov 4, 1980 +Apr 15, 1980 +Mar 18, 1980 +Mar 4, 1980 +Feb 19, 1980 +Feb 5, 1980 +Jan 22, 1980 +Jan 8, 1980 +Oct 16, 1979 +Sep 18, 1979 +Sep 19, 1978 +Nov 1, 1977 +Oct 4, 1977 +Aug 16, 1977 +Aug 11, 1977 +Aug 2, 1977 +Jul 19, 1977 +Jun 21, 1977 +Jun 14, 1977 +May 24, 1977 +May 10, 1977 +Apr 26, 1977 +Sep 14, 1976 +Nov 18, 1975 +Aug 26, 1975 +Feb 25, 1975 +Sep 10, 1974 +Sep 19, 1972 +Apr 25, 1972 +Apr 18, 1972 +Mar 28, 1972 +Mar 21, 1972 +Feb 29, 1972 +Jul 27, 1971 +Jun 29, 1971 +Sep 15, 1970 +Office: +All Offices + +President +U.S. Senate +U.S. House + + +Governor +Lieutenant Governor +Attorney General +Secretary of the Commonwealth +Treasurer +Auditor +Governor's Council +State Senate +State Representative + + +Party State Committee Man +Party State Committee Woman +Delegate to the National Convention +Alternate Delegate to the National Convention +District Attorney +Clerk of Courts +Clerk of Superior Court (Civil) +Clerk of Superior Court (Criminal) +Clerk of Supreme Judicial Court +County Charter Commission +Register of Deeds +Sheriff +County Treasurer +Probate Judge +Register of Probate +Council of Governments Executive Committee + + District: +All Districts +Berkshire, Hampden, Franklin & Hampshire +Berkshire, Hampshire, Franklin & Hampden +First Plymouth & Norfolk +Hampden, Hampshire & Worcester +Norfolk & Middlesex +Norfolk, Plymouth & Bristol +Norfolk, Worcester & Middlesex +Second Plymouth & Norfolk +Third Bristol & Plymouth +Worcester & Hampden +Worcester & Hampshire +Berkshire +Berkshire, Hampshire and Franklin +Berkshire, Hampden, Hampshire and Franklin +Bristol +1st Bristol +2nd Bristol +Bristol and Norfolk +Bristol and Plymouth +1st Bristol and Plymouth +2nd Bristol and Plymouth +3rd Bristol +Bristol, Plymouth, and Norfolk +Cape and Islands +Cape, Plymouth, and Islands +1st Essex +2nd Essex +3rd Essex +4th Essex +5th Essex +1st Essex and Middlesex +2nd Essex and Middlesex +3rd Essex and Middlesex +Franklin and Hampshire +Hampden +Hampden and Berkshire +Hampden and Hampshire +1st Hampden +2nd Hampden +1st Hampden and Hampshire +2nd Hampden and Hampshire +Hampshire and Franklin +Hampshire, Franklin and Worcester +1st Middlesex +2nd Middlesex +3rd Middlesex +4th Middlesex +6th Middlesex +7th Middlesex +8th Middlesex +5th Middlesex +Middlesex and Essex +1st Middlesex and Norfolk +2nd Middlesex and Norfolk +3rd Middlesex and Norfolk +Middlesex and Norfolk +Middlesex, Norfolk & Worcester +Middlesex and Worcester +Middlesex and Suffolk +Middlesex, Suffolk and Essex +Norfolk +Norfolk and Bristol +Norfolk, Bristol and Middlesex +Norfolk, Bristol and Plymouth +Norfolk and Plymouth +Norfolk and Suffolk +Plymouth +1st Plymouth +2nd Plymouth +Plymouth and Barnstable +Plymouth and Norfolk +1st Plymouth and Bristol +2nd Plymouth and Bristol +1st Suffolk +2nd Suffolk +3rd Suffolk +4th Suffolk +5th Suffolk +6th Suffolk +Suffolk and Middlesex +Suffolk and Norfolk +1st Suffolk and Middlesex +1st Suffolk and Norfolk +2nd Suffolk and Middlesex +2nd Suffolk and Norfolk +Suffolk, Essex and Middlesex +Worcester +Worcester and Middlesex +Worcester and Norfolk +Worcester, Hampden and Hampshire +Worcester, Hampden, Hampshire and Franklin +Worcester, Hampden, Hampshire and Middlesex +1st Worcester +2nd Worcester +3rd Worcester +4th Worcester +1st Worcester and Middlesex +2nd Worcester and Middlesex + District: +All Districts +Berkshire, Hampden, Franklin & Hampshire +Berkshire, Hampshire, Franklin & Hampden +First Plymouth & Norfolk +Hampden, Hampshire & Worcester +Norfolk & Middlesex +Norfolk, Plymouth & Bristol +Norfolk, Worcester & Middlesex +Second Plymouth & Norfolk +Third Bristol & Plymouth +Worcester & Hampden +Worcester & Hampshire +Berkshire +Berkshire, Hampshire and Franklin +Berkshire, Hampden, Hampshire and Franklin +Bristol +1st Bristol +2nd Bristol +Bristol and Norfolk +Bristol and Plymouth +1st Bristol and Plymouth +2nd Bristol and Plymouth +3rd Bristol +Bristol, Plymouth, and Norfolk +Cape and Islands +Cape, Plymouth, and Islands +1st Essex +2nd Essex +3rd Essex +4th Essex +5th Essex +1st Essex and Middlesex +2nd Essex and Middlesex +3rd Essex and Middlesex +Franklin and Hampshire +Hampden +Hampden and Berkshire +Hampden and Hampshire +1st Hampden +2nd Hampden +1st Hampden and Hampshire +2nd Hampden and Hampshire +Hampshire and Franklin +Hampshire, Franklin and Worcester +1st Middlesex +2nd Middlesex +3rd Middlesex +4th Middlesex +6th Middlesex +7th Middlesex +8th Middlesex +5th Middlesex +Middlesex and Essex +1st Middlesex and Norfolk +2nd Middlesex and Norfolk +3rd Middlesex and Norfolk +Middlesex and Norfolk +Middlesex, Norfolk & Worcester +Middlesex and Worcester +Middlesex and Suffolk +Middlesex, Suffolk and Essex +Norfolk +Norfolk and Bristol +Norfolk, Bristol and Middlesex +Norfolk, Bristol and Plymouth +Norfolk and Plymouth +Norfolk and Suffolk +Plymouth +1st Plymouth +2nd Plymouth +Plymouth and Barnstable +Plymouth and Norfolk +1st Plymouth and Bristol +2nd Plymouth and Bristol +1st Suffolk +2nd Suffolk +3rd Suffolk +4th Suffolk +5th Suffolk +6th Suffolk +Suffolk and Middlesex +Suffolk and Norfolk +1st Suffolk and Middlesex +1st Suffolk and Norfolk +2nd Suffolk and Middlesex +2nd Suffolk and Norfolk +Suffolk, Essex and Middlesex +Worcester +Worcester and Middlesex +Worcester and Norfolk +Worcester, Hampden and Hampshire +Worcester, Hampden, Hampshire and Franklin +Worcester, Hampden, Hampshire and Middlesex +1st Worcester +2nd Worcester +3rd Worcester +4th Worcester +1st Worcester and Middlesex +2nd Worcester and Middlesex + District: +All Districts +1st Congressional +2nd Congressional +3rd Congressional +4th Congressional +5th Congressional +6th Congressional +7th Congressional +8th Congressional +9th Congressional +10th Congressional +11th Congressional +12th Congressional + District: +All Districts + 1st + 2nd + 3rd + 4th + 5th + 6th + 7th + 8th + District: +All Districts +Berkshire, Hampden, Franklin & Hampshire +Berkshire, Hampshire, Franklin & Hampden +First Plymouth & Norfolk +Hampden, Hampshire & Worcester +Norfolk & Middlesex +Norfolk, Plymouth & Bristol +Norfolk, Worcester & Middlesex +Second Plymouth & Norfolk +Third Bristol & Plymouth +Worcester & Hampden +Worcester & Hampshire +Berkshire +Berkshire, Hampshire and Franklin +Berkshire, Hampden, Hampshire and Franklin +Bristol +1st Bristol +2nd Bristol +Bristol and Norfolk +Bristol and Plymouth +1st Bristol and Plymouth +2nd Bristol and Plymouth +3rd Bristol +Bristol, Plymouth, and Norfolk +Cape and Islands +Cape and Plymouth +Cape, Plymouth, and Islands +1st Essex +2nd Essex +3rd Essex +4th Essex +5th Essex +1st Essex and Middlesex +2nd Essex and Middlesex +3rd Essex and Middlesex +Franklin and Hampshire +Franklin, Hampden, and Hampshire +Hampden +Hampden and Berkshire +Hampden and Hampshire +1st Hampden +2nd Hampden +1st Hampden and Hampshire +2nd Hampden and Hampshire +Hampshire +Hampshire and Franklin +Hampshire, Franklin and Worcester +1st Middlesex +2nd Middlesex +3rd Middlesex +4th Middlesex +6th Middlesex +7th Middlesex +8th Middlesex +5th Middlesex +Middlesex and Essex +1st Middlesex and Norfolk +2nd Middlesex and Norfolk +3rd Middlesex and Norfolk +Middlesex and Norfolk +Middlesex, Norfolk & Worcester +Middlesex and Worcester +Middlesex and Suffolk +Middlesex, Suffolk and Essex +Norfolk +Norfolk and Bristol +Norfolk, Bristol and Middlesex +Norfolk, Bristol and Plymouth +Norfolk and Plymouth +Norfolk and Suffolk +Plymouth +1st Plymouth +2nd Plymouth +Plymouth and Barnstable +Plymouth and Norfolk +1st Plymouth and Bristol +2nd Plymouth and Bristol +1st Suffolk +2nd Suffolk +3rd Suffolk +4th Suffolk +5th Suffolk +6th Suffolk +Suffolk and Middlesex +Suffolk and Norfolk +1st Suffolk and Middlesex +1st Suffolk and Norfolk +2nd Suffolk and Middlesex +2nd Suffolk and Norfolk +Suffolk, Essex and Middlesex +Worcester +Worcester and Middlesex +Worcester and Norfolk +Worcester, Hampden and Hampshire +Worcester, Hampden, Hampshire and Franklin +Worcester, Hampden, Hampshire and Middlesex +1st Worcester +2nd Worcester +3rd Worcester +4th Worcester +1st Worcester and Middlesex +2nd Worcester and Middlesex + District: +All Districts +1st Barnstable +2nd Barnstable +3rd Barnstable +4th Barnstable +5th Barnstable +Barnstable, Dukes and Nantucket +1st Berkshire +2nd Berkshire +3rd Berkshire +4th Berkshire +5th Berkshire +6th Berkshire +1st Bristol +2nd Bristol +3rd Bristol +4th Bristol +5th Bristol +6th Bristol +7th Bristol +8th Bristol +9th Bristol +10th Bristol +11th Bristol +12th Bristol +13th Bristol +14th Bristol +15th Bristol +16th Bristol +17th Bristol +18th Bristol +Cape and Islands +1st Dukes +1st Essex +2nd Essex +3rd Essex +4th Essex +5th Essex +6th Essex +7th Essex +8th Essex +9th Essex +10th Essex +11th Essex +12th Essex +13th Essex +14th Essex +15th Essex +16th Essex +17th Essex +18th Essex +19th Essex +20th Essex +21st Essex +22nd Essex +23rd Essex +24th Essex +25th Essex +26th Essex +27th Essex +1st Franklin +2nd Franklin +3rd Franklin +1st Hampden +2nd Hampden +3rd Hampden +4th Hampden +5th Hampden +6th Hampden +7th Hampden +8th Hampden +9th Hampden +10th Hampden +11th Hampden +12th Hampden +13th Hampden +14th Hampden +15th Hampden +16th Hampden +17th Hampden +18th Hampden +19th Hampden +20th Hampden +1st Hampshire +2nd Hampshire +3rd Hampshire +4th Hampshire +1st Middlesex +2nd Middlesex +3rd Middlesex +4th Middlesex +5th Middlesex +6th Middlesex +7th Middlesex +8th Middlesex +9th Middlesex +10th Middlesex +11th Middlesex +12th Middlesex +13th Middlesex +14th Middlesex +15th Middlesex +16th Middlesex +17th Middlesex +18th Middlesex +19th Middlesex +20th Middlesex +21st Middlesex +22nd Middlesex +23rd Middlesex +24th Middlesex +25th Middlesex +26th Middlesex +27th Middlesex +28th Middlesex +29th Middlesex +30th Middlesex +31st Middlesex +32nd Middlesex +33rd Middlesex +34th Middlesex +35th Middlesex +36th Middlesex +37th Middlesex +38th Middlesex +39th Middlesex +40th Middlesex +41st Middlesex +42nd Middlesex +43rd Middlesex +44th Middlesex +45th Middlesex +46th Middlesex +47th Middlesex +48th Middlesex +49th Middlesex +50th Middlesex +51st Middlesex +52nd Middlesex +53rd Middlesex +54th Middlesex +55th Middlesex +56th Middlesex +57th Middlesex +58th Middlesex +59th Middlesex +1st Nantucket +1st Norfolk +2nd Norfolk +3rd Norfolk +4th Norfolk +5th Norfolk +6th Norfolk +7th Norfolk +8th Norfolk +9th Norfolk +10th Norfolk +11th Norfolk +12th Norfolk +13th Norfolk +14th Norfolk +15th Norfolk +16th Norfolk +17th Norfolk +18th Norfolk +19th Norfolk +20th Norfolk +21st Norfolk +22nd Norfolk +23rd Norfolk +24th Norfolk +1st Plymouth +2nd Plymouth +3rd Plymouth +4th Plymouth +5th Plymouth +6th Plymouth +7th Plymouth +8th Plymouth +9th Plymouth +10th Plymouth +11th Plymouth +12th Plymouth +13th Plymouth +14th Plymouth +15th Plymouth +1st Suffolk +2nd Suffolk +3rd Suffolk +4th Suffolk +5th Suffolk +6th Suffolk +7th Suffolk +8th Suffolk +9th Suffolk +10th Suffolk +11th Suffolk +12th Suffolk +13th Suffolk +14th Suffolk +15th Suffolk +16th Suffolk +17th Suffolk +18th Suffolk +19th Suffolk +20th Suffolk +21st Suffolk +22nd Suffolk +23rd Suffolk +24th Suffolk +25th Suffolk +26th Suffolk +27th Suffolk +28th Suffolk +29th Suffolk +30th Suffolk +31st Suffolk +1st Worcester +2nd Worcester +3rd Worcester +4th Worcester +5th Worcester +6th Worcester +7th Worcester +8th Worcester +9th Worcester +10th Worcester +11th Worcester +12th Worcester +13th Worcester +14th Worcester +15th Worcester +16th Worcester +17th Worcester +18th Worcester +19th Worcester +20th Worcester +21st Worcester +22nd Worcester +23rd Worcester +24th Worcester +25th Worcester +26th Worcester +27th Worcester + District: +All Districts +Berkshire +Bristol +Cape and Islands +Eastern +Hampden +Middle +Norfolk +Northern +Northwestern +Plymouth +Southern +Suffolk +Western + County: +All Counties +Barnstable +Berkshire +Bristol +Dukes +Essex +Franklin +Hampden +Hampshire +Middlesex +Nantucket +Norfolk +Plymouth +Suffolk +Worcester + County: +All Counties +Suffolk + County: +All Counties +Suffolk + County: +All Counties +Suffolk + District: +All Districts +Barnstable County - Barnstable +Barnstable County - Bourne +Barnstable County - Brewster +Barnstable County - Chatham +Barnstable County - Dennis +Barnstable County - Eastham +Barnstable County - Falmouth +Barnstable County - Harwich +Barnstable County - Mashpee +Barnstable County - Orleans +Barnstable County - Provincetown +Barnstable County - Sandwich +Barnstable County - Truro +Barnstable County - Wellfleet +Barnstable County - Yarmouth +Berkshire County - At Large +Berkshire County (8th) +Berkshire County (5th) +Berkshire County (1st) +Berkshire County (4th) +Berkshire County (9th) +Berkshire County (2nd) +Berkshire County (7th) +Berkshire County (6th) +Berkshire County (10th) +Berkshire County (3rd) +Bristol County (8th) +Bristol County (11th) +Bristol County (15th) +Bristol County (5th) +Bristol County (1st) +Bristol County (4th) +Bristol County (9th) +Bristol County (2nd) +Bristol County (7th) +Bristol County (6th) +Bristol County (10th) +Bristol County (3rd) +Bristol County (13th) +Bristol County (12th) +Dukes County at Large +Essex County (8th) +Essex County (11th) +Essex County (15th) +Essex County (5th) +Essex County (1st) +Essex County (14th) +Essex County (4th) +Essex County (9th) +Essex County (2nd) +Essex County (7th) +Essex County (6th) +Essex County (10th) +Essex County (3rd) +Essex County (13th) +Essex County (12th) +Franklin County (8th) +Franklin County (5th) +Franklin County (1st) +Franklin County (4th) +Franklin County (9th) +Franklin County (2nd) +Franklin County (7th) +Franklin County (6th) +Franklin County (10th) +Franklin County (3rd) +Franklin County at Large +Hampshire County - At Large +Hampshire County (8th) +Hampshire County (11th) +Hampshire County (15th) +Hampshire County (5th) +Hampshire County (1st) +Hampshire County (14th) +Hampshire County (4th) +Hampshire County (9th) +Hampshire County (2nd) +Hampshire County (7th) +Hampshire County (6th) +Hampshire County (10th) +Hampshire County (3rd) +Hampshire County (13th) +Hampshire County (12th) +Nantucket County at Large +Norfolk County (8th) +Norfolk County (11th) +Norfolk County (15th) +Norfolk County (5th) +Norfolk County (1st) +Norfolk County (14th) +Norfolk County (4th) +Norfolk County (9th) +Norfolk County (2nd) +Norfolk County (7th) +Norfolk County (6th) +Norfolk County (10th) +Norfolk County (3rd) +Norfolk County (12th) +Plymouth County (8th) +Plymouth County (11th) +Plymouth County (15th) +Plymouth County (5th) +Plymouth County (1st) +Plymouth County (14th) +Plymouth County (4th) +Plymouth County (9th) +Plymouth County (2nd) +Plymouth County (7th) +Plymouth County (6th) +Plymouth County (10th) +Plymouth County (3rd) +Plymouth County (13th) +Plymouth County (12th) +Worcester County (8th) +Worcester County (11th) +Worcester County (15th) +Worcester County (5th) +Worcester County (1st) +Worcester County (14th) +Worcester County (4th) +Worcester County (9th) +Worcester County (2nd) +Worcester County (7th) +Worcester County (6th) +Worcester County (10th) +Worcester County (3rd) +Worcester County (13th) +Worcester County (12th) + District: +All Districts +Barnstable +Berkshire Middle +Berkshire Northern +Berkshire Southern +Bristol Fall River +Bristol Northern +Bristol Southern +Dukes +Essex Northern +Essex Southern +Fall River +Franklin +Hampden +Hampshire +Middlesex Northern +Middlesex Southern +Nantucket +Norfolk +Plymouth +Suffolk +Worcester +Worcester Northern + County: +All Counties +Barnstable +Berkshire +Bristol +Dukes +Essex +Franklin +Hampden +Hampshire +Middlesex +Nantucket +Norfolk +Plymouth +Suffolk +Worcester + County: +All Counties +Barnstable +Berkshire +Bristol +Dukes +Essex +Franklin +Hampden +Hampshire +Middlesex +Norfolk +Plymouth +Worcester + County: +All Counties +Franklin + County: +All Counties +Barnstable +Berkshire +Bristol +Dukes +Essex +Franklin +Hampden +Hampshire +Middlesex +Nantucket +Norfolk +Plymouth +Suffolk +Worcester + County: +All Counties +Franklin + Stage: +All Elections +All General Elections +All Primary Elections +American Primaries +Democratic Primaries +Green-Rainbow Primaries +Independent Voters Primaries +Libertarian Primaries +Republican Primaries +United Independent Primaries +Working Families Primaries + Stage: +All Elections +American Party +Democratic Party +Green-Rainbow Party +Libertarian Party +Republican Party +United Independent Party +Working Families Party + Stage: +All Elections +American Party +Democratic Party +Green-Rainbow Party +Libertarian Party +Republican Party +United Independent Party +Working Families Party + Stage: +All Elections +All General Elections +All Primary Elections +Democratic Primaries +Republican Primaries + Stage: +All Elections +All General Elections +All Primary Elections +Democratic Primaries +Republican Primaries + Stage: +All Elections +All General Elections +All Primary Elections +American Primaries +Democratic Primaries +Green-Rainbow Primaries +Libertarian Primaries +Republican Primaries +Working Families Primaries + Stage: +All Elections +All General Elections +All Primary Elections +Democratic Primaries +Green-Rainbow Primaries +Libertarian Primaries +Republican Primaries + Stage: +All Elections +All General Elections +All Primary Elections +Democratic Primaries +Green-Rainbow Primaries +Libertarian Primaries +Republican Primaries + Stage: +All Elections +All General Elections +All Primary Elections +Democratic Primaries +Green-Rainbow Primaries +Libertarian Primaries +Republican Primaries + Stage: +All Elections +All General Elections +All Primary Elections +Democratic Primaries +Green-Rainbow Primaries +Libertarian Primaries +Republican Primaries + Stage: +All Elections +All General Elections +All Primary Elections +Democratic Primaries +Green-Rainbow Primaries +Libertarian Primaries +Republican Primaries + Stage: +All Elections +All General Elections +All Primary Elections +Democratic Primaries +Green-Rainbow Primaries +Libertarian Primaries +Republican Primaries + Stage: +All Elections +All General Elections +All Primary Elections +American Primaries +Democratic Primaries +Green-Rainbow Primaries +Libertarian Primaries +Republican Primaries +United Independent Party Primaries +Working Families Primaries +Independent Primaries + Stage: +All Elections +All General Elections +All Primary Elections +American Primaries +Democratic Primaries +Green-Rainbow Primaries +Libertarian Primaries +Republican Primaries +United Independent Party Primaries +Working Families Primaries + Stage: +All Elections +All General Elections +All Primary Elections +American Primaries +Democratic Primaries +Green-Rainbow Primaries +Libertarian Primaries +Republican Primaries +United Independent Party Primaries +Working Families Primaries +Independent Primaries +United Independent Primaries +Independent Voters Primaries + Stage: +All Elections +All General Elections +All Primary Elections +American Primaries +Democratic Primaries +Green-Rainbow Primaries +Libertarian Primaries +Republican Primaries +United Independent Party Primaries +Working Families Primaries +Independent Voters Primaries +Independent Primaries +United Independent Primaries +Green Primaries + Stage: +All Elections +All General Elections +All Primary Elections +Democratic Primaries +Green-Rainbow Primaries +Libertarian Primaries +Republican Primaries +United Independent Party Primaries + Stage: +All Elections +All General Elections +All Primary Elections +American Primaries +Democratic Primaries +Green-Rainbow Primaries +Libertarian Primaries +Republican Primaries +Working Families Primaries + Stage: +All Elections +All General Elections +All Primary Elections +Democratic Primaries +Green-Rainbow Primaries +Libertarian Primaries +Republican Primaries + Stage: +All Elections +All General Elections +All Primary Elections +Democratic Primaries +Green-Rainbow Primaries +Libertarian Primaries +Republican Primaries + Stage: +All Elections +All General Elections +All Primary Elections +Democratic Primaries +Green-Rainbow Primaries +Libertarian Primaries +Republican Primaries + Stage: +All Elections +All General Elections +All Primary Elections + Stage: +All Elections +All General Elections +All Primary Elections +American Primaries +Democratic Primaries +Green-Rainbow Primaries +Libertarian Primaries +Republican Primaries +United Independent Party Primaries +Working Families Primaries + Stage: +All Elections +All General Elections +All Primary Elections +Democratic Primaries +Green-Rainbow Primaries +Libertarian Primaries +Republican Primaries +United Independent Party Primaries + Stage: +All Elections +All General Elections +All Primary Elections +Democratic Primaries +Republican Primaries +Green-Rainbow Primaries +Libertarian Primaries +Working Families Primaries + Stage: +All Elections +All General Elections +All Primary Elections +Democratic Primaries + Stage: +All Elections +All General Elections +All Primary Elections +Democratic Primaries +Green-Rainbow Primaries +Libertarian Primaries +Republican Primaries +Working Families Primaries + Stage: +All Elections +All General Elections +All Primary Elections + Stage: +All Elections +All General Elections +All Primary Elections +American Primaries +Democratic Primaries +Green-Rainbow Primaries +Independent Voters Primaries +Libertarian Primaries +Republican Primaries +United Independent Primaries +Working Families Primaries +United Independent Party Primaries +Independent Primaries +Green Primaries +Advanced Search Special Elections Only? # Candidates: + += +>= +<= + +any +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 + % Victory: + +>= +<= + +any +10 +20 +30 +40 +50 +60 +70 +80 +90 +% % Closeness: + +>= +<= + +any +1 +3 +5 +10 +20 +30 +40 +50 +60 +70 +80 +90 +% Display OptionsShow candidatesEnlarge data visualizations + + + + + + // Global + var E_DATE_LIST_HTML = ''; + + e_init_date_year_toggle(); + e_adjustYearSelect($('#SearchOfficeId').val()); + + + function e_enableDistrictSelect(office_id) { + $("#search_form_elections .wrapper_for_district_list").hide(); + $("#search_form_elections .district_list").hide(); + $("#search_form_elections .district_list").each(function(n,v) { + $(this).attr("disabled",true); //"district_id_off"; + }); + var find_target = "#search_form_elections #districtListForOffice"+office_id; + + if($(find_target).length) { + + $("#search_form_elections #districtListForOffice"+office_id).attr("disabled",false); + $("#search_form_elections #districtListForOffice"+office_id).show() + $("#search_form_elections #wrapperForDistrictListForOffice"+office_id).show(); + } + } + + function e_enableStageSelect(office_id) { + $("#search_form_elections .wrapper_for_stage_list").hide(); + $("#search_form_elections .stage_list").hide(); + $("#search_form_elections .stage_list").each(function(n,v) { + $(this).attr("disabled",true); //"district_id_off"; + }); + var find_target = "#search_form_elections #stageListForOffice"+office_id; + + if($(find_target).length) { + + $("#search_form_elections #stageListForOffice"+office_id).attr("disabled",false); + $("#search_form_elections #stageListForOffice"+office_id).show() + $("#search_form_elections #wrapperForStageListForOffice"+office_id).show(); + } + } + + /** + * Choices of years in year dropdowns change according to the office selected. + * @param oid + * @return {boolean} + */ + + + + function e_adjustYearSelect(oid) { + + if(!E_DATE_LIST_HTML) { E_DATE_LIST_HTML = $('#SearchDate').html(); } + + if(!oid) { return false; } + + var valid_years = {"2026":"2026","2025":"2025","2024":"2024","2023":"2023","2022":"2022","2021":"2021","2020":"2020","2018":"2018","2017":"2017","2016":"2016","2015":"2015","2014":"2014","2013":"2013","2012":"2012","2011":"2011","2010":"2010","2009":"2009","2008":"2008","2007":"2007","2006":"2006","2005":"2005","2004":"2004","2003":"2003","2002":"2002","2001":"2001","2000":"2000","1999":"1999","1998":"1998","1997":"1997","1996":"1996","1995":"1995","1994":"1994","1993":"1993","1992":"1992","1991":"1991","1990":"1990","1988":"1988","1987":"1987","1986":"1986","1985":"1985","1984":"1984","1983":"1983","1982":"1982","1981":"1981","1980":"1980","1979":"1979","1978":"1978","1977":"1977","1976":"1976","1975":"1975","1974":"1974","1972":"1972","1971":"1971","1970":"1970"}; + var office_year_ranges = {"1":["1972","2024"],"521":["1972","2024"],"522":["1972","2024"],"543":["1972","1972"],"544":["1972","1972"],"6":["1970","2024"],"3":["1970","2022"],"4":["1970","2022"],"12":["1970","2022"],"45":["1970","2022"],"53":["1970","2022"],"90":["1970","2022"],"5":["1970","2024"],"529":["1970","2024"],"9":["1970","2026"],"8":["1970","2026"],"530":["1970","2022"],"15":["1970","2024"],"534":["1970","2024"],"535":["1970","2024"],"536":["1970","2024"],"532":["1986","2010"],"384":["1970","2024"],"386":["1970","2022"],"389":["1972","2020"],"434":["1974","1974"],"537":["1970","2024"],"531":["1998","2024"]}; + var target_year_range = office_year_ranges[oid]; + var current_selected_from = $('#SearchYearFrom').val(); + var current_selected_to = $('#SearchYearTo').val(); + var current_selected_date = $('#SearchDate').val(); + + var options_html = ''; + var has_currently_selected_from = false; + var has_currently_selected_to = false; + + var date_options = $(window.E_DATE_LIST_HTML); + + var target_date_options = []; + + for(y=target_year_range[1];y>=target_year_range[0];y--) { + if(typeof valid_years[y] == 'undefined') { continue; } + + options_html += "\n"+''; + + y == current_selected_from? has_currently_selected_from = true: ''; + y == current_selected_to? has_currently_selected_to = true: ''; + + date_options.each(function(k,v) { if($(v).val().substr(0,4) == y) { target_date_options.push(v); } }); + } + + // console.log(target_date_options.length); + + $('#SearchDate').html(target_date_options); + $('#SearchDate').val(current_selected_date).change(); + + $('#SearchYearFrom').html(options_html); + $('#SearchYearTo').html(options_html); + + $('#SearchYearFrom').val(has_currently_selected_from? current_selected_from: target_year_range[0]).change(); + $('#SearchYearTo').val(has_currently_selected_to? current_selected_to: target_year_range[1]).change(); + + + return true; + + } + + function e_sanitizeYearSelect(year) { + if($("#search_form_elections #SearchYearFrom").val() > $("#search_form_elections #SearchYearTo").val()) { + $("#search_form_elections #SearchYearTo").val( $("#search_form_elections #SearchYearFrom").val()); + } + } + // Turn on the correct District and Stage form on page load, if applicable + e_enableDistrictSelect($("#search_form_elections #SearchOfficeId").val()); + e_enableStageSelect($("#search_form_elections #SearchOfficeId").val()); + + // Bind event handler to office select + $("#search_form_elections #SearchOfficeId").change(function() { + + e_enableDistrictSelect($(this).val()); + e_enableStageSelect($(this).val()); + e_adjustYearSelect($(this).val()); + + }); + + $("#search_form_elections .search_controls form").submit(function() { + e_sanitizeYearSelect($(this).val()); + loadingSearchResults(); + return true; + }); + + + function e_init_date_year_toggle() { + // Toggle between inputs + var sel_year = $('#search_form_elections .input.select-year-range'); + var sel_date = $('#search_form_elections .input.select-date'); + sel_year.before(''); + sel_date.before(''); + + // Default + sel_date.hide().appendTo($('body')); + + if(sel_year.length && sel_date.length) { + if(!sel_year.find('.toggle').length) { + sel_year.append('By Date'); + sel_year.find('.toggle').on('click',this,function(e) { + sel_year.hide().appendTo($('body')); + sel_date.insertAfter($('a.e.keep-sel-date')); + sel_date.show(); + }); + } + if(!sel_date.find('.toggle').length) { + sel_date.append('By Years'); + sel_date.find('.toggle').on('click',this,function(e) { + sel_date.hide().appendTo($('body')); + sel_year.insertAfter($('a.e.keep-sel-year')); + sel_year.show(); + }); + } + } + + } // END function init_date_year_toggle() + + + + + + + + + //$.cookie.defaults.path = '/'; + //$.cookie.defaults.domain = '.electionstats.state.ma.us'; + + // Not working (from Cake Cookie component) + //var msg = $.cookie('CakeCookie[Flash][message]'); + //var key = $.cookie('CakeCookie[Flash][key]'); + + + + //console.log(document.cookie); + + + var msg = $.cookie('elstats_flash_message'); + var key = $.cookie('elstats_flash_key'); + + if(msg) { + key = $.trim(key.replace(/"/g,'')); + msg = msg.replace(/^"/,'').replace(/"$/,''); + + //.replace(/'/g, "\\'") + + var data = '
'+msg+'
'; + $('#flash_from_js_98523').after(data); + + // Optional: jQueryUI effects + if(msg.search(/denied/i) > -1) { + $('#'+key+'.flash-message-98523').delay(5000).fadeOut(); + } + + if(key == 'flash_error_fixed_to_top') { + window.setTimeout(function() { $('#'+key).fadeOut(3000); }, 10000); + } + + + // Now delete them. (this was set from AccessComponent::setFlash()) + $.removeCookie('elstats_flash_message',{domain:'.electionstats.state.ma.us',path:'/'}); + $.removeCookie('elstats_flash_key',{domain:'.electionstats.state.ma.us',path:'/'}); + + // Not working (from Cake Cookie component) + //$.removeCookie('CakeCookie[Flash][message]',{domain:'.electionstats.state.ma.us',path:'/'}); + //$.removeCookie('CakeCookie[Flash][key]',{domain:'.electionstats.state.ma.us',path:'/'}); + + + + //console.log('after flash:'); + //console.log(document.cookie); + + } + + + /** + $.post('/flash_from_js/',{},function(data) { + if(data) { + $('#flash_from_ajax_98523').after(data); + } + }); + **/ + + + +https://electionstats.state.ma.us/elections/view/165300/ +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 diff --git a/tests/fixtures/electionResults/2016_general.html b/tests/fixtures/electionResults/2016_general.html new file mode 100644 index 000000000..79ab4e92a --- /dev/null +++ b/tests/fixtures/electionResults/2016_general.html @@ -0,0 +1,20209 @@ + + + + + + + + PD43+ » Search Elections + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+ + ๏ปฟ + + + + +
+ + +
+ + + + + + + + + + + + + + +
+ + + + +
+ + + + + +
+ + +
+
+ + + + + +
+ + +
+
+ + + + + +
 
+
+ + + +
 
+ + +
+
+ + + + + + +
+ + + + + +
+
+ +
+ + + + + + +
+
+
+
 
+
+
+ + + + + + + + +
+
+ + + +
+
+ SHARE THIS DATA: + + + + + + + + + +
+
+ + + + + +
+ + + + + +

To visualize the data, specify a state-wide office or a district.

+
+
+ +
+
+ + +
+
+ +
Please wait...
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
YearOfficeDistrictStageCandidates
2016PresidentStatewideGeneral Election +
+Clinton and Kaine won + (60%) against 8 opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016U.S. House1st CongressionalGeneral Election +
+Richard E. Neal won + (73%) against 2 opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016U.S. House2nd CongressionalGeneral Election +
+James P. McGovern won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016U.S. House3rd CongressionalGeneral Election +
+Nicola S. Tsongas won + (69%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016U.S. House4th CongressionalGeneral Election +
+Joseph P. Kennedy, III won + (70%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016U.S. House5th CongressionalGeneral Election +
+Katherine M. Clark won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016U.S. House6th CongressionalGeneral Election +
+Seth W. Moulton won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016U.S. House7th CongressionalGeneral Election +
+Michael E. Capuano won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016U.S. House8th CongressionalGeneral Election +
+Stephen F. Lynch won + (72%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016U.S. House9th CongressionalGeneral Election +
+William Richard Keating won + (56%) against 4 opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016Governor's Council 1stGeneral Election +
+Joseph C. Ferreira won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016Governor's Council 2ndGeneral Election +
+Robert L. Jubinville won + (62%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016Governor's Council 3rdGeneral Election +
+Marilyn Petitto Devaney won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016Governor's Council 4thGeneral Election +
+Christopher A. Iannella, Jr. won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016Governor's Council 5thGeneral Election +
+Eileen R. Duff won + (57%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016Governor's Council 6thGeneral Election +
+Terrence W. Kennedy won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016Governor's Council 7thGeneral Election +
+Jennie L. Caissie won + (55%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016Governor's Council 8thGeneral Election +
+Mary E. Hurley won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State SenateBerkshire, Hampshire and FranklinGeneral Election +
+Adam G. Hinds won + (70%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State SenateBristol and NorfolkGeneral Election +
+James E. Timilty won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Senate1st Bristol and PlymouthGeneral Election +
+Michael J. Rodrigues won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Senate2nd Bristol and PlymouthGeneral Election +
+Mark C. Montigny won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State SenateCape and IslandsGeneral Election +
+Julian Andre Cyr won + (57%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Senate1st EssexGeneral Election +
+Kathleen A. O'Connor Ives won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Senate2nd EssexGeneral Election +
+Joan B. Lovely won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Senate3rd EssexGeneral Election +
+Thomas M. McGee won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Senate1st Essex and MiddlesexGeneral Election +
+Bruce E. Tarr won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Senate2nd Essex and MiddlesexGeneral Election +
+Barbara A. L'Italien won + (63%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State SenateHampdenGeneral Election +
+James T. Welch won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Senate1st Hampden and HampshireGeneral Election +
+Eric P. Lesser won + (56%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Senate2nd Hampden and HampshireGeneral Election +
+Donald F. Humason, Jr won + (59%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State SenateHampshire, Franklin and WorcesterGeneral Election +
+Stanley C. Rosenberg won + (82%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Senate1st MiddlesexGeneral Election +
+Eileen M. Donoghue won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Senate2nd MiddlesexGeneral Election +
+Patricia D. Jehlen won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Senate3rd MiddlesexGeneral Election +
+Michael J. Barrett won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Senate4th MiddlesexGeneral Election +
+Kenneth J. Donnelly won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Senate5th MiddlesexGeneral Election +
+Jason M. Lewis won + (69%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Senate1st Middlesex and NorfolkGeneral Election +
+Cynthia Stone Creem won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Senate2nd Middlesex and NorfolkGeneral Election +
+Karen E. Spilka won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State SenateMiddlesex and WorcesterGeneral Election +
+James B. Eldridge won + (64%) against 2 opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State SenateMiddlesex and SuffolkGeneral Election +
+Sal N. DiDomenico won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State SenateNorfolk, Bristol and MiddlesexGeneral Election +
+Richard J. Ross won + (60%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State SenateNorfolk, Bristol and PlymouthGeneral Election +
+Walter F. Timilty, Jr. won + (74%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State SenateNorfolk and PlymouthGeneral Election +
+John F. Keenan won + (71%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State SenateNorfolk and SuffolkGeneral Election +
+Michael F. Rush won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State SenatePlymouth and BarnstableGeneral Election +
+Vinny M. deMacedo won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State SenatePlymouth and NorfolkGeneral Election +
+Patrick M. O'Connor won + (57%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State SenatePlymouth and NorfolkSpecial General Election +
+Patrick M. O'Connor won + (53%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Senate1st Plymouth and BristolGeneral Election +
+Marc R. Pacheco won + (65%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Senate2nd Plymouth and BristolGeneral Election +
+Michael D. Brady won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Senate1st SuffolkGeneral Election +
+Linda Dorcena Forry won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Senate2nd SuffolkGeneral Election +
+Sonia Rosa Chang-Dรƒยญaz won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Senate1st Suffolk and MiddlesexGeneral Election +
+Joseph A. Boncore won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Senate1st Suffolk and MiddlesexSpecial General Election +
+Joseph A. Boncore won + (89%) against 2 opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Senate2nd Suffolk and MiddlesexGeneral Election +
+William N. Brownsberger won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State SenateWorcester and MiddlesexGeneral Election +
+Jennifer L. Flanagan won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State SenateWorcester and NorfolkGeneral Election +
+Ryan C. Fattman won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State SenateWorcester, Hampden, Hampshire and MiddlesexGeneral Election +
+Anne M. Gobi won + (54%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Senate1st WorcesterGeneral Election +
+Harriette L. Chandler won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Senate2nd WorcesterGeneral Election +
+Michael O. Moore won + (74%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative1st BarnstableGeneral Election +
+Timothy R. Whelan won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative2nd BarnstableGeneral Election +
+William L. Crocker, Jr. won + (55%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative3rd BarnstableGeneral Election +
+David T. Vieira won + (53%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative4th BarnstableGeneral Election +
+Sarah K. Peake won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative5th BarnstableGeneral Election +
+Randy Hunt won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State RepresentativeBarnstable, Dukes and NantucketGeneral Election +
+Dylan A. Fernandes won + (52%) against 2 opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative1st BerkshireGeneral Election +
+Gailanne M. Cariddi won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative2nd BerkshireGeneral Election +
+Paul W. Mark won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative3rd BerkshireGeneral Election +
+Tricia Farley-Bouvier won + (66%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative4th BerkshireGeneral Election +
+William "Smitty" Pignatelli won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative1st BristolGeneral Election +
+Fred Jay Barrows won + (60%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative2nd BristolGeneral Election +
+Paul R. Heroux won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative3rd BristolGeneral Election +
+Shaunna L. O'Connell won + (59%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative4th BristolGeneral Election +
+Steven S. Howitt won + (62%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative5th BristolGeneral Election +
+Patricia A. Haddad won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative6th BristolGeneral Election +
+Carole A. Fiola won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative7th BristolGeneral Election +
+Alan Silvia won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative8th BristolGeneral Election +
+Paul Schmid, III won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative9th BristolGeneral Election +
+Christopher M. Markey won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative10th BristolGeneral Election +
+William M. Straus won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative11th BristolGeneral Election +
+Robert M. Koczera won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative12th BristolGeneral Election +
+Keiko M. Orrall won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative13th BristolGeneral Election +
+Antonio F.D. Cabral won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative14th BristolGeneral Election +
+Elizabeth A. Poirier won + (70%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative1st EssexGeneral Election +
+James M. Kelcourse won + (54%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative2nd EssexGeneral Election +
+Leonard Mirra won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative3rd EssexGeneral Election +
+Brian S. Dempsey won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative4th EssexGeneral Election +
+Bradford R. Hill won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative5th EssexGeneral Election +
+Ann-Margaret Ferrante won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative6th EssexGeneral Election +
+Jerald A. Parisella won + (75%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative7th EssexGeneral Election +
+Paul F. Tucker won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative8th EssexGeneral Election +
+Lori A. Ehrlich won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative9th EssexGeneral Election +
+Donald H. Wong won + (55%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative10th EssexGeneral Election +
+Daniel H. Cahill won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative10th EssexSpecial General Election +
+Daniel H. Cahill won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative11th EssexGeneral Election +
+Brendan P. Crighton won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative12th EssexSpecial General Election +
+Thomas P. Walsh won + (57%) against 2 opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative12th EssexGeneral Election +
+Thomas P. Walsh won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative13th EssexGeneral Election +
+Theodore C. Speliotis won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative14th EssexGeneral Election +
+Diana DiZoglio won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative15th EssexGeneral Election +
+Linda Dean Campbell won + (63%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative16th EssexGeneral Election +
+Juana B. Matias won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative17th EssexGeneral Election +
+Frank A. Moran won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative18th EssexGeneral Election +
+James J. Lyons, Jr. won + (60%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative1st FranklinGeneral Election +
+Stephen Kulik won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative2nd FranklinGeneral Election +
+Susannah M. Whipps Lee won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative1st HampdenGeneral Election +
+Todd M. Smola won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative2nd HampdenGeneral Election +
+Brian M. Ashe won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative3rd HampdenGeneral Election +
+Nicholas A. Boldyga won + (60%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative4th HampdenGeneral Election +
+John C. Velis won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative5th HampdenGeneral Election +
+Aaron Vega won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative6th HampdenGeneral Election +
+Michael J. Finn won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative7th HampdenGeneral Election +
+Thomas M. Petrolati won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative8th HampdenGeneral Election +
+Joseph F. Wagner won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative9th HampdenGeneral Election +
+Jose F. Tosado won + (80%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative10th HampdenGeneral Election +
+Carlos Gonzalez won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative11th HampdenGeneral Election +
+Bud L. Williams won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative12th HampdenGeneral Election +
+Angelo J. Puppolo, Jr. won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative1st HampshireGeneral Election +
+Peter V. Kocot won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative2nd HampshireGeneral Election +
+John W. Scibak won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative3rd HampshireGeneral Election +
+Solomon Israel Goldstein-Rose won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative1st MiddlesexGeneral Election +
+Sheila C. Harrington won + (65%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative2nd MiddlesexGeneral Election +
+James Arciero won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative3rd MiddlesexGeneral Election +
+Kate Hogan won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative4th MiddlesexGeneral Election +
+Danielle W. Gregoire won + (60%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative5th MiddlesexGeneral Election +
+David Paul Linsky won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative6th MiddlesexGeneral Election +
+Chris Walsh won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative7th MiddlesexGeneral Election +
+Jack Patrick Lewis won + (62%) against 2 opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative8th MiddlesexGeneral Election +
+Carolyn C. Dykema won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative9th MiddlesexGeneral Election +
+Thomas M. Stanley won + (63%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative10th MiddlesexGeneral Election +
+John J. Lawn, Jr. won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative11th MiddlesexGeneral Election +
+Kay S. Khan won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative12th MiddlesexGeneral Election +
+Ruth B. Balser won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative13th MiddlesexGeneral Election +
+Carmine Lawrence Gentile won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative14th MiddlesexGeneral Election +
+Cory Atkins won + (60%) against 2 opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative15th MiddlesexGeneral Election +
+Jay R. Kaufman won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative16th MiddlesexGeneral Election +
+Thomas A. Golden, Jr. won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative17th MiddlesexGeneral Election +
+David M. Nangle won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative18th MiddlesexGeneral Election +
+Rady Mom won + (72%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative19th MiddlesexGeneral Election +
+James R. Miceli won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative20th MiddlesexGeneral Election +
+Bradley H. Jones, Jr won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative21st MiddlesexGeneral Election +
+Kenneth I. Gordon won + (59%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative22nd MiddlesexGeneral Election +
+Marc T. Lombardo won + (59%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative23rd MiddlesexGeneral Election +
+Sean Garballey won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative24th MiddlesexGeneral Election +
+David M. Rogers won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative25th MiddlesexGeneral Election +
+Marjorie C. Decker won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative26th MiddlesexGeneral Election +
+Mike Connolly won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative27th MiddlesexGeneral Election +
+Denise Provost won + (87%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative28th MiddlesexGeneral Election +
+Joseph W. Mcgonagle, Jr won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative29th MiddlesexGeneral Election +
+Jonathan Hecht won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative30th MiddlesexGeneral Election +
+James J. Dwyer won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative31st MiddlesexGeneral Election +
+Michael Seamus Day won + (59%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative32nd MiddlesexGeneral Election +
+Paul A. Brodeur won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative33rd MiddlesexGeneral Election +
+Steven Ultrino won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative34th MiddlesexGeneral Election +
+Christine P. Barber won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative35th MiddlesexGeneral Election +
+Paul J. Donato, Sr. won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative36th MiddlesexGeneral Election +
+Colleen M. Garry won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative37th MiddlesexGeneral Election +
+Jennifer E. Benson won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative1st NorfolkGeneral Election +
+Bruce J. Ayers won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative2nd NorfolkGeneral Election +
+Tackey Chan won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative3rd NorfolkGeneral Election +
+Ronald Mariano won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative4th NorfolkGeneral Election +
+James Michael Murphy won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative5th NorfolkGeneral Election +
+Mark J. Cusack won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative6th NorfolkGeneral Election +
+William C. Galvin won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative7th NorfolkGeneral Election +
+William J. Driscoll, Jr won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative8th NorfolkGeneral Election +
+Louis L. Kafka won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative9th NorfolkGeneral Election +
+Shawn C. Dooley won + (61%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative10th NorfolkGeneral Election +
+Jeffrey N. Roy won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative11th NorfolkGeneral Election +
+Paul McMurtry won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative12th NorfolkGeneral Election +
+John H. Rogers won + (66%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative13th NorfolkGeneral Election +
+Denise C. Garlick won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative14th NorfolkGeneral Election +
+Alice Hanlon Peisch won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative15th NorfolkGeneral Election +
+Frank Israel Smizik won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative1st PlymouthGeneral Election +
+Mathew J. Muratore won + (51%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative2nd PlymouthGeneral Election +
+Susan Williams Gifford won + (58%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative3rd PlymouthGeneral Election +
+Joan Meschino won + (54%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative4th PlymouthGeneral Election +
+James M. Cantwell won + (70%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative5th PlymouthGeneral Election +
+David F. Decoste won + (51%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative6th PlymouthGeneral Election +
+Josh S. Cutler won + (64%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative7th PlymouthGeneral Election +
+Geoff Diehl won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative8th PlymouthGeneral Election +
+Angelo L. D'Emilia won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative9th PlymouthSpecial General Election +
+Gerard J. Cassidy won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative9th PlymouthGeneral Election +
+Gerard J. Cassidy won + (86%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative10th PlymouthGeneral Election +
+Michelle M. Dubois won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative11th PlymouthGeneral Election +
+Claire D. Cronin won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative12th PlymouthGeneral Election +
+Thomas J. Calter, III won + (60%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative1st SuffolkGeneral Election +
+Adrian C. Madaro won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative2nd SuffolkGeneral Election +
+Daniel Joseph Ryan won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative3rd SuffolkGeneral Election +
+Aaron M. Michlewitz won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative4th SuffolkGeneral Election +
+Nick Collins won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative5th SuffolkGeneral Election +
+Evandro C. Carvalho won + (84%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative6th SuffolkGeneral Election +
+Russell E. Holmes won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative7th SuffolkGeneral Election +
+Chynah Tyler won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative8th SuffolkGeneral Election +
+Jay D. Livingstone won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative9th SuffolkGeneral Election +
+Byron Rushing won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative10th SuffolkGeneral Election +
+Edward F. Coppinger won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative11th SuffolkGeneral Election +
+Elizabeth A. Malia won + (89%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative12th SuffolkGeneral Election +
+Dan Cullinane won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative13th SuffolkGeneral Election +
+Daniel J. Hunt won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative14th SuffolkGeneral Election +
+Angelo M. Scaccia won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative15th SuffolkGeneral Election +
+Jeffrey Sanchez won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative16th SuffolkGeneral Election +
+Roselee Vincent won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative17th SuffolkGeneral Election +
+Kevin G. Honan won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative18th SuffolkGeneral Election +
+Michael J. Moran won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative19th SuffolkGeneral Election +
+Robert A. DeLeo won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative1st WorcesterGeneral Election +
+Kimberly N. Ferguson won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative2nd WorcesterGeneral Election +
+Jonathan D. Zlotnik won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative3rd WorcesterSpecial General Election +
+Stephan Hay won + (51%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative3rd WorcesterGeneral Election +
+Stephan Hay won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative4th WorcesterGeneral Election +
+Natalie Higgins won + (55%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative5th WorcesterGeneral Election +
+Donald R. Berthiaume, Jr won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative6th WorcesterGeneral Election +
+Peter J. Durant won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative7th WorcesterGeneral Election +
+Paul K. Frost won + (66%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative8th WorcesterGeneral Election +
+Kevin J. Kuros won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative9th WorcesterGeneral Election +
+David K. Muradian, Jr won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative10th WorcesterGeneral Election +
+Brian W. Murray won + (55%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative11th WorcesterGeneral Election +
+Hannah E. Kane won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative12th WorcesterGeneral Election +
+Harold P. Naughton, Jr. won + (80%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative13th WorcesterGeneral Election +
+John J. Mahoney, Jr. won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative14th WorcesterGeneral Election +
+James J. O'Day won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative15th WorcesterGeneral Election +
+Mary S. Keefe won + (78%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative16th WorcesterGeneral Election +
+Daniel M. Donahue won + (67%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative17th WorcesterGeneral Election +
+Kate D. Campanale won + (54%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016State Representative18th WorcesterGeneral Election +
+Joseph D. Mckenna won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016District AttorneyBristolGeneral Election +
+Thomas M. Quinn, III won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016Register of DeedsDukesGeneral Election +
+Paulo C. Deoliveira won + (77%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016Register of DeedsSuffolkGeneral Election +
+Stephen J. Murphy won + (72%) against 3 opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016SheriffBarnstable CountyGeneral Election +
+James M. Cummings won + (59%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016SheriffBerkshire CountyGeneral Election +
+Thomas N. Bowler won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016SheriffBristol CountyGeneral Election +
+Thomas M. Hodgson won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016SheriffDukes CountyGeneral Election +
+Robert Ogden won + (64%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016SheriffEssex CountyGeneral Election +
+Kevin F. Coppinger won + (51%) against 3 opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016SheriffFranklin CountyGeneral Election +
+Christopher J. Donelan won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016SheriffHampden CountyGeneral Election +
+Nick Cocchi won + (68%) against 2 opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016SheriffHampshire CountyGeneral Election +
+Patrick J. Cahillane won + (76%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016SheriffMiddlesex CountyGeneral Election +
+Peter J. Koutoujian won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016SheriffNantucket CountyGeneral Election +
+James A. Perelman won + (88%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016SheriffNorfolk CountyGeneral Election +
+Michael G. Bellotti won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016SheriffPlymouth CountyGeneral Election +
+Joseph D. McDonald, Jr. won + (56%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016SheriffSuffolk CountyGeneral Election +
+Steven W. Tompkins won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016SheriffWorcester CountyGeneral Election +
+Lewis G. Evangelidis won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2016Council of Governments Executive CommitteeFranklin CountyGeneral Election +
+Jay D. Dipucchio won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
 
+ +
+ + + + + + + +
+ + + + + + + + + + + +
+
+
+๏ปฟ +
+ +
+ +
+
+
+ + + + + + + + + + + + + diff --git a/tests/fixtures/electionResults/2016_general.json b/tests/fixtures/electionResults/2016_general.json new file mode 100644 index 000000000..5bc1b6886 --- /dev/null +++ b/tests/fixtures/electionResults/2016_general.json @@ -0,0 +1,6497 @@ +[ + { + "id": 130243, + "year": 2016, + "office": "President", + "districts": "Statewide", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Clinton-and-Kaine", + "https://electionstats.state.ma.us/candidates/view/Trump-and-Pence", + "https://electionstats.state.ma.us/candidates/view/Johnson-and-Weld", + "https://electionstats.state.ma.us/candidates/view/Stein-and-Baraka", + "https://electionstats.state.ma.us/candidates/view/Mcmullin-and-Johnson", + "https://electionstats.state.ma.us/candidates/view/Kotlikoff-and-Leamer", + "https://electionstats.state.ma.us/candidates/view/Feegbeh-and-OBrien", + "https://electionstats.state.ma.us/candidates/view/Moorehead-and-Lilly", + "https://electionstats.state.ma.us/candidates/view/Schoenke-and-Mitchel" + ], + "result": { + "candidates": [ + { + "name": "Clinton and Kaine", + "votes": 1995196, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Trump and Pence", + "votes": 1090893, + "writeIn": false, + "party": "Republican" + }, + { + "name": "Johnson and Weld", + "votes": 138018, + "writeIn": false, + "party": "Libertarian" + }, + { + "name": "Stein and Baraka", + "votes": 47661, + "writeIn": false, + "party": "Green-rainbow" + }, + { + "name": "Mcmullin and Johnson", + "votes": 2719, + "writeIn": true + }, + { + "name": "Kotlikoff and Leamer", + "votes": 28, + "writeIn": true + }, + { + "name": "Feegbeh and O'Brien", + "votes": 28, + "writeIn": true + }, + { + "name": "Moorehead and Lilly", + "votes": 15, + "writeIn": true + }, + { + "name": "Schoenke and Mitchel", + "votes": 0, + "writeIn": true + } + ], + "otherVotes": 50488, + "blankVotes": 53755, + "totalVotes": 3378801 + } + }, + { + "id": 130262, + "year": 2016, + "office": "U.S. House", + "districts": "1st Congressional", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Richard-E-Neal", + "https://electionstats.state.ma.us/candidates/view/Frederick-O-Mayock", + "https://electionstats.state.ma.us/candidates/view/Thomas-T-Simmons" + ], + "result": { + "candidates": [ + { + "name": "Richard E. Neal", + "votes": 235803, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Frederick O. Mayock", + "votes": 57504, + "writeIn": false + }, + { + "name": "Thomas T. Simmons", + "votes": 27511, + "writeIn": false, + "party": "Libertarian" + } + ], + "otherVotes": 721, + "blankVotes": 28137, + "totalVotes": 349676 + } + }, + { + "id": 130275, + "year": 2016, + "office": "U.S. House", + "districts": "2nd Congressional", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/James-P-McGovern" + ], + "result": { + "candidates": [ + { + "name": "James P. McGovern", + "votes": 275487, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 4924, + "blankVotes": 82786, + "totalVotes": 363197 + } + }, + { + "id": 130249, + "year": 2016, + "office": "U.S. House", + "districts": "3rd Congressional", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Nicola-S-Tsongas", + "https://electionstats.state.ma.us/candidates/view/Ann-Wofford" + ], + "result": { + "candidates": [ + { + "name": "Nicola S. Tsongas", + "votes": 236713, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Ann Wofford", + "votes": 107519, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 360, + "blankVotes": 15532, + "totalVotes": 360124 + } + }, + { + "id": 130302, + "year": 2016, + "office": "U.S. House", + "districts": "4th Congressional", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Joseph-P-Kennedy-III", + "https://electionstats.state.ma.us/candidates/view/David-A-Rosa" + ], + "result": { + "candidates": [ + { + "name": "Joseph P. Kennedy, III", + "votes": 265823, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "David A. Rosa", + "votes": 113055, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 335, + "blankVotes": 16091, + "totalVotes": 395304 + } + }, + { + "id": 130286, + "year": 2016, + "office": "U.S. House", + "districts": "5th Congressional", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Katherine-M-Clark" + ], + "result": { + "candidates": [ + { + "name": "Katherine M. Clark", + "votes": 285606, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 4201, + "blankVotes": 95648, + "totalVotes": 385455 + } + }, + { + "id": 130271, + "year": 2016, + "office": "U.S. House", + "districts": "6th Congressional", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Seth-W-Moulton" + ], + "result": { + "candidates": [ + { + "name": "Seth W. Moulton", + "votes": 308923, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 5132, + "blankVotes": 101694, + "totalVotes": 415749 + } + }, + { + "id": 130337, + "year": 2016, + "office": "U.S. House", + "districts": "7th Congressional", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Michael-E-Capuano" + ], + "result": { + "candidates": [ + { + "name": "Michael E. Capuano", + "votes": 253354, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 3557, + "blankVotes": 52734, + "totalVotes": 309645 + } + }, + { + "id": 130244, + "year": 2016, + "office": "U.S. House", + "districts": "8th Congressional", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Stephen-F-Lynch", + "https://electionstats.state.ma.us/candidates/view/William-Burke" + ], + "result": { + "candidates": [ + { + "name": "Stephen F. Lynch", + "votes": 271019, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "William Burke", + "votes": 102744, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 502, + "blankVotes": 21744, + "totalVotes": 396009 + } + }, + { + "id": 130257, + "year": 2016, + "office": "U.S. House", + "districts": "9th Congressional", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/William-Richard-Keating", + "https://electionstats.state.ma.us/candidates/view/Mark-C-Alliegro", + "https://electionstats.state.ma.us/candidates/view/Paul-J-Harrington", + "https://electionstats.state.ma.us/candidates/view/Christopher-D-Cataldo", + "https://electionstats.state.ma.us/candidates/view/Anna-Grace-Raduc" + ], + "result": { + "candidates": [ + { + "name": "William Richard Keating", + "votes": 211790, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Mark C. Alliegro", + "votes": 127803, + "writeIn": false, + "party": "Republican" + }, + { + "name": "Paul J. Harrington", + "votes": 26233, + "writeIn": false + }, + { + "name": "Christopher D. Cataldo", + "votes": 8338, + "writeIn": false + }, + { + "name": "Anna Grace Raduc", + "votes": 5320, + "writeIn": false + } + ], + "otherVotes": 411, + "blankVotes": 23747, + "totalVotes": 403642 + } + }, + { + "id": 130254, + "year": 2016, + "office": "Governor's Council", + "districts": "1st", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Joseph-C-Ferreira" + ], + "result": { + "candidates": [ + { + "name": "Joseph C. Ferreira", + "votes": 304970, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 2766, + "blankVotes": 130377, + "totalVotes": 438113 + } + }, + { + "id": 130298, + "year": 2016, + "office": "Governor's Council", + "districts": "2nd", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Robert-L-Jubinville", + "https://electionstats.state.ma.us/candidates/view/Brad-Williams" + ], + "result": { + "candidates": [ + { + "name": "Robert L. Jubinville", + "votes": 239729, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Brad Williams", + "votes": 149441, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 491, + "blankVotes": 55723, + "totalVotes": 445384 + } + }, + { + "id": 130248, + "year": 2016, + "office": "Governor's Council", + "districts": "3rd", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Marilyn-Petitto-Devaney" + ], + "result": { + "candidates": [ + { + "name": "Marilyn Petitto Devaney", + "votes": 317010, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 4429, + "blankVotes": 126144, + "totalVotes": 447583 + } + }, + { + "id": 130241, + "year": 2016, + "office": "Governor's Council", + "districts": "4th", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Christopher-A-Iannella-Jr" + ], + "result": { + "candidates": [ + { + "name": "Christopher A. Iannella, Jr.", + "votes": 298606, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 3316, + "blankVotes": 103132, + "totalVotes": 405054 + } + }, + { + "id": 130270, + "year": 2016, + "office": "Governor's Council", + "districts": "5th", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Eileen-R-Duff", + "https://electionstats.state.ma.us/candidates/view/Richard-A-Baker-Jr" + ], + "result": { + "candidates": [ + { + "name": "Eileen R. Duff", + "votes": 226341, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Richard A. Baker, Jr.", + "votes": 169502, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 576, + "blankVotes": 46098, + "totalVotes": 442517 + } + }, + { + "id": 130335, + "year": 2016, + "office": "Governor's Council", + "districts": "6th", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Terrence-W-Kennedy" + ], + "result": { + "candidates": [ + { + "name": "Terrence W. Kennedy", + "votes": 296092, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 3853, + "blankVotes": 108867, + "totalVotes": 408812 + } + }, + { + "id": 130290, + "year": 2016, + "office": "Governor's Council", + "districts": "7th", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Jennie-L-Caissie", + "https://electionstats.state.ma.us/candidates/view/Matthew-Cj-Vance" + ], + "result": { + "candidates": [ + { + "name": "Jennie L. Caissie", + "votes": 203165, + "writeIn": false, + "party": "Republican" + }, + { + "name": "Matthew Cj Vance", + "votes": 162521, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 614, + "blankVotes": 43270, + "totalVotes": 409570 + } + }, + { + "id": 130261, + "year": 2016, + "office": "Governor's Council", + "districts": "8th", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Mary-E-Hurley" + ], + "result": { + "candidates": [ + { + "name": "Mary E. Hurley", + "votes": 290544, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 3499, + "blankVotes": 87725, + "totalVotes": 381768 + } + }, + { + "id": 130264, + "year": 2016, + "office": "State Senate", + "districts": "Berkshire, Hampshire and Franklin", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Adam-G-Hinds", + "https://electionstats.state.ma.us/candidates/view/Christine-M-Canning" + ], + "result": { + "candidates": [ + { + "name": "Adam G. Hinds", + "votes": 53216, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Christine M. Canning", + "votes": 22624, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 62, + "blankVotes": 5886, + "totalVotes": 81788 + } + }, + { + "id": 130305, + "year": 2016, + "office": "State Senate", + "districts": "Bristol and Norfolk", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/James-E-Timilty" + ], + "result": { + "candidates": [ + { + "name": "James E. Timilty", + "votes": 66611, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 445, + "blankVotes": 22381, + "totalVotes": 89437 + } + }, + { + "id": 130412, + "year": 2016, + "office": "State Senate", + "districts": "1st Bristol and Plymouth", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Michael-J-Rodrigues" + ], + "result": { + "candidates": [ + { + "name": "Michael J. Rodrigues", + "votes": 54618, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 355, + "blankVotes": 19358, + "totalVotes": 74331 + } + }, + { + "id": 130259, + "year": 2016, + "office": "State Senate", + "districts": "2nd Bristol and Plymouth", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Mark-C-Montigny" + ], + "result": { + "candidates": [ + { + "name": "Mark C. Montigny", + "votes": 53882, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 526, + "blankVotes": 14542, + "totalVotes": 68950 + } + }, + { + "id": 130284, + "year": 2016, + "office": "State Senate", + "districts": "Cape and Islands", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Julian-Andre-Cyr", + "https://electionstats.state.ma.us/candidates/view/Anthony-E-Schiavi" + ], + "result": { + "candidates": [ + { + "name": "Julian Andre Cyr", + "votes": 59974, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Anthony E. Schiavi", + "votes": 45349, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 94, + "blankVotes": 6697, + "totalVotes": 112114 + } + }, + { + "id": 130273, + "year": 2016, + "office": "State Senate", + "districts": "1st Essex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Kathleen-Oconnor-A-Ives" + ], + "result": { + "candidates": [ + { + "name": "Kathleen A. O'Connor Ives", + "votes": 65131, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 622, + "blankVotes": 26105, + "totalVotes": 91858 + } + }, + { + "id": 130332, + "year": 2016, + "office": "State Senate", + "districts": "2nd Essex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Joan-B-Lovely" + ], + "result": { + "candidates": [ + { + "name": "Joan B. Lovely", + "votes": 67120, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 772, + "blankVotes": 25073, + "totalVotes": 92965 + } + }, + { + "id": 130441, + "year": 2016, + "office": "State Senate", + "districts": "3rd Essex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Thomas-M-McGee" + ], + "result": { + "candidates": [ + { + "name": "Thomas M. McGee", + "votes": 58844, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 545, + "blankVotes": 21632, + "totalVotes": 81021 + } + }, + { + "id": 130364, + "year": 2016, + "office": "State Senate", + "districts": "1st Essex and Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Bruce-E-Tarr" + ], + "result": { + "candidates": [ + { + "name": "Bruce E. Tarr", + "votes": 77851, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 647, + "blankVotes": 27087, + "totalVotes": 105585 + } + }, + { + "id": 130281, + "year": 2016, + "office": "State Senate", + "districts": "2nd Essex and Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Barbara-A-LItalien", + "https://electionstats.state.ma.us/candidates/view/Susan-M-Laplante" + ], + "result": { + "candidates": [ + { + "name": "Barbara A. L'Italien", + "votes": 45218, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Susan M. Laplante", + "votes": 25973, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 100, + "blankVotes": 6863, + "totalVotes": 78154 + } + }, + { + "id": 130389, + "year": 2016, + "office": "State Senate", + "districts": "Hampden", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/James-T-Welch" + ], + "result": { + "candidates": [ + { + "name": "James T. Welch", + "votes": 45061, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 782, + "blankVotes": 10328, + "totalVotes": 56171 + } + }, + { + "id": 130322, + "year": 2016, + "office": "State Senate", + "districts": "1st Hampden and Hampshire", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Eric-Philip-Lesser", + "https://electionstats.state.ma.us/candidates/view/James-Chip-Harrington" + ], + "result": { + "candidates": [ + { + "name": "Eric P. Lesser", + "votes": 44602, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "James Chip Harrington", + "votes": 35188, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 100, + "blankVotes": 4315, + "totalVotes": 84205 + } + }, + { + "id": 130267, + "year": 2016, + "office": "State Senate", + "districts": "2nd Hampden and Hampshire", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Donald-F-Humason-Jr", + "https://electionstats.state.ma.us/candidates/view/Jerome-Parker-Ogrady" + ], + "result": { + "candidates": [ + { + "name": "Donald F. Humason, Jr", + "votes": 43097, + "writeIn": false, + "party": "Republican" + }, + { + "name": "Jerome Parker-O'grady", + "votes": 29285, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 67, + "blankVotes": 5497, + "totalVotes": 77946 + } + }, + { + "id": 130277, + "year": 2016, + "office": "State Senate", + "districts": "Hampshire, Franklin and Worcester", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Stanley-C-Rosenberg", + "https://electionstats.state.ma.us/candidates/view/Donald-Peltier" + ], + "result": { + "candidates": [ + { + "name": "Stanley C. Rosenberg", + "votes": 62286, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Donald Peltier", + "votes": 13908, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 105, + "blankVotes": 5359, + "totalVotes": 81658 + } + }, + { + "id": 130399, + "year": 2016, + "office": "State Senate", + "districts": "1st Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Eileen-M-Donoghue" + ], + "result": { + "candidates": [ + { + "name": "Eileen M. Donoghue", + "votes": 56759, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 819, + "blankVotes": 16377, + "totalVotes": 73955 + } + }, + { + "id": 130379, + "year": 2016, + "office": "State Senate", + "districts": "2nd Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Patricia-D-Jehlen" + ], + "result": { + "candidates": [ + { + "name": "Patricia D. Jehlen", + "votes": 75777, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 1146, + "blankVotes": 19706, + "totalVotes": 96629 + } + }, + { + "id": 130320, + "year": 2016, + "office": "State Senate", + "districts": "3rd Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Michael-J-Barrett" + ], + "result": { + "candidates": [ + { + "name": "Michael J. Barrett", + "votes": 64554, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 822, + "blankVotes": 27888, + "totalVotes": 93264 + } + }, + { + "id": 130289, + "year": 2016, + "office": "State Senate", + "districts": "4th Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Kenneth-J-Donnelly" + ], + "result": { + "candidates": [ + { + "name": "Kenneth J. Donnelly", + "votes": 68540, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 675, + "blankVotes": 28221, + "totalVotes": 97436 + } + }, + { + "id": 130446, + "year": 2016, + "office": "State Senate", + "districts": "5th Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Jason-M-Lewis", + "https://electionstats.state.ma.us/candidates/view/Vincent-Lawrence-Dixon" + ], + "result": { + "candidates": [ + { + "name": "Jason M. Lewis", + "votes": 52954, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Vincent Lawrence Dixon", + "votes": 23628, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 290, + "blankVotes": 13939, + "totalVotes": 90811 + } + }, + { + "id": 130375, + "year": 2016, + "office": "State Senate", + "districts": "1st Middlesex and Norfolk", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Cynthia-Stone-Creem" + ], + "result": { + "candidates": [ + { + "name": "Cynthia Stone Creem", + "votes": 62668, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 647, + "blankVotes": 24341, + "totalVotes": 87656 + } + }, + { + "id": 130300, + "year": 2016, + "office": "State Senate", + "districts": "2nd Middlesex and Norfolk", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Karen-E-Spilka" + ], + "result": { + "candidates": [ + { + "name": "Karen E. Spilka", + "votes": 61230, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 947, + "blankVotes": 21552, + "totalVotes": 83729 + } + }, + { + "id": 130252, + "year": 2016, + "office": "State Senate", + "districts": "Middlesex and Worcester", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/James-B-Eldridge", + "https://electionstats.state.ma.us/candidates/view/Ted-Busiek", + "https://electionstats.state.ma.us/candidates/view/Terra-Friedrichs" + ], + "result": { + "candidates": [ + { + "name": "James B. Eldridge", + "votes": 55698, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Ted Busiek", + "votes": 26865, + "writeIn": false, + "party": "Republican" + }, + { + "name": "Terra Friedrichs", + "votes": 4033, + "writeIn": false + } + ], + "otherVotes": 117, + "blankVotes": 8927, + "totalVotes": 95640 + } + }, + { + "id": 130357, + "year": 2016, + "office": "State Senate", + "districts": "Middlesex and Suffolk", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Sal-N-DiDomenico" + ], + "result": { + "candidates": [ + { + "name": "Sal N. DiDomenico", + "votes": 53022, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 577, + "blankVotes": 15098, + "totalVotes": 68697 + } + }, + { + "id": 130306, + "year": 2016, + "office": "State Senate", + "districts": "Norfolk, Bristol and Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Richard-J-Ross", + "https://electionstats.state.ma.us/candidates/view/Kristopher-K-Aleksov" + ], + "result": { + "candidates": [ + { + "name": "Richard J. Ross", + "votes": 49776, + "writeIn": false, + "party": "Republican" + }, + { + "name": "Kristopher K. Aleksov", + "votes": 33083, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 95, + "blankVotes": 9626, + "totalVotes": 92580 + } + }, + { + "id": 130311, + "year": 2016, + "office": "State Senate", + "districts": "Norfolk, Bristol and Plymouth", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Walter-F-Timilty-Jr", + "https://electionstats.state.ma.us/candidates/view/Jonathan-D-Lott" + ], + "result": { + "candidates": [ + { + "name": "Walter F. Timilty, Jr.", + "votes": 56466, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Jonathan D. Lott", + "votes": 19960, + "writeIn": false + } + ], + "otherVotes": 167, + "blankVotes": 12071, + "totalVotes": 88664 + } + }, + { + "id": 130246, + "year": 2016, + "office": "State Senate", + "districts": "Norfolk and Plymouth", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/John-F-Keenan", + "https://electionstats.state.ma.us/candidates/view/Alexander-N-Mendez" + ], + "result": { + "candidates": [ + { + "name": "John F. Keenan", + "votes": 50148, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Alexander N. Mendez", + "votes": 20433, + "writeIn": false + } + ], + "otherVotes": 71, + "blankVotes": 9436, + "totalVotes": 80088 + } + }, + { + "id": 130358, + "year": 2016, + "office": "State Senate", + "districts": "Norfolk and Suffolk", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Michael-F-Rush" + ], + "result": { + "candidates": [ + { + "name": "Michael F. Rush", + "votes": 66792, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 867, + "blankVotes": 23315, + "totalVotes": 90974 + } + }, + { + "id": 130362, + "year": 2016, + "office": "State Senate", + "districts": "Plymouth and Barnstable", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Vinny-M-deMacedo" + ], + "result": { + "candidates": [ + { + "name": "Vinny M. deMacedo", + "votes": 69474, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 508, + "blankVotes": 25623, + "totalVotes": 95605 + } + }, + { + "id": 130391, + "year": 2016, + "office": "State Senate", + "districts": "Plymouth and Norfolk", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Patrick-M-OConnor", + "https://electionstats.state.ma.us/candidates/view/Paul-J-Gannon" + ], + "result": { + "candidates": [ + { + "name": "Patrick M. O'Connor", + "votes": 52440, + "writeIn": false, + "party": "Republican" + }, + { + "name": "Paul J. Gannon", + "votes": 40193, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 140, + "blankVotes": 8429, + "totalVotes": 101202 + } + }, + { + "id": 130483, + "year": 2016, + "office": "State Senate", + "districts": "Plymouth and Norfolk", + "party": "General", + "special": true, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Patrick-M-OConnor", + "https://electionstats.state.ma.us/candidates/view/Joan-Meschino" + ], + "result": { + "candidates": [ + { + "name": "Patrick M. O'Connor", + "votes": 9047, + "writeIn": false, + "party": "Republican" + }, + { + "name": "Joan Meschino", + "votes": 8108, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 30, + "blankVotes": 30, + "totalVotes": 17215 + } + }, + { + "id": 130327, + "year": 2016, + "office": "State Senate", + "districts": "1st Plymouth and Bristol", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Marc-R-Pacheco", + "https://electionstats.state.ma.us/candidates/view/Sandra-M-Wright" + ], + "result": { + "candidates": [ + { + "name": "Marc R. Pacheco", + "votes": 52915, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Sandra M. Wright", + "votes": 28059, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 87, + "blankVotes": 6052, + "totalVotes": 87113 + } + }, + { + "id": 130373, + "year": 2016, + "office": "State Senate", + "districts": "2nd Plymouth and Bristol", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Michael-D-Brady" + ], + "result": { + "candidates": [ + { + "name": "Michael D. Brady", + "votes": 56156, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 330, + "blankVotes": 19230, + "totalVotes": 75716 + } + }, + { + "id": 130356, + "year": 2016, + "office": "State Senate", + "districts": "1st Suffolk", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Linda-Dorcena-Forry" + ], + "result": { + "candidates": [ + { + "name": "Linda Dorcena Forry", + "votes": 59874, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 966, + "blankVotes": 15030, + "totalVotes": 75870 + } + }, + { + "id": 130359, + "year": 2016, + "office": "State Senate", + "districts": "2nd Suffolk", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Sonia-Rosa-Chang-Diaz" + ], + "result": { + "candidates": [ + { + "name": "Sonia Rosa Chang-Dรƒยญaz", + "votes": 58705, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 713, + "blankVotes": 12760, + "totalVotes": 72178 + } + }, + { + "id": 130355, + "year": 2016, + "office": "State Senate", + "districts": "1st Suffolk and Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Joseph-A-Boncore" + ], + "result": { + "candidates": [ + { + "name": "Joseph A. Boncore", + "votes": 50978, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 951, + "blankVotes": 19725, + "totalVotes": 71654 + } + }, + { + "id": 130482, + "year": 2016, + "office": "State Senate", + "districts": "1st Suffolk and Middlesex", + "party": "General", + "special": true, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Joseph-A-Boncore", + "https://electionstats.state.ma.us/candidates/view/Lydia-Marie-Edwards", + "https://electionstats.state.ma.us/candidates/view/Jay-D-Livingstone" + ], + "result": { + "candidates": [ + { + "name": "Joseph A. Boncore", + "votes": 2429, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Lydia Marie Edwards", + "votes": 27, + "writeIn": true + }, + { + "name": "Jay D. Livingstone", + "votes": 16, + "writeIn": true + } + ], + "otherVotes": 246, + "blankVotes": 22, + "totalVotes": 2740 + } + }, + { + "id": 130325, + "year": 2016, + "office": "State Senate", + "districts": "2nd Suffolk and Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/William-N-Brownsberger" + ], + "result": { + "candidates": [ + { + "name": "William N. Brownsberger", + "votes": 56011, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 804, + "blankVotes": 16772, + "totalVotes": 73587 + } + }, + { + "id": 130329, + "year": 2016, + "office": "State Senate", + "districts": "Worcester and Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Jennifer-L-Flanagan" + ], + "result": { + "candidates": [ + { + "name": "Jennifer L. Flanagan", + "votes": 59860, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 527, + "blankVotes": 18383, + "totalVotes": 78770 + } + }, + { + "id": 130324, + "year": 2016, + "office": "State Senate", + "districts": "Worcester and Norfolk", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Ryan-C-Fattman" + ], + "result": { + "candidates": [ + { + "name": "Ryan C. Fattman", + "votes": 64665, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 1021, + "blankVotes": 19840, + "totalVotes": 85526 + } + }, + { + "id": 130292, + "year": 2016, + "office": "State Senate", + "districts": "Worcester, Hampden, Hampshire and Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Anne-M-Gobi", + "https://electionstats.state.ma.us/candidates/view/James-P-Ehrhard" + ], + "result": { + "candidates": [ + { + "name": "Anne M. Gobi", + "votes": 44021, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "James P. Ehrhard", + "votes": 36883, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 68, + "blankVotes": 5349, + "totalVotes": 86321 + } + }, + { + "id": 130365, + "year": 2016, + "office": "State Senate", + "districts": "1st Worcester", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Harriette-L-Chandler" + ], + "result": { + "candidates": [ + { + "name": "Harriette L. Chandler", + "votes": 56545, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 1104, + "blankVotes": 18001, + "totalVotes": 75650 + } + }, + { + "id": 130308, + "year": 2016, + "office": "State Senate", + "districts": "2nd Worcester", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Michael-O-Moore", + "https://electionstats.state.ma.us/candidates/view/Mesfin-H-Beshir" + ], + "result": { + "candidates": [ + { + "name": "Michael O. Moore", + "votes": 55093, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Mesfin H. Beshir", + "votes": 19250, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 125, + "blankVotes": 8835, + "totalVotes": 83303 + } + }, + { + "id": 130315, + "year": 2016, + "office": "State Representative", + "districts": "1st Barnstable", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Timothy-R-Whelan" + ], + "result": { + "candidates": [ + { + "name": "Timothy R. Whelan", + "votes": 19640, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 187, + "blankVotes": 7379, + "totalVotes": 27206 + } + }, + { + "id": 130316, + "year": 2016, + "office": "State Representative", + "districts": "2nd Barnstable", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/William-L-Crocker-Jr", + "https://electionstats.state.ma.us/candidates/view/Aaron-S-Kanzer" + ], + "result": { + "candidates": [ + { + "name": "William L. Crocker, Jr.", + "votes": 11879, + "writeIn": false, + "party": "Republican" + }, + { + "name": "Aaron S. Kanzer", + "votes": 9799, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 25, + "blankVotes": 1099, + "totalVotes": 22802 + } + }, + { + "id": 130361, + "year": 2016, + "office": "State Representative", + "districts": "3rd Barnstable", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/David-T-Vieira", + "https://electionstats.state.ma.us/candidates/view/Matthew-C-Patrick" + ], + "result": { + "candidates": [ + { + "name": "David T. Vieira", + "votes": 12739, + "writeIn": false, + "party": "Republican" + }, + { + "name": "Matthew C. Patrick", + "votes": 11317, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 11, + "blankVotes": 1540, + "totalVotes": 25607 + } + }, + { + "id": 130367, + "year": 2016, + "office": "State Representative", + "districts": "4th Barnstable", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Sarah-K-Peake" + ], + "result": { + "candidates": [ + { + "name": "Sarah K. Peake", + "votes": 22948, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 150, + "blankVotes": 6894, + "totalVotes": 29992 + } + }, + { + "id": 130314, + "year": 2016, + "office": "State Representative", + "districts": "5th Barnstable", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Randy-Hunt" + ], + "result": { + "candidates": [ + { + "name": "Randy Hunt", + "votes": 18096, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 141, + "blankVotes": 6432, + "totalVotes": 24669 + } + }, + { + "id": 130283, + "year": 2016, + "office": "State Representative", + "districts": "Barnstable, Dukes and Nantucket", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Dylan-A-Fernandes", + "https://electionstats.state.ma.us/candidates/view/Tobias-B-Glidden", + "https://electionstats.state.ma.us/candidates/view/Jacob-Norman-Ferry" + ], + "result": { + "candidates": [ + { + "name": "Dylan A. Fernandes", + "votes": 13030, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Tobias B. Glidden", + "votes": 9601, + "writeIn": false + }, + { + "name": "Jacob Norman Ferry", + "votes": 2566, + "writeIn": false + } + ], + "otherVotes": 29, + "blankVotes": 2732, + "totalVotes": 27958 + } + }, + { + "id": 130263, + "year": 2016, + "office": "State Representative", + "districts": "1st Berkshire", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Gailanne-M-Cariddi" + ], + "result": { + "candidates": [ + { + "name": "Gailanne M. Cariddi", + "votes": 15675, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 95, + "blankVotes": 3304, + "totalVotes": 19074 + } + }, + { + "id": 130330, + "year": 2016, + "office": "State Representative", + "districts": "2nd Berkshire", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Paul-W-Mark" + ], + "result": { + "candidates": [ + { + "name": "Paul W. Mark", + "votes": 17631, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 76, + "blankVotes": 4677, + "totalVotes": 22384 + } + }, + { + "id": 130462, + "year": 2016, + "office": "State Representative", + "districts": "3rd Berkshire", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Tricia-Farley-Bouvier", + "https://electionstats.state.ma.us/candidates/view/Christopher-J-Connell" + ], + "result": { + "candidates": [ + { + "name": "Tricia Farley-Bouvier", + "votes": 11827, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Christopher J. Connell", + "votes": 5986, + "writeIn": false + } + ], + "otherVotes": 14, + "blankVotes": 1176, + "totalVotes": 19003 + } + }, + { + "id": 130269, + "year": 2016, + "office": "State Representative", + "districts": "4th Berkshire", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/William-Pignatelli" + ], + "result": { + "candidates": [ + { + "name": "William \"Smitty\" Pignatelli", + "votes": 19356, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 54, + "blankVotes": 3355, + "totalVotes": 22765 + } + }, + { + "id": 130414, + "year": 2016, + "office": "State Representative", + "districts": "1st Bristol", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Fred-Jay-Barrows", + "https://electionstats.state.ma.us/candidates/view/Michael-E-Toole" + ], + "result": { + "candidates": [ + { + "name": "Fred Jay Barrows", + "votes": 12561, + "writeIn": false, + "party": "Republican" + }, + { + "name": "Michael E. Toole", + "votes": 8361, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 8, + "blankVotes": 1752, + "totalVotes": 22682 + } + }, + { + "id": 130304, + "year": 2016, + "office": "State Representative", + "districts": "2nd Bristol", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Paul-R-Heroux" + ], + "result": { + "candidates": [ + { + "name": "Paul R. Heroux", + "votes": 15301, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 68, + "blankVotes": 3744, + "totalVotes": 19113 + } + }, + { + "id": 130405, + "year": 2016, + "office": "State Representative", + "districts": "3rd Bristol", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Shaunna-L-OConnell", + "https://electionstats.state.ma.us/candidates/view/Estele-C-Borges" + ], + "result": { + "candidates": [ + { + "name": "Shaunna L. O'Connell", + "votes": 10520, + "writeIn": false, + "party": "Republican" + }, + { + "name": "Estele C. Borges", + "votes": 7417, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 18, + "blankVotes": 987, + "totalVotes": 18942 + } + }, + { + "id": 130459, + "year": 2016, + "office": "State Representative", + "districts": "4th Bristol", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Steven-S-Howitt", + "https://electionstats.state.ma.us/candidates/view/Paul-W-Jacques" + ], + "result": { + "candidates": [ + { + "name": "Steven S. Howitt", + "votes": 13253, + "writeIn": false, + "party": "Republican" + }, + { + "name": "Paul W. Jacques", + "votes": 8030, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 14, + "blankVotes": 1596, + "totalVotes": 22893 + } + }, + { + "id": 130395, + "year": 2016, + "office": "State Representative", + "districts": "5th Bristol", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Patricia-A-Haddad" + ], + "result": { + "candidates": [ + { + "name": "Patricia A. Haddad", + "votes": 16907, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 160, + "blankVotes": 5299, + "totalVotes": 22366 + } + }, + { + "id": 130411, + "year": 2016, + "office": "State Representative", + "districts": "6th Bristol", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Carole-A-Fiola" + ], + "result": { + "candidates": [ + { + "name": "Carole A. Fiola", + "votes": 12457, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 89, + "blankVotes": 4073, + "totalVotes": 16619 + } + }, + { + "id": 130410, + "year": 2016, + "office": "State Representative", + "districts": "7th Bristol", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Alan-Silvia" + ], + "result": { + "candidates": [ + { + "name": "Alan Silvia", + "votes": 9594, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 40, + "blankVotes": 2395, + "totalVotes": 12029 + } + }, + { + "id": 130409, + "year": 2016, + "office": "State Representative", + "districts": "8th Bristol", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Paul-Schmid-III" + ], + "result": { + "candidates": [ + { + "name": "Paul Schmid, III", + "votes": 14788, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 86, + "blankVotes": 5399, + "totalVotes": 20273 + } + }, + { + "id": 130393, + "year": 2016, + "office": "State Representative", + "districts": "9th Bristol", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Christopher-M-Markey" + ], + "result": { + "candidates": [ + { + "name": "Christopher M. Markey", + "votes": 15010, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 90, + "blankVotes": 4601, + "totalVotes": 19701 + } + }, + { + "id": 130408, + "year": 2016, + "office": "State Representative", + "districts": "10th Bristol", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/William-M-Straus" + ], + "result": { + "candidates": [ + { + "name": "William M. Straus", + "votes": 16429, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 166, + "blankVotes": 5591, + "totalVotes": 22186 + } + }, + { + "id": 130258, + "year": 2016, + "office": "State Representative", + "districts": "11th Bristol", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Robert-M-Koczera" + ], + "result": { + "candidates": [ + { + "name": "Robert M. Koczera", + "votes": 11907, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 106, + "blankVotes": 3270, + "totalVotes": 15283 + } + }, + { + "id": 130326, + "year": 2016, + "office": "State Representative", + "districts": "12th Bristol", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Keiko-M-Orrall" + ], + "result": { + "candidates": [ + { + "name": "Keiko M. Orrall", + "votes": 15855, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 192, + "blankVotes": 5066, + "totalVotes": 21113 + } + }, + { + "id": 130455, + "year": 2016, + "office": "State Representative", + "districts": "13th Bristol", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Antonio-FD-Cabral" + ], + "result": { + "candidates": [ + { + "name": "Antonio F.D. Cabral", + "votes": 12021, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 114, + "blankVotes": 2724, + "totalVotes": 14859 + } + }, + { + "id": 130303, + "year": 2016, + "office": "State Representative", + "districts": "14th Bristol", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Elizabeth-A-Poirier", + "https://electionstats.state.ma.us/candidates/view/Scott-P-Dubuc" + ], + "result": { + "candidates": [ + { + "name": "Elizabeth A. Poirier", + "votes": 13865, + "writeIn": false, + "party": "Republican" + }, + { + "name": "Scott P. Dubuc", + "votes": 5805, + "writeIn": false + } + ], + "otherVotes": 14, + "blankVotes": 1824, + "totalVotes": 21508 + } + }, + { + "id": 130272, + "year": 2016, + "office": "State Representative", + "districts": "1st Essex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/James-M-Kelcourse", + "https://electionstats.state.ma.us/candidates/view/Brianna-Sullivan" + ], + "result": { + "candidates": [ + { + "name": "James M. Kelcourse", + "votes": 13272, + "writeIn": false, + "party": "Republican" + }, + { + "name": "Brianna Sullivan", + "votes": 11280, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 7, + "blankVotes": 1237, + "totalVotes": 25796 + } + }, + { + "id": 130363, + "year": 2016, + "office": "State Representative", + "districts": "2nd Essex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Leonard-Mirra" + ], + "result": { + "candidates": [ + { + "name": "Leonard Mirra", + "votes": 19363, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 204, + "blankVotes": 8156, + "totalVotes": 27723 + } + }, + { + "id": 130424, + "year": 2016, + "office": "State Representative", + "districts": "3rd Essex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Brian-S-Dempsey" + ], + "result": { + "candidates": [ + { + "name": "Brian S. Dempsey", + "votes": 15136, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 207, + "blankVotes": 3897, + "totalVotes": 19240 + } + }, + { + "id": 130419, + "year": 2016, + "office": "State Representative", + "districts": "4th Essex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Bradford-R-Hill" + ], + "result": { + "candidates": [ + { + "name": "Bradford R. Hill", + "votes": 21813, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 97, + "blankVotes": 5918, + "totalVotes": 27828 + } + }, + { + "id": 130406, + "year": 2016, + "office": "State Representative", + "districts": "5th Essex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Ann-Margaret-Ferrante" + ], + "result": { + "candidates": [ + { + "name": "Ann-Margaret Ferrante", + "votes": 18239, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 269, + "blankVotes": 5480, + "totalVotes": 23988 + } + }, + { + "id": 130331, + "year": 2016, + "office": "State Representative", + "districts": "6th Essex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Jerald-A-Parisella", + "https://electionstats.state.ma.us/candidates/view/Daniel-Fishman" + ], + "result": { + "candidates": [ + { + "name": "Jerald A. Parisella", + "votes": 15012, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Daniel Fishman", + "votes": 5045, + "writeIn": false, + "party": "United Independent" + } + ], + "otherVotes": 12, + "blankVotes": 2344, + "totalVotes": 22413 + } + }, + { + "id": 130468, + "year": 2016, + "office": "State Representative", + "districts": "7th Essex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Paul-F-Tucker" + ], + "result": { + "candidates": [ + { + "name": "Paul F. Tucker", + "votes": 18208, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 64, + "blankVotes": 3911, + "totalVotes": 22183 + } + }, + { + "id": 130437, + "year": 2016, + "office": "State Representative", + "districts": "8th Essex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Lori-A-Ehrlich" + ], + "result": { + "candidates": [ + { + "name": "Lori A. Ehrlich", + "votes": 18365, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 131, + "blankVotes": 6229, + "totalVotes": 24725 + } + }, + { + "id": 130439, + "year": 2016, + "office": "State Representative", + "districts": "9th Essex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Donald-H-Wong", + "https://electionstats.state.ma.us/candidates/view/Jennifer-Migliore" + ], + "result": { + "candidates": [ + { + "name": "Donald H. Wong", + "votes": 12816, + "writeIn": false, + "party": "Republican" + }, + { + "name": "Jennifer Migliore", + "votes": 10513, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 178, + "blankVotes": 1242, + "totalVotes": 24749 + } + }, + { + "id": 130440, + "year": 2016, + "office": "State Representative", + "districts": "10th Essex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Daniel-H-Cahill" + ], + "result": { + "candidates": [ + { + "name": "Daniel H. Cahill", + "votes": 11556, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 186, + "blankVotes": 3212, + "totalVotes": 14954 + } + }, + { + "id": 130484, + "year": 2016, + "office": "State Representative", + "districts": "10th Essex", + "party": "General", + "special": true, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Daniel-H-Cahill" + ], + "result": { + "candidates": [ + { + "name": "Daniel H. Cahill", + "votes": 320, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 11, + "blankVotes": 0, + "totalVotes": 331 + } + }, + { + "id": 130438, + "year": 2016, + "office": "State Representative", + "districts": "11th Essex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Brendan-P-Crighton" + ], + "result": { + "candidates": [ + { + "name": "Brendan P. Crighton", + "votes": 11223, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 202, + "blankVotes": 3533, + "totalVotes": 14958 + } + }, + { + "id": 127018, + "year": 2016, + "office": "State Representative", + "districts": "12th Essex", + "party": "General", + "special": true, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Thomas-P-Walsh", + "https://electionstats.state.ma.us/candidates/view/Stephanie-R-Peach", + "https://electionstats.state.ma.us/candidates/view/Christopher-M-Gallagher" + ], + "result": { + "candidates": [ + { + "name": "Thomas P. Walsh", + "votes": 7138, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Stephanie R. Peach", + "votes": 4644, + "writeIn": false, + "party": "Republican" + }, + { + "name": "Christopher M. Gallagher", + "votes": 576, + "writeIn": false + } + ], + "otherVotes": 70, + "blankVotes": 93, + "totalVotes": 12521 + } + }, + { + "id": 130461, + "year": 2016, + "office": "State Representative", + "districts": "12th Essex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Thomas-P-Walsh" + ], + "result": { + "candidates": [ + { + "name": "Thomas P. Walsh", + "votes": 16480, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 241, + "blankVotes": 5032, + "totalVotes": 21753 + } + }, + { + "id": 130392, + "year": 2016, + "office": "State Representative", + "districts": "13th Essex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Theodore-C-Speliotis" + ], + "result": { + "candidates": [ + { + "name": "Theodore C. Speliotis", + "votes": 18163, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 361, + "blankVotes": 6503, + "totalVotes": 25027 + } + }, + { + "id": 130423, + "year": 2016, + "office": "State Representative", + "districts": "14th Essex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Diana-Dizoglio" + ], + "result": { + "candidates": [ + { + "name": "Diana DiZoglio", + "votes": 15927, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 126, + "blankVotes": 4633, + "totalVotes": 20686 + } + }, + { + "id": 130422, + "year": 2016, + "office": "State Representative", + "districts": "15th Essex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Linda-Dean-Campbell", + "https://electionstats.state.ma.us/candidates/view/Nicholas-S-Torresi" + ], + "result": { + "candidates": [ + { + "name": "Linda Dean Campbell", + "votes": 12904, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Nicholas S. Torresi", + "votes": 7421, + "writeIn": false + } + ], + "otherVotes": 53, + "blankVotes": 2094, + "totalVotes": 22472 + } + }, + { + "id": 130431, + "year": 2016, + "office": "State Representative", + "districts": "16th Essex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Juana-B-Matias" + ], + "result": { + "candidates": [ + { + "name": "Juana B. Matias", + "votes": 11205, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 220, + "blankVotes": 1942, + "totalVotes": 13367 + } + }, + { + "id": 130280, + "year": 2016, + "office": "State Representative", + "districts": "17th Essex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Frank-A-Moran" + ], + "result": { + "candidates": [ + { + "name": "Frank A. Moran", + "votes": 12033, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 160, + "blankVotes": 3601, + "totalVotes": 15794 + } + }, + { + "id": 130279, + "year": 2016, + "office": "State Representative", + "districts": "18th Essex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/James-J-Lyons-Jr", + "https://electionstats.state.ma.us/candidates/view/Oscar-Camargo" + ], + "result": { + "candidates": [ + { + "name": "James J. Lyons, Jr.", + "votes": 14218, + "writeIn": false, + "party": "Republican" + }, + { + "name": "Oscar Camargo", + "votes": 9615, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 36, + "blankVotes": 1879, + "totalVotes": 25748 + } + }, + { + "id": 130296, + "year": 2016, + "office": "State Representative", + "districts": "1st Franklin", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Stephen-Kulik" + ], + "result": { + "candidates": [ + { + "name": "Stephen Kulik", + "votes": 20798, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 51, + "blankVotes": 4020, + "totalVotes": 24869 + } + }, + { + "id": 130301, + "year": 2016, + "office": "State Representative", + "districts": "2nd Franklin", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Susannah-M-Whipps" + ], + "result": { + "candidates": [ + { + "name": "Susannah M. Whipps Lee", + "votes": 15490, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 200, + "blankVotes": 4885, + "totalVotes": 20575 + } + }, + { + "id": 130369, + "year": 2016, + "office": "State Representative", + "districts": "1st Hampden", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Todd-M-Smola" + ], + "result": { + "candidates": [ + { + "name": "Todd M. Smola", + "votes": 17633, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 126, + "blankVotes": 4126, + "totalVotes": 21885 + } + }, + { + "id": 130402, + "year": 2016, + "office": "State Representative", + "districts": "2nd Hampden", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Brian-M-Ashe" + ], + "result": { + "candidates": [ + { + "name": "Brian M. Ashe", + "votes": 18058, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 239, + "blankVotes": 6118, + "totalVotes": 24415 + } + }, + { + "id": 130266, + "year": 2016, + "office": "State Representative", + "districts": "3rd Hampden", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Nicholas-A-Boldyga", + "https://electionstats.state.ma.us/candidates/view/Rosemary-Sandlin" + ], + "result": { + "candidates": [ + { + "name": "Nicholas A. Boldyga", + "votes": 12136, + "writeIn": false, + "party": "Republican" + }, + { + "name": "Rosemary Sandlin", + "votes": 8089, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 20, + "blankVotes": 945, + "totalVotes": 21190 + } + }, + { + "id": 130478, + "year": 2016, + "office": "State Representative", + "districts": "4th Hampden", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/John-C-Velis" + ], + "result": { + "candidates": [ + { + "name": "John C. Velis", + "votes": 15399, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 95, + "blankVotes": 3812, + "totalVotes": 19306 + } + }, + { + "id": 130429, + "year": 2016, + "office": "State Representative", + "districts": "5th Hampden", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Aaron-Vega" + ], + "result": { + "candidates": [ + { + "name": "Aaron Vega", + "votes": 13687, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 40, + "blankVotes": 3312, + "totalVotes": 17039 + } + }, + { + "id": 130388, + "year": 2016, + "office": "State Representative", + "districts": "6th Hampden", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Michael-J-Finn" + ], + "result": { + "candidates": [ + { + "name": "Michael J. Finn", + "votes": 12819, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 144, + "blankVotes": 4033, + "totalVotes": 16996 + } + }, + { + "id": 130321, + "year": 2016, + "office": "State Representative", + "districts": "7th Hampden", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Thomas-M-Petrolati" + ], + "result": { + "candidates": [ + { + "name": "Thomas M. Petrolati", + "votes": 16180, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 231, + "blankVotes": 4904, + "totalVotes": 21315 + } + }, + { + "id": 130386, + "year": 2016, + "office": "State Representative", + "districts": "8th Hampden", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Joseph-F-Wagner" + ], + "result": { + "candidates": [ + { + "name": "Joseph F. Wagner", + "votes": 14479, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 278, + "blankVotes": 3032, + "totalVotes": 17789 + } + }, + { + "id": 130387, + "year": 2016, + "office": "State Representative", + "districts": "9th Hampden", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Jose-F-Tosado", + "https://electionstats.state.ma.us/candidates/view/Robert-J-Underwood" + ], + "result": { + "candidates": [ + { + "name": "Jose F. Tosado", + "votes": 12020, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Robert J. Underwood", + "votes": 2885, + "writeIn": false + } + ], + "otherVotes": 69, + "blankVotes": 1682, + "totalVotes": 16656 + } + }, + { + "id": 130472, + "year": 2016, + "office": "State Representative", + "districts": "10th Hampden", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Carlos-Gonzalez" + ], + "result": { + "candidates": [ + { + "name": "Carlos Gonzalez", + "votes": 10286, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 165, + "blankVotes": 1960, + "totalVotes": 12411 + } + }, + { + "id": 130471, + "year": 2016, + "office": "State Representative", + "districts": "11th Hampden", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Bud-L-Williams" + ], + "result": { + "candidates": [ + { + "name": "Bud L. Williams", + "votes": 11634, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 299, + "blankVotes": 2001, + "totalVotes": 13934 + } + }, + { + "id": 130403, + "year": 2016, + "office": "State Representative", + "districts": "12th Hampden", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Angelo-J-Puppolo-Jr" + ], + "result": { + "candidates": [ + { + "name": "Angelo J. Puppolo, Jr.", + "votes": 16368, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 167, + "blankVotes": 4340, + "totalVotes": 20875 + } + }, + { + "id": 130421, + "year": 2016, + "office": "State Representative", + "districts": "1st Hampshire", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Peter-V-Kocot" + ], + "result": { + "candidates": [ + { + "name": "Peter V. Kocot", + "votes": 20145, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 89, + "blankVotes": 4420, + "totalVotes": 24654 + } + }, + { + "id": 130404, + "year": 2016, + "office": "State Representative", + "districts": "2nd Hampshire", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/John-W-Scibak" + ], + "result": { + "candidates": [ + { + "name": "John W. Scibak", + "votes": 19023, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 138, + "blankVotes": 5056, + "totalVotes": 24217 + } + }, + { + "id": 130276, + "year": 2016, + "office": "State Representative", + "districts": "3rd Hampshire", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Solomon-Israel-Goldstein-Rose" + ], + "result": { + "candidates": [ + { + "name": "Solomon Israel Goldstein-Rose", + "votes": 14601, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 186, + "blankVotes": 3165, + "totalVotes": 17952 + } + }, + { + "id": 130294, + "year": 2016, + "office": "State Representative", + "districts": "1st Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Sheila-C-Harrington", + "https://electionstats.state.ma.us/candidates/view/Matthew-T-Meneghini" + ], + "result": { + "candidates": [ + { + "name": "Sheila C. Harrington", + "votes": 14984, + "writeIn": false, + "party": "Republican" + }, + { + "name": "Matthew T. Meneghini", + "votes": 8003, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 15, + "blankVotes": 1919, + "totalVotes": 24921 + } + }, + { + "id": 130382, + "year": 2016, + "office": "State Representative", + "districts": "2nd Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/James-Arciero" + ], + "result": { + "candidates": [ + { + "name": "James Arciero", + "votes": 20337, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 139, + "blankVotes": 6592, + "totalVotes": 27068 + } + }, + { + "id": 130334, + "year": 2016, + "office": "State Representative", + "districts": "3rd Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Kate-Hogan" + ], + "result": { + "candidates": [ + { + "name": "Kate Hogan", + "votes": 19161, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 242, + "blankVotes": 5384, + "totalVotes": 24787 + } + }, + { + "id": 130448, + "year": 2016, + "office": "State Representative", + "districts": "4th Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Danielle-W-Gregoire", + "https://electionstats.state.ma.us/candidates/view/Paul-R-Ferro" + ], + "result": { + "candidates": [ + { + "name": "Danielle W. Gregoire", + "votes": 11531, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Paul R. Ferro", + "votes": 7801, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 27, + "blankVotes": 1547, + "totalVotes": 20906 + } + }, + { + "id": 130452, + "year": 2016, + "office": "State Representative", + "districts": "5th Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/David-Paul-Linsky" + ], + "result": { + "candidates": [ + { + "name": "David Paul Linsky", + "votes": 19566, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 170, + "blankVotes": 6457, + "totalVotes": 26193 + } + }, + { + "id": 130415, + "year": 2016, + "office": "State Representative", + "districts": "6th Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Chris-Walsh" + ], + "result": { + "candidates": [ + { + "name": "Chris Walsh", + "votes": 16009, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 250, + "blankVotes": 4822, + "totalVotes": 21081 + } + }, + { + "id": 130299, + "year": 2016, + "office": "State Representative", + "districts": "7th Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Jack-Patrick-Lewis", + "https://electionstats.state.ma.us/candidates/view/Yolanda-Greaves", + "https://electionstats.state.ma.us/candidates/view/Clifford-c-T-Wilson" + ], + "result": { + "candidates": [ + { + "name": "Jack Patrick Lewis", + "votes": 9286, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Yolanda Greaves", + "votes": 4982, + "writeIn": false, + "party": "Republican" + }, + { + "name": "Clifford c. T. Wilson", + "votes": 740, + "writeIn": false + } + ], + "otherVotes": 23, + "blankVotes": 1281, + "totalVotes": 16312 + } + }, + { + "id": 130428, + "year": 2016, + "office": "State Representative", + "districts": "8th Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Carolyn-C-Dykema" + ], + "result": { + "candidates": [ + { + "name": "Carolyn C. Dykema", + "votes": 19524, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 289, + "blankVotes": 5938, + "totalVotes": 25751 + } + }, + { + "id": 130435, + "year": 2016, + "office": "State Representative", + "districts": "9th Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Thomas-M-Stanley", + "https://electionstats.state.ma.us/candidates/view/Stacey-Gallagher-M-Tully" + ], + "result": { + "candidates": [ + { + "name": "Thomas M. Stanley", + "votes": 12654, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Stacey Gallagher M. Tully", + "votes": 7164, + "writeIn": false + } + ], + "otherVotes": 165, + "blankVotes": 1681, + "totalVotes": 21664 + } + }, + { + "id": 130457, + "year": 2016, + "office": "State Representative", + "districts": "10th Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/John-J-Lawn-Jr" + ], + "result": { + "candidates": [ + { + "name": "John J. Lawn, Jr.", + "votes": 12665, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 192, + "blankVotes": 3968, + "totalVotes": 16825 + } + }, + { + "id": 130456, + "year": 2016, + "office": "State Representative", + "districts": "11th Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Kay-S-Khan" + ], + "result": { + "candidates": [ + { + "name": "Kay S. Khan", + "votes": 17153, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 222, + "blankVotes": 5233, + "totalVotes": 22608 + } + }, + { + "id": 130458, + "year": 2016, + "office": "State Representative", + "districts": "12th Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Ruth-B-Balser" + ], + "result": { + "candidates": [ + { + "name": "Ruth B. Balser", + "votes": 16582, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 235, + "blankVotes": 5108, + "totalVotes": 21925 + } + }, + { + "id": 130416, + "year": 2016, + "office": "State Representative", + "districts": "13th Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Carmine-Lawrence-Gentile" + ], + "result": { + "candidates": [ + { + "name": "Carmine Lawrence Gentile", + "votes": 17561, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 240, + "blankVotes": 6840, + "totalVotes": 24641 + } + }, + { + "id": 130250, + "year": 2016, + "office": "State Representative", + "districts": "14th Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Cory-Atkins", + "https://electionstats.state.ma.us/candidates/view/Helen-Brady", + "https://electionstats.state.ma.us/candidates/view/Daniel-L-Factor" + ], + "result": { + "candidates": [ + { + "name": "Cory Atkins", + "votes": 14831, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Helen Brady", + "votes": 8950, + "writeIn": false, + "party": "Republican" + }, + { + "name": "Daniel L. Factor", + "votes": 824, + "writeIn": false, + "party": "Green-rainbow" + } + ], + "otherVotes": 22, + "blankVotes": 1128, + "totalVotes": 25755 + } + }, + { + "id": 130434, + "year": 2016, + "office": "State Representative", + "districts": "15th Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Jay-R-Kaufman" + ], + "result": { + "candidates": [ + { + "name": "Jay R. Kaufman", + "votes": 17736, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 8, + "blankVotes": 7071, + "totalVotes": 24815 + } + }, + { + "id": 130384, + "year": 2016, + "office": "State Representative", + "districts": "16th Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Thomas-A-Golden-Jr" + ], + "result": { + "candidates": [ + { + "name": "Thomas A. Golden, Jr.", + "votes": 13962, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 233, + "blankVotes": 3600, + "totalVotes": 17795 + } + }, + { + "id": 130383, + "year": 2016, + "office": "State Representative", + "districts": "17th Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/David-M-Nangle" + ], + "result": { + "candidates": [ + { + "name": "David M. Nangle", + "votes": 12305, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 317, + "blankVotes": 3335, + "totalVotes": 15957 + } + }, + { + "id": 130436, + "year": 2016, + "office": "State Representative", + "districts": "18th Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Rady-Mom", + "https://electionstats.state.ma.us/candidates/view/Kamara-Kay" + ], + "result": { + "candidates": [ + { + "name": "Rady Mom", + "votes": 8107, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Kamara Kay", + "votes": 3115, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 77, + "blankVotes": 1077, + "totalVotes": 12376 + } + }, + { + "id": 130475, + "year": 2016, + "office": "State Representative", + "districts": "19th Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/James-R-Miceli" + ], + "result": { + "candidates": [ + { + "name": "James R. Miceli", + "votes": 19349, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 248, + "blankVotes": 4597, + "totalVotes": 24194 + } + }, + { + "id": 130442, + "year": 2016, + "office": "State Representative", + "districts": "20th Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Bradley-H-Jones-Jr" + ], + "result": { + "candidates": [ + { + "name": "Bradley H. Jones, Jr", + "votes": 19756, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 107, + "blankVotes": 7292, + "totalVotes": 27155 + } + }, + { + "id": 130319, + "year": 2016, + "office": "State Representative", + "districts": "21st Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Kenneth-I-Gordon", + "https://electionstats.state.ma.us/candidates/view/Paul-Girouard-Jr" + ], + "result": { + "candidates": [ + { + "name": "Kenneth I. Gordon", + "votes": 13476, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Paul Girouard, Jr", + "votes": 9526, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 24, + "blankVotes": 1432, + "totalVotes": 24458 + } + }, + { + "id": 130333, + "year": 2016, + "office": "State Representative", + "districts": "22nd Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Marc-T-Lombardo", + "https://electionstats.state.ma.us/candidates/view/George-Simolaris-Jr" + ], + "result": { + "candidates": [ + { + "name": "Marc T. Lombardo", + "votes": 12583, + "writeIn": false, + "party": "Republican" + }, + { + "name": "George Simolaris, Jr.", + "votes": 8671, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 92, + "blankVotes": 1012, + "totalVotes": 22358 + } + }, + { + "id": 130288, + "year": 2016, + "office": "State Representative", + "districts": "23rd Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Sean-Garballey" + ], + "result": { + "candidates": [ + { + "name": "Sean Garballey", + "votes": 20991, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 165, + "blankVotes": 5687, + "totalVotes": 26843 + } + }, + { + "id": 130287, + "year": 2016, + "office": "State Representative", + "districts": "24th Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/David-M-Rogers" + ], + "result": { + "candidates": [ + { + "name": "David M. Rogers", + "votes": 18570, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 172, + "blankVotes": 6597, + "totalVotes": 25339 + } + }, + { + "id": 130376, + "year": 2016, + "office": "State Representative", + "districts": "25th Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Marjorie-C-Decker" + ], + "result": { + "candidates": [ + { + "name": "Marjorie C. Decker", + "votes": 15968, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 135, + "blankVotes": 3271, + "totalVotes": 19374 + } + }, + { + "id": 130378, + "year": 2016, + "office": "State Representative", + "districts": "26th Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Mike-Connolly" + ], + "result": { + "candidates": [ + { + "name": "Mike Connolly", + "votes": 15872, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 255, + "blankVotes": 3555, + "totalVotes": 19682 + } + }, + { + "id": 130470, + "year": 2016, + "office": "State Representative", + "districts": "27th Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Denise-Provost", + "https://electionstats.state.ma.us/candidates/view/Aaron-James" + ], + "result": { + "candidates": [ + { + "name": "Denise Provost", + "votes": 18409, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Aaron James", + "votes": 2680, + "writeIn": false, + "party": "Pirate" + } + ], + "otherVotes": 74, + "blankVotes": 2531, + "totalVotes": 23694 + } + }, + { + "id": 130407, + "year": 2016, + "office": "State Representative", + "districts": "28th Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Joseph-W-Mcgonagle-Jr" + ], + "result": { + "candidates": [ + { + "name": "Joseph W. Mcgonagle, Jr", + "votes": 10811, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 161, + "blankVotes": 3251, + "totalVotes": 14223 + } + }, + { + "id": 130377, + "year": 2016, + "office": "State Representative", + "districts": "29th Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Jonathan-Hecht" + ], + "result": { + "candidates": [ + { + "name": "Jonathan Hecht", + "votes": 18821, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 258, + "blankVotes": 5145, + "totalVotes": 24224 + } + }, + { + "id": 130466, + "year": 2016, + "office": "State Representative", + "districts": "30th Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/James-J-Dwyer" + ], + "result": { + "candidates": [ + { + "name": "James J. Dwyer", + "votes": 15943, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 72, + "blankVotes": 6534, + "totalVotes": 22549 + } + }, + { + "id": 130473, + "year": 2016, + "office": "State Representative", + "districts": "31st Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Michael-Seamus-Day", + "https://electionstats.state.ma.us/candidates/view/Caroline-Colarusso" + ], + "result": { + "candidates": [ + { + "name": "Michael Seamus Day", + "votes": 14528, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Caroline Colarusso", + "votes": 10163, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 9, + "blankVotes": 1581, + "totalVotes": 26281 + } + }, + { + "id": 130444, + "year": 2016, + "office": "State Representative", + "districts": "32nd Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Paul-A-Brodeur" + ], + "result": { + "candidates": [ + { + "name": "Paul A. Brodeur", + "votes": 18386, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 246, + "blankVotes": 7209, + "totalVotes": 25841 + } + }, + { + "id": 130445, + "year": 2016, + "office": "State Representative", + "districts": "33rd Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Steven-Ultrino" + ], + "result": { + "candidates": [ + { + "name": "Steven Ultrino", + "votes": 11435, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 180, + "blankVotes": 3688, + "totalVotes": 15303 + } + }, + { + "id": 130451, + "year": 2016, + "office": "State Representative", + "districts": "34th Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Christine-P-Barber" + ], + "result": { + "candidates": [ + { + "name": "Christine P. Barber", + "votes": 16334, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 233, + "blankVotes": 4383, + "totalVotes": 20950 + } + }, + { + "id": 130443, + "year": 2016, + "office": "State Representative", + "districts": "35th Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Paul-J-Donato-Sr" + ], + "result": { + "candidates": [ + { + "name": "Paul J. Donato, Sr.", + "votes": 15306, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 237, + "blankVotes": 4148, + "totalVotes": 19691 + } + }, + { + "id": 130398, + "year": 2016, + "office": "State Representative", + "districts": "36th Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Colleen-M-Garry" + ], + "result": { + "candidates": [ + { + "name": "Colleen M. Garry", + "votes": 18003, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 31, + "blankVotes": 5248, + "totalVotes": 23282 + } + }, + { + "id": 130251, + "year": 2016, + "office": "State Representative", + "districts": "37th Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Jennifer-E-Benson" + ], + "result": { + "candidates": [ + { + "name": "Jennifer E. Benson", + "votes": 17814, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 180, + "blankVotes": 6088, + "totalVotes": 24082 + } + }, + { + "id": 130464, + "year": 2016, + "office": "State Representative", + "districts": "1st Norfolk", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Bruce-J-Ayers" + ], + "result": { + "candidates": [ + { + "name": "Bruce J. Ayers", + "votes": 15497, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 27, + "blankVotes": 3856, + "totalVotes": 19380 + } + }, + { + "id": 130465, + "year": 2016, + "office": "State Representative", + "districts": "2nd Norfolk", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Tackey-Chan" + ], + "result": { + "candidates": [ + { + "name": "Tackey Chan", + "votes": 15005, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 0, + "blankVotes": 4232, + "totalVotes": 19237 + } + }, + { + "id": 130426, + "year": 2016, + "office": "State Representative", + "districts": "3rd Norfolk", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Ronald-Mariano" + ], + "result": { + "candidates": [ + { + "name": "Ronald Mariano", + "votes": 15810, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 129, + "blankVotes": 4941, + "totalVotes": 20880 + } + }, + { + "id": 130425, + "year": 2016, + "office": "State Representative", + "districts": "4th Norfolk", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/James-Michael-Murphy" + ], + "result": { + "candidates": [ + { + "name": "James Michael Murphy", + "votes": 17771, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 240, + "blankVotes": 5586, + "totalVotes": 23597 + } + }, + { + "id": 130366, + "year": 2016, + "office": "State Representative", + "districts": "5th Norfolk", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Mark-J-Cusack" + ], + "result": { + "candidates": [ + { + "name": "Mark J. Cusack", + "votes": 16652, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 246, + "blankVotes": 6475, + "totalVotes": 23373 + } + }, + { + "id": 130310, + "year": 2016, + "office": "State Representative", + "districts": "6th Norfolk", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/William-C-Galvin" + ], + "result": { + "candidates": [ + { + "name": "William C. Galvin", + "votes": 17215, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 68, + "blankVotes": 5039, + "totalVotes": 22322 + } + }, + { + "id": 130453, + "year": 2016, + "office": "State Representative", + "districts": "7th Norfolk", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/William-J-Driscoll-Jr" + ], + "result": { + "candidates": [ + { + "name": "William J. Driscoll, Jr", + "votes": 16318, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 128, + "blankVotes": 5482, + "totalVotes": 21928 + } + }, + { + "id": 130447, + "year": 2016, + "office": "State Representative", + "districts": "8th Norfolk", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Louis-L-Kafka" + ], + "result": { + "candidates": [ + { + "name": "Louis L. Kafka", + "votes": 18169, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 152, + "blankVotes": 6050, + "totalVotes": 24371 + } + }, + { + "id": 130450, + "year": 2016, + "office": "State Representative", + "districts": "9th Norfolk", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Shawn-C-Dooley", + "https://electionstats.state.ma.us/candidates/view/Brian-P-Hamlin" + ], + "result": { + "candidates": [ + { + "name": "Shawn C. Dooley", + "votes": 14427, + "writeIn": false, + "party": "Republican" + }, + { + "name": "Brian P. Hamlin", + "votes": 9267, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 13, + "blankVotes": 1398, + "totalVotes": 25105 + } + }, + { + "id": 130417, + "year": 2016, + "office": "State Representative", + "districts": "10th Norfolk", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Jeffrey-N-Roy" + ], + "result": { + "candidates": [ + { + "name": "Jeffrey N. Roy", + "votes": 18581, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 349, + "blankVotes": 5454, + "totalVotes": 24384 + } + }, + { + "id": 130394, + "year": 2016, + "office": "State Representative", + "districts": "11th Norfolk", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Paul-McMurtry" + ], + "result": { + "candidates": [ + { + "name": "Paul McMurtry", + "votes": 18918, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 153, + "blankVotes": 6936, + "totalVotes": 26007 + } + }, + { + "id": 130460, + "year": 2016, + "office": "State Representative", + "districts": "12th Norfolk", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/John-H-Rogers", + "https://electionstats.state.ma.us/candidates/view/Tim-Hempton" + ], + "result": { + "candidates": [ + { + "name": "John H. Rogers", + "votes": 14534, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Tim Hempton", + "votes": 7486, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 27, + "blankVotes": 1707, + "totalVotes": 23754 + } + }, + { + "id": 130397, + "year": 2016, + "office": "State Representative", + "districts": "13th Norfolk", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Denise-C-Garlick" + ], + "result": { + "candidates": [ + { + "name": "Denise C. Garlick", + "votes": 20144, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 273, + "blankVotes": 5638, + "totalVotes": 26055 + } + }, + { + "id": 130476, + "year": 2016, + "office": "State Representative", + "districts": "14th Norfolk", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Alice-Hanlon-Peisch" + ], + "result": { + "candidates": [ + { + "name": "Alice Hanlon Peisch", + "votes": 17759, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 110, + "blankVotes": 6385, + "totalVotes": 24254 + } + }, + { + "id": 130374, + "year": 2016, + "office": "State Representative", + "districts": "15th Norfolk", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Frank-Israel-Smizik" + ], + "result": { + "candidates": [ + { + "name": "Frank Israel Smizik", + "votes": 16079, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 79, + "blankVotes": 4116, + "totalVotes": 20274 + } + }, + { + "id": 130463, + "year": 2016, + "office": "State Representative", + "districts": "1st Plymouth", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Mathew-J-Muratore", + "https://electionstats.state.ma.us/candidates/view/John-T-Mahoney-Jr" + ], + "result": { + "candidates": [ + { + "name": "Mathew J. Muratore", + "votes": 11873, + "writeIn": false, + "party": "Republican" + }, + { + "name": "John T. Mahoney, Jr", + "votes": 11471, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 8, + "blankVotes": 1533, + "totalVotes": 24885 + } + }, + { + "id": 130380, + "year": 2016, + "office": "State Representative", + "districts": "2nd Plymouth", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Susan-Williams-Gifford", + "https://electionstats.state.ma.us/candidates/view/Sarah-G-Hewins" + ], + "result": { + "candidates": [ + { + "name": "Susan Williams Gifford", + "votes": 11894, + "writeIn": false, + "party": "Republican" + }, + { + "name": "Sarah G. Hewins", + "votes": 8692, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 23, + "blankVotes": 1479, + "totalVotes": 22088 + } + }, + { + "id": 130390, + "year": 2016, + "office": "State Representative", + "districts": "3rd Plymouth", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Joan-Meschino", + "https://electionstats.state.ma.us/candidates/view/Kristen-G-Arute" + ], + "result": { + "candidates": [ + { + "name": "Joan Meschino", + "votes": 13257, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Kristen G. Arute", + "votes": 11285, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 23, + "blankVotes": 1399, + "totalVotes": 25964 + } + }, + { + "id": 130449, + "year": 2016, + "office": "State Representative", + "districts": "4th Plymouth", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/James-M-Cantwell", + "https://electionstats.state.ma.us/candidates/view/Michael-White" + ], + "result": { + "candidates": [ + { + "name": "James M. Cantwell", + "votes": 17388, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Michael White", + "votes": 7601, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 10, + "blankVotes": 1028, + "totalVotes": 26027 + } + }, + { + "id": 130420, + "year": 2016, + "office": "State Representative", + "districts": "5th Plymouth", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/David-F-Decoste", + "https://electionstats.state.ma.us/candidates/view/Kara-L-Nyman" + ], + "result": { + "candidates": [ + { + "name": "David F. Decoste", + "votes": 12293, + "writeIn": false, + "party": "Republican" + }, + { + "name": "Kara L. Nyman", + "votes": 11790, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 17, + "blankVotes": 1065, + "totalVotes": 25165 + } + }, + { + "id": 130400, + "year": 2016, + "office": "State Representative", + "districts": "6th Plymouth", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Josh-S-Cutler", + "https://electionstats.state.ma.us/candidates/view/Vince-Cogliano" + ], + "result": { + "candidates": [ + { + "name": "Josh S. Cutler", + "votes": 15290, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Vince Cogliano", + "votes": 8582, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 14, + "blankVotes": 1122, + "totalVotes": 25008 + } + }, + { + "id": 130245, + "year": 2016, + "office": "State Representative", + "districts": "7th Plymouth", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Geoff-Diehl" + ], + "result": { + "candidates": [ + { + "name": "Geoff Diehl", + "votes": 17088, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 144, + "blankVotes": 5770, + "totalVotes": 23002 + } + }, + { + "id": 130368, + "year": 2016, + "office": "State Representative", + "districts": "8th Plymouth", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Angelo-L-DEmilia" + ], + "result": { + "candidates": [ + { + "name": "Angelo L. D'Emilia", + "votes": 14963, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 247, + "blankVotes": 5744, + "totalVotes": 20954 + } + }, + { + "id": 127016, + "year": 2016, + "office": "State Representative", + "districts": "9th Plymouth", + "party": "General", + "special": true, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Gerard-J-Cassidy" + ], + "result": { + "candidates": [ + { + "name": "Gerard J. Cassidy", + "votes": 4536, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 44, + "blankVotes": 392, + "totalVotes": 4972 + } + }, + { + "id": 130371, + "year": 2016, + "office": "State Representative", + "districts": "9th Plymouth", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Gerard-J-Cassidy", + "https://electionstats.state.ma.us/candidates/view/Danny-J-Yoon" + ], + "result": { + "candidates": [ + { + "name": "Gerard J. Cassidy", + "votes": 10346, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Danny J. Yoon", + "votes": 1745, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 2, + "blankVotes": 1612, + "totalVotes": 13705 + } + }, + { + "id": 130372, + "year": 2016, + "office": "State Representative", + "districts": "10th Plymouth", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Michelle-M-Dubois" + ], + "result": { + "candidates": [ + { + "name": "Michelle M. Dubois", + "votes": 13945, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 114, + "blankVotes": 4859, + "totalVotes": 18918 + } + }, + { + "id": 130370, + "year": 2016, + "office": "State Representative", + "districts": "11th Plymouth", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Claire-D-Cronin" + ], + "result": { + "candidates": [ + { + "name": "Claire D. Cronin", + "votes": 15361, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 33, + "blankVotes": 5422, + "totalVotes": 20816 + } + }, + { + "id": 130401, + "year": 2016, + "office": "State Representative", + "districts": "12th Plymouth", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Thomas-J-Calter-III", + "https://electionstats.state.ma.us/candidates/view/Peter-J-Boncek" + ], + "result": { + "candidates": [ + { + "name": "Thomas J. Calter, III", + "votes": 13908, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Peter J. Boncek", + "votes": 9297, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 26, + "blankVotes": 1634, + "totalVotes": 24865 + } + }, + { + "id": 130343, + "year": 2016, + "office": "State Representative", + "districts": "1st Suffolk", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Adrian-C-Madaro" + ], + "result": { + "candidates": [ + { + "name": "Adrian C. Madaro", + "votes": 9946, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 205, + "blankVotes": 2671, + "totalVotes": 12822 + } + }, + { + "id": 130347, + "year": 2016, + "office": "State Representative", + "districts": "2nd Suffolk", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Daniel-Joseph-Ryan" + ], + "result": { + "candidates": [ + { + "name": "Daniel Joseph Ryan", + "votes": 12755, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 118, + "blankVotes": 4344, + "totalVotes": 17217 + } + }, + { + "id": 130352, + "year": 2016, + "office": "State Representative", + "districts": "3rd Suffolk", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Aaron-M-Michlewitz" + ], + "result": { + "candidates": [ + { + "name": "Aaron M. Michlewitz", + "votes": 15542, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 199, + "blankVotes": 5015, + "totalVotes": 20756 + } + }, + { + "id": 130345, + "year": 2016, + "office": "State Representative", + "districts": "4th Suffolk", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Nick-Collins" + ], + "result": { + "candidates": [ + { + "name": "Nick Collins", + "votes": 18781, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 264, + "blankVotes": 3969, + "totalVotes": 23014 + } + }, + { + "id": 130342, + "year": 2016, + "office": "State Representative", + "districts": "5th Suffolk", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Evandro-C-Carvalho", + "https://electionstats.state.ma.us/candidates/view/Althea-Garrison" + ], + "result": { + "candidates": [ + { + "name": "Evandro C. Carvalho", + "votes": 10855, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Althea Garrison", + "votes": 2014, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 70, + "blankVotes": 1861, + "totalVotes": 14800 + } + }, + { + "id": 130350, + "year": 2016, + "office": "State Representative", + "districts": "6th Suffolk", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Russell-E-Holmes" + ], + "result": { + "candidates": [ + { + "name": "Russell E. Holmes", + "votes": 13044, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 160, + "blankVotes": 3433, + "totalVotes": 16637 + } + }, + { + "id": 130349, + "year": 2016, + "office": "State Representative", + "districts": "7th Suffolk", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Chynah-Tyler" + ], + "result": { + "candidates": [ + { + "name": "Chynah Tyler", + "votes": 9150, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 132, + "blankVotes": 2138, + "totalVotes": 11420 + } + }, + { + "id": 130339, + "year": 2016, + "office": "State Representative", + "districts": "8th Suffolk", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Jay-D-Livingstone" + ], + "result": { + "candidates": [ + { + "name": "Jay D. Livingstone", + "votes": 16201, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 209, + "blankVotes": 4360, + "totalVotes": 20770 + } + }, + { + "id": 130346, + "year": 2016, + "office": "State Representative", + "districts": "9th Suffolk", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Byron-Rushing" + ], + "result": { + "candidates": [ + { + "name": "Byron Rushing", + "votes": 12617, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 190, + "blankVotes": 3488, + "totalVotes": 16295 + } + }, + { + "id": 130351, + "year": 2016, + "office": "State Representative", + "districts": "10th Suffolk", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Edward-F-Coppinger" + ], + "result": { + "candidates": [ + { + "name": "Edward F. Coppinger", + "votes": 17070, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 203, + "blankVotes": 5333, + "totalVotes": 22606 + } + }, + { + "id": 130340, + "year": 2016, + "office": "State Representative", + "districts": "11th Suffolk", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Elizabeth-A-Malia", + "https://electionstats.state.ma.us/candidates/view/Stephen-Charles-Bedell" + ], + "result": { + "candidates": [ + { + "name": "Elizabeth A. Malia", + "votes": 15628, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Stephen Charles Bedell", + "votes": 1884, + "writeIn": false + } + ], + "otherVotes": 60, + "blankVotes": 2707, + "totalVotes": 20279 + } + }, + { + "id": 130354, + "year": 2016, + "office": "State Representative", + "districts": "12th Suffolk", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Dan-Cullinane" + ], + "result": { + "candidates": [ + { + "name": "Dan Cullinane", + "votes": 15286, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 213, + "blankVotes": 4058, + "totalVotes": 19557 + } + }, + { + "id": 130353, + "year": 2016, + "office": "State Representative", + "districts": "13th Suffolk", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Daniel-J-Hunt" + ], + "result": { + "candidates": [ + { + "name": "Daniel J. Hunt", + "votes": 14507, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 232, + "blankVotes": 4072, + "totalVotes": 18811 + } + }, + { + "id": 130344, + "year": 2016, + "office": "State Representative", + "districts": "14th Suffolk", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Angelo-M-Scaccia" + ], + "result": { + "candidates": [ + { + "name": "Angelo M. Scaccia", + "votes": 15784, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 259, + "blankVotes": 4048, + "totalVotes": 20091 + } + }, + { + "id": 130341, + "year": 2016, + "office": "State Representative", + "districts": "15th Suffolk", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Jeffrey-Sanchez" + ], + "result": { + "candidates": [ + { + "name": "Jeffrey Sanchez", + "votes": 15675, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 179, + "blankVotes": 3594, + "totalVotes": 19448 + } + }, + { + "id": 130385, + "year": 2016, + "office": "State Representative", + "districts": "16th Suffolk", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Roselee-Vincent" + ], + "result": { + "candidates": [ + { + "name": "Roselee Vincent", + "votes": 11220, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 162, + "blankVotes": 6435, + "totalVotes": 17817 + } + }, + { + "id": 130348, + "year": 2016, + "office": "State Representative", + "districts": "17th Suffolk", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Kevin-G-Honan" + ], + "result": { + "candidates": [ + { + "name": "Kevin G. Honan", + "votes": 13367, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 183, + "blankVotes": 2762, + "totalVotes": 16312 + } + }, + { + "id": 130338, + "year": 2016, + "office": "State Representative", + "districts": "18th Suffolk", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Michael-J-Moran" + ], + "result": { + "candidates": [ + { + "name": "Michael J. Moran", + "votes": 10714, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 154, + "blankVotes": 2960, + "totalVotes": 13828 + } + }, + { + "id": 130467, + "year": 2016, + "office": "State Representative", + "districts": "19th Suffolk", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Robert-A-DeLeo" + ], + "result": { + "candidates": [ + { + "name": "Robert A. DeLeo", + "votes": 13000, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 241, + "blankVotes": 4453, + "totalVotes": 17694 + } + }, + { + "id": 130427, + "year": 2016, + "office": "State Representative", + "districts": "1st Worcester", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Kimberly-N-Ferguson" + ], + "result": { + "candidates": [ + { + "name": "Kimberly N. Ferguson", + "votes": 20065, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 144, + "blankVotes": 6012, + "totalVotes": 26221 + } + }, + { + "id": 130291, + "year": 2016, + "office": "State Representative", + "districts": "2nd Worcester", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Jonathan-D-Zlotnik" + ], + "result": { + "candidates": [ + { + "name": "Jonathan D. Zlotnik", + "votes": 14470, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 152, + "blankVotes": 4444, + "totalVotes": 19066 + } + }, + { + "id": 127017, + "year": 2016, + "office": "State Representative", + "districts": "3rd Worcester", + "party": "General", + "special": true, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Stephan-Hay", + "https://electionstats.state.ma.us/candidates/view/Dean-Tran" + ], + "result": { + "candidates": [ + { + "name": "Stephan Hay", + "votes": 4613, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Dean Tran", + "votes": 4488, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 25, + "blankVotes": 69, + "totalVotes": 9195 + } + }, + { + "id": 130413, + "year": 2016, + "office": "State Representative", + "districts": "3rd Worcester", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Stephan-Hay" + ], + "result": { + "candidates": [ + { + "name": "Stephan Hay", + "votes": 13498, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 70, + "blankVotes": 3589, + "totalVotes": 17157 + } + }, + { + "id": 130433, + "year": 2016, + "office": "State Representative", + "districts": "4th Worcester", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Natalie-Higgins", + "https://electionstats.state.ma.us/candidates/view/Thomas-F-Ardinger" + ], + "result": { + "candidates": [ + { + "name": "Natalie Higgins", + "votes": 10382, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Thomas F. Ardinger", + "votes": 8426, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 51, + "blankVotes": 1092, + "totalVotes": 19951 + } + }, + { + "id": 130318, + "year": 2016, + "office": "State Representative", + "districts": "5th Worcester", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Donald-R-Berthiaume-Jr" + ], + "result": { + "candidates": [ + { + "name": "Donald R. Berthiaume, Jr", + "votes": 17133, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 91, + "blankVotes": 5146, + "totalVotes": 22370 + } + }, + { + "id": 130381, + "year": 2016, + "office": "State Representative", + "districts": "6th Worcester", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Peter-J-Durant" + ], + "result": { + "candidates": [ + { + "name": "Peter J. Durant", + "votes": 15106, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 225, + "blankVotes": 4229, + "totalVotes": 19560 + } + }, + { + "id": 130307, + "year": 2016, + "office": "State Representative", + "districts": "7th Worcester", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Paul-K-Frost", + "https://electionstats.state.ma.us/candidates/view/Terry-Burke-Dotson" + ], + "result": { + "candidates": [ + { + "name": "Paul K. Frost", + "votes": 13691, + "writeIn": false, + "party": "Republican" + }, + { + "name": "Terry Burke Dotson", + "votes": 6951, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 19, + "blankVotes": 1376, + "totalVotes": 22037 + } + }, + { + "id": 130323, + "year": 2016, + "office": "State Representative", + "districts": "8th Worcester", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Kevin-J-Kuros" + ], + "result": { + "candidates": [ + { + "name": "Kevin J. Kuros", + "votes": 17436, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 203, + "blankVotes": 5436, + "totalVotes": 23075 + } + }, + { + "id": 130418, + "year": 2016, + "office": "State Representative", + "districts": "9th Worcester", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/David-K-Muradian-Jr" + ], + "result": { + "candidates": [ + { + "name": "David K. Muradian, Jr", + "votes": 18513, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 79, + "blankVotes": 4778, + "totalVotes": 23370 + } + }, + { + "id": 130430, + "year": 2016, + "office": "State Representative", + "districts": "10th Worcester", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Brian-W-Murray", + "https://electionstats.state.ma.us/candidates/view/Sandra-Slattery-E-Biagetti" + ], + "result": { + "candidates": [ + { + "name": "Brian W. Murray", + "votes": 11869, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Sandra Slattery E. Biagetti", + "votes": 9708, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 25, + "blankVotes": 1168, + "totalVotes": 22770 + } + }, + { + "id": 130469, + "year": 2016, + "office": "State Representative", + "districts": "11th Worcester", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Hannah-E-Kane" + ], + "result": { + "candidates": [ + { + "name": "Hannah E. Kane", + "votes": 17835, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 349, + "blankVotes": 5850, + "totalVotes": 24034 + } + }, + { + "id": 130328, + "year": 2016, + "office": "State Representative", + "districts": "12th Worcester", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Harold-P-Naughton-Jr", + "https://electionstats.state.ma.us/candidates/view/Charlene-R-Dicalogero" + ], + "result": { + "candidates": [ + { + "name": "Harold P. Naughton, Jr.", + "votes": 15976, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Charlene R. Dicalogero", + "votes": 3916, + "writeIn": false, + "party": "Green-rainbow" + } + ], + "otherVotes": 119, + "blankVotes": 3140, + "totalVotes": 23151 + } + }, + { + "id": 130481, + "year": 2016, + "office": "State Representative", + "districts": "13th Worcester", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/John-J-Mahoney-Jr" + ], + "result": { + "candidates": [ + { + "name": "John J. Mahoney, Jr.", + "votes": 12943, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 268, + "blankVotes": 4594, + "totalVotes": 17805 + } + }, + { + "id": 130477, + "year": 2016, + "office": "State Representative", + "districts": "14th Worcester", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/James-J-ODay" + ], + "result": { + "candidates": [ + { + "name": "James J. O'Day", + "votes": 13360, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 257, + "blankVotes": 4535, + "totalVotes": 18152 + } + }, + { + "id": 130479, + "year": 2016, + "office": "State Representative", + "districts": "15th Worcester", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Mary-S-Keefe", + "https://electionstats.state.ma.us/candidates/view/Ralph-Perez" + ], + "result": { + "candidates": [ + { + "name": "Mary S. Keefe", + "votes": 8039, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Ralph Perez", + "votes": 2184, + "writeIn": false + } + ], + "otherVotes": 55, + "blankVotes": 1843, + "totalVotes": 12121 + } + }, + { + "id": 130480, + "year": 2016, + "office": "State Representative", + "districts": "16th Worcester", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Daniel-M-Donahue", + "https://electionstats.state.ma.us/candidates/view/John-P-Fresolo" + ], + "result": { + "candidates": [ + { + "name": "Daniel M. Donahue", + "votes": 7783, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "John P. Fresolo", + "votes": 3804, + "writeIn": false, + "party": "United Independent" + } + ], + "otherVotes": 32, + "blankVotes": 1136, + "totalVotes": 12755 + } + }, + { + "id": 130432, + "year": 2016, + "office": "State Representative", + "districts": "17th Worcester", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Kate-D-Campanale", + "https://electionstats.state.ma.us/candidates/view/Moses-S-Dixon" + ], + "result": { + "candidates": [ + { + "name": "Kate D. Campanale", + "votes": 8011, + "writeIn": false, + "party": "Republican" + }, + { + "name": "Moses S. Dixon", + "votes": 6671, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 31, + "blankVotes": 1007, + "totalVotes": 15720 + } + }, + { + "id": 130396, + "year": 2016, + "office": "State Representative", + "districts": "18th Worcester", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Joseph-D-Mckenna" + ], + "result": { + "candidates": [ + { + "name": "Joseph D. Mckenna", + "votes": 16504, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 168, + "blankVotes": 4910, + "totalVotes": 21582 + } + }, + { + "id": 130256, + "year": 2016, + "office": "District Attorney", + "districts": "Bristol", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Thomas-M-Quinn-III" + ], + "result": { + "candidates": [ + { + "name": "Thomas M. Quinn, III", + "votes": 187993, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 1146, + "blankVotes": 67547, + "totalVotes": 256686 + } + }, + { + "id": 130282, + "year": 2016, + "office": "Register of Deeds", + "districts": "Dukes", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Paulo-C-Deoliveira", + "https://electionstats.state.ma.us/candidates/view/Martina-Thornton" + ], + "result": { + "candidates": [ + { + "name": "Paulo C. Deoliveira", + "votes": 8229, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Martina Thornton", + "votes": 2467, + "writeIn": false + } + ], + "otherVotes": 12, + "blankVotes": 1143, + "totalVotes": 11851 + } + }, + { + "id": 130336, + "year": 2016, + "office": "Register of Deeds", + "districts": "Suffolk", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Stephen-J-Murphy", + "https://electionstats.state.ma.us/candidates/view/Margherita-Ciampa-Coyne", + "https://electionstats.state.ma.us/candidates/view/John-A-Keith", + "https://electionstats.state.ma.us/candidates/view/Joseph-M-Donnelly-Jr" + ], + "result": { + "candidates": [ + { + "name": "Stephen J. Murphy", + "votes": 180667, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Margherita Ciampa-Coyne", + "votes": 32689, + "writeIn": false + }, + { + "name": "John A. Keith", + "votes": 18576, + "writeIn": false + }, + { + "name": "Joseph M. Donnelly, Jr", + "votes": 18222, + "writeIn": false + } + ], + "otherVotes": 1685, + "blankVotes": 65368, + "totalVotes": 317207 + } + }, + { + "id": 130317, + "year": 2016, + "office": "Sheriff", + "districts": "Barnstable County", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/James-M-Cummings", + "https://electionstats.state.ma.us/candidates/view/Randy-P-Azzato" + ], + "result": { + "candidates": [ + { + "name": "James M. Cummings", + "votes": 77210, + "writeIn": false, + "party": "Republican" + }, + { + "name": "Randy P. Azzato", + "votes": 52211, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 796, + "blankVotes": 7695, + "totalVotes": 137912 + } + }, + { + "id": 130265, + "year": 2016, + "office": "Sheriff", + "districts": "Berkshire County", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Thomas-N-Bowler" + ], + "result": { + "candidates": [ + { + "name": "Thomas N. Bowler", + "votes": 54402, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 208, + "blankVotes": 11898, + "totalVotes": 66508 + } + }, + { + "id": 130260, + "year": 2016, + "office": "Sheriff", + "districts": "Bristol County", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Thomas-M-Hodgson" + ], + "result": { + "candidates": [ + { + "name": "Thomas M. Hodgson", + "votes": 188055, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 2542, + "blankVotes": 66089, + "totalVotes": 256686 + } + }, + { + "id": 130285, + "year": 2016, + "office": "Sheriff", + "districts": "Dukes County", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Robert-Ogden", + "https://electionstats.state.ma.us/candidates/view/Neal-J-Maciel" + ], + "result": { + "candidates": [ + { + "name": "Robert Ogden", + "votes": 7136, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Neal J. Maciel", + "votes": 3907, + "writeIn": false + } + ], + "otherVotes": 21, + "blankVotes": 787, + "totalVotes": 11851 + } + }, + { + "id": 130274, + "year": 2016, + "office": "Sheriff", + "districts": "Essex County", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Kevin-F-Coppinger", + "https://electionstats.state.ma.us/candidates/view/Anne-M-Manning-Martin", + "https://electionstats.state.ma.us/candidates/view/Mark-E-Archer", + "https://electionstats.state.ma.us/candidates/view/Kelvin-J-Leach" + ], + "result": { + "candidates": [ + { + "name": "Kevin F. Coppinger", + "votes": 178699, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Anne M. Manning-Martin", + "votes": 119795, + "writeIn": false, + "party": "Republican" + }, + { + "name": "Mark E. Archer", + "votes": 26036, + "writeIn": false + }, + { + "name": "Kelvin J. Leach", + "votes": 22242, + "writeIn": false + } + ], + "otherVotes": 750, + "blankVotes": 45267, + "totalVotes": 392789 + } + }, + { + "id": 130297, + "year": 2016, + "office": "Sheriff", + "districts": "Franklin County", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Christopher-J-Donelan" + ], + "result": { + "candidates": [ + { + "name": "Christopher J. Donelan", + "votes": 32254, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 124, + "blankVotes": 7153, + "totalVotes": 39531 + } + }, + { + "id": 130268, + "year": 2016, + "office": "Sheriff", + "districts": "Hampden County", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Nick-Cocchi", + "https://electionstats.state.ma.us/candidates/view/John-M-Comerford", + "https://electionstats.state.ma.us/candidates/view/James-L-Gill-Jr" + ], + "result": { + "candidates": [ + { + "name": "Nick Cocchi", + "votes": 132396, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "John M. Comerford", + "votes": 33459, + "writeIn": false, + "party": "Republican" + }, + { + "name": "James L. Gill, Jr", + "votes": 28225, + "writeIn": false + } + ], + "otherVotes": 415, + "blankVotes": 14841, + "totalVotes": 209336 + } + }, + { + "id": 130278, + "year": 2016, + "office": "Sheriff", + "districts": "Hampshire County", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Patrick-J-Cahillane", + "https://electionstats.state.ma.us/candidates/view/David-F-Isakson" + ], + "result": { + "candidates": [ + { + "name": "Patrick J. Cahillane", + "votes": 59951, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "David F. Isakson", + "votes": 18868, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 175, + "blankVotes": 6630, + "totalVotes": 85624 + } + }, + { + "id": 130253, + "year": 2016, + "office": "Sheriff", + "districts": "Middlesex County", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Peter-J-Koutoujian" + ], + "result": { + "candidates": [ + { + "name": "Peter J. Koutoujian", + "votes": 589594, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 7780, + "blankVotes": 211256, + "totalVotes": 808630 + } + }, + { + "id": 130454, + "year": 2016, + "office": "Sheriff", + "districts": "Nantucket County", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/James-A-Perelman", + "https://electionstats.state.ma.us/candidates/view/David-J-Aguiar" + ], + "result": { + "candidates": [ + { + "name": "James A. Perelman", + "votes": 5633, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "David J. Aguiar", + "votes": 730, + "writeIn": false + } + ], + "otherVotes": 10, + "blankVotes": 210, + "totalVotes": 6583 + } + }, + { + "id": 130312, + "year": 2016, + "office": "Sheriff", + "districts": "Norfolk County", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Michael-G-Bellotti" + ], + "result": { + "candidates": [ + { + "name": "Michael G. Bellotti", + "votes": 278782, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 1994, + "blankVotes": 93766, + "totalVotes": 374542 + } + }, + { + "id": 130247, + "year": 2016, + "office": "Sheriff", + "districts": "Plymouth County", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Joseph-D-McDonald-Jr", + "https://electionstats.state.ma.us/candidates/view/Scott-M-Vecchi" + ], + "result": { + "candidates": [ + { + "name": "Joseph D. McDonald, Jr.", + "votes": 143334, + "writeIn": false, + "party": "Republican" + }, + { + "name": "Scott M. Vecchi", + "votes": 110540, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 174, + "blankVotes": 21458, + "totalVotes": 275506 + } + }, + { + "id": 130360, + "year": 2016, + "office": "Sheriff", + "districts": "Suffolk County", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Steven-W-Tompkins" + ], + "result": { + "candidates": [ + { + "name": "Steven W. Tompkins", + "votes": 231807, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 3836, + "blankVotes": 81564, + "totalVotes": 317207 + } + }, + { + "id": 130293, + "year": 2016, + "office": "Sheriff", + "districts": "Worcester County", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Lewis-G-Evangelidis" + ], + "result": { + "candidates": [ + { + "name": "Lewis G. Evangelidis", + "votes": 288432, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 4140, + "blankVotes": 103524, + "totalVotes": 396096 + } + }, + { + "id": 130295, + "year": 2016, + "office": "Council of Governments Executive Committee", + "districts": "Franklin County", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Jay-D-Dipucchio" + ], + "result": { + "candidates": [ + { + "name": "Jay D. Dipucchio", + "votes": 29130, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 57, + "blankVotes": 10344, + "totalVotes": 39531 + } + } +] \ No newline at end of file diff --git a/tests/fixtures/electionResults/2016_general_table.html b/tests/fixtures/electionResults/2016_general_table.html new file mode 100644 index 000000000..30a5e4a7a --- /dev/null +++ b/tests/fixtures/electionResults/2016_general_table.html @@ -0,0 +1,3491 @@ + + + + + + + + PD43+ » 2016 President General Election + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+ + ๏ปฟ + + + + +
+ + +
+ + + + + + + + + + + + + + +
+ + + + +
+ + + + + +
+ + +
+
+ + + + + +
+ + +
+
+ + + + + +
 
+
+ + + +
 
+ + +
+
+ + + + + + +
+ + + + + + + + +
+
+ +
+ +« Go Back +  +« Go Back + + + +
+ +
+
+ + + + + + + + + + + + +
+
+ + + + +
+
+ SHARE THIS DATA: + + + + + + + + + +
+
+ + + + + + + +
+
Candidate Key
+
+ +
+
 
+
Clinton and Kaine +
+ Democratic +
+ +
 
+
+ +
+
 
+
Trump and Pence +
+ Republican +
+ +
 
+
+ +
+
 
+
Johnson and Weld +
+ Libertarian +
+ +
 
+
+ +
+
 
+
Stein and Baraka +
+ Green-rainbow +
+ +
 
+
+ +
+
 
+
Mcmullin and Johnson +
+ Write-In +
+ +
 
+
+ +
+
 
+
Kotlikoff and Leamer +
+ Write-In +
+ +
 
+
+ +
+
 
+
Feegbeh and O'Brien +
+ Write-In +
+ +
 
+
+ +
+
 
+
Moorehead and Lilly +
+ Write-In +
+ +
 
+
+ +
+
 
+
Schoenke and Mitchel +
+ Write-In +
+ +
 
+
+ +
 
+
+
+ + + + + + + + +
+
+ + +
+
+

2016 President General Election

+ + + + + + + +
+ +
+ + + + + + + + + + + + +
+ + + + + + +
View as: # | % 
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CountyAll OthersBlanksTotal Votes Cast
Barnstable + More » +
 
72,430
54,099
5,337
1,919
77
0
0
0
0
1,9192,131137,912
Berkshire + More » +
 
43,714
16,839
2,555
1,627
68
0
0
0
0
81489166,508
Bristol + More » +
 
129,540
105,443
10,180
3,689
107
0
0
0
0
3,1814,546256,686
Dukes + More » +
 
8,400
2,477
366
259
0
0
0
0
0
17217711,851
Essex + More » +
 
222,310
136,316
16,215
4,679
348
3
0
0
0
5,4997,419392,789
Franklin + More » +
 
24,478
10,364
1,902
1,412
9
0
0
12
0
64471039,531
Hampden + More » +
 
112,590
78,685
8,322
3,456
64
0
0
0
0
2,9843,235209,336
Hampshire + More » +
 
55,367
21,790
3,098
2,624
46
8
22
1
0
1,2371,43185,624
Middlesex + More » +
 
520,360
219,793
32,441
10,511
908
15
6
0
0
12,70111,895808,630
Nantucket + More » +
 
4,146
1,892
260
108
0
0
0
0
0
102756,583
Norfolk + More » +
 
221,819
119,723
15,606
4,051
363
0
0
0
0
6,1336,847374,542
Plymouth + More » +
 
135,513
115,369
12,542
3,203
235
1
0
0
0
4,3144,329275,506
Suffolk + More » +
 
245,751
50,421
7,996
4,465
106
0
0
2
0
4,5423,924317,207
Worcester + More » +
 
198,778
157,682
21,198
5,658
388
1
0
0
0
6,2466,145396,096
Totals
1,995,196
1,090,893
138,018
47,661
2,719
28
28
15
0
50,48853,7553,378,801
+
+
+ + +
+
+ +
+
+ + +
 
+ +
+ + + + + + + +
+ + + + + + + + + + + +
+
+
+๏ปฟ +
+ +
+ +
+
+
+ + + + + + + + + + + + + diff --git a/tests/fixtures/electionResults/2022_to_2026.html b/tests/fixtures/electionResults/2022_to_2026.html new file mode 100644 index 000000000..05b8aeffa --- /dev/null +++ b/tests/fixtures/electionResults/2022_to_2026.html @@ -0,0 +1,9867 @@ + + + + + + + + PD43+ » Search Elections + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+ + ๏ปฟ + + + + +
+ + +
+ + + + + + + + + + + + + + +
+ + + + +
+ + + + + +
+ + +
+
+ + + + + +
+ + +
+
+ + + + + +
 
+
+ + + +
 
+ + +
+
+ + + + + + +
+ + + + + +
+
+ +
+ + + + + + +
+
+
+
 
+
+
+ + + + + + + + +
+
+ + + +
+
+ SHARE THIS DATA: + + + + + + + + + +
+
+ + + + + +
+ + + + + + + + + +
+ +
+ + + + + + + + +
+ +
+ + + + + +
+
+ +
+
+ + +
+
+ +
Please wait...
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
YearOfficeDistrictStageCandidates
2026State Senate1st MiddlesexSpecial General Election +
+Vanna Howard won + (58%) against 2 opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State SenateBerkshire, Hampden, Franklin & HampshireGeneral Election +
+Paul W. Mark won + (71%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State SenateFirst Plymouth & NorfolkGeneral Election +
+Patrick A. O'Connor won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State SenateHampden, Hampshire & WorcesterGeneral Election +
+Jacob R. Oliveira won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State SenateNorfolk & MiddlesexGeneral Election +
+Cynthia Stone Creem won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State SenateNorfolk, Plymouth & BristolGeneral Election +
+William J. Driscoll, Jr won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State SenateNorfolk, Worcester & MiddlesexGeneral Election +
+Rebecca L. Rausch won + (59%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State SenateSecond Plymouth & NorfolkGeneral Election +
+Michael D. Brady won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State SenateThird Bristol & PlymouthGeneral Election +
+Kelly A. Dooner won + (48%) against 2 opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State SenateWorcester & HampdenGeneral Election +
+Ryan C. Fattman won + (66%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State SenateWorcester & HampshireGeneral Election +
+Peter J. Durant won + (58%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State SenateBristol and NorfolkGeneral Election +
+Paul R. Feeney won + (73%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Senate1st Bristol and PlymouthGeneral Election +
+Michael J. Rodrigues won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Senate2nd Bristol and PlymouthGeneral Election +
+Mark C. Montigny won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State SenateCape and IslandsGeneral Election +
+Julian Andre Cyr won + (61%) against 2 opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Senate1st EssexGeneral Election +
+Pavel M. Payano won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Senate2nd EssexGeneral Election +
+Joan B. Lovely won + (67%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Senate3rd EssexGeneral Election +
+Brendan Peter Crighton won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Senate1st Essex and MiddlesexGeneral Election +
+Bruce E. Tarr won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Senate2nd Essex and MiddlesexGeneral Election +
+Barry R. Finegold won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State SenateHampdenGeneral Election +
+Adam Gomez won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State SenateHampden and HampshireGeneral Election +
+John C. Velis won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State SenateHampshire, Franklin and WorcesterGeneral Election +
+Jo Comerford won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Senate1st MiddlesexGeneral Election +
+Edward J. Kennedy, Jr won + (63%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Senate2nd MiddlesexGeneral Election +
+Patricia D. Jehlen won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Senate3rd MiddlesexGeneral Election +
+Michael J. Barrett won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Senate4th MiddlesexGeneral Election +
+Cindy F. Friedman won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Senate5th MiddlesexGeneral Election +
+Jason M. Lewis won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State SenateMiddlesex and NorfolkGeneral Election +
+Karen E. Spilka won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State SenateMiddlesex and WorcesterGeneral Election +
+James B. Eldridge won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State SenateMiddlesex and SuffolkGeneral Election +
+Sal N. DiDomenico won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State SenateNorfolk and PlymouthGeneral Election +
+John F. Keenan won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State SenateNorfolk and SuffolkGeneral Election +
+Michael F. Rush won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State SenatePlymouth and BarnstableGeneral Election +
+Dylan A. Fernandes won + (51%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Senate1st SuffolkGeneral Election +
+Nicholas P. Collins won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Senate2nd SuffolkGeneral Election +
+Liz Miranda won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Senate3rd SuffolkGeneral Election +
+Lydia Marie Edwards won + (70%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State SenateSuffolk and MiddlesexGeneral Election +
+William N. Brownsberger won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State SenateWorcester and MiddlesexGeneral Election +
+John J. Cronin won + (59%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Senate1st WorcesterGeneral Election +
+Robyn K. Kennedy won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Senate2nd WorcesterGeneral Election +
+Michael O. Moore won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2023State SenateWorcester & HampshireSpecial General Election +
+Peter J. Durant won + (54%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2022State SenateBerkshire, Hampden, Franklin & HampshireGeneral Election +
+Paul W. Mark won + (76%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2022State SenateFirst Plymouth & NorfolkGeneral Election +
+Patrick Michael O'Connor won + (61%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2022State SenateHampden, Hampshire & WorcesterGeneral Election +
+Jacob R. Oliveira won + (56%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2022State SenateNorfolk & MiddlesexGeneral Election +
+Cynthia Stone Creem won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2022State SenateNorfolk, Plymouth & BristolGeneral Election +
+Walter F. Timilty, Jr. won + (66%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2022State SenateNorfolk, Worcester & MiddlesexGeneral Election +
+Rebecca L. Rausch won + (55%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2022State SenateSecond Plymouth & NorfolkGeneral Election +
+Michael D. Brady won + (64%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2022State SenateThird Bristol & PlymouthGeneral Election +
+Marc R. Pacheco won + (54%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2022State SenateWorcester & HampdenGeneral Election +
+Ryan C. Fattman won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2022State SenateWorcester & HampshireGeneral Election +
+Anne M. Gobi won + (54%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2022State SenateBristol and NorfolkGeneral Election +
+Paul R. Feeney won + (59%) against 2 opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2022State Senate1st Bristol and PlymouthGeneral Election +
+Michael J. Rodrigues won + (58%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2022State Senate2nd Bristol and PlymouthGeneral Election +
+Mark C. Montigny won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2022State SenateCape and IslandsGeneral Election +
+Julian Andre Cyr won + (64%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2022State Senate1st EssexGeneral Election +
+Pavel M. Payano won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2022State Senate2nd EssexGeneral Election +
+Joan B. Lovely won + (68%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2022State Senate3rd EssexGeneral Election +
+Brendan P. Crighton won + (71%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2022State Senate1st Essex and MiddlesexGeneral Election +
+Bruce E. Tarr won + (71%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2022State Senate2nd Essex and MiddlesexGeneral Election +
+Barry R. Finegold won + (57%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2022State SenateHampdenGeneral Election +
+Adam Gomez won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2022State SenateHampden and HampshireGeneral Election +
+John C. Velis won + (66%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2022State SenateHampshire, Franklin and WorcesterGeneral Election +
+Jo Comerford won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2022State Senate1st MiddlesexGeneral Election +
+Edward J. Kennedy, Jr won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2022State Senate2nd MiddlesexGeneral Election +
+Patricia D. Jehlen won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2022State Senate3rd MiddlesexGeneral Election +
+Michael J. Barrett won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2022State Senate4th MiddlesexGeneral Election +
+Cindy F. Friedman won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2022State Senate5th MiddlesexGeneral Election +
+Jason M. Lewis won + (64%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2022State SenateMiddlesex and NorfolkGeneral Election +
+Karen E. Spilka won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2022State SenateMiddlesex and WorcesterGeneral Election +
+James B. Eldridge won + (70%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2022State SenateMiddlesex and SuffolkGeneral Election +
+Sal N. DiDomenico won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2022State SenateNorfolk and PlymouthGeneral Election +
+John F. Keenan won + (64%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2022State SenateNorfolk and SuffolkGeneral Election +
+Michael F. Rush won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2022State SenatePlymouth and BarnstableGeneral Election +
+Susan Lynn Moran won + (56%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2022State Senate1st SuffolkGeneral Election +
+Nicholas P. Collins won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2022State Senate2nd SuffolkGeneral Election +
+Liz Miranda won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2022State Senate3rd SuffolkGeneral Election +
+Lydia Marie Edwards won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2022State SenateSuffolk and MiddlesexGeneral Election +
+William N. Brownsberger won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2022State Senate1st Suffolk and MiddlesexSpecial General Election +
+Lydia Marie Edwards won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2022State SenateWorcester and MiddlesexGeneral Election +
+John J. Cronin won + (60%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2022State Senate1st WorcesterGeneral Election +
+Robyn K. Kennedy won + (73%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2022State Senate2nd WorcesterGeneral Election +
+Michael O. Moore won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
 
+ +
+ + + + + + + +
+ + + + + + + + + + + +
+
+
+๏ปฟ +
+ +
+ +
+
+
+ + + + + + + + + + + + + diff --git a/tests/fixtures/electionResults/2022_to_2026.json b/tests/fixtures/electionResults/2022_to_2026.json new file mode 100644 index 000000000..db6ac66e9 --- /dev/null +++ b/tests/fixtures/electionResults/2022_to_2026.json @@ -0,0 +1,2267 @@ +[ + { + "id": 171923, + "year": 2026, + "office": "State Senate", + "districts": "1st Middlesex", + "party": "General", + "special": true, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Vanna-Howard", + "https://electionstats.state.ma.us/candidates/view/Sam-S-Meas", + "https://electionstats.state.ma.us/candidates/view/Joe-Espinola" + ], + "result": { + "candidates": [ + { + "name": "Vanna Howard", + "votes": 4306, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Sam S. Meas", + "votes": 1699, + "writeIn": false, + "party": "Republican" + }, + { + "name": "Joe Espinola", + "votes": 1379, + "writeIn": false + } + ], + "otherVotes": 16, + "blankVotes": 19, + "totalVotes": 7419 + } + }, + { + "id": 165325, + "year": 2024, + "office": "State Senate", + "districts": "Berkshire, Hampden, Franklin & Hampshire", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Paul-W-Mark", + "https://electionstats.state.ma.us/candidates/view/David-A-Rosa" + ], + "result": { + "candidates": [ + { + "name": "Paul W. Mark", + "votes": 62249, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "David A. Rosa", + "votes": 25494, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 68, + "blankVotes": 7170, + "totalVotes": 94981 + } + }, + { + "id": 165464, + "year": 2024, + "office": "State Senate", + "districts": "First Plymouth & Norfolk", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Patrick-A-OConnor" + ], + "result": { + "candidates": [ + { + "name": "Patrick A. O'Connor", + "votes": 82720, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 935, + "blankVotes": 25443, + "totalVotes": 109098 + } + }, + { + "id": 165393, + "year": 2024, + "office": "State Senate", + "districts": "Hampden, Hampshire & Worcester", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Jacob-R-Oliveira" + ], + "result": { + "candidates": [ + { + "name": "Jacob R. Oliveira", + "votes": 68420, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 1380, + "blankVotes": 25855, + "totalVotes": 95655 + } + }, + { + "id": 165448, + "year": 2024, + "office": "State Senate", + "districts": "Norfolk & Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Cynthia-Stone-Creem" + ], + "result": { + "candidates": [ + { + "name": "Cynthia Stone Creem", + "votes": 68002, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 924, + "blankVotes": 22533, + "totalVotes": 91459 + } + }, + { + "id": 165439, + "year": 2024, + "office": "State Senate", + "districts": "Norfolk, Plymouth & Bristol", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/William-J-Driscoll-Jr" + ], + "result": { + "candidates": [ + { + "name": "William J. Driscoll, Jr", + "votes": 63145, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 1010, + "blankVotes": 25835, + "totalVotes": 89990 + } + }, + { + "id": 165395, + "year": 2024, + "office": "State Senate", + "districts": "Norfolk, Worcester & Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Rebecca-L-Rausch", + "https://electionstats.state.ma.us/candidates/view/Dashe-M-Videira" + ], + "result": { + "candidates": [ + { + "name": "Rebecca L. Rausch", + "votes": 57309, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Dashe M. Videira", + "votes": 39983, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 184, + "blankVotes": 7675, + "totalVotes": 105151 + } + }, + { + "id": 165382, + "year": 2024, + "office": "State Senate", + "districts": "Second Plymouth & Norfolk", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Michael-D-Brady" + ], + "result": { + "candidates": [ + { + "name": "Michael D. Brady", + "votes": 55766, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 487, + "blankVotes": 17457, + "totalVotes": 73710 + } + }, + { + "id": 165398, + "year": 2024, + "office": "State Senate", + "districts": "Third Bristol & Plymouth", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Kelly-A-Dooner", + "https://electionstats.state.ma.us/candidates/view/Joseph-Richard-Pacheco", + "https://electionstats.state.ma.us/candidates/view/James-B-Dupont" + ], + "result": { + "candidates": [ + { + "name": "Kelly A. Dooner", + "votes": 45777, + "writeIn": false, + "party": "Republican" + }, + { + "name": "Joseph Richard Pacheco", + "votes": 44137, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "James B. Dupont", + "votes": 4737, + "writeIn": false + } + ], + "otherVotes": 86, + "blankVotes": 6737, + "totalVotes": 101474 + } + }, + { + "id": 165405, + "year": 2024, + "office": "State Senate", + "districts": "Worcester & Hampden", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Ryan-C-Fattman", + "https://electionstats.state.ma.us/candidates/view/Anthony-Jm-Allard" + ], + "result": { + "candidates": [ + { + "name": "Ryan C. Fattman", + "votes": 65438, + "writeIn": false, + "party": "Republican" + }, + { + "name": "Anthony Jm Allard", + "votes": 33911, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 153, + "blankVotes": 4958, + "totalVotes": 104460 + } + }, + { + "id": 165388, + "year": 2024, + "office": "State Senate", + "districts": "Worcester & Hampshire", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Peter-J-Durant", + "https://electionstats.state.ma.us/candidates/view/Sheila-H-Dibb" + ], + "result": { + "candidates": [ + { + "name": "Peter J. Durant", + "votes": 52465, + "writeIn": false, + "party": "Republican" + }, + { + "name": "Sheila H. Dibb", + "votes": 37346, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 160, + "blankVotes": 4494, + "totalVotes": 94465 + } + }, + { + "id": 165376, + "year": 2024, + "office": "State Senate", + "districts": "Bristol and Norfolk", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Paul-R-Feeney", + "https://electionstats.state.ma.us/candidates/view/Laura-L-Saylor" + ], + "result": { + "candidates": [ + { + "name": "Paul R. Feeney", + "votes": 61252, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Laura L. Saylor", + "votes": 22661, + "writeIn": false, + "party": "Workers Party" + } + ], + "otherVotes": 432, + "blankVotes": 17348, + "totalVotes": 101693 + } + }, + { + "id": 165484, + "year": 2024, + "office": "State Senate", + "districts": "1st Bristol and Plymouth", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Michael-J-Rodrigues" + ], + "result": { + "candidates": [ + { + "name": "Michael J. Rodrigues", + "votes": 55377, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 1346, + "blankVotes": 23986, + "totalVotes": 80709 + } + }, + { + "id": 165319, + "year": 2024, + "office": "State Senate", + "districts": "2nd Bristol and Plymouth", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Mark-C-Montigny" + ], + "result": { + "candidates": [ + { + "name": "Mark C. Montigny", + "votes": 55918, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 1229, + "blankVotes": 17198, + "totalVotes": 74345 + } + }, + { + "id": 165352, + "year": 2024, + "office": "State Senate", + "districts": "Cape and Islands", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Julian-Andre-Cyr", + "https://electionstats.state.ma.us/candidates/view/Christopher-Robert-Lauzon", + "https://electionstats.state.ma.us/candidates/view/Joe-Van-Nes" + ], + "result": { + "candidates": [ + { + "name": "Julian Andre Cyr", + "votes": 64636, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Christopher Robert Lauzon", + "votes": 38893, + "writeIn": false, + "party": "Republican" + }, + { + "name": "Joe Van Nes", + "votes": 2493, + "writeIn": false + } + ], + "otherVotes": 158, + "blankVotes": 4780, + "totalVotes": 110960 + } + }, + { + "id": 165497, + "year": 2024, + "office": "State Senate", + "districts": "1st Essex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Pavel-M-Payano" + ], + "result": { + "candidates": [ + { + "name": "Pavel M. Payano", + "votes": 39632, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 1515, + "blankVotes": 12405, + "totalVotes": 53552 + } + }, + { + "id": 165402, + "year": 2024, + "office": "State Senate", + "districts": "2nd Essex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Joan-B-Lovely", + "https://electionstats.state.ma.us/candidates/view/Damian-Mitchell-Anketell" + ], + "result": { + "candidates": [ + { + "name": "Joan B. Lovely", + "votes": 58109, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Damian Mitchell Anketell", + "votes": 28813, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 86, + "blankVotes": 5937, + "totalVotes": 92945 + } + }, + { + "id": 165514, + "year": 2024, + "office": "State Senate", + "districts": "3rd Essex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Brendan-Peter-Crighton" + ], + "result": { + "candidates": [ + { + "name": "Brendan Peter Crighton", + "votes": 56430, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 1277, + "blankVotes": 23058, + "totalVotes": 80765 + } + }, + { + "id": 165437, + "year": 2024, + "office": "State Senate", + "districts": "1st Essex and Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Bruce-E-Tarr" + ], + "result": { + "candidates": [ + { + "name": "Bruce E. Tarr", + "votes": 88918, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 1112, + "blankVotes": 27172, + "totalVotes": 117202 + } + }, + { + "id": 165339, + "year": 2024, + "office": "State Senate", + "districts": "2nd Essex and Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Barry-R-Finegold" + ], + "result": { + "candidates": [ + { + "name": "Barry R. Finegold", + "votes": 73764, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 1208, + "blankVotes": 30064, + "totalVotes": 105036 + } + }, + { + "id": 165462, + "year": 2024, + "office": "State Senate", + "districts": "Hampden", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Adam-Gomez" + ], + "result": { + "candidates": [ + { + "name": "Adam Gomez", + "votes": 43211, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 1340, + "blankVotes": 9751, + "totalVotes": 54302 + } + }, + { + "id": 165330, + "year": 2024, + "office": "State Senate", + "districts": "Hampden and Hampshire", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/John-C-Velis" + ], + "result": { + "candidates": [ + { + "name": "John C. Velis", + "votes": 62335, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 831, + "blankVotes": 19074, + "totalVotes": 82240 + } + }, + { + "id": 165345, + "year": 2024, + "office": "State Senate", + "districts": "Hampshire, Franklin and Worcester", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Jo-Comerford" + ], + "result": { + "candidates": [ + { + "name": "Jo Comerford", + "votes": 67078, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 988, + "blankVotes": 16775, + "totalVotes": 84841 + } + }, + { + "id": 165473, + "year": 2024, + "office": "State Senate", + "districts": "1st Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Edward-J-Kennedy", + "https://electionstats.state.ma.us/candidates/view/Karla-J-Miller" + ], + "result": { + "candidates": [ + { + "name": "Edward J. Kennedy, Jr", + "votes": 40887, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Karla J. Miller", + "votes": 23422, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 147, + "blankVotes": 5757, + "totalVotes": 70213 + } + }, + { + "id": 165452, + "year": 2024, + "office": "State Senate", + "districts": "2nd Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Patricia-D-Jehlen" + ], + "result": { + "candidates": [ + { + "name": "Patricia D. Jehlen", + "votes": 72232, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 1183, + "blankVotes": 17914, + "totalVotes": 91329 + } + }, + { + "id": 165391, + "year": 2024, + "office": "State Senate", + "districts": "3rd Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Michael-J-Barrett" + ], + "result": { + "candidates": [ + { + "name": "Michael J. Barrett", + "votes": 65186, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 496, + "blankVotes": 23542, + "totalVotes": 89224 + } + }, + { + "id": 165356, + "year": 2024, + "office": "State Senate", + "districts": "4th Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Cindy-F-Friedman" + ], + "result": { + "candidates": [ + { + "name": "Cindy F. Friedman", + "votes": 70460, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 1235, + "blankVotes": 29256, + "totalVotes": 100951 + } + }, + { + "id": 165519, + "year": 2024, + "office": "State Senate", + "districts": "5th Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Jason-M-Lewis" + ], + "result": { + "candidates": [ + { + "name": "Jason M. Lewis", + "votes": 63221, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 1043, + "blankVotes": 29088, + "totalVotes": 93352 + } + }, + { + "id": 165369, + "year": 2024, + "office": "State Senate", + "districts": "Middlesex and Norfolk", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Karen-E-Spilka" + ], + "result": { + "candidates": [ + { + "name": "Karen E. Spilka", + "votes": 68762, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 1223, + "blankVotes": 19595, + "totalVotes": 89580 + } + }, + { + "id": 165312, + "year": 2024, + "office": "State Senate", + "districts": "Middlesex and Worcester", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/James-B-Eldridge" + ], + "result": { + "candidates": [ + { + "name": "James B. Eldridge", + "votes": 75178, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 927, + "blankVotes": 24174, + "totalVotes": 100279 + } + }, + { + "id": 165431, + "year": 2024, + "office": "State Senate", + "districts": "Middlesex and Suffolk", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Sal-N-DiDomenico" + ], + "result": { + "candidates": [ + { + "name": "Sal N. DiDomenico", + "votes": 47113, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 736, + "blankVotes": 12594, + "totalVotes": 60443 + } + }, + { + "id": 165305, + "year": 2024, + "office": "State Senate", + "districts": "Norfolk and Plymouth", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/John-F-Keenan" + ], + "result": { + "candidates": [ + { + "name": "John F. Keenan", + "votes": 61091, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 1325, + "blankVotes": 20582, + "totalVotes": 82998 + } + }, + { + "id": 165432, + "year": 2024, + "office": "State Senate", + "districts": "Norfolk and Suffolk", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Michael-F-Rush" + ], + "result": { + "candidates": [ + { + "name": "Michael F. Rush", + "votes": 72352, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 1289, + "blankVotes": 27513, + "totalVotes": 101154 + } + }, + { + "id": 165436, + "year": 2024, + "office": "State Senate", + "districts": "Plymouth and Barnstable", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Dylan-A-Fernandes", + "https://electionstats.state.ma.us/candidates/view/Mathew-J-Muratore" + ], + "result": { + "candidates": [ + { + "name": "Dylan A. Fernandes", + "votes": 59137, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Mathew J. Muratore", + "votes": 56335, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 107, + "blankVotes": 6412, + "totalVotes": 121991 + } + }, + { + "id": 165430, + "year": 2024, + "office": "State Senate", + "districts": "1st Suffolk", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Nicholas-P-Collins" + ], + "result": { + "candidates": [ + { + "name": "Nicholas P. Collins", + "votes": 61127, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 1437, + "blankVotes": 16251, + "totalVotes": 78815 + } + }, + { + "id": 165433, + "year": 2024, + "office": "State Senate", + "districts": "2nd Suffolk", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Liz-Miranda" + ], + "result": { + "candidates": [ + { + "name": "Liz Miranda", + "votes": 52072, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 897, + "blankVotes": 9286, + "totalVotes": 62255 + } + }, + { + "id": 165434, + "year": 2024, + "office": "State Senate", + "districts": "3rd Suffolk", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Lydia-Marie-Edwards", + "https://electionstats.state.ma.us/candidates/view/Jeannamarie-Tamas" + ], + "result": { + "candidates": [ + { + "name": "Lydia Marie Edwards", + "votes": 41690, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Jeannamarie Tamas", + "votes": 17681, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 281, + "blankVotes": 7865, + "totalVotes": 67517 + } + }, + { + "id": 165396, + "year": 2024, + "office": "State Senate", + "districts": "Suffolk and Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/William-N-Brownsberger" + ], + "result": { + "candidates": [ + { + "name": "William N. Brownsberger", + "votes": 56815, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 685, + "blankVotes": 14509, + "totalVotes": 72009 + } + }, + { + "id": 165362, + "year": 2024, + "office": "State Senate", + "districts": "Worcester and Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/John-J-Cronin", + "https://electionstats.state.ma.us/candidates/view/Nicholas-A-Pirro-III" + ], + "result": { + "candidates": [ + { + "name": "John J. Cronin", + "votes": 50235, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Nicholas A. Pirro, III", + "votes": 34759, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 100, + "blankVotes": 4594, + "totalVotes": 89688 + } + }, + { + "id": 165400, + "year": 2024, + "office": "State Senate", + "districts": "1st Worcester", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Robyn-K-Kennedy" + ], + "result": { + "candidates": [ + { + "name": "Robyn K. Kennedy", + "votes": 49613, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 1531, + "blankVotes": 13654, + "totalVotes": 64798 + } + }, + { + "id": 165378, + "year": 2024, + "office": "State Senate", + "districts": "2nd Worcester", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Michael-O-Moore" + ], + "result": { + "candidates": [ + { + "name": "Michael O. Moore", + "votes": 59686, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 1052, + "blankVotes": 16563, + "totalVotes": 77301 + } + }, + { + "id": 160410, + "year": 2023, + "office": "State Senate", + "districts": "Worcester & Hampshire", + "party": "General", + "special": true, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Peter-J-Durant", + "https://electionstats.state.ma.us/candidates/view/Jonathan-D-Zlotnik" + ], + "result": { + "candidates": [ + { + "name": "Peter J. Durant", + "votes": 12646, + "writeIn": false, + "party": "Republican" + }, + { + "name": "Jonathan D. Zlotnik", + "votes": 10546, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 30, + "blankVotes": 90, + "totalVotes": 23312 + } + }, + { + "id": 154365, + "year": 2022, + "office": "State Senate", + "districts": "Berkshire, Hampden, Franklin & Hampshire", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Paul-W-Mark", + "https://electionstats.state.ma.us/candidates/view/Brendan-M-Phair" + ], + "result": { + "candidates": [ + { + "name": "Paul W. Mark", + "votes": 47989, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Brendan M. Phair", + "votes": 14806, + "writeIn": false + } + ], + "otherVotes": 139, + "blankVotes": 6306, + "totalVotes": 69240 + } + }, + { + "id": 154498, + "year": 2022, + "office": "State Senate", + "districts": "First Plymouth & Norfolk", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Patrick-Michael-OConnor", + "https://electionstats.state.ma.us/candidates/view/Robert-William-Stephens-Jr" + ], + "result": { + "candidates": [ + { + "name": "Patrick Michael O'Connor", + "votes": 48668, + "writeIn": false, + "party": "Republican" + }, + { + "name": "Robert William Stephens, Jr", + "votes": 31609, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 42, + "blankVotes": 2952, + "totalVotes": 83271 + } + }, + { + "id": 154431, + "year": 2022, + "office": "State Senate", + "districts": "Hampden, Hampshire & Worcester", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Jacob-R-Oliveira", + "https://electionstats.state.ma.us/candidates/view/William-E-Johnson" + ], + "result": { + "candidates": [ + { + "name": "Jacob R. Oliveira", + "votes": 37410, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "William E. Johnson", + "votes": 29027, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 31, + "blankVotes": 1681, + "totalVotes": 68149 + } + }, + { + "id": 154482, + "year": 2022, + "office": "State Senate", + "districts": "Norfolk & Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Cynthia-Stone-Creem" + ], + "result": { + "candidates": [ + { + "name": "Cynthia Stone Creem", + "votes": 55022, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 713, + "blankVotes": 15213, + "totalVotes": 70948 + } + }, + { + "id": 154473, + "year": 2022, + "office": "State Senate", + "districts": "Norfolk, Plymouth & Bristol", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Walter-F-Timilty-Jr", + "https://electionstats.state.ma.us/candidates/view/Brian-R-Muello" + ], + "result": { + "candidates": [ + { + "name": "Walter F. Timilty, Jr.", + "votes": 40311, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Brian R. Muello", + "votes": 20648, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 86, + "blankVotes": 2996, + "totalVotes": 64041 + } + }, + { + "id": 154433, + "year": 2022, + "office": "State Senate", + "districts": "Norfolk, Worcester & Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Rebecca-L-Rausch", + "https://electionstats.state.ma.us/candidates/view/Shawn-C-Dooley" + ], + "result": { + "candidates": [ + { + "name": "Rebecca L. Rausch", + "votes": 41893, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Shawn C. Dooley", + "votes": 34452, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 53, + "blankVotes": 1950, + "totalVotes": 78348 + } + }, + { + "id": 154419, + "year": 2022, + "office": "State Senate", + "districts": "Second Plymouth & Norfolk", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Michael-D-Brady", + "https://electionstats.state.ma.us/candidates/view/Jim-Gordon" + ], + "result": { + "candidates": [ + { + "name": "Michael D. Brady", + "votes": 29297, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Jim Gordon", + "votes": 16693, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 38, + "blankVotes": 1733, + "totalVotes": 47761 + } + }, + { + "id": 154436, + "year": 2022, + "office": "State Senate", + "districts": "Third Bristol & Plymouth", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Marc-R-Pacheco", + "https://electionstats.state.ma.us/candidates/view/Maria-S-Collins" + ], + "result": { + "candidates": [ + { + "name": "Marc R. Pacheco", + "votes": 35556, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Maria S. Collins", + "votes": 29937, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 32, + "blankVotes": 2105, + "totalVotes": 67630 + } + }, + { + "id": 154442, + "year": 2022, + "office": "State Senate", + "districts": "Worcester & Hampden", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Ryan-C-Fattman" + ], + "result": { + "candidates": [ + { + "name": "Ryan C. Fattman", + "votes": 53456, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 833, + "blankVotes": 17109, + "totalVotes": 71398 + } + }, + { + "id": 154427, + "year": 2022, + "office": "State Senate", + "districts": "Worcester & Hampshire", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Anne-M-Gobi", + "https://electionstats.state.ma.us/candidates/view/James-Anthony-Amorello" + ], + "result": { + "candidates": [ + { + "name": "Anne M. Gobi", + "votes": 35409, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "James Anthony Amorello", + "votes": 29734, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 15, + "blankVotes": 1580, + "totalVotes": 66738 + } + }, + { + "id": 154413, + "year": 2022, + "office": "State Senate", + "districts": "Bristol and Norfolk", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Paul-R-Feeney", + "https://electionstats.state.ma.us/candidates/view/Michael-Chaisson", + "https://electionstats.state.ma.us/candidates/view/Laura-L-Saylor" + ], + "result": { + "candidates": [ + { + "name": "Paul R. Feeney", + "votes": 40353, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Michael Chaisson", + "votes": 26221, + "writeIn": false, + "party": "Republican" + }, + { + "name": "Laura L. Saylor", + "votes": 2168, + "writeIn": false, + "party": "Workers Party" + } + ], + "otherVotes": 17, + "blankVotes": 2733, + "totalVotes": 71492 + } + }, + { + "id": 154517, + "year": 2022, + "office": "State Senate", + "districts": "1st Bristol and Plymouth", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Michael-J-Rodrigues", + "https://electionstats.state.ma.us/candidates/view/Russell-T-Protentis" + ], + "result": { + "candidates": [ + { + "name": "Michael J. Rodrigues", + "votes": 29420, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Russell T. Protentis", + "votes": 21600, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 34, + "blankVotes": 1920, + "totalVotes": 52974 + } + }, + { + "id": 154359, + "year": 2022, + "office": "State Senate", + "districts": "2nd Bristol and Plymouth", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Mark-C-Montigny" + ], + "result": { + "candidates": [ + { + "name": "Mark C. Montigny", + "votes": 35193, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 1018, + "blankVotes": 12524, + "totalVotes": 48735 + } + }, + { + "id": 154391, + "year": 2022, + "office": "State Senate", + "districts": "Cape and Islands", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Julian-Andre-Cyr", + "https://electionstats.state.ma.us/candidates/view/Christopher-Robert-Lauzon" + ], + "result": { + "candidates": [ + { + "name": "Julian Andre Cyr", + "votes": 54714, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Christopher Robert Lauzon", + "votes": 31176, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 32, + "blankVotes": 1722, + "totalVotes": 87644 + } + }, + { + "id": 154530, + "year": 2022, + "office": "State Senate", + "districts": "1st Essex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Pavel-M-Payano" + ], + "result": { + "candidates": [ + { + "name": "Pavel M. Payano", + "votes": 21591, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 1256, + "blankVotes": 8106, + "totalVotes": 30953 + } + }, + { + "id": 154440, + "year": 2022, + "office": "State Senate", + "districts": "2nd Essex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Joan-B-Lovely", + "https://electionstats.state.ma.us/candidates/view/Damian-M-Anketell" + ], + "result": { + "candidates": [ + { + "name": "Joan B. Lovely", + "votes": 44277, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Damian M. Anketell", + "votes": 21108, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 50, + "blankVotes": 2022, + "totalVotes": 67457 + } + }, + { + "id": 154548, + "year": 2022, + "office": "State Senate", + "districts": "3rd Essex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Brendan-P-Crighton", + "https://electionstats.state.ma.us/candidates/view/Annalisa-Salustri" + ], + "result": { + "candidates": [ + { + "name": "Brendan P. Crighton", + "votes": 34620, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Annalisa Salustri", + "votes": 13910, + "writeIn": false + } + ], + "otherVotes": 205, + "blankVotes": 7443, + "totalVotes": 56178 + } + }, + { + "id": 154471, + "year": 2022, + "office": "State Senate", + "districts": "1st Essex and Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Bruce-E-Tarr", + "https://electionstats.state.ma.us/candidates/view/Terence-William-Cudney" + ], + "result": { + "candidates": [ + { + "name": "Bruce E. Tarr", + "votes": 58838, + "writeIn": false, + "party": "Republican" + }, + { + "name": "Terence William Cudney", + "votes": 23408, + "writeIn": false + } + ], + "otherVotes": 171, + "blankVotes": 7075, + "totalVotes": 89492 + } + }, + { + "id": 154378, + "year": 2022, + "office": "State Senate", + "districts": "2nd Essex and Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Barry-R-Finegold", + "https://electionstats.state.ma.us/candidates/view/SalvatorE-Paul-Defranco" + ], + "result": { + "candidates": [ + { + "name": "Barry R. Finegold", + "votes": 42932, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "SalvatorE Paul Defranco", + "votes": 31926, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 42, + "blankVotes": 1727, + "totalVotes": 76627 + } + }, + { + "id": 154496, + "year": 2022, + "office": "State Senate", + "districts": "Hampden", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Adam-Gomez" + ], + "result": { + "candidates": [ + { + "name": "Adam Gomez", + "votes": 23665, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 845, + "blankVotes": 5790, + "totalVotes": 30300 + } + }, + { + "id": 154370, + "year": 2022, + "office": "State Senate", + "districts": "Hampden and Hampshire", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/John-C-Velis", + "https://electionstats.state.ma.us/candidates/view/Cecilia-P-Calabrese" + ], + "result": { + "candidates": [ + { + "name": "John C. Velis", + "votes": 37130, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Cecilia P. Calabrese", + "votes": 19388, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 77, + "blankVotes": 1244, + "totalVotes": 57839 + } + }, + { + "id": 154383, + "year": 2022, + "office": "State Senate", + "districts": "Hampshire, Franklin and Worcester", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Jo-Comerford" + ], + "result": { + "candidates": [ + { + "name": "Jo Comerford", + "votes": 51232, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 1280, + "blankVotes": 11039, + "totalVotes": 63551 + } + }, + { + "id": 154507, + "year": 2022, + "office": "State Senate", + "districts": "1st Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Edward-J-Kennedy" + ], + "result": { + "candidates": [ + { + "name": "Edward J. Kennedy, Jr", + "votes": 32003, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 847, + "blankVotes": 12782, + "totalVotes": 45632 + } + }, + { + "id": 154486, + "year": 2022, + "office": "State Senate", + "districts": "2nd Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Patricia-D-Jehlen" + ], + "result": { + "candidates": [ + { + "name": "Patricia D. Jehlen", + "votes": 53866, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 439, + "blankVotes": 12403, + "totalVotes": 66708 + } + }, + { + "id": 154429, + "year": 2022, + "office": "State Senate", + "districts": "3rd Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Michael-J-Barrett" + ], + "result": { + "candidates": [ + { + "name": "Michael J. Barrett", + "votes": 50728, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 672, + "blankVotes": 17403, + "totalVotes": 68803 + } + }, + { + "id": 154396, + "year": 2022, + "office": "State Senate", + "districts": "4th Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Cindy-F-Friedman" + ], + "result": { + "candidates": [ + { + "name": "Cindy F. Friedman", + "votes": 54112, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 1107, + "blankVotes": 21232, + "totalVotes": 76451 + } + }, + { + "id": 154553, + "year": 2022, + "office": "State Senate", + "districts": "5th Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Jason-M-Lewis", + "https://electionstats.state.ma.us/candidates/view/Edward-F-Dombroski-Jr" + ], + "result": { + "candidates": [ + { + "name": "Jason M. Lewis", + "votes": 42130, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Edward F. Dombroski, Jr", + "votes": 24104, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 63, + "blankVotes": 2625, + "totalVotes": 68922 + } + }, + { + "id": 154408, + "year": 2022, + "office": "State Senate", + "districts": "Middlesex and Norfolk", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Karen-E-Spilka" + ], + "result": { + "candidates": [ + { + "name": "Karen E. Spilka", + "votes": 52484, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 952, + "blankVotes": 14075, + "totalVotes": 67511 + } + }, + { + "id": 154350, + "year": 2022, + "office": "State Senate", + "districts": "Middlesex and Worcester", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/James-B-Eldridge", + "https://electionstats.state.ma.us/candidates/view/Anthony-Christakis" + ], + "result": { + "candidates": [ + { + "name": "James B. Eldridge", + "votes": 51574, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Anthony Christakis", + "votes": 21819, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 44, + "blankVotes": 2528, + "totalVotes": 75965 + } + }, + { + "id": 154464, + "year": 2022, + "office": "State Senate", + "districts": "Middlesex and Suffolk", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Sal-N-DiDomenico" + ], + "result": { + "candidates": [ + { + "name": "Sal N. DiDomenico", + "votes": 33355, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 395, + "blankVotes": 7831, + "totalVotes": 41581 + } + }, + { + "id": 154342, + "year": 2022, + "office": "State Senate", + "districts": "Norfolk and Plymouth", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/John-F-Keenan", + "https://electionstats.state.ma.us/candidates/view/Gary-M-Innes" + ], + "result": { + "candidates": [ + { + "name": "John F. Keenan", + "votes": 36063, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Gary M. Innes", + "votes": 20586, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 38, + "blankVotes": 2248, + "totalVotes": 58935 + } + }, + { + "id": 154465, + "year": 2022, + "office": "State Senate", + "districts": "Norfolk and Suffolk", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Michael-F-Rush" + ], + "result": { + "candidates": [ + { + "name": "Michael F. Rush", + "votes": 54915, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 1043, + "blankVotes": 19742, + "totalVotes": 75700 + } + }, + { + "id": 154470, + "year": 2022, + "office": "State Senate", + "districts": "Plymouth and Barnstable", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Susan-Lynn-Moran", + "https://electionstats.state.ma.us/candidates/view/Kari-Macrae" + ], + "result": { + "candidates": [ + { + "name": "Susan Lynn Moran", + "votes": 49686, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Kari Macrae", + "votes": 38493, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 39, + "blankVotes": 2832, + "totalVotes": 91050 + } + }, + { + "id": 154463, + "year": 2022, + "office": "State Senate", + "districts": "1st Suffolk", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Nicholas-P-Collins" + ], + "result": { + "candidates": [ + { + "name": "Nicholas P. Collins", + "votes": 41069, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 929, + "blankVotes": 10482, + "totalVotes": 52480 + } + }, + { + "id": 154466, + "year": 2022, + "office": "State Senate", + "districts": "2nd Suffolk", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Liz-Miranda" + ], + "result": { + "candidates": [ + { + "name": "Liz Miranda", + "votes": 35207, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 439, + "blankVotes": 5011, + "totalVotes": 40657 + } + }, + { + "id": 154467, + "year": 2022, + "office": "State Senate", + "districts": "3rd Suffolk", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Lydia-Marie-Edwards" + ], + "result": { + "candidates": [ + { + "name": "Lydia Marie Edwards", + "votes": 32396, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 1006, + "blankVotes": 11580, + "totalVotes": 44982 + } + }, + { + "id": 154434, + "year": 2022, + "office": "State Senate", + "districts": "Suffolk and Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/William-N-Brownsberger" + ], + "result": { + "candidates": [ + { + "name": "William N. Brownsberger", + "votes": 42713, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 437, + "blankVotes": 9782, + "totalVotes": 52932 + } + }, + { + "id": 145908, + "year": 2022, + "office": "State Senate", + "districts": "1st Suffolk and Middlesex", + "party": "General", + "special": true, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Lydia-Marie-Edwards" + ], + "result": { + "candidates": [ + { + "name": "Lydia Marie Edwards", + "votes": 1764, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 95, + "blankVotes": 34, + "totalVotes": 1893 + } + }, + { + "id": 154402, + "year": 2022, + "office": "State Senate", + "districts": "Worcester and Middlesex", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/John-J-Cronin", + "https://electionstats.state.ma.us/candidates/view/Kenneth-B-Hoyt" + ], + "result": { + "candidates": [ + { + "name": "John J. Cronin", + "votes": 36784, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Kenneth B. Hoyt", + "votes": 24238, + "writeIn": false, + "party": "Republican" + } + ], + "otherVotes": 35, + "blankVotes": 2232, + "totalVotes": 63289 + } + }, + { + "id": 154438, + "year": 2022, + "office": "State Senate", + "districts": "1st Worcester", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Robyn-K-Kennedy", + "https://electionstats.state.ma.us/candidates/view/Lisa-K-Mair" + ], + "result": { + "candidates": [ + { + "name": "Robyn K. Kennedy", + "votes": 30138, + "writeIn": false, + "party": "Democratic" + }, + { + "name": "Lisa K. Mair", + "votes": 10805, + "writeIn": false + } + ], + "otherVotes": 456, + "blankVotes": 3318, + "totalVotes": 44717 + } + }, + { + "id": 154415, + "year": 2022, + "office": "State Senate", + "districts": "2nd Worcester", + "party": "General", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Michael-O-Moore" + ], + "result": { + "candidates": [ + { + "name": "Michael O. Moore", + "votes": 40946, + "writeIn": false, + "party": "Democratic" + } + ], + "otherVotes": 793, + "blankVotes": 12641, + "totalVotes": 54380 + } + } +] \ No newline at end of file diff --git a/tests/fixtures/electionResults/2024_republican_primaries.html b/tests/fixtures/electionResults/2024_republican_primaries.html new file mode 100644 index 000000000..6e71668e2 --- /dev/null +++ b/tests/fixtures/electionResults/2024_republican_primaries.html @@ -0,0 +1,17208 @@ + + + + + + + + PD43+ » Search Elections + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+ + ๏ปฟ + + + + +
+ + +
+ + + + + + + + + + + + + + +
+ + + + +
+ + + + + +
+ + +
+
+ + + + + +
+ + +
+
+ + + + + +
 
+
+ + + +
 
+ + +
+
+ + + + + + +
+ + + + + +
+
+ +
+ + + + + + +
+
+
+
 
+
+
+ + + + + + + + +
+
+ + + +
+
+ SHARE THIS DATA: + + + + + + + + + +
+
+ + + + + +
+ + + + + +

To visualize the data, specify a state-wide office or a district.

+
+
+ +
+
+ + +
+
+ +
Please wait...
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
YearOfficeDistrictStageCandidates
2025State Representative3rd BristolSpecial Republican Primary +
+Lawrence Joseph Quintal won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2025State Representative6th EssexSpecial Republican Primary +
+Medley Long, III won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024PresidentStatewideRepublican Primary +
+Donald J. Trump won + (60%) against 6 opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee ManBerkshire, Hampden, Franklin & HampshireRepublican Primary +
+Nicholas A. Boldyga won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee ManFirst Plymouth & NorfolkRepublican Primary +
+David F. Decoste won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee ManHampden, Hampshire & WorcesterRepublican Primary +
+Sidney M. Starks won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee ManNorfolk & MiddlesexRepublican Primary +
+Tom Mountain won + (59%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee ManNorfolk, Plymouth & BristolRepublican Primary +
+Sean E. Powers won + (55%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee ManNorfolk, Worcester & MiddlesexRepublican Primary +
+Eric Calton won + (62%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee ManSecond Plymouth & NorfolkRepublican Primary +
+Geoff Diehl won + (77%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee ManThird Bristol & PlymouthRepublican Primary +
+Mark Edward Townsend won + (56%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee ManWorcester & HampdenRepublican Primary +
+Ryan Chamberland won + (59%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee ManWorcester & HampshireRepublican Primary +
+Michael Paul Fountain won + (66%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee ManBristol and NorfolkRepublican Primary +
+David B. Cannata won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee Man1st Bristol and PlymouthRepublican Primary +
+Gabriel Boomer Amaral won + (72%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee Man2nd Bristol and PlymouthRepublican Primary +
+Robert S. McConnell won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee ManCape and IslandsRepublican Primary +
+William L. Crocker, Jr. won + (59%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee Man1st EssexRepublican Primary +
+Paul C. Downing won + (77%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee Man2nd EssexRepublican Primary +
+John F. McCarthy, Jr. won + (56%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee Man3rd EssexRepublican Primary +
+Donald H. Wong won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee Man1st Essex and MiddlesexRepublican Primary +
+Michael J. Scarlata won + (34%) against 2 opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee Man2nd Essex and MiddlesexRepublican Primary +
+Shaun P. Toohey won + (51%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee ManHampdenRepublican Primary +
+Thomas S. Balcom, Jr won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee ManHampden and HampshireRepublican Primary +
+Nathan A. Bech won + (75%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee ManHampshire, Franklin and WorcesterRepublican Primary +
+Christopher J. Ryan won + (66%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee Man1st MiddlesexRepublican Primary +
+Brian K. Genest won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee Man2nd MiddlesexRepublican Primary +
+John Joseph Sousa won + (77%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee Man3rd MiddlesexRepublican Primary +
+James E. Dixon won + (95%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee Man4th MiddlesexRepublican Primary +
+Anthony M. Ventresca won + (63%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee Man5th MiddlesexRepublican Primary +
+Robert E. Aufiero won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee ManMiddlesex and NorfolkRepublican Primary +
+Nicholas Blaize Miceli won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee ManMiddlesex and WorcesterRepublican Primary +
+Dave H. Lunger won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee ManMiddlesex and SuffolkRepublican Primary +
+Todd B. Taylor won + (52%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee ManNorfolk and PlymouthRepublican Primary +
+Alexander S. Hagerty won + (54%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee ManNorfolk and SuffolkRepublican Primary +
+John T. Hasenjaeger won + (64%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee ManPlymouth and BarnstableRepublican Primary +
+James R. McMahon, III won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee Man1st SuffolkRepublican Primary +
+Timothy J. Smyth, Jr won + (49%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee Man2nd SuffolkRepublican Primary +
+Timothy McCarthy (Write-In) +ran against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee Man3rd SuffolkRepublican Primary +
+Paul J. Ronukaitus won + (59%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee ManSuffolk and MiddlesexRepublican Primary +
+Daniel Hickey won + (50%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee ManWorcester and MiddlesexRepublican Primary +
+Mark C. Bodanza won + (52%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee Man1st WorcesterRepublican Primary +
+Michael A. Vulcano won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee Man2nd WorcesterRepublican Primary +
+Paul K. Frost won + (61%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee WomanBerkshire, Hampden, Franklin & HampshireRepublican Primary +
+Jessica L. Boldyga won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee WomanFirst Plymouth & NorfolkRepublican Primary +
+Janet R. Fogarty won + (53%) against 2 opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee WomanHampden, Hampshire & WorcesterRepublican Primary +
+Virginia E. Neill won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee WomanNorfolk & MiddlesexRepublican Primary +
+Susan Huffman won + (55%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee WomanNorfolk, Plymouth & BristolRepublican Primary +
+Sandra M. Wright won + (54%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee WomanNorfolk, Worcester & MiddlesexRepublican Primary +
+Amanda Joan Peterson won + (53%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee WomanSecond Plymouth & NorfolkRepublican Primary +
+Kathyjo Boss won + (66%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee WomanThird Bristol & PlymouthRepublican Primary +
+Shaunna L. O'Connell won + (59%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee WomanWorcester & HampdenRepublican Primary +
+Elizabeth L. S. Groot won + (52%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee WomanWorcester & HampshireRepublican Primary +
+Stephanie R. Mulroy won + (61%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee WomanBristol and NorfolkRepublican Primary +
+Julie A. Hall won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee Woman1st Bristol and PlymouthRepublican Primary +
+Kayla Rose Churchill won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee Woman2nd Bristol and PlymouthRepublican Primary +
+Jo-Anne Mello Hodgson won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee WomanCape and IslandsRepublican Primary +
+Judith Anessa Crocker won + (56%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee Woman1st EssexRepublican Primary +
+Maura L. Ryan-Ciardiello won + (81%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee Woman2nd EssexRepublican Primary +
+Jaclyn Corriveau won + (51%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee Woman3rd EssexRepublican Primary +
+Amy Carnevale won + (63%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee Woman1st Essex and MiddlesexRepublican Primary +
+Lisa-Marie C. Cashman won + (49%) against 3 opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee Woman2nd Essex and MiddlesexRepublican Primary +
+Jeri Ann Levasseur won + (53%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee WomanHampdenRepublican Primary +
No Candidates
+
2024Party State Committee WomanHampden and HampshireRepublican Primary +
+Linda L. Vacon won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee WomanHampshire, Franklin and WorcesterRepublican Primary +
+Sue O'Sullivan won + (63%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee Woman1st MiddlesexRepublican Primary +
+Noreen E. Crowley won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee Woman2nd MiddlesexRepublican Primary +
+Patricia Brady Doherty won + (64%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee Woman3rd MiddlesexRepublican Primary +
+Doreen A. Deshler won + (50%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee Woman4th MiddlesexRepublican Primary +
+Helen Anne Hatch won + (65%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee Woman5th MiddlesexRepublican Primary +
+Monica C. Medeiros Solano won + (56%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee WomanMiddlesex and NorfolkRepublican Primary +
+Leanne J. Yarosz-Harris won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee WomanMiddlesex and WorcesterRepublican Primary +
+Caroline Stewart Cunningham won + (88%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee WomanMiddlesex and SuffolkRepublican Primary +
+Regina M. Taylor won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee WomanNorfolk and PlymouthRepublican Primary +
+Beth M. Veneto won + (58%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee WomanNorfolk and SuffolkRepublican Primary +
+Lynne Roberts won + (69%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee WomanPlymouth and BarnstableRepublican Primary +
+Jennifer A. Cunningham won + (57%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee Woman1st SuffolkRepublican Primary +
+Elizabeth H. Hinds-Ferrick won + (59%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee Woman2nd SuffolkRepublican Primary +
+Brittney Rocchina Ciccone (Write-In) +ran against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee Woman3rd SuffolkRepublican Primary +
+Vera E. Carducci won + (48%) against 2 opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee WomanSuffolk and MiddlesexRepublican Primary +
+Catherine A. Umina won + (55%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee WomanWorcester and MiddlesexRepublican Primary +
+Kathleen Lynch won + (59%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee Woman1st WorcesterRepublican Primary +
+Joanne E. Powell won + (50%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Party State Committee Woman2nd WorcesterRepublican Primary +
+Mindy J. McKenzie won + (64%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024U.S. SenateStatewideRepublican Primary +
+John Deaton won + (65%) against 2 opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024U.S. House1st CongressionalRepublican Primary +
No Candidates
+
2024U.S. House2nd CongressionalRepublican Primary +
No Candidates
+
2024U.S. House3rd CongressionalRepublican Primary +
No Candidates
+
2024U.S. House4th CongressionalRepublican Primary +
No Candidates
+
2024U.S. House5th CongressionalRepublican Primary +
No Candidates
+
2024U.S. House6th CongressionalRepublican Primary +
No Candidates
+
2024U.S. House7th CongressionalRepublican Primary +
No Candidates
+
2024U.S. House8th CongressionalRepublican Primary +
+Robert G. Burke won + (46%) against 2 opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024U.S. House9th CongressionalRepublican Primary +
+Dan Sullivan won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Governor's Council 1stRepublican Primary +
No Candidates
+
2024Governor's Council 2ndRepublican Primary +
+Francis T. Crimmins, Jr won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Governor's Council 3rdRepublican Primary +
No Candidates
+
2024Governor's Council 4thRepublican Primary +
No Candidates
+
2024Governor's Council 5thRepublican Primary +
+Anne M. Manning-Martin won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Governor's Council 6thRepublican Primary +
No Candidates
+
2024Governor's Council 7thRepublican Primary +
+Andrew J. Couture won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Governor's Council 8thRepublican Primary +
No Candidates
+
2024State SenateBerkshire, Hampden, Franklin & HampshireRepublican Primary +
+David A. Rosa won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State SenateFirst Plymouth & NorfolkRepublican Primary +
+Patrick A. O'Connor won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State SenateHampden, Hampshire & WorcesterRepublican Primary +
No Candidates
+
2024State SenateNorfolk & MiddlesexRepublican Primary +
No Candidates
+
2024State SenateNorfolk, Plymouth & BristolRepublican Primary +
+Steven David Fruzzetti (Write-In) +ran against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State SenateNorfolk, Worcester & MiddlesexRepublican Primary +
+Dashe M. Videira (Write-In) won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State SenateSecond Plymouth & NorfolkRepublican Primary +
No Candidates
+
2024State SenateThird Bristol & PlymouthRepublican Primary +
+Kelly A. Dooner won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State SenateWorcester & HampdenRepublican Primary +
+Ryan C. Fattman won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State SenateWorcester & HampshireRepublican Primary +
+Peter J. Durant won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State SenateBristol and NorfolkRepublican Primary +
No Candidates
+
2024State Senate1st Bristol and PlymouthRepublican Primary +
No Candidates
+
2024State Senate2nd Bristol and PlymouthRepublican Primary +
No Candidates
+
2024State SenateCape and IslandsRepublican Primary +
+Christopher Robert Lauzon won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Senate1st EssexRepublican Primary +
No Candidates
+
2024State Senate2nd EssexRepublican Primary +
+Damian Mitchell Anketell won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Senate3rd EssexRepublican Primary +
No Candidates
+
2024State Senate1st Essex and MiddlesexRepublican Primary +
+Bruce E. Tarr won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Senate2nd Essex and MiddlesexRepublican Primary +
No Candidates
+
2024State SenateHampdenRepublican Primary +
No Candidates
+
2024State SenateHampden and HampshireRepublican Primary +
No Candidates
+
2024State SenateHampshire, Franklin and WorcesterRepublican Primary +
No Candidates
+
2024State Senate1st MiddlesexRepublican Primary +
+Karla J. Miller won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Senate2nd MiddlesexRepublican Primary +
No Candidates
+
2024State Senate3rd MiddlesexRepublican Primary +
No Candidates
+
2024State Senate4th MiddlesexRepublican Primary +
No Candidates
+
2024State Senate5th MiddlesexRepublican Primary +
No Candidates
+
2024State SenateMiddlesex and NorfolkRepublican Primary +
No Candidates
+
2024State SenateMiddlesex and WorcesterRepublican Primary +
No Candidates
+
2024State SenateMiddlesex and SuffolkRepublican Primary +
No Candidates
+
2024State SenateNorfolk and PlymouthRepublican Primary +
No Candidates
+
2024State SenateNorfolk and SuffolkRepublican Primary +
No Candidates
+
2024State SenatePlymouth and BarnstableRepublican Primary +
+Mathew J. Muratore won + (50%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Senate1st SuffolkRepublican Primary +
No Candidates
+
2024State Senate2nd SuffolkRepublican Primary +
No Candidates
+
2024State Senate3rd SuffolkRepublican Primary +
+Jeannamarie Tamas won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State SenateSuffolk and MiddlesexRepublican Primary +
No Candidates
+
2024State SenateWorcester and MiddlesexRepublican Primary +
+Nicholas A. Pirro, III won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Senate1st WorcesterRepublican Primary +
No Candidates
+
2024State Senate2nd WorcesterRepublican Primary +
No Candidates
+
2024State Representative1st BarnstableRepublican Primary +
+Gerald Joseph O'Connell (Write-In) won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Representative2nd BarnstableRepublican Primary +
+Susanne H. Conley won + (97%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Representative3rd BarnstableRepublican Primary +
+David T. Vieira won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Representative4th BarnstableRepublican Primary +
No Candidates
+
2024State Representative5th BarnstableRepublican Primary +
+Steven G. Xiarhos won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State RepresentativeBarnstable, Dukes and NantucketRepublican Primary +
+Erich F. Horgan (Write-In) +ran against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Representative1st BerkshireRepublican Primary +
No Candidates
+
2024State Representative2nd BerkshireRepublican Primary +
No Candidates
+
2024State Representative3rd BerkshireRepublican Primary +
No Candidates
+
2024State Representative1st BristolRepublican Primary +
+Michael Chaisson won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Representative2nd BristolRepublican Primary +
No Candidates
+
2024State Representative3rd BristolRepublican Primary +
No Candidates
+
2024State Representative4th BristolRepublican Primary +
+Steven S. Howitt won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Representative5th BristolRepublican Primary +
+Justin Thurber won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Representative6th BristolRepublican Primary +
No Candidates
+
2024State Representative7th BristolRepublican Primary +
No Candidates
+
2024State Representative8th BristolRepublican Primary +
+Christopher Thrasher (Write-In) won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Representative9th BristolRepublican Primary +
No Candidates
+
2024State Representative10th BristolRepublican Primary +
+Joseph M. Pires won + (69%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Representative11th BristolRepublican Primary +
No Candidates
+
2024State Representative12th BristolRepublican Primary +
+Norman J. Orrall won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Representative13th BristolRepublican Primary +
No Candidates
+
2024State Representative14th BristolRepublican Primary +
+David Cannata, Jr won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Representative1st EssexRepublican Primary +
No Candidates
+
2024State Representative2nd EssexRepublican Primary +
+Mark T. Tashjian (Write-In) won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Representative3rd EssexRepublican Primary +
No Candidates
+
2024State Representative4th EssexRepublican Primary +
No Candidates
+
2024State Representative5th EssexRepublican Primary +
No Candidates
+
2024State Representative6th EssexRepublican Primary +
+Ty Vitale won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Representative7th EssexRepublican Primary +
No Candidates
+
2024State Representative8th EssexRepublican Primary +
No Candidates
+
2024State Representative9th EssexRepublican Primary +
+Donald H. Wong won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Representative10th EssexRepublican Primary +
No Candidates
+
2024State Representative11th EssexRepublican Primary +
No Candidates
+
2024State Representative12th EssexRepublican Primary +
No Candidates
+
2024State Representative13th EssexRepublican Primary +
No Candidates
+
2024State Representative14th EssexRepublican Primary +
No Candidates
+
2024State Representative15th EssexRepublican Primary +
No Candidates
+
2024State Representative16th EssexRepublican Primary +
No Candidates
+
2024State Representative17th EssexRepublican Primary +
No Candidates
+
2024State Representative18th EssexRepublican Primary +
No Candidates
+
2024State Representative1st FranklinRepublican Primary +
No Candidates
+
2024State Representative2nd FranklinRepublican Primary +
+Jeffrey L. Raymond won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Representative1st HampdenRepublican Primary +
+Todd M. Smola won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Representative2nd HampdenRepublican Primary +
No Candidates
+
2024State Representative3rd HampdenRepublican Primary +
+Nicholas A. Boldyga won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Representative4th HampdenRepublican Primary +
+Kelly W. Pease won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Representative5th HampdenRepublican Primary +
No Candidates
+
2024State Representative6th HampdenRepublican Primary +
No Candidates
+
2024State Representative7th HampdenRepublican Primary +
No Candidates
+
2024State Representative8th HampdenRepublican Primary +
No Candidates
+
2024State Representative9th HampdenRepublican Primary +
No Candidates
+
2024State Representative10th HampdenRepublican Primary +
No Candidates
+
2024State Representative11th HampdenRepublican Primary +
No Candidates
+
2024State Representative12th HampdenRepublican Primary +
No Candidates
+
2024State Representative1st HampshireRepublican Primary +
No Candidates
+
2024State Representative2nd HampshireRepublican Primary +
No Candidates
+
2024State Representative3rd HampshireRepublican Primary +
No Candidates
+
2024State Representative1st MiddlesexRepublican Primary +
+Lynne E. Archambault won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Representative2nd MiddlesexRepublican Primary +
No Candidates
+
2024State Representative3rd MiddlesexRepublican Primary +
No Candidates
+
2024State Representative4th MiddlesexRepublican Primary +
No Candidates
+
2024State Representative5th MiddlesexRepublican Primary +
No Candidates
+
2024State Representative6th MiddlesexRepublican Primary +
No Candidates
+
2024State Representative7th MiddlesexRepublican Primary +
No Candidates
+
2024State Representative8th MiddlesexRepublican Primary +
No Candidates
+
2024State Representative9th MiddlesexRepublican Primary +
+Carly Marie Downs won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Representative10th MiddlesexRepublican Primary +
No Candidates
+
2024State Representative11th MiddlesexRepublican Primary +
+Vladislav S. Yanovsky won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Representative12th MiddlesexRepublican Primary +
No Candidates
+
2024State Representative13th MiddlesexRepublican Primary +
+Virginia A Gardner (Write-In) won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Representative14th MiddlesexRepublican Primary +
+Doreen Ann Deshler (Write-In) +ran against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Representative15th MiddlesexRepublican Primary +
No Candidates
+
2024State Representative16th MiddlesexRepublican Primary +
No Candidates
+
2024State Representative17th MiddlesexRepublican Primary +
No Candidates
+
2024State Representative18th MiddlesexRepublican Primary +
No Candidates
+
2024State Representative19th MiddlesexRepublican Primary +
+Paul Sarnowski won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Representative20th MiddlesexRepublican Primary +
+Bradley H. Jones, Jr won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Representative21st MiddlesexRepublican Primary +
No Candidates
+
2024State Representative22nd MiddlesexRepublican Primary +
+Marc T. Lombardo won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Representative23rd MiddlesexRepublican Primary +
No Candidates
+
2024State Representative24th MiddlesexRepublican Primary +
No Candidates
+
2024State Representative25th MiddlesexRepublican Primary +
No Candidates
+
2024State Representative26th MiddlesexRepublican Primary +
No Candidates
+
2024State Representative27th MiddlesexRepublican Primary +
No Candidates
+
2024State Representative28th MiddlesexRepublican Primary +
No Candidates
+
2024State Representative29th MiddlesexRepublican Primary +
No Candidates
+
2024State Representative30th MiddlesexRepublican Primary +
No Candidates
+
2024State Representative31st MiddlesexRepublican Primary +
No Candidates
+
2024State Representative32nd MiddlesexRepublican Primary +
No Candidates
+
2024State Representative33rd MiddlesexRepublican Primary +
No Candidates
+
2024State Representative34th MiddlesexRepublican Primary +
No Candidates
+
2024State Representative35th MiddlesexRepublican Primary +
No Candidates
+
2024State Representative36th MiddlesexRepublican Primary +
No Candidates
+
2024State Representative37th MiddlesexRepublican Primary +
+Gary J. Grossi (Write-In) +ran against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Representative1st NorfolkRepublican Primary +
No Candidates
+
2024State Representative2nd NorfolkRepublican Primary +
+Sharon Marie Cintolo won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Representative3rd NorfolkRepublican Primary +
No Candidates
+
2024State Representative4th NorfolkRepublican Primary +
No Candidates
+
2024State Representative5th NorfolkRepublican Primary +
No Candidates
+
2024State Representative6th NorfolkRepublican Primary +
No Candidates
+
2024State Representative7th NorfolkRepublican Primary +
No Candidates
+
2024State Representative8th NorfolkRepublican Primary +
No Candidates
+
2024State Representative9th NorfolkRepublican Primary +
+Marcus S. Vaughn won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Representative10th NorfolkRepublican Primary +
+Charles F. Bailey, III won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Representative11th NorfolkRepublican Primary +
No Candidates
+
2024State Representative12th NorfolkRepublican Primary +
No Candidates
+
2024State Representative13th NorfolkRepublican Primary +
No Candidates
+
2024State Representative14th NorfolkRepublican Primary +
No Candidates
+
2024State Representative15th NorfolkRepublican Primary +
No Candidates
+
2024State Representative1st PlymouthRepublican Primary +
+Jesse G. Brown won + (52%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Representative2nd PlymouthRepublican Primary +
+John Robert Gaskey won + (59%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Representative3rd PlymouthRepublican Primary +
No Candidates
+
2024State Representative4th PlymouthRepublican Primary +
No Candidates
+
2024State Representative5th PlymouthRepublican Primary +
+David F. Decoste won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Representative6th PlymouthRepublican Primary +
+Kenneth Peter Sweezey won + (52%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Representative7th PlymouthRepublican Primary +
+Alyson M. Sullivan-Almeida won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Representative8th PlymouthRepublican Primary +
+Sandra M. Wright won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Representative9th PlymouthRepublican Primary +
+Lawrence Peter Novak won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Representative10th PlymouthRepublican Primary +
No Candidates
+
2024State Representative11th PlymouthRepublican Primary +
No Candidates
+
2024State Representative12th PlymouthRepublican Primary +
+Eric J. Meschino won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Representative1st SuffolkRepublican Primary +
No Candidates
+
2024State Representative2nd SuffolkRepublican Primary +
No Candidates
+
2024State Representative3rd SuffolkRepublican Primary +
No Candidates
+
2024State Representative4th SuffolkRepublican Primary +
No Candidates
+
2024State Representative5th SuffolkRepublican Primary +
No Candidates
+
2024State Representative6th SuffolkRepublican Primary +
No Candidates
+
2024State Representative7th SuffolkRepublican Primary +
No Candidates
+
2024State Representative8th SuffolkRepublican Primary +
No Candidates
+
2024State Representative9th SuffolkRepublican Primary +
+Roy A. Owens won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Representative10th SuffolkRepublican Primary +
No Candidates
+
2024State Representative11th SuffolkRepublican Primary +
No Candidates
+
2024State Representative12th SuffolkRepublican Primary +
No Candidates
+
2024State Representative13th SuffolkRepublican Primary +
No Candidates
+
2024State Representative14th SuffolkRepublican Primary +
No Candidates
+
2024State Representative15th SuffolkRepublican Primary +
No Candidates
+
2024State Representative16th SuffolkRepublican Primary +
No Candidates
+
2024State Representative17th SuffolkRepublican Primary +
No Candidates
+
2024State Representative18th SuffolkRepublican Primary +
No Candidates
+
2024State Representative19th SuffolkRepublican Primary +
No Candidates
+
2024State Representative1st WorcesterRepublican Primary +
+Kimberly N. Ferguson won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Representative2nd WorcesterRepublican Primary +
+Bruce K. Chester won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Representative3rd WorcesterRepublican Primary +
No Candidates
+
2024State Representative4th WorcesterRepublican Primary +
+Salvatore Perla won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Representative5th WorcesterRepublican Primary +
+Donald R. Berthiaume, Jr won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Representative6th WorcesterSpecial Republican Primary +
+John J. Marsi, Jr won + (53%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Representative6th WorcesterRepublican Primary +
+John J. Marsi, Jr won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Representative7th WorcesterRepublican Primary +
+Paul K. Frost won + (82%) against 1 opponent. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Representative8th WorcesterRepublican Primary +
+Michael J. Soter won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Representative9th WorcesterRepublican Primary +
+David Kent Muradian, Jr won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Representative10th WorcesterRepublican Primary +
No Candidates
+
2024State Representative11th WorcesterRepublican Primary +
+Hannah E. Kane won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Representative12th WorcesterRepublican Primary +
No Candidates
+
2024State Representative13th WorcesterRepublican Primary +
No Candidates
+
2024State Representative14th WorcesterRepublican Primary +
No Candidates
+
2024State Representative15th WorcesterRepublican Primary +
No Candidates
+
2024State Representative16th WorcesterRepublican Primary +
No Candidates
+
2024State Representative17th WorcesterRepublican Primary +
No Candidates
+
2024State Representative18th WorcesterRepublican Primary +
+Joseph D. Mckenna won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024State Representative19th WorcesterRepublican Primary +
No Candidates
+
2024Clerk of CourtsBarnstable CountyRepublican Primary +
No Candidates
+
2024Clerk of CourtsBerkshire CountyRepublican Primary +
No Candidates
+
2024Clerk of CourtsBristol CountyRepublican Primary +
No Candidates
+
2024Clerk of CourtsDukes CountyRepublican Primary +
No Candidates
+
2024Clerk of CourtsEssex CountyRepublican Primary +
No Candidates
+
2024Clerk of CourtsFranklin CountyRepublican Primary +
No Candidates
+
2024Clerk of CourtsHampden CountyRepublican Primary +
No Candidates
+
2024Clerk of CourtsHampshire CountyRepublican Primary +
No Candidates
+
2024Clerk of CourtsMiddlesex CountyRepublican Primary +
No Candidates
+
2024Clerk of CourtsNantucket CountyRepublican Primary +
No Candidates
+
2024Clerk of CourtsNorfolk CountyRepublican Primary +
No Candidates
+
2024Clerk of CourtsPlymouth CountyRepublican Primary +
No Candidates
+
2024Clerk of CourtsWorcester CountyRepublican Primary +
No Candidates
+
2024Clerk of Superior Court (Civil)Suffolk CountyRepublican Primary +
No Candidates
+
2024Clerk of Superior Court (Criminal)Suffolk CountyRepublican Primary +
No Candidates
+
2024Clerk of Supreme Judicial CourtSuffolk CountyRepublican Primary +
No Candidates
+
2024Register of DeedsBarnstableRepublican Primary +
+John F. Meade won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Register of DeedsBerkshire MiddleRepublican Primary +
No Candidates
+
2024Register of DeedsBerkshire NorthernRepublican Primary +
No Candidates
+
2024Register of DeedsBerkshire SouthernRepublican Primary +
No Candidates
+
2024Register of DeedsBristol NorthernRepublican Primary +
No Candidates
+
2024Register of DeedsBristol SouthernRepublican Primary +
No Candidates
+
2024Register of DeedsDukesRepublican Primary +
No Candidates
+
2024Register of DeedsEssex NorthernRepublican Primary +
No Candidates
+
2024Register of DeedsEssex SouthernRepublican Primary +
+Jonathan Edward Ring won + against no opponents. + Candidates » +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
2024Register of DeedsFall RiverRepublican Primary +
No Candidates
+
2024Register of DeedsFranklinRepublican Primary +
No Candidates
+
2024Register of DeedsHampdenRepublican Primary +
No Candidates
+
2024Register of DeedsHampshireRepublican Primary +
No Candidates
+
2024Register of DeedsMiddlesex NorthernRepublican Primary +
No Candidates
+
2024Register of DeedsMiddlesex SouthernRepublican Primary +
No Candidates
+
2024Register of DeedsNantucketRepublican Primary +
No Candidates
+
2024Register of DeedsNorfolkRepublican Primary +
No Candidates
+
2024Register of DeedsPlymouthRepublican Primary +
No Candidates
+
2024Register of DeedsSuffolkRepublican Primary +
No Candidates
+
2024Register of DeedsWorcesterRepublican Primary +
No Candidates
+
2024Register of DeedsWorcester NorthernRepublican Primary +
No Candidates
+
2024Register of ProbateHampshire CountyRepublican Primary +
No Candidates
+
2024Register of ProbateSuffolk CountyRepublican Primary +
No Candidates
+
+
+
+ +
 
+ +
+ + + + + + + +
+ + + + + + + + + + + +
+
+
+๏ปฟ +
+ +
+ +
+
+
+ + + + + + + + + + + + + diff --git a/tests/fixtures/electionResults/2024_republican_primaries.json b/tests/fixtures/electionResults/2024_republican_primaries.json new file mode 100644 index 000000000..68c16dfe8 --- /dev/null +++ b/tests/fixtures/electionResults/2024_republican_primaries.json @@ -0,0 +1,5716 @@ +[ + { + "id": 171341, + "year": 2025, + "office": "State Representative", + "districts": "3rd Bristol", + "party": "Republican", + "special": true, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Lawrence-Joseph-Quintal" + ], + "result": { + "candidates": [ + { + "name": "Lawrence Joseph Quintal", + "votes": 270, + "writeIn": false + } + ], + "otherVotes": 4, + "blankVotes": 2, + "totalVotes": 276 + } + }, + { + "id": 170372, + "year": 2025, + "office": "State Representative", + "districts": "6th Essex", + "party": "Republican", + "special": true, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Medley-Long-III" + ], + "result": { + "candidates": [ + { + "name": "Medley Long, III", + "votes": 244, + "writeIn": false + } + ], + "otherVotes": 0, + "blankVotes": 36, + "totalVotes": 280 + } + }, + { + "id": 160659, + "year": 2024, + "office": "President", + "districts": "Statewide", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Donald-J-Trump", + "https://electionstats.state.ma.us/candidates/view/Nikki-Haley", + "https://electionstats.state.ma.us/candidates/view/Chris-Christie", + "https://electionstats.state.ma.us/candidates/view/Ron-Desantis", + "https://electionstats.state.ma.us/candidates/view/Vivek-Ramaswamy", + "https://electionstats.state.ma.us/candidates/view/Ryan-Binkley", + "https://electionstats.state.ma.us/candidates/view/Asa-Hutchinson" + ], + "result": { + "candidates": [ + { + "name": "Donald J. Trump", + "votes": 343189, + "writeIn": false + }, + { + "name": "Nikki Haley", + "votes": 211440, + "writeIn": false + }, + { + "name": "Chris Christie", + "votes": 5217, + "writeIn": false + }, + { + "name": "Ron Desantis", + "votes": 3981, + "writeIn": false + }, + { + "name": "Vivek Ramaswamy", + "votes": 1738, + "writeIn": false + }, + { + "name": "Ryan Binkley", + "votes": 619, + "writeIn": false + }, + { + "name": "Asa Hutchinson", + "votes": 527, + "writeIn": false + } + ], + "otherVotes": 1674, + "blankVotes": 2148, + "totalVotes": 576250, + "noPreferenceVotes": 5717 + } + }, + { + "id": 160680, + "year": 2024, + "office": "Party State Committee Man", + "districts": "Berkshire, Hampden, Franklin & Hampshire", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Nicholas-A-Boldyga" + ], + "result": { + "candidates": [ + { + "name": "Nicholas A. Boldyga", + "votes": 7066, + "writeIn": false + } + ], + "otherVotes": 76, + "blankVotes": 4394, + "totalVotes": 11536 + } + }, + { + "id": 160866, + "year": 2024, + "office": "Party State Committee Man", + "districts": "First Plymouth & Norfolk", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/David-F-Decoste" + ], + "result": { + "candidates": [ + { + "name": "David F. Decoste", + "votes": 15546, + "writeIn": false + } + ], + "otherVotes": 145, + "blankVotes": 7488, + "totalVotes": 23179 + } + }, + { + "id": 160758, + "year": 2024, + "office": "Party State Committee Man", + "districts": "Hampden, Hampshire & Worcester", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Sidney-M-Starks" + ], + "result": { + "candidates": [ + { + "name": "Sidney M. Starks", + "votes": 9583, + "writeIn": false + } + ], + "otherVotes": 131, + "blankVotes": 6430, + "totalVotes": 16144 + } + }, + { + "id": 160848, + "year": 2024, + "office": "Party State Committee Man", + "districts": "Norfolk & Middlesex", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Tom-Mountain", + "https://electionstats.state.ma.us/candidates/view/Vladislav-S-Yanovsky" + ], + "result": { + "candidates": [ + { + "name": "Tom Mountain", + "votes": 4203, + "writeIn": false + }, + { + "name": "Vladislav S. Yanovsky", + "votes": 2876, + "writeIn": false + } + ], + "otherVotes": 92, + "blankVotes": 3829, + "totalVotes": 11000 + } + }, + { + "id": 160842, + "year": 2024, + "office": "Party State Committee Man", + "districts": "Norfolk, Plymouth & Bristol", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Sean-E-Powers", + "https://electionstats.state.ma.us/candidates/view/Steven-D-Fruzzetti" + ], + "result": { + "candidates": [ + { + "name": "Sean E. Powers", + "votes": 7062, + "writeIn": false + }, + { + "name": "Steven D. Fruzzetti", + "votes": 5838, + "writeIn": false + } + ], + "otherVotes": 47, + "blankVotes": 3221, + "totalVotes": 16168 + } + }, + { + "id": 160764, + "year": 2024, + "office": "Party State Committee Man", + "districts": "Norfolk, Worcester & Middlesex", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Eric-Calton", + "https://electionstats.state.ma.us/candidates/view/Andrew-E-Johanson" + ], + "result": { + "candidates": [ + { + "name": "Eric Calton", + "votes": 10216, + "writeIn": false + }, + { + "name": "Andrew E. Johanson", + "votes": 6096, + "writeIn": false + } + ], + "otherVotes": 98, + "blankVotes": 4900, + "totalVotes": 21310 + } + }, + { + "id": 160740, + "year": 2024, + "office": "Party State Committee Man", + "districts": "Second Plymouth & Norfolk", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Geoff-Diehl", + "https://electionstats.state.ma.us/candidates/view/Lawrence-Peter-Novak" + ], + "result": { + "candidates": [ + { + "name": "Geoff Diehl", + "votes": 7751, + "writeIn": false + }, + { + "name": "Lawrence Peter Novak", + "votes": 2308, + "writeIn": false + } + ], + "otherVotes": 18, + "blankVotes": 1144, + "totalVotes": 11221 + } + }, + { + "id": 160776, + "year": 2024, + "office": "Party State Committee Man", + "districts": "Third Bristol & Plymouth", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Mark-Edward-Townsend", + "https://electionstats.state.ma.us/candidates/view/Mark-R-Swan" + ], + "result": { + "candidates": [ + { + "name": "Mark Edward Townsend", + "votes": 8967, + "writeIn": false + }, + { + "name": "Mark R. Swan", + "votes": 6936, + "writeIn": false + } + ], + "otherVotes": 53, + "blankVotes": 4041, + "totalVotes": 19997 + } + }, + { + "id": 160794, + "year": 2024, + "office": "Party State Committee Man", + "districts": "Worcester & Hampden", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Ryan-Chamberland", + "https://electionstats.state.ma.us/candidates/view/Michael-W-Young" + ], + "result": { + "candidates": [ + { + "name": "Ryan Chamberland", + "votes": 10745, + "writeIn": false + }, + { + "name": "Michael W. Young", + "votes": 7346, + "writeIn": false + } + ], + "otherVotes": 47, + "blankVotes": 3411, + "totalVotes": 21549 + } + }, + { + "id": 160746, + "year": 2024, + "office": "Party State Committee Man", + "districts": "Worcester & Hampshire", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Michael-Paul-Fountain", + "https://electionstats.state.ma.us/candidates/view/Jesse-Michael-Barnaby" + ], + "result": { + "candidates": [ + { + "name": "Michael Paul Fountain", + "votes": 10099, + "writeIn": false + }, + { + "name": "Jesse Michael Barnaby", + "votes": 5218, + "writeIn": false + } + ], + "otherVotes": 93, + "blankVotes": 5301, + "totalVotes": 20711 + } + }, + { + "id": 160728, + "year": 2024, + "office": "Party State Committee Man", + "districts": "Bristol and Norfolk", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/David-B-Cannata" + ], + "result": { + "candidates": [ + { + "name": "David B. Cannata", + "votes": 10796, + "writeIn": false + } + ], + "otherVotes": 329, + "blankVotes": 6451, + "totalVotes": 17576 + } + }, + { + "id": 160878, + "year": 2024, + "office": "Party State Committee Man", + "districts": "1st Bristol and Plymouth", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Gabriel-Boomer-Amaral", + "https://electionstats.state.ma.us/candidates/view/Angel-Luis-Pantoja-Jr" + ], + "result": { + "candidates": [ + { + "name": "Gabriel Boomer Amaral", + "votes": 7275, + "writeIn": false + }, + { + "name": "Angel Luis Pantoja, Jr", + "votes": 2742, + "writeIn": false + } + ], + "otherVotes": 53, + "blankVotes": 3596, + "totalVotes": 13666 + } + }, + { + "id": 160674, + "year": 2024, + "office": "Party State Committee Man", + "districts": "2nd Bristol and Plymouth", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Robert-S-McConnell" + ], + "result": { + "candidates": [ + { + "name": "Robert S. McConnell", + "votes": 7207, + "writeIn": false + } + ], + "otherVotes": 106, + "blankVotes": 4152, + "totalVotes": 11465 + } + }, + { + "id": 160704, + "year": 2024, + "office": "Party State Committee Man", + "districts": "Cape and Islands", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/William-L-Crocker-Jr", + "https://electionstats.state.ma.us/candidates/view/Michael-Arnold" + ], + "result": { + "candidates": [ + { + "name": "William L. Crocker, Jr.", + "votes": 10960, + "writeIn": false + }, + { + "name": "Michael Arnold", + "votes": 7450, + "writeIn": false + } + ], + "otherVotes": 122, + "blankVotes": 3674, + "totalVotes": 22206 + } + }, + { + "id": 160884, + "year": 2024, + "office": "Party State Committee Man", + "districts": "1st Essex", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Paul-C-Downing", + "https://electionstats.state.ma.us/candidates/view/Charles-Hayward-Stearns" + ], + "result": { + "candidates": [ + { + "name": "Paul C. Downing", + "votes": 4032, + "writeIn": false + }, + { + "name": "Charles Hayward Stearns", + "votes": 1152, + "writeIn": false + } + ], + "otherVotes": 20, + "blankVotes": 1407, + "totalVotes": 6611 + } + }, + { + "id": 160788, + "year": 2024, + "office": "Party State Committee Man", + "districts": "2nd Essex", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/John-F-McCarthy-Jr", + "https://electionstats.state.ma.us/candidates/view/Bob-May" + ], + "result": { + "candidates": [ + { + "name": "John F. McCarthy, Jr.", + "votes": 7776, + "writeIn": false + }, + { + "name": "Bob May", + "votes": 6126, + "writeIn": false + } + ], + "otherVotes": 47, + "blankVotes": 3107, + "totalVotes": 17056 + } + }, + { + "id": 160890, + "year": 2024, + "office": "Party State Committee Man", + "districts": "3rd Essex", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Donald-H-Wong" + ], + "result": { + "candidates": [ + { + "name": "Donald H. Wong", + "votes": 8967, + "writeIn": false + } + ], + "otherVotes": 91, + "blankVotes": 4247, + "totalVotes": 13305 + } + }, + { + "id": 160836, + "year": 2024, + "office": "Party State Committee Man", + "districts": "1st Essex and Middlesex", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Michael-J-Scarlata", + "https://electionstats.state.ma.us/candidates/view/Clayton-R-Sova", + "https://electionstats.state.ma.us/candidates/view/Jeffrey-R-Yull" + ], + "result": { + "candidates": [ + { + "name": "Michael J. Scarlata", + "votes": 6409, + "writeIn": false + }, + { + "name": "Clayton R. Sova", + "votes": 6383, + "writeIn": false + }, + { + "name": "Jeffrey R. Yull", + "votes": 5747, + "writeIn": false + } + ], + "otherVotes": 137, + "blankVotes": 6520, + "totalVotes": 25196 + } + }, + { + "id": 160692, + "year": 2024, + "office": "Party State Committee Man", + "districts": "2nd Essex and Middlesex", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Shaun-P-Toohey", + "https://electionstats.state.ma.us/candidates/view/Joseph-G-Finn" + ], + "result": { + "candidates": [ + { + "name": "Shaun P. Toohey", + "votes": 9237, + "writeIn": false + }, + { + "name": "Joseph G. Finn", + "votes": 8838, + "writeIn": false + } + ], + "otherVotes": 78, + "blankVotes": 4003, + "totalVotes": 22156 + } + }, + { + "id": 160860, + "year": 2024, + "office": "Party State Committee Man", + "districts": "Hampden", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Thomas-S-Balcom-Jr" + ], + "result": { + "candidates": [ + { + "name": "Thomas S. Balcom, Jr", + "votes": 2278, + "writeIn": false + } + ], + "otherVotes": 68, + "blankVotes": 1782, + "totalVotes": 4128 + } + }, + { + "id": 160686, + "year": 2024, + "office": "Party State Committee Man", + "districts": "Hampden and Hampshire", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Nathan-A-Bech", + "https://electionstats.state.ma.us/candidates/view/Richard-A-Berrena" + ], + "result": { + "candidates": [ + { + "name": "Nathan A. Bech", + "votes": 7696, + "writeIn": false + }, + { + "name": "Richard A. Berrena", + "votes": 2514, + "writeIn": false + } + ], + "otherVotes": 95, + "blankVotes": 2698, + "totalVotes": 13003 + } + }, + { + "id": 160698, + "year": 2024, + "office": "Party State Committee Man", + "districts": "Hampshire, Franklin and Worcester", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Christopher-J-Ryan", + "https://electionstats.state.ma.us/candidates/view/Jay-Scott-Fleitman" + ], + "result": { + "candidates": [ + { + "name": "Christopher J. Ryan", + "votes": 5499, + "writeIn": false + }, + { + "name": "Jay Scott Fleitman", + "votes": 2777, + "writeIn": false + } + ], + "otherVotes": 71, + "blankVotes": 2278, + "totalVotes": 10625 + } + }, + { + "id": 160872, + "year": 2024, + "office": "Party State Committee Man", + "districts": "1st Middlesex", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Brian-K-Genest" + ], + "result": { + "candidates": [ + { + "name": "Brian K. Genest", + "votes": 8044, + "writeIn": false + } + ], + "otherVotes": 95, + "blankVotes": 4118, + "totalVotes": 12257 + } + }, + { + "id": 160854, + "year": 2024, + "office": "Party State Committee Man", + "districts": "2nd Middlesex", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/John-Joseph-Sousa", + "https://electionstats.state.ma.us/candidates/view/Mark-Alan-Steffen" + ], + "result": { + "candidates": [ + { + "name": "John Joseph Sousa", + "votes": 4184, + "writeIn": false + }, + { + "name": "Mark Alan Steffen", + "votes": 1132, + "writeIn": false + } + ], + "otherVotes": 113, + "blankVotes": 2783, + "totalVotes": 8212 + } + }, + { + "id": 160752, + "year": 2024, + "office": "Party State Committee Man", + "districts": "3rd Middlesex", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/James-E-Dixon", + "https://electionstats.state.ma.us/candidates/view/Justin-David-Cusano" + ], + "result": { + "candidates": [ + { + "name": "James E. Dixon", + "votes": 8777, + "writeIn": false + }, + { + "name": "Justin David Cusano", + "votes": 252, + "writeIn": true + } + ], + "otherVotes": 211, + "blankVotes": 6054, + "totalVotes": 15294 + } + }, + { + "id": 160710, + "year": 2024, + "office": "Party State Committee Man", + "districts": "4th Middlesex", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Anthony-M-Ventresca", + "https://electionstats.state.ma.us/candidates/view/Jeffrey-M-Semon" + ], + "result": { + "candidates": [ + { + "name": "Anthony M. Ventresca", + "votes": 8473, + "writeIn": false + }, + { + "name": "Jeffrey M. Semon", + "votes": 5009, + "writeIn": false + } + ], + "otherVotes": 70, + "blankVotes": 4198, + "totalVotes": 17750 + } + }, + { + "id": 160896, + "year": 2024, + "office": "Party State Committee Man", + "districts": "5th Middlesex", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Robert-E-Aufiero" + ], + "result": { + "candidates": [ + { + "name": "Robert E. Aufiero", + "votes": 8725, + "writeIn": false + } + ], + "otherVotes": 113, + "blankVotes": 7097, + "totalVotes": 15935 + } + }, + { + "id": 160722, + "year": 2024, + "office": "Party State Committee Man", + "districts": "Middlesex and Norfolk", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Nicholas-Blaize-Miceli" + ], + "result": { + "candidates": [ + { + "name": "Nicholas Blaize Miceli", + "votes": 8087, + "writeIn": false + } + ], + "otherVotes": 272, + "blankVotes": 5393, + "totalVotes": 13752 + } + }, + { + "id": 160668, + "year": 2024, + "office": "Party State Committee Man", + "districts": "Middlesex and Worcester", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Dave-H-Lunger" + ], + "result": { + "candidates": [ + { + "name": "Dave H. Lunger", + "votes": 9972, + "writeIn": false + } + ], + "otherVotes": 125, + "blankVotes": 7197, + "totalVotes": 17294 + } + }, + { + "id": 160803, + "year": 2024, + "office": "Party State Committee Man", + "districts": "Middlesex and Suffolk", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Todd-B-Taylor", + "https://electionstats.state.ma.us/candidates/view/John-David-Olds" + ], + "result": { + "candidates": [ + { + "name": "Todd B. Taylor", + "votes": 1728, + "writeIn": false + }, + { + "name": "John David Olds", + "votes": 1561, + "writeIn": false + } + ], + "otherVotes": 23, + "blankVotes": 1302, + "totalVotes": 4614 + } + }, + { + "id": 160662, + "year": 2024, + "office": "Party State Committee Man", + "districts": "Norfolk and Plymouth", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Alexander-S-Hagerty", + "https://electionstats.state.ma.us/candidates/view/Gary-Malcolm-Innes" + ], + "result": { + "candidates": [ + { + "name": "Alexander S. Hagerty", + "votes": 6702, + "writeIn": false + }, + { + "name": "Gary Malcolm Innes", + "votes": 5528, + "writeIn": false + } + ], + "otherVotes": 95, + "blankVotes": 2885, + "totalVotes": 15210 + } + }, + { + "id": 160806, + "year": 2024, + "office": "Party State Committee Man", + "districts": "Norfolk and Suffolk", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/John-T-Hasenjaeger", + "https://electionstats.state.ma.us/candidates/view/Thomas-Lee-Ricketts" + ], + "result": { + "candidates": [ + { + "name": "John T. Hasenjaeger", + "votes": 7570, + "writeIn": false + }, + { + "name": "Thomas Lee Ricketts", + "votes": 4100, + "writeIn": false + } + ], + "otherVotes": 91, + "blankVotes": 4348, + "totalVotes": 16109 + } + }, + { + "id": 160830, + "year": 2024, + "office": "Party State Committee Man", + "districts": "Plymouth and Barnstable", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/James-R-McMahon-III" + ], + "result": { + "candidates": [ + { + "name": "James R. McMahon, III", + "votes": 19167, + "writeIn": false + } + ], + "otherVotes": 119, + "blankVotes": 8028, + "totalVotes": 27314 + } + }, + { + "id": 160800, + "year": 2024, + "office": "Party State Committee Man", + "districts": "1st Suffolk", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Timothy-J-Smyth-Jr", + "https://electionstats.state.ma.us/candidates/view/Daniel-K-Kelly" + ], + "result": { + "candidates": [ + { + "name": "Timothy J. Smyth, Jr", + "votes": 2124, + "writeIn": false + }, + { + "name": "Daniel K. Kelly", + "votes": 2107, + "writeIn": false + } + ], + "otherVotes": 84, + "blankVotes": 1755, + "totalVotes": 6070 + } + }, + { + "id": 160809, + "year": 2024, + "office": "Party State Committee Man", + "districts": "2nd Suffolk", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Timothy-McCarthy", + "https://electionstats.state.ma.us/candidates/view/Brendan-Halloran-OConnell" + ], + "result": { + "candidates": [ + { + "name": "Timothy McCarthy", + "votes": 39, + "writeIn": true + }, + { + "name": "Brendan Halloran O'Connell", + "votes": 3, + "writeIn": true + } + ], + "otherVotes": 182, + "blankVotes": 1330, + "totalVotes": 1554 + } + }, + { + "id": 160812, + "year": 2024, + "office": "Party State Committee Man", + "districts": "3rd Suffolk", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Paul-J-Ronukaitus", + "https://electionstats.state.ma.us/candidates/view/Talen-John-Carvalho" + ], + "result": { + "candidates": [ + { + "name": "Paul J. Ronukaitus", + "votes": 3272, + "writeIn": false + }, + { + "name": "Talen John Carvalho", + "votes": 2227, + "writeIn": false + } + ], + "otherVotes": 77, + "blankVotes": 2326, + "totalVotes": 7902 + } + }, + { + "id": 160770, + "year": 2024, + "office": "Party State Committee Man", + "districts": "Suffolk and Middlesex", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Daniel-Hickey", + "https://electionstats.state.ma.us/candidates/view/John-T-Umina" + ], + "result": { + "candidates": [ + { + "name": "Daniel Hickey", + "votes": 2188, + "writeIn": false + }, + { + "name": "John T. Umina", + "votes": 2142, + "writeIn": false + } + ], + "otherVotes": 79, + "blankVotes": 2034, + "totalVotes": 6443 + } + }, + { + "id": 160716, + "year": 2024, + "office": "Party State Committee Man", + "districts": "Worcester and Middlesex", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Mark-C-Bodanza", + "https://electionstats.state.ma.us/candidates/view/Dennis-J-Galvin" + ], + "result": { + "candidates": [ + { + "name": "Mark C. Bodanza", + "votes": 8021, + "writeIn": false + }, + { + "name": "Dennis J. Galvin", + "votes": 7441, + "writeIn": false + } + ], + "otherVotes": 57, + "blankVotes": 2427, + "totalVotes": 17946 + } + }, + { + "id": 160782, + "year": 2024, + "office": "Party State Committee Man", + "districts": "1st Worcester", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Michael-A-Vulcano" + ], + "result": { + "candidates": [ + { + "name": "Michael A. Vulcano", + "votes": 6040, + "writeIn": false + } + ], + "otherVotes": 114, + "blankVotes": 3454, + "totalVotes": 9608 + } + }, + { + "id": 160734, + "year": 2024, + "office": "Party State Committee Man", + "districts": "2nd Worcester", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Paul-K-Frost", + "https://electionstats.state.ma.us/candidates/view/James-Davidson" + ], + "result": { + "candidates": [ + { + "name": "Paul K. Frost", + "votes": 6716, + "writeIn": false + }, + { + "name": "James Davidson", + "votes": 4204, + "writeIn": false + } + ], + "otherVotes": 53, + "blankVotes": 2106, + "totalVotes": 13079 + } + }, + { + "id": 160683, + "year": 2024, + "office": "Party State Committee Woman", + "districts": "Berkshire, Hampden, Franklin & Hampshire", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Jessica-L-Boldyga" + ], + "result": { + "candidates": [ + { + "name": "Jessica L. Boldyga", + "votes": 6822, + "writeIn": false + } + ], + "otherVotes": 158, + "blankVotes": 4556, + "totalVotes": 11536 + } + }, + { + "id": 160869, + "year": 2024, + "office": "Party State Committee Woman", + "districts": "First Plymouth & Norfolk", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Janet-R-Fogarty", + "https://electionstats.state.ma.us/candidates/view/Kristen-G-Arute", + "https://electionstats.state.ma.us/candidates/view/Lynne-Santangelo" + ], + "result": { + "candidates": [ + { + "name": "Janet R. Fogarty", + "votes": 9817, + "writeIn": false + }, + { + "name": "Kristen G. Arute", + "votes": 4340, + "writeIn": false + }, + { + "name": "Lynne Santangelo", + "votes": 4232, + "writeIn": false + } + ], + "otherVotes": 52, + "blankVotes": 4738, + "totalVotes": 23179 + } + }, + { + "id": 160761, + "year": 2024, + "office": "Party State Committee Woman", + "districts": "Hampden, Hampshire & Worcester", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Virginia-E-Neill" + ], + "result": { + "candidates": [ + { + "name": "Virginia E. Neill", + "votes": 9319, + "writeIn": false + } + ], + "otherVotes": 113, + "blankVotes": 6712, + "totalVotes": 16144 + } + }, + { + "id": 160851, + "year": 2024, + "office": "Party State Committee Woman", + "districts": "Norfolk & Middlesex", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Susan-Huffman", + "https://electionstats.state.ma.us/candidates/view/Rosann-Palermo-Fleischauer" + ], + "result": { + "candidates": [ + { + "name": "Susan Huffman", + "votes": 3848, + "writeIn": false + }, + { + "name": "Rosann Palermo Fleischauer", + "votes": 3037, + "writeIn": false + } + ], + "otherVotes": 85, + "blankVotes": 4030, + "totalVotes": 11000 + } + }, + { + "id": 160845, + "year": 2024, + "office": "Party State Committee Woman", + "districts": "Norfolk, Plymouth & Bristol", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Sandra-M-Wright", + "https://electionstats.state.ma.us/candidates/view/Patricia-A-Locke" + ], + "result": { + "candidates": [ + { + "name": "Sandra M. Wright", + "votes": 6648, + "writeIn": false + }, + { + "name": "Patricia A. Locke", + "votes": 5598, + "writeIn": false + } + ], + "otherVotes": 54, + "blankVotes": 3868, + "totalVotes": 16168 + } + }, + { + "id": 160767, + "year": 2024, + "office": "Party State Committee Woman", + "districts": "Norfolk, Worcester & Middlesex", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Amanda-Joan-Peterson", + "https://electionstats.state.ma.us/candidates/view/Maureen-Maloney" + ], + "result": { + "candidates": [ + { + "name": "Amanda Joan Peterson", + "votes": 8570, + "writeIn": false + }, + { + "name": "Maureen Maloney", + "votes": 7382, + "writeIn": false + } + ], + "otherVotes": 106, + "blankVotes": 5252, + "totalVotes": 21310 + } + }, + { + "id": 160743, + "year": 2024, + "office": "Party State Committee Woman", + "districts": "Second Plymouth & Norfolk", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Kathyjo-Boss", + "https://electionstats.state.ma.us/candidates/view/Jeanie-Falcone" + ], + "result": { + "candidates": [ + { + "name": "Kathyjo Boss", + "votes": 6223, + "writeIn": false + }, + { + "name": "Jeanie Falcone", + "votes": 3186, + "writeIn": false + } + ], + "otherVotes": 24, + "blankVotes": 1788, + "totalVotes": 11221 + } + }, + { + "id": 160779, + "year": 2024, + "office": "Party State Committee Woman", + "districts": "Third Bristol & Plymouth", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Shaunna-L-OConnell", + "https://electionstats.state.ma.us/candidates/view/Maria-S-Collins" + ], + "result": { + "candidates": [ + { + "name": "Shaunna L. O'Connell", + "votes": 9885, + "writeIn": false + }, + { + "name": "Maria S. Collins", + "votes": 6904, + "writeIn": false + } + ], + "otherVotes": 41, + "blankVotes": 3167, + "totalVotes": 19997 + } + }, + { + "id": 160797, + "year": 2024, + "office": "Party State Committee Woman", + "districts": "Worcester & Hampden", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Elizabeth-L-S-Groot", + "https://electionstats.state.ma.us/candidates/view/Janet-E-Garon" + ], + "result": { + "candidates": [ + { + "name": "Elizabeth L. S. Groot", + "votes": 9234, + "writeIn": false + }, + { + "name": "Janet E. Garon", + "votes": 8638, + "writeIn": false + } + ], + "otherVotes": 50, + "blankVotes": 3627, + "totalVotes": 21549 + } + }, + { + "id": 160749, + "year": 2024, + "office": "Party State Committee Woman", + "districts": "Worcester & Hampshire", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Stephanie-R-Mulroy", + "https://electionstats.state.ma.us/candidates/view/Rebecca-E-Connors" + ], + "result": { + "candidates": [ + { + "name": "Stephanie R. Mulroy", + "votes": 9878, + "writeIn": false + }, + { + "name": "Rebecca E. Connors", + "votes": 6263, + "writeIn": false + } + ], + "otherVotes": 69, + "blankVotes": 4501, + "totalVotes": 20711 + } + }, + { + "id": 160731, + "year": 2024, + "office": "Party State Committee Woman", + "districts": "Bristol and Norfolk", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Julie-A-Hall" + ], + "result": { + "candidates": [ + { + "name": "Julie A. Hall", + "votes": 11290, + "writeIn": false + } + ], + "otherVotes": 69, + "blankVotes": 6217, + "totalVotes": 17576 + } + }, + { + "id": 160881, + "year": 2024, + "office": "Party State Committee Woman", + "districts": "1st Bristol and Plymouth", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Kayla-Rose-Churchill" + ], + "result": { + "candidates": [ + { + "name": "Kayla Rose Churchill", + "votes": 8186, + "writeIn": false + } + ], + "otherVotes": 109, + "blankVotes": 5371, + "totalVotes": 13666 + } + }, + { + "id": 160677, + "year": 2024, + "office": "Party State Committee Woman", + "districts": "2nd Bristol and Plymouth", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Jo-Anne-Mello-Hodgson" + ], + "result": { + "candidates": [ + { + "name": "Jo-Anne Mello Hodgson", + "votes": 7409, + "writeIn": false + } + ], + "otherVotes": 94, + "blankVotes": 3962, + "totalVotes": 11465 + } + }, + { + "id": 160707, + "year": 2024, + "office": "Party State Committee Woman", + "districts": "Cape and Islands", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Judith-Anessa-Crocker", + "https://electionstats.state.ma.us/candidates/view/Daralyn-Andrea-Heywood" + ], + "result": { + "candidates": [ + { + "name": "Judith Anessa Crocker", + "votes": 10317, + "writeIn": false + }, + { + "name": "Daralyn Andrea Heywood", + "votes": 7938, + "writeIn": false + } + ], + "otherVotes": 42, + "blankVotes": 3909, + "totalVotes": 22206 + } + }, + { + "id": 160887, + "year": 2024, + "office": "Party State Committee Woman", + "districts": "1st Essex", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Maura-L-Ryan-Ciardiello", + "https://electionstats.state.ma.us/candidates/view/Cecilia-G-Buckles" + ], + "result": { + "candidates": [ + { + "name": "Maura L. Ryan-Ciardiello", + "votes": 3048, + "writeIn": false + }, + { + "name": "Cecilia G. Buckles", + "votes": 689, + "writeIn": false + } + ], + "otherVotes": 8, + "blankVotes": 2866, + "totalVotes": 6611 + } + }, + { + "id": 160791, + "year": 2024, + "office": "Party State Committee Woman", + "districts": "2nd Essex", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Jaclyn-Corriveau", + "https://electionstats.state.ma.us/candidates/view/Sandy-M-Franceschini" + ], + "result": { + "candidates": [ + { + "name": "Jaclyn Corriveau", + "votes": 6734, + "writeIn": false + }, + { + "name": "Sandy M. Franceschini", + "votes": 6541, + "writeIn": false + } + ], + "otherVotes": 52, + "blankVotes": 3729, + "totalVotes": 17056 + } + }, + { + "id": 160893, + "year": 2024, + "office": "Party State Committee Woman", + "districts": "3rd Essex", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Amy-Carnevale", + "https://electionstats.state.ma.us/candidates/view/Maria-Pia-Perez" + ], + "result": { + "candidates": [ + { + "name": "Amy Carnevale", + "votes": 6638, + "writeIn": false + }, + { + "name": "Maria Pia Perez", + "votes": 3878, + "writeIn": false + } + ], + "otherVotes": 83, + "blankVotes": 2706, + "totalVotes": 13305 + } + }, + { + "id": 160839, + "year": 2024, + "office": "Party State Committee Woman", + "districts": "1st Essex and Middlesex", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Lisa-Marie-C-Cashman", + "https://electionstats.state.ma.us/candidates/view/Ashley-Sullivan", + "https://electionstats.state.ma.us/candidates/view/Cynthia-C-Bjorlie", + "https://electionstats.state.ma.us/candidates/view/Nicole-Coles" + ], + "result": { + "candidates": [ + { + "name": "Lisa-Marie C. Cashman", + "votes": 9127, + "writeIn": false + }, + { + "name": "Ashley Sullivan", + "votes": 5344, + "writeIn": false + }, + { + "name": "Cynthia C. Bjorlie", + "votes": 2629, + "writeIn": false + }, + { + "name": "Nicole Coles", + "votes": 1332, + "writeIn": false + } + ], + "otherVotes": 84, + "blankVotes": 6777, + "totalVotes": 25293 + } + }, + { + "id": 160695, + "year": 2024, + "office": "Party State Committee Woman", + "districts": "2nd Essex and Middlesex", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Jeri-Ann-Levasseur", + "https://electionstats.state.ma.us/candidates/view/Tatum-Ryan-Toohey" + ], + "result": { + "candidates": [ + { + "name": "Jeri Ann Levasseur", + "votes": 9123, + "writeIn": false + }, + { + "name": "Tatum Ryan-Toohey", + "votes": 8106, + "writeIn": false + } + ], + "otherVotes": 73, + "blankVotes": 4854, + "totalVotes": 22156 + } + }, + { + "id": 160863, + "year": 2024, + "office": "Party State Committee Woman", + "districts": "Hampden", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 160689, + "year": 2024, + "office": "Party State Committee Woman", + "districts": "Hampden and Hampshire", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Linda-L-Vacon" + ], + "result": { + "candidates": [ + { + "name": "Linda L. Vacon", + "votes": 8113, + "writeIn": false + } + ], + "otherVotes": 175, + "blankVotes": 4715, + "totalVotes": 13003 + } + }, + { + "id": 160701, + "year": 2024, + "office": "Party State Committee Woman", + "districts": "Hampshire, Franklin and Worcester", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Sue-OSullivan", + "https://electionstats.state.ma.us/candidates/view/Mary-L-Stuart" + ], + "result": { + "candidates": [ + { + "name": "Sue O'Sullivan", + "votes": 5098, + "writeIn": false + }, + { + "name": "Mary L. Stuart", + "votes": 2906, + "writeIn": false + } + ], + "otherVotes": 53, + "blankVotes": 2568, + "totalVotes": 10625 + } + }, + { + "id": 160875, + "year": 2024, + "office": "Party State Committee Woman", + "districts": "1st Middlesex", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Noreen-E-Crowley" + ], + "result": { + "candidates": [ + { + "name": "Noreen E. Crowley", + "votes": 8038, + "writeIn": false + } + ], + "otherVotes": 89, + "blankVotes": 4130, + "totalVotes": 12257 + } + }, + { + "id": 160857, + "year": 2024, + "office": "Party State Committee Woman", + "districts": "2nd Middlesex", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Patricia-Brady-Doherty", + "https://electionstats.state.ma.us/candidates/view/Christine-H-Doherty" + ], + "result": { + "candidates": [ + { + "name": "Patricia Brady Doherty", + "votes": 3572, + "writeIn": false + }, + { + "name": "Christine H. Doherty", + "votes": 1910, + "writeIn": false + } + ], + "otherVotes": 106, + "blankVotes": 2624, + "totalVotes": 8212 + } + }, + { + "id": 160755, + "year": 2024, + "office": "Party State Committee Woman", + "districts": "3rd Middlesex", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Doreen-A-Deshler", + "https://electionstats.state.ma.us/candidates/view/Ruth-A-Cusano" + ], + "result": { + "candidates": [ + { + "name": "Doreen A. Deshler", + "votes": 5215, + "writeIn": false + }, + { + "name": "Ruth A. Cusano", + "votes": 5161, + "writeIn": false + } + ], + "otherVotes": 81, + "blankVotes": 4837, + "totalVotes": 15294 + } + }, + { + "id": 160713, + "year": 2024, + "office": "Party State Committee Woman", + "districts": "4th Middlesex", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Helen-Anne-Hatch", + "https://electionstats.state.ma.us/candidates/view/Stirling-D-Smith" + ], + "result": { + "candidates": [ + { + "name": "Helen Anne Hatch", + "votes": 8657, + "writeIn": false + }, + { + "name": "Stirling D. Smith", + "votes": 4480, + "writeIn": false + } + ], + "otherVotes": 81, + "blankVotes": 4532, + "totalVotes": 17750 + } + }, + { + "id": 160899, + "year": 2024, + "office": "Party State Committee Woman", + "districts": "5th Middlesex", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Monica-C-Medeiros-Solano", + "https://electionstats.state.ma.us/candidates/view/Marcy-L-McCauley" + ], + "result": { + "candidates": [ + { + "name": "Monica C. Medeiros Solano", + "votes": 6626, + "writeIn": false + }, + { + "name": "Marcy L. McCauley", + "votes": 5189, + "writeIn": false + } + ], + "otherVotes": 65, + "blankVotes": 4055, + "totalVotes": 15935 + } + }, + { + "id": 160725, + "year": 2024, + "office": "Party State Committee Woman", + "districts": "Middlesex and Norfolk", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Leanne-J-Yarosz-Harris" + ], + "result": { + "candidates": [ + { + "name": "Leanne J. Yarosz-Harris", + "votes": 7775, + "writeIn": false + } + ], + "otherVotes": 118, + "blankVotes": 5859, + "totalVotes": 13752 + } + }, + { + "id": 160671, + "year": 2024, + "office": "Party State Committee Woman", + "districts": "Middlesex and Worcester", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Caroline-Stewart-Cunningham", + "https://electionstats.state.ma.us/candidates/view/Dorothy-A-Bisson" + ], + "result": { + "candidates": [ + { + "name": "Caroline Stewart Cunningham", + "votes": 9008, + "writeIn": false + }, + { + "name": "Dorothy A. Bisson", + "votes": 941, + "writeIn": true + } + ], + "otherVotes": 307, + "blankVotes": 7038, + "totalVotes": 17294 + } + }, + { + "id": 160818, + "year": 2024, + "office": "Party State Committee Woman", + "districts": "Middlesex and Suffolk", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Regina-M-Taylor" + ], + "result": { + "candidates": [ + { + "name": "Regina M. Taylor", + "votes": 2564, + "writeIn": false + } + ], + "otherVotes": 63, + "blankVotes": 1987, + "totalVotes": 4614 + } + }, + { + "id": 160665, + "year": 2024, + "office": "Party State Committee Woman", + "districts": "Norfolk and Plymouth", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Beth-M-Veneto", + "https://electionstats.state.ma.us/candidates/view/Edith-Hughes" + ], + "result": { + "candidates": [ + { + "name": "Beth M. Veneto", + "votes": 7050, + "writeIn": false + }, + { + "name": "Edith Hughes", + "votes": 4960, + "writeIn": false + } + ], + "otherVotes": 84, + "blankVotes": 3116, + "totalVotes": 15210 + } + }, + { + "id": 160821, + "year": 2024, + "office": "Party State Committee Woman", + "districts": "Norfolk and Suffolk", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Lynne-Roberts", + "https://electionstats.state.ma.us/candidates/view/Kristina-Kaye-Karpovich" + ], + "result": { + "candidates": [ + { + "name": "Lynne Roberts", + "votes": 8087, + "writeIn": false + }, + { + "name": "Kristina Kaye Karpovich", + "votes": 3596, + "writeIn": false + } + ], + "otherVotes": 78, + "blankVotes": 4348, + "totalVotes": 16109 + } + }, + { + "id": 160833, + "year": 2024, + "office": "Party State Committee Woman", + "districts": "Plymouth and Barnstable", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Jennifer-A-Cunningham", + "https://electionstats.state.ma.us/candidates/view/Alice-Zinkevich" + ], + "result": { + "candidates": [ + { + "name": "Jennifer A. Cunningham", + "votes": 12485, + "writeIn": false + }, + { + "name": "Alice Zinkevich", + "votes": 9107, + "writeIn": false + } + ], + "otherVotes": 171, + "blankVotes": 5551, + "totalVotes": 27314 + } + }, + { + "id": 160815, + "year": 2024, + "office": "Party State Committee Woman", + "districts": "1st Suffolk", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Elizabeth-H-Hinds-Ferrick", + "https://electionstats.state.ma.us/candidates/view/Lori-Kauffman" + ], + "result": { + "candidates": [ + { + "name": "Elizabeth H. Hinds-Ferrick", + "votes": 2352, + "writeIn": false + }, + { + "name": "Lori Kauffman", + "votes": 1476, + "writeIn": false + } + ], + "otherVotes": 127, + "blankVotes": 2115, + "totalVotes": 6070 + } + }, + { + "id": 160824, + "year": 2024, + "office": "Party State Committee Woman", + "districts": "2nd Suffolk", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Brittney-Rocchina-Ciccone" + ], + "result": { + "candidates": [ + { + "name": "Brittney Rocchina Ciccone", + "votes": 34, + "writeIn": true + } + ], + "otherVotes": 145, + "blankVotes": 1375, + "totalVotes": 1554 + } + }, + { + "id": 160827, + "year": 2024, + "office": "Party State Committee Woman", + "districts": "3rd Suffolk", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Vera-E-Carducci", + "https://electionstats.state.ma.us/candidates/view/Jeannamarie-Tamas", + "https://electionstats.state.ma.us/candidates/view/Rachel-Nicole-Miselman" + ], + "result": { + "candidates": [ + { + "name": "Vera E. Carducci", + "votes": 2532, + "writeIn": false + }, + { + "name": "Jeannamarie Tamas", + "votes": 1581, + "writeIn": false + }, + { + "name": "Rachel Nicole Miselman", + "votes": 1124, + "writeIn": false + } + ], + "otherVotes": 78, + "blankVotes": 2587, + "totalVotes": 7902 + } + }, + { + "id": 160773, + "year": 2024, + "office": "Party State Committee Woman", + "districts": "Suffolk and Middlesex", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Catherine-A-Umina", + "https://electionstats.state.ma.us/candidates/view/Eva-M-Webster" + ], + "result": { + "candidates": [ + { + "name": "Catherine A. Umina", + "votes": 2389, + "writeIn": false + }, + { + "name": "Eva M. Webster", + "votes": 1926, + "writeIn": false + } + ], + "otherVotes": 64, + "blankVotes": 2064, + "totalVotes": 6443 + } + }, + { + "id": 160719, + "year": 2024, + "office": "Party State Committee Woman", + "districts": "Worcester and Middlesex", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Kathleen-Lynch", + "https://electionstats.state.ma.us/candidates/view/Beth-Joyce-Lindstrom" + ], + "result": { + "candidates": [ + { + "name": "Kathleen Lynch", + "votes": 8900, + "writeIn": false + }, + { + "name": "Beth Joyce Lindstrom", + "votes": 6046, + "writeIn": false + } + ], + "otherVotes": 46, + "blankVotes": 2954, + "totalVotes": 17946 + } + }, + { + "id": 160785, + "year": 2024, + "office": "Party State Committee Woman", + "districts": "1st Worcester", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Joanne-E-Powell", + "https://electionstats.state.ma.us/candidates/view/Lisa-K-Mair" + ], + "result": { + "candidates": [ + { + "name": "Joanne E. Powell", + "votes": 3722, + "writeIn": false + }, + { + "name": "Lisa K. Mair", + "votes": 3684, + "writeIn": false + } + ], + "otherVotes": 47, + "blankVotes": 2147, + "totalVotes": 9600 + } + }, + { + "id": 160737, + "year": 2024, + "office": "Party State Committee Woman", + "districts": "2nd Worcester", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Mindy-J-McKenzie", + "https://electionstats.state.ma.us/candidates/view/Stacie-Norton-Bennett" + ], + "result": { + "candidates": [ + { + "name": "Mindy J. McKenzie", + "votes": 6843, + "writeIn": false + }, + { + "name": "Stacie Norton Bennett", + "votes": 3883, + "writeIn": false + } + ], + "otherVotes": 26, + "blankVotes": 2327, + "totalVotes": 13079 + } + }, + { + "id": 163522, + "year": 2024, + "office": "U.S. Senate", + "districts": "Statewide", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/John-Deaton", + "https://electionstats.state.ma.us/candidates/view/Robert-J-Antonellis", + "https://electionstats.state.ma.us/candidates/view/Ian-Cain" + ], + "result": { + "candidates": [ + { + "name": "John Deaton", + "votes": 136773, + "writeIn": false + }, + { + "name": "Robert J. Antonellis", + "votes": 54940, + "writeIn": false + }, + { + "name": "Ian Cain", + "votes": 19374, + "writeIn": false + } + ], + "otherVotes": 924, + "blankVotes": 5952, + "totalVotes": 217963 + } + }, + { + "id": 163582, + "year": 2024, + "office": "U.S. House", + "districts": "1st Congressional", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163642, + "year": 2024, + "office": "U.S. House", + "districts": "2nd Congressional", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163537, + "year": 2024, + "office": "U.S. House", + "districts": "3rd Congressional", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163732, + "year": 2024, + "office": "U.S. House", + "districts": "4th Congressional", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163675, + "year": 2024, + "office": "U.S. House", + "districts": "5th Congressional", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163621, + "year": 2024, + "office": "U.S. House", + "districts": "6th Congressional", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163858, + "year": 2024, + "office": "U.S. House", + "districts": "7th Congressional", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163516, + "year": 2024, + "office": "U.S. House", + "districts": "8th Congressional", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Robert-G-Burke", + "https://electionstats.state.ma.us/candidates/view/James-M-Govatsos", + "https://electionstats.state.ma.us/candidates/view/Daniel-P-Kelly" + ], + "result": { + "candidates": [ + { + "name": "Robert G. Burke", + "votes": 10335, + "writeIn": false + }, + { + "name": "James M. Govatsos", + "votes": 6216, + "writeIn": false + }, + { + "name": "Daniel P. Kelly", + "votes": 5761, + "writeIn": false + } + ], + "otherVotes": 127, + "blankVotes": 2750, + "totalVotes": 25189 + } + }, + { + "id": 163561, + "year": 2024, + "office": "U.S. House", + "districts": "9th Congressional", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Dan-Sullivan" + ], + "result": { + "candidates": [ + { + "name": "Dan Sullivan", + "votes": 36888, + "writeIn": false + } + ], + "otherVotes": 549, + "blankVotes": 7706, + "totalVotes": 45143 + } + }, + { + "id": 163552, + "year": 2024, + "office": "Governor's Council", + "districts": "1st", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163714, + "year": 2024, + "office": "Governor's Council", + "districts": "2nd", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Francis-T-Crimmins-Jr" + ], + "result": { + "candidates": [ + { + "name": "Francis T. Crimmins, Jr", + "votes": 22357, + "writeIn": false + } + ], + "otherVotes": 226, + "blankVotes": 7134, + "totalVotes": 29717 + } + }, + { + "id": 163531, + "year": 2024, + "office": "Governor's Council", + "districts": "3rd", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163507, + "year": 2024, + "office": "Governor's Council", + "districts": "4th", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163615, + "year": 2024, + "office": "Governor's Council", + "districts": "5th", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Anne-M-Manning-Martin" + ], + "result": { + "candidates": [ + { + "name": "Anne M. Manning-Martin", + "votes": 21462, + "writeIn": false + } + ], + "otherVotes": 224, + "blankVotes": 6980, + "totalVotes": 28666 + } + }, + { + "id": 163849, + "year": 2024, + "office": "Governor's Council", + "districts": "6th", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163696, + "year": 2024, + "office": "Governor's Council", + "districts": "7th", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Andrew-J-Couture" + ], + "result": { + "candidates": [ + { + "name": "Andrew J. Couture", + "votes": 24763, + "writeIn": false + } + ], + "otherVotes": 169, + "blankVotes": 7779, + "totalVotes": 32711 + } + }, + { + "id": 163576, + "year": 2024, + "office": "Governor's Council", + "districts": "8th", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163588, + "year": 2024, + "office": "State Senate", + "districts": "Berkshire, Hampden, Franklin & Hampshire", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/David-A-Rosa" + ], + "result": { + "candidates": [ + { + "name": "David A. Rosa", + "votes": 3095, + "writeIn": false + } + ], + "otherVotes": 33, + "blankVotes": 868, + "totalVotes": 3996 + } + }, + { + "id": 164011, + "year": 2024, + "office": "State Senate", + "districts": "First Plymouth & Norfolk", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Patrick-A-OConnor" + ], + "result": { + "candidates": [ + { + "name": "Patrick A. O'Connor", + "votes": 8061, + "writeIn": false + } + ], + "otherVotes": 13, + "blankVotes": 1178, + "totalVotes": 9252 + } + }, + { + "id": 163798, + "year": 2024, + "office": "State Senate", + "districts": "Hampden, Hampshire & Worcester", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163963, + "year": 2024, + "office": "State Senate", + "districts": "Norfolk & Middlesex", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163936, + "year": 2024, + "office": "State Senate", + "districts": "Norfolk, Plymouth & Bristol", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Steven-David-Fruzzetti" + ], + "result": { + "candidates": [ + { + "name": "Steven David Fruzzetti", + "votes": 101, + "writeIn": true + } + ], + "otherVotes": 565, + "blankVotes": 5679, + "totalVotes": 6345 + } + }, + { + "id": 163804, + "year": 2024, + "office": "State Senate", + "districts": "Norfolk, Worcester & Middlesex", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Dashe-M-Videira" + ], + "result": { + "candidates": [ + { + "name": "Dashe M. Videira", + "votes": 1066, + "writeIn": true + } + ], + "otherVotes": 465, + "blankVotes": 6084, + "totalVotes": 7615 + } + }, + { + "id": 163762, + "year": 2024, + "office": "State Senate", + "districts": "Second Plymouth & Norfolk", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163813, + "year": 2024, + "office": "State Senate", + "districts": "Third Bristol & Plymouth", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Kelly-A-Dooner" + ], + "result": { + "candidates": [ + { + "name": "Kelly A. Dooner", + "votes": 7182, + "writeIn": false + } + ], + "otherVotes": 58, + "blankVotes": 1539, + "totalVotes": 8779 + } + }, + { + "id": 163834, + "year": 2024, + "office": "State Senate", + "districts": "Worcester & Hampden", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Ryan-C-Fattman" + ], + "result": { + "candidates": [ + { + "name": "Ryan C. Fattman", + "votes": 8099, + "writeIn": false + } + ], + "otherVotes": 65, + "blankVotes": 864, + "totalVotes": 9028 + } + }, + { + "id": 163783, + "year": 2024, + "office": "State Senate", + "districts": "Worcester & Hampshire", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Peter-J-Durant" + ], + "result": { + "candidates": [ + { + "name": "Peter J. Durant", + "votes": 7488, + "writeIn": false + } + ], + "otherVotes": 29, + "blankVotes": 953, + "totalVotes": 8470 + } + }, + { + "id": 163741, + "year": 2024, + "office": "State Senate", + "districts": "Bristol and Norfolk", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164071, + "year": 2024, + "office": "State Senate", + "districts": "1st Bristol and Plymouth", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163570, + "year": 2024, + "office": "State Senate", + "districts": "2nd Bristol and Plymouth", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163672, + "year": 2024, + "office": "State Senate", + "districts": "Cape and Islands", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Christopher-Robert-Lauzon" + ], + "result": { + "candidates": [ + { + "name": "Christopher Robert Lauzon", + "votes": 8405, + "writeIn": false + } + ], + "otherVotes": 75, + "blankVotes": 1350, + "totalVotes": 9830 + } + }, + { + "id": 164110, + "year": 2024, + "office": "State Senate", + "districts": "1st Essex", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163825, + "year": 2024, + "office": "State Senate", + "districts": "2nd Essex", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Damian-Mitchell-Anketell" + ], + "result": { + "candidates": [ + { + "name": "Damian Mitchell Anketell", + "votes": 4649, + "writeIn": false + } + ], + "otherVotes": 25, + "blankVotes": 1335, + "totalVotes": 6009 + } + }, + { + "id": 164161, + "year": 2024, + "office": "State Senate", + "districts": "3rd Essex", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163930, + "year": 2024, + "office": "State Senate", + "districts": "1st Essex and Middlesex", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Bruce-E-Tarr" + ], + "result": { + "candidates": [ + { + "name": "Bruce E. Tarr", + "votes": 7197, + "writeIn": false + } + ], + "otherVotes": 43, + "blankVotes": 983, + "totalVotes": 8223 + } + }, + { + "id": 163630, + "year": 2024, + "office": "State Senate", + "districts": "2nd Essex and Middlesex", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164005, + "year": 2024, + "office": "State Senate", + "districts": "Hampden", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163603, + "year": 2024, + "office": "State Senate", + "districts": "Hampden and Hampshire", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163648, + "year": 2024, + "office": "State Senate", + "districts": "Hampshire, Franklin and Worcester", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164038, + "year": 2024, + "office": "State Senate", + "districts": "1st Middlesex", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Karla-J-Miller" + ], + "result": { + "candidates": [ + { + "name": "Karla J. Miller", + "votes": 3827, + "writeIn": false + } + ], + "otherVotes": 38, + "blankVotes": 908, + "totalVotes": 4773 + } + }, + { + "id": 163975, + "year": 2024, + "office": "State Senate", + "districts": "2nd Middlesex", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163792, + "year": 2024, + "office": "State Senate", + "districts": "3rd Middlesex", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163684, + "year": 2024, + "office": "State Senate", + "districts": "4th Middlesex", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164176, + "year": 2024, + "office": "State Senate", + "districts": "5th Middlesex", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163720, + "year": 2024, + "office": "State Senate", + "districts": "Middlesex and Norfolk", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163546, + "year": 2024, + "office": "State Senate", + "districts": "Middlesex and Worcester", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163912, + "year": 2024, + "office": "State Senate", + "districts": "Middlesex and Suffolk", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163525, + "year": 2024, + "office": "State Senate", + "districts": "Norfolk and Plymouth", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163915, + "year": 2024, + "office": "State Senate", + "districts": "Norfolk and Suffolk", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163927, + "year": 2024, + "office": "State Senate", + "districts": "Plymouth and Barnstable", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Mathew-J-Muratore", + "https://electionstats.state.ma.us/candidates/view/Kari-Macrae" + ], + "result": { + "candidates": [ + { + "name": "Mathew J. Muratore", + "votes": 7005, + "writeIn": false + }, + { + "name": "Kari Macrae", + "votes": 6966, + "writeIn": false + } + ], + "otherVotes": 15, + "blankVotes": 564, + "totalVotes": 14550 + } + }, + { + "id": 163909, + "year": 2024, + "office": "State Senate", + "districts": "1st Suffolk", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163918, + "year": 2024, + "office": "State Senate", + "districts": "2nd Suffolk", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163921, + "year": 2024, + "office": "State Senate", + "districts": "3rd Suffolk", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Jeannamarie-Tamas" + ], + "result": { + "candidates": [ + { + "name": "Jeannamarie Tamas", + "votes": 1817, + "writeIn": false + } + ], + "otherVotes": 30, + "blankVotes": 860, + "totalVotes": 2707 + } + }, + { + "id": 163807, + "year": 2024, + "office": "State Senate", + "districts": "Suffolk and Middlesex", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163702, + "year": 2024, + "office": "State Senate", + "districts": "Worcester and Middlesex", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Nicholas-A-Pirro-III" + ], + "result": { + "candidates": [ + { + "name": "Nicholas A. Pirro, III", + "votes": 5747, + "writeIn": false + } + ], + "otherVotes": 41, + "blankVotes": 897, + "totalVotes": 6685 + } + }, + { + "id": 163819, + "year": 2024, + "office": "State Senate", + "districts": "1st Worcester", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163747, + "year": 2024, + "office": "State Senate", + "districts": "2nd Worcester", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163939, + "year": 2024, + "office": "State Representative", + "districts": "1st Barnstable", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Gerald-Joseph-OConnell" + ], + "result": { + "candidates": [ + { + "name": "Gerald Joseph O'Connell", + "votes": 518, + "writeIn": true + } + ], + "otherVotes": 165, + "blankVotes": 2703, + "totalVotes": 3386 + } + }, + { + "id": 163777, + "year": 2024, + "office": "State Representative", + "districts": "2nd Barnstable", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Susanne-H-Conley", + "https://electionstats.state.ma.us/candidates/view/Gerald-Joseph-OConnell" + ], + "result": { + "candidates": [ + { + "name": "Susanne H. Conley", + "votes": 2148, + "writeIn": false + }, + { + "name": "Gerald Joseph O'Connell", + "votes": 0, + "writeIn": true + } + ], + "otherVotes": 56, + "blankVotes": 366, + "totalVotes": 2570 + } + }, + { + "id": 163924, + "year": 2024, + "office": "State Representative", + "districts": "3rd Barnstable", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/David-T-Vieira" + ], + "result": { + "candidates": [ + { + "name": "David T. Vieira", + "votes": 2672, + "writeIn": false + } + ], + "otherVotes": 23, + "blankVotes": 467, + "totalVotes": 3162 + } + }, + { + "id": 163984, + "year": 2024, + "office": "State Representative", + "districts": "4th Barnstable", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163774, + "year": 2024, + "office": "State Representative", + "districts": "5th Barnstable", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Steven-G-Xiarhos" + ], + "result": { + "candidates": [ + { + "name": "Steven G. Xiarhos", + "votes": 3039, + "writeIn": false + } + ], + "otherVotes": 10, + "blankVotes": 253, + "totalVotes": 3302 + } + }, + { + "id": 163669, + "year": 2024, + "office": "State Representative", + "districts": "Barnstable, Dukes and Nantucket", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Erich-F-Horgan" + ], + "result": { + "candidates": [ + { + "name": "Erich F. Horgan", + "votes": 131, + "writeIn": true + } + ], + "otherVotes": 160, + "blankVotes": 996, + "totalVotes": 1287 + } + }, + { + "id": 163585, + "year": 2024, + "office": "State Representative", + "districts": "1st Berkshire", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164224, + "year": 2024, + "office": "State Representative", + "districts": "2nd Berkshire", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163609, + "year": 2024, + "office": "State Representative", + "districts": "3rd Berkshire", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164077, + "year": 2024, + "office": "State Representative", + "districts": "1st Bristol", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Michael-Chaisson" + ], + "result": { + "candidates": [ + { + "name": "Michael Chaisson", + "votes": 1434, + "writeIn": false + } + ], + "otherVotes": 6, + "blankVotes": 354, + "totalVotes": 1794 + } + }, + { + "id": 163738, + "year": 2024, + "office": "State Representative", + "districts": "2nd Bristol", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164053, + "year": 2024, + "office": "State Representative", + "districts": "3rd Bristol", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164215, + "year": 2024, + "office": "State Representative", + "districts": "4th Bristol", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Steven-S-Howitt" + ], + "result": { + "candidates": [ + { + "name": "Steven S. Howitt", + "votes": 1628, + "writeIn": false + } + ], + "otherVotes": 14, + "blankVotes": 279, + "totalVotes": 1921 + } + }, + { + "id": 164026, + "year": 2024, + "office": "State Representative", + "districts": "5th Bristol", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Justin-Thurber" + ], + "result": { + "candidates": [ + { + "name": "Justin Thurber", + "votes": 1415, + "writeIn": false + } + ], + "otherVotes": 16, + "blankVotes": 377, + "totalVotes": 1808 + } + }, + { + "id": 164068, + "year": 2024, + "office": "State Representative", + "districts": "6th Bristol", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164065, + "year": 2024, + "office": "State Representative", + "districts": "7th Bristol", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163564, + "year": 2024, + "office": "State Representative", + "districts": "8th Bristol", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Christopher-Thrasher" + ], + "result": { + "candidates": [ + { + "name": "Christopher Thrasher", + "votes": 213, + "writeIn": true + } + ], + "otherVotes": 58, + "blankVotes": 1787, + "totalVotes": 2058 + } + }, + { + "id": 164020, + "year": 2024, + "office": "State Representative", + "districts": "9th Bristol", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163567, + "year": 2024, + "office": "State Representative", + "districts": "10th Bristol", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Joseph-M-Pires", + "https://electionstats.state.ma.us/candidates/view/Robert-S-McConnell" + ], + "result": { + "candidates": [ + { + "name": "Joseph M. Pires", + "votes": 1894, + "writeIn": false + }, + { + "name": "Robert S. McConnell", + "votes": 854, + "writeIn": false + } + ], + "otherVotes": 6, + "blankVotes": 107, + "totalVotes": 2861 + } + }, + { + "id": 164203, + "year": 2024, + "office": "State Representative", + "districts": "11th Bristol", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163810, + "year": 2024, + "office": "State Representative", + "districts": "12th Bristol", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Norman-J-Orrall" + ], + "result": { + "candidates": [ + { + "name": "Norman J. Orrall", + "votes": 1685, + "writeIn": false + } + ], + "otherVotes": 7, + "blankVotes": 324, + "totalVotes": 2016 + } + }, + { + "id": 164206, + "year": 2024, + "office": "State Representative", + "districts": "13th Bristol", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163735, + "year": 2024, + "office": "State Representative", + "districts": "14th Bristol", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/David-B-Cannata" + ], + "result": { + "candidates": [ + { + "name": "David Cannata, Jr", + "votes": 1229, + "writeIn": false + } + ], + "otherVotes": 8, + "blankVotes": 295, + "totalVotes": 1532 + } + }, + { + "id": 163624, + "year": 2024, + "office": "State Representative", + "districts": "1st Essex", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164092, + "year": 2024, + "office": "State Representative", + "districts": "2nd Essex", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Mark-T-Tashjian" + ], + "result": { + "candidates": [ + { + "name": "Mark T. Tashjian", + "votes": 394, + "writeIn": true + } + ], + "otherVotes": 122, + "blankVotes": 2126, + "totalVotes": 2642 + } + }, + { + "id": 164107, + "year": 2024, + "office": "State Representative", + "districts": "3rd Essex", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164125, + "year": 2024, + "office": "State Representative", + "districts": "4th Essex", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164056, + "year": 2024, + "office": "State Representative", + "districts": "5th Essex", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163822, + "year": 2024, + "office": "State Representative", + "districts": "6th Essex", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Ty-Vitale" + ], + "result": { + "candidates": [ + { + "name": "Ty Vitale", + "votes": 1153, + "writeIn": false + } + ], + "otherVotes": 2, + "blankVotes": 304, + "totalVotes": 1459 + } + }, + { + "id": 164245, + "year": 2024, + "office": "State Representative", + "districts": "7th Essex", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164149, + "year": 2024, + "office": "State Representative", + "districts": "8th Essex", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164155, + "year": 2024, + "office": "State Representative", + "districts": "9th Essex", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Donald-H-Wong" + ], + "result": { + "candidates": [ + { + "name": "Donald H. Wong", + "votes": 1796, + "writeIn": false + } + ], + "otherVotes": 9, + "blankVotes": 305, + "totalVotes": 2110 + } + }, + { + "id": 164158, + "year": 2024, + "office": "State Representative", + "districts": "10th Essex", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164152, + "year": 2024, + "office": "State Representative", + "districts": "11th Essex", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164221, + "year": 2024, + "office": "State Representative", + "districts": "12th Essex", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164017, + "year": 2024, + "office": "State Representative", + "districts": "13th Essex", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163627, + "year": 2024, + "office": "State Representative", + "districts": "14th Essex", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164104, + "year": 2024, + "office": "State Representative", + "districts": "15th Essex", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164128, + "year": 2024, + "office": "State Representative", + "districts": "16th Essex", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163657, + "year": 2024, + "office": "State Representative", + "districts": "17th Essex", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163654, + "year": 2024, + "office": "State Representative", + "districts": "18th Essex", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163711, + "year": 2024, + "office": "State Representative", + "districts": "1st Franklin", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163726, + "year": 2024, + "office": "State Representative", + "districts": "2nd Franklin", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Jeffrey-L-Raymond" + ], + "result": { + "candidates": [ + { + "name": "Jeffrey L. Raymond", + "votes": 1180, + "writeIn": false + } + ], + "otherVotes": 9, + "blankVotes": 308, + "totalVotes": 1497 + } + }, + { + "id": 163945, + "year": 2024, + "office": "State Representative", + "districts": "1st Hampden", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Todd-M-Smola" + ], + "result": { + "candidates": [ + { + "name": "Todd M. Smola", + "votes": 2072, + "writeIn": false + } + ], + "otherVotes": 19, + "blankVotes": 303, + "totalVotes": 2394 + } + }, + { + "id": 164044, + "year": 2024, + "office": "State Representative", + "districts": "2nd Hampden", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163600, + "year": 2024, + "office": "State Representative", + "districts": "3rd Hampden", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Nicholas-A-Boldyga" + ], + "result": { + "candidates": [ + { + "name": "Nicholas A. Boldyga", + "votes": 1902, + "writeIn": false + } + ], + "otherVotes": 10, + "blankVotes": 331, + "totalVotes": 2243 + } + }, + { + "id": 164254, + "year": 2024, + "office": "State Representative", + "districts": "4th Hampden", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Kelly-W-Pease" + ], + "result": { + "candidates": [ + { + "name": "Kelly W. Pease", + "votes": 1737, + "writeIn": false + } + ], + "otherVotes": 51, + "blankVotes": 278, + "totalVotes": 2066 + } + }, + { + "id": 164002, + "year": 2024, + "office": "State Representative", + "districts": "5th Hampden", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163597, + "year": 2024, + "office": "State Representative", + "districts": "6th Hampden", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163795, + "year": 2024, + "office": "State Representative", + "districts": "7th Hampden", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163999, + "year": 2024, + "office": "State Representative", + "districts": "8th Hampden", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164260, + "year": 2024, + "office": "State Representative", + "districts": "9th Hampden", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164263, + "year": 2024, + "office": "State Representative", + "districts": "10th Hampden", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164257, + "year": 2024, + "office": "State Representative", + "districts": "11th Hampden", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164047, + "year": 2024, + "office": "State Representative", + "districts": "12th Hampden", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163996, + "year": 2024, + "office": "State Representative", + "districts": "1st Hampshire", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164050, + "year": 2024, + "office": "State Representative", + "districts": "2nd Hampshire", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163645, + "year": 2024, + "office": "State Representative", + "districts": "3rd Hampshire", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163699, + "year": 2024, + "office": "State Representative", + "districts": "1st Middlesex", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Lynne-E-Archambault" + ], + "result": { + "candidates": [ + { + "name": "Lynne E. Archambault", + "votes": 2190, + "writeIn": false + } + ], + "otherVotes": 21, + "blankVotes": 292, + "totalVotes": 2503 + } + }, + { + "id": 163987, + "year": 2024, + "office": "State Representative", + "districts": "2nd Middlesex", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163837, + "year": 2024, + "office": "State Representative", + "districts": "3rd Middlesex", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164080, + "year": 2024, + "office": "State Representative", + "districts": "4th Middlesex", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164200, + "year": 2024, + "office": "State Representative", + "districts": "5th Middlesex", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164086, + "year": 2024, + "office": "State Representative", + "districts": "6th Middlesex", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163717, + "year": 2024, + "office": "State Representative", + "districts": "7th Middlesex", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164119, + "year": 2024, + "office": "State Representative", + "districts": "8th Middlesex", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164272, + "year": 2024, + "office": "State Representative", + "districts": "9th Middlesex", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Carly-Marie-Downs" + ], + "result": { + "candidates": [ + { + "name": "Carly Marie Downs", + "votes": 685, + "writeIn": false + } + ], + "otherVotes": 17, + "blankVotes": 374, + "totalVotes": 1076 + } + }, + { + "id": 164212, + "year": 2024, + "office": "State Representative", + "districts": "10th Middlesex", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164209, + "year": 2024, + "office": "State Representative", + "districts": "11th Middlesex", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Vladislav-S-Yanovsky" + ], + "result": { + "candidates": [ + { + "name": "Vladislav S. Yanovsky", + "votes": 450, + "writeIn": false + } + ], + "otherVotes": 7, + "blankVotes": 215, + "totalVotes": 672 + } + }, + { + "id": 163960, + "year": 2024, + "office": "State Representative", + "districts": "12th Middlesex", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164014, + "year": 2024, + "office": "State Representative", + "districts": "13th Middlesex", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Virginia-A-Gardner" + ], + "result": { + "candidates": [ + { + "name": "Virginia A Gardner", + "votes": 151, + "writeIn": true + } + ], + "otherVotes": 23, + "blankVotes": 1035, + "totalVotes": 1209 + } + }, + { + "id": 163540, + "year": 2024, + "office": "State Representative", + "districts": "14th Middlesex", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Doreen-Ann-Deshler" + ], + "result": { + "candidates": [ + { + "name": "Doreen Ann Deshler", + "votes": 62, + "writeIn": true + } + ], + "otherVotes": 36, + "blankVotes": 1333, + "totalVotes": 1431 + } + }, + { + "id": 164137, + "year": 2024, + "office": "State Representative", + "districts": "15th Middlesex", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163990, + "year": 2024, + "office": "State Representative", + "districts": "16th Middlesex", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164146, + "year": 2024, + "office": "State Representative", + "districts": "17th Middlesex", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164143, + "year": 2024, + "office": "State Representative", + "districts": "18th Middlesex", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164269, + "year": 2024, + "office": "State Representative", + "districts": "19th Middlesex", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Paul-Sarnowski" + ], + "result": { + "candidates": [ + { + "name": "Paul Sarnowski", + "votes": 1591, + "writeIn": false + } + ], + "otherVotes": 14, + "blankVotes": 448, + "totalVotes": 2053 + } + }, + { + "id": 164164, + "year": 2024, + "office": "State Representative", + "districts": "20th Middlesex", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Bradley-H-Jones-Jr" + ], + "result": { + "candidates": [ + { + "name": "Bradley H. Jones, Jr", + "votes": 2019, + "writeIn": false + } + ], + "otherVotes": 4, + "blankVotes": 391, + "totalVotes": 2414 + } + }, + { + "id": 163789, + "year": 2024, + "office": "State Representative", + "districts": "21st Middlesex", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163831, + "year": 2024, + "office": "State Representative", + "districts": "22nd Middlesex", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Marc-T-Lombardo" + ], + "result": { + "candidates": [ + { + "name": "Marc T. Lombardo", + "votes": 1657, + "writeIn": false + } + ], + "otherVotes": 25, + "blankVotes": 232, + "totalVotes": 1914 + } + }, + { + "id": 163681, + "year": 2024, + "office": "State Representative", + "districts": "23rd Middlesex", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163678, + "year": 2024, + "office": "State Representative", + "districts": "24th Middlesex", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163966, + "year": 2024, + "office": "State Representative", + "districts": "25th Middlesex", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163972, + "year": 2024, + "office": "State Representative", + "districts": "26th Middlesex", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164251, + "year": 2024, + "office": "State Representative", + "districts": "27th Middlesex", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164059, + "year": 2024, + "office": "State Representative", + "districts": "28th Middlesex", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163969, + "year": 2024, + "office": "State Representative", + "districts": "29th Middlesex", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164236, + "year": 2024, + "office": "State Representative", + "districts": "30th Middlesex", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164266, + "year": 2024, + "office": "State Representative", + "districts": "31st Middlesex", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164170, + "year": 2024, + "office": "State Representative", + "districts": "32nd Middlesex", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164173, + "year": 2024, + "office": "State Representative", + "districts": "33rd Middlesex", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164188, + "year": 2024, + "office": "State Representative", + "districts": "34th Middlesex", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164167, + "year": 2024, + "office": "State Representative", + "districts": "35th Middlesex", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164035, + "year": 2024, + "office": "State Representative", + "districts": "36th Middlesex", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163543, + "year": 2024, + "office": "State Representative", + "districts": "37th Middlesex", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Gary-J-Grossi" + ], + "result": { + "candidates": [ + { + "name": "Gary J. Grossi", + "votes": 95, + "writeIn": true + } + ], + "otherVotes": 50, + "blankVotes": 1233, + "totalVotes": 1378 + } + }, + { + "id": 164230, + "year": 2024, + "office": "State Representative", + "districts": "1st Norfolk", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164233, + "year": 2024, + "office": "State Representative", + "districts": "2nd Norfolk", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Sharon-Marie-Cintolo" + ], + "result": { + "candidates": [ + { + "name": "Sharon Marie Cintolo", + "votes": 1030, + "writeIn": false + } + ], + "otherVotes": 24, + "blankVotes": 602, + "totalVotes": 1656 + } + }, + { + "id": 164113, + "year": 2024, + "office": "State Representative", + "districts": "3rd Norfolk", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164278, + "year": 2024, + "office": "State Representative", + "districts": "4th Norfolk", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163933, + "year": 2024, + "office": "State Representative", + "districts": "5th Norfolk", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163759, + "year": 2024, + "office": "State Representative", + "districts": "6th Norfolk", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164191, + "year": 2024, + "office": "State Representative", + "districts": "7th Norfolk", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164179, + "year": 2024, + "office": "State Representative", + "districts": "8th Norfolk", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164185, + "year": 2024, + "office": "State Representative", + "districts": "9th Norfolk", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Marcus-S-Vaughn" + ], + "result": { + "candidates": [ + { + "name": "Marcus S. Vaughn", + "votes": 2232, + "writeIn": false + } + ], + "otherVotes": 6, + "blankVotes": 372, + "totalVotes": 2610 + } + }, + { + "id": 164089, + "year": 2024, + "office": "State Representative", + "districts": "10th Norfolk", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Charles-F-Bailey-III" + ], + "result": { + "candidates": [ + { + "name": "Charles F. Bailey, III", + "votes": 1730, + "writeIn": false + } + ], + "otherVotes": 22, + "blankVotes": 347, + "totalVotes": 2099 + } + }, + { + "id": 164023, + "year": 2024, + "office": "State Representative", + "districts": "11th Norfolk", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164218, + "year": 2024, + "office": "State Representative", + "districts": "12th Norfolk", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164032, + "year": 2024, + "office": "State Representative", + "districts": "13th Norfolk", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164140, + "year": 2024, + "office": "State Representative", + "districts": "14th Norfolk", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163957, + "year": 2024, + "office": "State Representative", + "districts": "15th Norfolk", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164227, + "year": 2024, + "office": "State Representative", + "districts": "1st Plymouth", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Jesse-G-Brown", + "https://electionstats.state.ma.us/candidates/view/Dee-Wallace-Spencer" + ], + "result": { + "candidates": [ + { + "name": "Jesse G. Brown", + "votes": 2241, + "writeIn": false + }, + { + "name": "Dee Wallace Spencer", + "votes": 2027, + "writeIn": false + } + ], + "otherVotes": 8, + "blankVotes": 167, + "totalVotes": 4443 + } + }, + { + "id": 163978, + "year": 2024, + "office": "State Representative", + "districts": "2nd Plymouth", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/John-Robert-Gaskey", + "https://electionstats.state.ma.us/candidates/view/Susan-Williams-Gifford" + ], + "result": { + "candidates": [ + { + "name": "John Robert Gaskey", + "votes": 1811, + "writeIn": false + }, + { + "name": "Susan Williams Gifford", + "votes": 1258, + "writeIn": false + } + ], + "otherVotes": 2, + "blankVotes": 50, + "totalVotes": 3121 + } + }, + { + "id": 164008, + "year": 2024, + "office": "State Representative", + "districts": "3rd Plymouth", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164182, + "year": 2024, + "office": "State Representative", + "districts": "4th Plymouth", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164101, + "year": 2024, + "office": "State Representative", + "districts": "5th Plymouth", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/David-F-Decoste" + ], + "result": { + "candidates": [ + { + "name": "David F. Decoste", + "votes": 2266, + "writeIn": false + } + ], + "otherVotes": 13, + "blankVotes": 298, + "totalVotes": 2577 + } + }, + { + "id": 164041, + "year": 2024, + "office": "State Representative", + "districts": "6th Plymouth", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Kenneth-Sweezey", + "https://electionstats.state.ma.us/candidates/view/Jane-L-Cournan" + ], + "result": { + "candidates": [ + { + "name": "Kenneth Peter Sweezey", + "votes": 1846, + "writeIn": false + }, + { + "name": "Jane L. Cournan", + "votes": 1681, + "writeIn": false + } + ], + "otherVotes": 1, + "blankVotes": 92, + "totalVotes": 3620 + } + }, + { + "id": 163519, + "year": 2024, + "office": "State Representative", + "districts": "7th Plymouth", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Alyson-M-Sullivan-Almeida" + ], + "result": { + "candidates": [ + { + "name": "Alyson M. Sullivan-Almeida", + "votes": 1829, + "writeIn": false + } + ], + "otherVotes": 7, + "blankVotes": 319, + "totalVotes": 2155 + } + }, + { + "id": 163942, + "year": 2024, + "office": "State Representative", + "districts": "8th Plymouth", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Sandra-M-Wright" + ], + "result": { + "candidates": [ + { + "name": "Sandra M. Wright", + "votes": 1516, + "writeIn": false + } + ], + "otherVotes": 5, + "blankVotes": 330, + "totalVotes": 1851 + } + }, + { + "id": 163951, + "year": 2024, + "office": "State Representative", + "districts": "9th Plymouth", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Lawrence-Peter-Novak" + ], + "result": { + "candidates": [ + { + "name": "Lawrence Peter Novak", + "votes": 1244, + "writeIn": false + } + ], + "otherVotes": 12, + "blankVotes": 440, + "totalVotes": 1696 + } + }, + { + "id": 163954, + "year": 2024, + "office": "State Representative", + "districts": "10th Plymouth", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163948, + "year": 2024, + "office": "State Representative", + "districts": "11th Plymouth", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164098, + "year": 2024, + "office": "State Representative", + "districts": "12th Plymouth", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Eric-J-Meschino" + ], + "result": { + "candidates": [ + { + "name": "Eric J. Meschino", + "votes": 2553, + "writeIn": false + } + ], + "otherVotes": 7, + "blankVotes": 652, + "totalVotes": 3212 + } + }, + { + "id": 163873, + "year": 2024, + "office": "State Representative", + "districts": "1st Suffolk", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163885, + "year": 2024, + "office": "State Representative", + "districts": "2nd Suffolk", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163900, + "year": 2024, + "office": "State Representative", + "districts": "3rd Suffolk", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163879, + "year": 2024, + "office": "State Representative", + "districts": "4th Suffolk", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163870, + "year": 2024, + "office": "State Representative", + "districts": "5th Suffolk", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163894, + "year": 2024, + "office": "State Representative", + "districts": "6th Suffolk", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163891, + "year": 2024, + "office": "State Representative", + "districts": "7th Suffolk", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163864, + "year": 2024, + "office": "State Representative", + "districts": "8th Suffolk", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163882, + "year": 2024, + "office": "State Representative", + "districts": "9th Suffolk", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Roy-A-Owens" + ], + "result": { + "candidates": [ + { + "name": "Roy A. Owens", + "votes": 179, + "writeIn": false + } + ], + "otherVotes": 11, + "blankVotes": 88, + "totalVotes": 278 + } + }, + { + "id": 163897, + "year": 2024, + "office": "State Representative", + "districts": "10th Suffolk", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163993, + "year": 2024, + "office": "State Representative", + "districts": "11th Suffolk", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163906, + "year": 2024, + "office": "State Representative", + "districts": "12th Suffolk", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163903, + "year": 2024, + "office": "State Representative", + "districts": "13th Suffolk", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163876, + "year": 2024, + "office": "State Representative", + "districts": "14th Suffolk", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163867, + "year": 2024, + "office": "State Representative", + "districts": "15th Suffolk", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164242, + "year": 2024, + "office": "State Representative", + "districts": "16th Suffolk", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163888, + "year": 2024, + "office": "State Representative", + "districts": "17th Suffolk", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163861, + "year": 2024, + "office": "State Representative", + "districts": "18th Suffolk", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164239, + "year": 2024, + "office": "State Representative", + "districts": "19th Suffolk", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164116, + "year": 2024, + "office": "State Representative", + "districts": "1st Worcester", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Kimberly-N-Ferguson" + ], + "result": { + "candidates": [ + { + "name": "Kimberly N. Ferguson", + "votes": 2278, + "writeIn": false + } + ], + "otherVotes": 7, + "blankVotes": 336, + "totalVotes": 2621 + } + }, + { + "id": 163693, + "year": 2024, + "office": "State Representative", + "districts": "2nd Worcester", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Bruce-K-Chester" + ], + "result": { + "candidates": [ + { + "name": "Bruce K. Chester", + "votes": 1396, + "writeIn": false + } + ], + "otherVotes": 10, + "blankVotes": 216, + "totalVotes": 1622 + } + }, + { + "id": 164074, + "year": 2024, + "office": "State Representative", + "districts": "3rd Worcester", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164134, + "year": 2024, + "office": "State Representative", + "districts": "4th Worcester", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Salvatore-Perla" + ], + "result": { + "candidates": [ + { + "name": "Salvatore Perla", + "votes": 1295, + "writeIn": false + } + ], + "otherVotes": 3, + "blankVotes": 248, + "totalVotes": 1546 + } + }, + { + "id": 163780, + "year": 2024, + "office": "State Representative", + "districts": "5th Worcester", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Donald-R-Berthiaume-Jr" + ], + "result": { + "candidates": [ + { + "name": "Donald R. Berthiaume, Jr", + "votes": 2444, + "writeIn": false + } + ], + "otherVotes": 8, + "blankVotes": 282, + "totalVotes": 2734 + } + }, + { + "id": 160413, + "year": 2024, + "office": "State Representative", + "districts": "6th Worcester", + "party": "Republican", + "special": true, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/John-J-Marsi-Jr", + "https://electionstats.state.ma.us/candidates/view/David-S-Adams" + ], + "result": { + "candidates": [ + { + "name": "John J. Marsi, Jr", + "votes": 1189, + "writeIn": false + }, + { + "name": "David S. Adams", + "votes": 1044, + "writeIn": false + } + ], + "otherVotes": 3, + "blankVotes": 7, + "totalVotes": 2243 + } + }, + { + "id": 163981, + "year": 2024, + "office": "State Representative", + "districts": "6th Worcester", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/John-J-Marsi-Jr" + ], + "result": { + "candidates": [ + { + "name": "John J. Marsi, Jr", + "votes": 1711, + "writeIn": false + } + ], + "otherVotes": 15, + "blankVotes": 248, + "totalVotes": 1974 + } + }, + { + "id": 163744, + "year": 2024, + "office": "State Representative", + "districts": "7th Worcester", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Paul-K-Frost", + "https://electionstats.state.ma.us/candidates/view/Michelle-L-Frigon" + ], + "result": { + "candidates": [ + { + "name": "Paul K. Frost", + "votes": 2107, + "writeIn": false + }, + { + "name": "Michelle L. Frigon", + "votes": 476, + "writeIn": false + } + ], + "otherVotes": 2, + "blankVotes": 59, + "totalVotes": 2644 + } + }, + { + "id": 163801, + "year": 2024, + "office": "State Representative", + "districts": "8th Worcester", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Michael-J-Soter" + ], + "result": { + "candidates": [ + { + "name": "Michael J. Soter", + "votes": 1765, + "writeIn": false + } + ], + "otherVotes": 29, + "blankVotes": 265, + "totalVotes": 2059 + } + }, + { + "id": 164095, + "year": 2024, + "office": "State Representative", + "districts": "9th Worcester", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/David-Kent-Muradian-Jr" + ], + "result": { + "candidates": [ + { + "name": "David Kent Muradian, Jr", + "votes": 1597, + "writeIn": false + } + ], + "otherVotes": 8, + "blankVotes": 207, + "totalVotes": 1812 + } + }, + { + "id": 164122, + "year": 2024, + "office": "State Representative", + "districts": "10th Worcester", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164248, + "year": 2024, + "office": "State Representative", + "districts": "11th Worcester", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Hannah-E-Kane" + ], + "result": { + "candidates": [ + { + "name": "Hannah E. Kane", + "votes": 1093, + "writeIn": false + } + ], + "otherVotes": 4, + "blankVotes": 165, + "totalVotes": 1262 + } + }, + { + "id": 163816, + "year": 2024, + "office": "State Representative", + "districts": "12th Worcester", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164287, + "year": 2024, + "office": "State Representative", + "districts": "13th Worcester", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164275, + "year": 2024, + "office": "State Representative", + "districts": "14th Worcester", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164281, + "year": 2024, + "office": "State Representative", + "districts": "15th Worcester", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164284, + "year": 2024, + "office": "State Representative", + "districts": "16th Worcester", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164131, + "year": 2024, + "office": "State Representative", + "districts": "17th Worcester", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164029, + "year": 2024, + "office": "State Representative", + "districts": "18th Worcester", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Joseph-D-Mckenna" + ], + "result": { + "candidates": [ + { + "name": "Joseph D. Mckenna", + "votes": 1944, + "writeIn": false + } + ], + "otherVotes": 9, + "blankVotes": 293, + "totalVotes": 2246 + } + }, + { + "id": 164083, + "year": 2024, + "office": "State Representative", + "districts": "19th Worcester", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163765, + "year": 2024, + "office": "Clerk of Courts", + "districts": "Barnstable County", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163573, + "year": 2024, + "office": "Clerk of Courts", + "districts": "Berkshire County", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163549, + "year": 2024, + "office": "Clerk of Courts", + "districts": "Bristol County", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163660, + "year": 2024, + "office": "Clerk of Courts", + "districts": "Dukes County", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163612, + "year": 2024, + "office": "Clerk of Courts", + "districts": "Essex County", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163705, + "year": 2024, + "office": "Clerk of Courts", + "districts": "Franklin County", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163591, + "year": 2024, + "office": "Clerk of Courts", + "districts": "Hampden County", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163633, + "year": 2024, + "office": "Clerk of Courts", + "districts": "Hampshire County", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163528, + "year": 2024, + "office": "Clerk of Courts", + "districts": "Middlesex County", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164194, + "year": 2024, + "office": "Clerk of Courts", + "districts": "Nantucket County", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163750, + "year": 2024, + "office": "Clerk of Courts", + "districts": "Norfolk County", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163504, + "year": 2024, + "office": "Clerk of Courts", + "districts": "Plymouth County", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163687, + "year": 2024, + "office": "Clerk of Courts", + "districts": "Worcester County", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163840, + "year": 2024, + "office": "Clerk of Superior Court (Civil)", + "districts": "Suffolk County", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163843, + "year": 2024, + "office": "Clerk of Superior Court (Criminal)", + "districts": "Suffolk County", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163846, + "year": 2024, + "office": "Clerk of Supreme Judicial Court", + "districts": "Suffolk County", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163771, + "year": 2024, + "office": "Register of Deeds", + "districts": "Barnstable", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/John-F-Meade" + ], + "result": { + "candidates": [ + { + "name": "John F. Meade", + "votes": 12804, + "writeIn": false + } + ], + "otherVotes": 39, + "blankVotes": 2542, + "totalVotes": 15385 + } + }, + { + "id": 163786, + "year": 2024, + "office": "Register of Deeds", + "districts": "Berkshire Middle", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163579, + "year": 2024, + "office": "Register of Deeds", + "districts": "Berkshire Northern", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163606, + "year": 2024, + "office": "Register of Deeds", + "districts": "Berkshire Southern", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163729, + "year": 2024, + "office": "Register of Deeds", + "districts": "Bristol Northern", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163558, + "year": 2024, + "office": "Register of Deeds", + "districts": "Bristol Southern", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163666, + "year": 2024, + "office": "Register of Deeds", + "districts": "Dukes", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163651, + "year": 2024, + "office": "Register of Deeds", + "districts": "Essex Northern", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163618, + "year": 2024, + "office": "Register of Deeds", + "districts": "Essex Southern", + "party": "Republican", + "special": false, + "candidateUrls": [ + "https://electionstats.state.ma.us/candidates/view/Jonathan-Edward-Ring" + ], + "result": { + "candidates": [ + { + "name": "Jonathan Edward Ring", + "votes": 15951, + "writeIn": false + } + ], + "otherVotes": 156, + "blankVotes": 4812, + "totalVotes": 20919 + } + }, + { + "id": 164062, + "year": 2024, + "office": "Register of Deeds", + "districts": "Fall River", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163708, + "year": 2024, + "office": "Register of Deeds", + "districts": "Franklin", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163594, + "year": 2024, + "office": "Register of Deeds", + "districts": "Hampden", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163636, + "year": 2024, + "office": "Register of Deeds", + "districts": "Hampshire", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163828, + "year": 2024, + "office": "Register of Deeds", + "districts": "Middlesex Northern", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163534, + "year": 2024, + "office": "Register of Deeds", + "districts": "Middlesex Southern", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 164197, + "year": 2024, + "office": "Register of Deeds", + "districts": "Nantucket", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163756, + "year": 2024, + "office": "Register of Deeds", + "districts": "Norfolk", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163513, + "year": 2024, + "office": "Register of Deeds", + "districts": "Plymouth", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163852, + "year": 2024, + "office": "Register of Deeds", + "districts": "Suffolk", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163723, + "year": 2024, + "office": "Register of Deeds", + "districts": "Worcester", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163690, + "year": 2024, + "office": "Register of Deeds", + "districts": "Worcester Northern", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163639, + "year": 2024, + "office": "Register of Probate", + "districts": "Hampshire County", + "candidateUrls": [], + "party": "Republican", + "special": false + }, + { + "id": 163855, + "year": 2024, + "office": "Register of Probate", + "districts": "Suffolk County", + "candidateUrls": [], + "party": "Republican", + "special": false + } +] \ No newline at end of file