From 34cd7d9c998326d989319275281cbfb0db00a31c Mon Sep 17 00:00:00 2001 From: "Nathan E. Sanders" Date: Mon, 20 Jul 2026 22:05:43 -0400 Subject: [PATCH 01/13] fix: replace homepage screenshot with Bills search preview (#2206) Closes #2205 Co-authored-by: Claude Sonnet 4.6 --- components/homepage/FeaturesSection.tsx | 2 +- .../feature-preview-ballot-question.png | Bin 175462 -> 0 bytes .../homepage/feature-preview-browse-bills.png | Bin 0 -> 101148 bytes 3 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 public/homepage/feature-preview-ballot-question.png create mode 100644 public/homepage/feature-preview-browse-bills.png 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/public/homepage/feature-preview-ballot-question.png b/public/homepage/feature-preview-ballot-question.png deleted file mode 100644 index ea5cbcb4af3ac6e74d1efbd06df8a83638c0942b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 175462 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

xX4~`48X5z(#ZkZo6#$Tvc!>Pg; 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�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⁢F0h?`fB3jm+34cI` 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

|0ScAi-7g0~`Ez z$^p&5$NWJX8WMHp)O|bB# zLobgiU%PQicE2tT3=YOL?Vh9Zez!PPWhoqQX+QnrW$TfWq}yw`rSV{Or?r}?R}gzf zj9iho9Q9Y93dcWNSW;80DMEl~(A_P9gKv)TWU1~<@2r8tYsuzYRP>YbBYxFB9~^qU zUhQ}y{Qo~HY_72^zG5tJ#ofc&N=omC1A9!Cz!@=^J zyksnVV}vQm!8a^pAu{f#+#S-gS+T$qPb7J zH~;+VaRpwIJWWgaCR5?EvVD0o-)oNk>NP{&^nth^g#;R3k+NVl?JtgmaMg%HvrLY~ zz${rwR9<1D=wyZK5qy!-SyPd5Br-K~Zs&*Kp?tnP;az_L%w|hbLrGo{$e+9lxV?Xy zGT%ok{A52QoI79Fa6H&Zp?ckhWbnLai*V2?g;4+Z^{Kt8__>rr~kf8wPb<3ocU?)!@c=&5AXgYJ+6CDJRp6t zx>RWBvTHR^3}tq}vAs1YKJYELh6bM{GJ6$y16CfP!ebZAJFmK9GUz2?$bLK9&=sG@ zoY0I1z$#(fjIOpfBHFTfm?1h+xr>bqb~lv2rwv3LK{1+0u>N5Six$iHVw%9xrsZc$ zSugdig;N#T>ha4MiV&t`A@K3v@IDn|g`j0$A(HD<$ow^Rkbr Date: Tue, 21 Jul 2026 13:11:41 -0400 Subject: [PATCH 02/13] [Our Team page, Partners tab] remove shoopty whoop (#2201) * remove shoopty whoop * minty fresh * cleanup --- components/OurTeam/Partners.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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: ( Date: Tue, 21 Jul 2026 18:48:19 -0400 Subject: [PATCH 03/13] fix org socials (#2197) --- components/EditProfilePage/PersonalInfoTab.tsx | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) diff --git a/components/EditProfilePage/PersonalInfoTab.tsx b/components/EditProfilePage/PersonalInfoTab.tsx index b6d70364c..3e4574943 100644 --- a/components/EditProfilePage/PersonalInfoTab.tsx +++ b/components/EditProfilePage/PersonalInfoTab.tsx @@ -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")} /> - - )} From 7dfb9735f60044dbb7103ee0e987b98190349b85 Mon Sep 17 00:00:00 2001 From: mertbagt <73559781+mertbagt@users.noreply.github.com> Date: Tue, 21 Jul 2026 20:20:16 -0400 Subject: [PATCH 04/13] [Legislator Page] pipe in Maple profile (#2181) * maple profile * added profile social links * reinstate biography * reinstate TestimonyTab * corrected stroke-width to strokeWidth * cleanup * clarity * margin tweaks * cleanup * cleanup testimonyTab * more cleanup * tweaked disclaimer border * added public and limit to query --- .../EditProfilePage/PersonalInfoTab.tsx | 4 +- .../LegislatorComponents.tsx | 15 ++ .../LegislatorProfilePage.tsx | 122 +++++++------- .../LegislatorProfile/LegislatorSidebar.tsx | 19 ++- .../LegislatorProfile/LegislatorTabs.tsx | 6 +- .../SidebarComponents/Biography.tsx | 150 +++++++++++++++++- .../TabComponents/TestimonyTab.tsx | 97 ++++++++++- .../TestimonyTab_PendingProfileLink.tsx | 95 ----------- components/db/profile/urlCleanup.ts | 2 +- public/locales/en/legislators.json | 7 +- 10 files changed, 357 insertions(+), 160 deletions(-) delete mode 100644 components/LegislatorProfile/TabComponents/TestimonyTab_PendingProfileLink.tsx diff --git a/components/EditProfilePage/PersonalInfoTab.tsx b/components/EditProfilePage/PersonalInfoTab.tsx index 3e4574943..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 ) { 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..3e02284ef 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" @@ -24,25 +28,6 @@ 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,6 +109,7 @@ export function LegislatorProfilePage({ court: number memberCode: string }) { + const { user } = useAuth() const { member, loading: memberLoading } = useMember(court, memberCode) const { district, loading: districtLoading } = useDistrict( court, @@ -131,24 +117,32 @@ export function LegislatorProfilePage({ member?.District ) 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 +215,14 @@ export function LegislatorProfilePage({ - {profile.website ? ( + {legislatorData[0]?.website ? (

) : ( @@ -252,17 +246,18 @@ export function LegislatorProfilePage({ )} - {/* uncomment when legislator Maple accounts are linked to this page - - {user && legislatorAccountId ? ( + {user && legislatorId ? (
- +
) : ( <> - )} */} + )} - + 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.tsx b/components/LegislatorProfile/LegislatorTabs.tsx index 40c264453..6f2791f19 100644 --- a/components/LegislatorProfile/LegislatorTabs.tsx +++ b/components/LegislatorProfile/LegislatorTabs.tsx @@ -66,10 +66,14 @@ const TabNavItem = ({ export function LegislatorTabs({ district, districtLoading, + legislatorId, + name, tabCategory }: { district?: District | undefined districtLoading?: boolean + legislatorId: string + name: string tabCategory?: TabCategories }) { const { t } = useTranslation("legislators") @@ -103,7 +107,7 @@ export function LegislatorTabs({ { title: t("tabs.testimony"), eventKey: "testimony", - content: + content: }, { title: t("tabs.votes"), 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/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/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/public/locales/en/legislators.json b/public/locales/en/legislators.json index 886f6a1ba..4a9e69920 100644 --- a/public/locales/en/legislators.json +++ b/public/locales/en/legislators.json @@ -1,13 +1,17 @@ { + "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", "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 +19,7 @@ }, "stateRepresentative": "State Representative", "stateSenator": "State Senator", + "submit": "Submit", "tabs": { "bills": "Bills", "district": "District", From 91d239d53a696ff7d021438df91cac9c3d088d1b Mon Sep 17 00:00:00 2001 From: Janice Lichtman Date: Tue, 21 Jul 2026 22:16:00 -0400 Subject: [PATCH 05/13] Add OCPF campaign finance scraper and Finance tab (#2195) --- .../LegislatorProfilePage.tsx | 9 +- .../LegislatorProfile/LegislatorTabs.tsx | 7 +- .../TabComponents/FinanceTab.tsx | 293 ++++++++- components/db/membersFinance.ts | 89 +++ functions/src/index.ts | 1 + functions/src/ocpf/scrapeOcpfFinance.ts | 597 ++++++++++++++++++ functions/src/ocpf/types.ts | 54 ++ public/locales/en/legislators.json | 34 + 8 files changed, 1078 insertions(+), 6 deletions(-) create mode 100644 components/db/membersFinance.ts create mode 100644 functions/src/ocpf/scrapeOcpfFinance.ts diff --git a/components/LegislatorProfile/LegislatorProfilePage.tsx b/components/LegislatorProfile/LegislatorProfilePage.tsx index 3e02284ef..24ea34433 100644 --- a/components/LegislatorProfile/LegislatorProfilePage.tsx +++ b/components/LegislatorProfile/LegislatorProfilePage.tsx @@ -24,6 +24,7 @@ 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" @@ -116,6 +117,7 @@ export function LegislatorProfilePage({ member?.Branch, member?.District ) + const { finance } = useMembersFinance(court, memberCode) const { t } = useTranslation("legislators") const [legislatorId, setLegislatorId] = useState("") @@ -352,7 +354,11 @@ export function LegislatorProfilePage({ - ? + + {finance?.totalRaised != null + ? "$" + Math.round(finance.totalRaised).toLocaleString() + : "?"} + {t("fundsRaised")} @@ -365,6 +371,7 @@ export function LegislatorProfilePage({ districtLoading={districtLoading} legislatorId={legislatorId} name={member.Name} + finance={finance} /> diff --git a/components/LegislatorProfile/LegislatorTabs.tsx b/components/LegislatorProfile/LegislatorTabs.tsx index 6f2791f19..f0d91c148 100644 --- a/components/LegislatorProfile/LegislatorTabs.tsx +++ b/components/LegislatorProfile/LegislatorTabs.tsx @@ -19,6 +19,7 @@ import { TabNavWrapper, TabType } from "components/EditProfilePage/StyledEditProfileComponents" +import { MembersFinance } from "components/db/membersFinance" const tabCategory = [ "priorities", @@ -68,13 +69,15 @@ export function LegislatorTabs({ districtLoading, legislatorId, name, - tabCategory + tabCategory, + finance }: { district?: District | undefined districtLoading?: boolean legislatorId: string name: string tabCategory?: TabCategories + finance?: MembersFinance }) { const { t } = useTranslation("legislators") @@ -97,7 +100,7 @@ export function LegislatorTabs({ { title: t("tabs.finance"), eventKey: "finance", - content: + content: }, { title: t("tabs.district"), diff --git a/components/LegislatorProfile/TabComponents/FinanceTab.tsx b/components/LegislatorProfile/TabComponents/FinanceTab.tsx index 4c263d26a..a88f97112 100644 --- a/components/LegislatorProfile/TabComponents/FinanceTab.tsx +++ b/components/LegislatorProfile/TabComponents/FinanceTab.tsx @@ -1,5 +1,292 @@ -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 nonContribution = finance.otherReceipts?.nonContribution?.amount ?? 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")} +

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

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

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

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

+ )} +
+ ) } diff --git a/components/db/membersFinance.ts b/components/db/membersFinance.ts new file mode 100644 index 000000000..7b01ae19a --- /dev/null +++ b/components/db/membersFinance.ts @@ -0,0 +1,89 @@ +import { Timestamp } from "firebase/firestore" +import { useMemo } from "react" +import { useAsync } from "react-async-hook" +import { loadDoc } from "./common" + +// Mirror of functions/src/ocpf/types.ts MembersFinance, using client-side Timestamp +export interface FinanceBreakdownEntry { + count: number + amount: number +} + +export interface MembersFinanceBreakdown { + individual: FinanceBreakdownEntry + 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 + contributions: FinanceBreakdownEntry +} + +export interface MembersFinanceInKind { + individual: FinanceBreakdownEntry + committee: FinanceBreakdownEntry + union: FinanceBreakdownEntry + unitemized: { amount: number } +} + +export interface MembersFinanceOtherReceipts { + nonContribution: FinanceBreakdownEntry +} + +export interface MembersFinanceYearData { + totalRaised: number + totalSpent: number + breakdown: MembersFinanceBreakdown + finalized: boolean +} + +export interface MembersFinance { + ocpfCpfId: number + totalRaised: number + totalSpent: number + cashOnHand: number + contributorCount: number + lastUpdated: Timestamp + // End_Date of the most recent Bank Report (type 70) — the basis for totalRaised/cashOnHand. + bankDataAsOf?: 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?: Timestamp + breakdown: MembersFinanceBreakdown + candidateFunds: MembersFinanceCandidateFunds + inKind: MembersFinanceInKind + otherReceipts: MembersFinanceOtherReceipts + years: Record +} + +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/functions/src/index.ts b/functions/src/index.ts index 95b515dd3..54ec1a6cf 100644 --- a/functions/src/index.ts +++ b/functions/src/index.ts @@ -62,6 +62,7 @@ export { export { transcription } from "./webhooks" export { matchOcpfMembers } from "./ocpf/matchOcpfMembers" +export { scrapeOcpfFinance } from "./ocpf/scrapeOcpfFinance" export * from "./triggerPubsubFunction" diff --git a/functions/src/ocpf/scrapeOcpfFinance.ts b/functions/src/ocpf/scrapeOcpfFinance.ts new file mode 100644 index 000000000..d4a18409a --- /dev/null +++ b/functions/src/ocpf/scrapeOcpfFinance.ts @@ -0,0 +1,597 @@ +// 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, + MembersFinanceOtherReceipts, + 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) +]) + +// ── 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 + 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 } + } + otherReceipts: { + nonContribution: MutableBreakdownEntry + } + 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, + 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 } + }, + otherReceipts: { nonContribution: emptyEntry() }, + 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, + 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, + otherReceipts: acc.otherReceipts as MembersFinanceOtherReceipts, + 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"], + endBalance: ["end_balance"], + 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 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 + } + + // 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 + } + // 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 + addTo(acc.otherReceipts.nonContribution) + 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) come from reports.txt, not items + default: + break + } +} diff --git a/functions/src/ocpf/types.ts b/functions/src/ocpf/types.ts index ae61e2ce9..5ae323d1d 100644 --- a/functions/src/ocpf/types.ts +++ b/functions/src/ocpf/types.ts @@ -38,4 +38,58 @@ 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 MembersFinanceOtherReceipts { + nonContribution: FinanceBreakdownEntry // type 204 +} + +export interface MembersFinanceYearData { + totalRaised: number + totalSpent: number + breakdown: MembersFinanceBreakdown + finalized: boolean +} + +// Firestore: /generalCourts/{court}/membersFinance/{memberCode} +export interface MembersFinance { + ocpfCpfId: number + totalRaised: number + totalSpent: number + cashOnHand: 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 + otherReceipts: MembersFinanceOtherReceipts + years: Record } diff --git a/public/locales/en/legislators.json b/public/locales/en/legislators.json index 4a9e69920..0714b478b 100644 --- a/public/locales/en/legislators.json +++ b/public/locales/en/legislators.json @@ -7,6 +7,40 @@ "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.", + "otherReceipts": "Other non-contribution receipts: {{amount}} (refunds and miscellaneous receipts — not included above)", + "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", From eee144433dfee8639c8076414531610e816eb190 Mon Sep 17 00:00:00 2001 From: Sam DeMarrais Date: Tue, 21 Jul 2026 22:17:01 -0400 Subject: [PATCH 06/13] Election scraping (#2178) * Election scraping * Further election scraping * More robust elections * Prettier * Various election bugfixes * Tests and election id handling * Prettier --- .prettierignore | 1 + functions/src/index.ts | 1 + functions/src/legislators/ElectionScraper.ts | 50 + functions/src/legislators/electionTypes.ts | 120 + functions/src/legislators/index.ts | 1 + .../src/legislators/scrapeElections.test.ts | 55 + functions/src/legislators/scrapeElections.ts | 377 + scripts/firebase-admin/backfillElections.ts | 22 + test.log | 3759 +++ .../electionResults/2016_general.html | 20209 ++++++++++++++++ .../electionResults/2016_general.json | 6497 +++++ .../electionResults/2016_general_table.html | 3491 +++ .../electionResults/2022_to_2026.html | 9867 ++++++++ .../electionResults/2022_to_2026.json | 2267 ++ .../2024_republican_primaries.html | 17208 +++++++++++++ .../2024_republican_primaries.json | 5716 +++++ 16 files changed, 69641 insertions(+) create mode 100644 functions/src/legislators/ElectionScraper.ts create mode 100644 functions/src/legislators/electionTypes.ts create mode 100644 functions/src/legislators/index.ts create mode 100644 functions/src/legislators/scrapeElections.test.ts create mode 100644 functions/src/legislators/scrapeElections.ts create mode 100644 scripts/firebase-admin/backfillElections.ts create mode 100644 test.log create mode 100644 tests/fixtures/electionResults/2016_general.html create mode 100644 tests/fixtures/electionResults/2016_general.json create mode 100644 tests/fixtures/electionResults/2016_general_table.html create mode 100644 tests/fixtures/electionResults/2022_to_2026.html create mode 100644 tests/fixtures/electionResults/2022_to_2026.json create mode 100644 tests/fixtures/electionResults/2024_republican_primaries.html create mode 100644 tests/fixtures/electionResults/2024_republican_primaries.json 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/functions/src/index.ts b/functions/src/index.ts index 54ec1a6cf..e11b30569 100644 --- a/functions/src/index.ts +++ b/functions/src/index.ts @@ -58,6 +58,7 @@ export { unfollowUser, getFollowers } from "./subscriptions" +export { scrapeElections } from "./legislators" export { transcription } from "./webhooks" 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..fcbe7dbdf --- /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 + } + console.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/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/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 From 24ec2d01bae1e463b3b3040f20a5b2a73c3410c3 Mon Sep 17 00:00:00 2001 From: "Grace (Iron Yard/CaseNEX/IO Account)" Date: Fri, 24 Jul 2026 20:11:38 -0400 Subject: [PATCH 07/13] Revise Learn and About page copy and fix typos (#2207) - Major copy edits to How Testimony Works, Legislative Process, Writing Effective Testimony, Why Use MAPLE page copy - Fix assorted typos including in the How MAPLE Uses AI and Mission & Goals copy --- public/locales/en/forindividuals.json | 8 ++--- public/locales/en/forlegislators.json | 8 ++--- public/locales/en/fororgs.json | 24 ++++++------- public/locales/en/goalsandmission.json | 4 +-- public/locales/en/learn.json | 47 +++++++++++++------------- public/locales/en/mapleAI.json | 4 +-- 6 files changed, 48 insertions(+), 47 deletions(-) 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/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." From 2919c33858480c0572662b37ffebba73289351b7 Mon Sep 17 00:00:00 2001 From: Sam DeMarrais Date: Tue, 28 Jul 2026 20:27:48 -0400 Subject: [PATCH 08/13] Pass through bucketName (#2208) --- functions/src/events/HearingScraper.ts | 20 +++++++++++++++---- .../backfillHearingTranscription.ts | 6 ++++-- 2 files changed, 20 insertions(+), 6 deletions(-) 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/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) { From f5c8005ae1e0a12f4512c5202fe6fc6ed15156c7 Mon Sep 17 00:00:00 2001 From: Janice Lichtman Date: Tue, 28 Jul 2026 20:36:49 -0400 Subject: [PATCH 09/13] Finance scrapper (#2209) * added committee lifecycle reports to the exclusion list to prevent double-counting with bank reports * langauage clarification for handling un-itemized totals * Added election cycle start balance to firestore * removed non-contribution receipts from total received on finance tab --- .../TabComponents/FinanceTab.tsx | 9 ---- components/db/membersFinance.ts | 5 -- functions/src/ocpf/scrapeOcpfFinance.ts | 54 +++++++++++++++---- functions/src/ocpf/types.ts | 12 +++-- public/locales/en/legislators.json | 1 - 5 files changed, 52 insertions(+), 29 deletions(-) diff --git a/components/LegislatorProfile/TabComponents/FinanceTab.tsx b/components/LegislatorProfile/TabComponents/FinanceTab.tsx index a88f97112..18a5ce105 100644 --- a/components/LegislatorProfile/TabComponents/FinanceTab.tsx +++ b/components/LegislatorProfile/TabComponents/FinanceTab.tsx @@ -57,7 +57,6 @@ export function FinanceTab({ finance }: { finance?: MembersFinance }) { .sort((a, b) => b.value - a.value) const total = categories.reduce((sum, c) => sum + c.value, 0) - const nonContribution = finance.otherReceipts?.nonContribution?.amount ?? 0 const processingFees = finance.breakdown?.processingFees?.amount ?? 0 const smallDonorTotal = @@ -272,14 +271,6 @@ export function FinanceTab({ finance }: { finance?: MembersFinance }) { )} - {nonContribution > 0 && ( -

- {t("finance.otherReceipts", { - amount: formatCurrency(nonContribution) - })} -

- )} - {processingFees > 0 && (

{t("finance.processingFees", { diff --git a/components/db/membersFinance.ts b/components/db/membersFinance.ts index 7b01ae19a..b2196d37e 100644 --- a/components/db/membersFinance.ts +++ b/components/db/membersFinance.ts @@ -38,10 +38,6 @@ export interface MembersFinanceInKind { unitemized: { amount: number } } -export interface MembersFinanceOtherReceipts { - nonContribution: FinanceBreakdownEntry -} - export interface MembersFinanceYearData { totalRaised: number totalSpent: number @@ -65,7 +61,6 @@ export interface MembersFinance { breakdown: MembersFinanceBreakdown candidateFunds: MembersFinanceCandidateFunds inKind: MembersFinanceInKind - otherReceipts: MembersFinanceOtherReceipts years: Record } diff --git a/functions/src/ocpf/scrapeOcpfFinance.ts b/functions/src/ocpf/scrapeOcpfFinance.ts index d4a18409a..bb39e1edc 100644 --- a/functions/src/ocpf/scrapeOcpfFinance.ts +++ b/functions/src/ocpf/scrapeOcpfFinance.ts @@ -13,7 +13,6 @@ import { MembersFinanceBreakdown, MembersFinanceCandidateFunds, MembersFinanceInKind, - MembersFinanceOtherReceipts, MembersFinanceYearData } from "./types" @@ -37,6 +36,18 @@ const YEAR_END_REPORT_TYPE_IDS = new Set([ 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 { @@ -50,6 +61,8 @@ interface MemberAccumulator { 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: { @@ -70,9 +83,6 @@ interface MemberAccumulator { union: MutableBreakdownEntry unitemized: { amount: number } } - otherReceipts: { - nonContribution: MutableBreakdownEntry - } years: Record< string, { @@ -117,6 +127,8 @@ function newAccumulator(cpfId: number): MemberAccumulator { totalSpent: 0, cashOnHand: 0, cashOnHandEndDateMs: 0, + startBalance: 0, + startBalanceStartDateMs: Infinity, depositEndDateMs: 0, contributorCount: 0, breakdown: { @@ -134,7 +146,6 @@ function newAccumulator(cpfId: number): MemberAccumulator { union: emptyEntry(), unitemized: { amount: 0 } }, - otherReceipts: { nonContribution: emptyEntry() }, years: Object.fromEntries(YEARS.map(y => [y, yearInit()])), yearEndCheck: Object.fromEntries(YEARS.map(y => [y, null])) } @@ -280,6 +291,7 @@ export const scrapeOcpfFinance = functions totalRaised: acc.totalRaised, totalSpent: acc.totalSpent, cashOnHand: acc.cashOnHand, + startBalance: acc.startBalance, contributorCount: acc.contributorCount, lastUpdated: now, bankDataAsOf: Timestamp.fromMillis(acc.cashOnHandEndDateMs), @@ -287,7 +299,6 @@ export const scrapeOcpfFinance = functions breakdown: acc.breakdown as MembersFinanceBreakdown, candidateFunds: acc.candidateFunds as MembersFinanceCandidateFunds, inKind: acc.inKind as MembersFinanceInKind, - otherReceipts: acc.otherReceipts as MembersFinanceOtherReceipts, years: Object.fromEntries( Object.entries(acc.years).map(([y, yd]) => [ y, @@ -329,7 +340,9 @@ const REPORT_COLUMN_ALIASES: Record = { receiptsTotal: ["receipts_total"], receiptsUnitemizedTotal: ["receipts_unitemized_total"], expendituresTotal: ["expenditures_total"], + startBalance: ["start_balance"], endBalance: ["end_balance"], + startDate: ["start_date"], endDate: ["end_date"] } @@ -401,6 +414,7 @@ async function parseReports( 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) @@ -419,6 +433,13 @@ async function parseReports( 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 @@ -460,6 +481,14 @@ async function parseReports( 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 @@ -565,8 +594,15 @@ function accumulateItem( case 203: // Union/Association Contribution addTo(acc.breakdown.union, yb?.union) break - case 204: // Non-contribution receipt - addTo(acc.otherReceipts.nonContribution) + 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) @@ -590,7 +626,7 @@ function accumulateItem( 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) come from reports.txt, not items + // 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 5ae323d1d..89b5b1b1f 100644 --- a/functions/src/ocpf/types.ts +++ b/functions/src/ocpf/types.ts @@ -62,10 +62,6 @@ export interface MembersFinanceInKind { unitemized: { amount: number } // type 420 } -export interface MembersFinanceOtherReceipts { - nonContribution: FinanceBreakdownEntry // type 204 -} - export interface MembersFinanceYearData { totalRaised: number totalSpent: number @@ -76,9 +72,16 @@ export interface MembersFinanceYearData { // 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. @@ -90,6 +93,5 @@ export interface MembersFinance { breakdown: MembersFinanceBreakdown candidateFunds: MembersFinanceCandidateFunds inKind: MembersFinanceInKind - otherReceipts: MembersFinanceOtherReceipts years: Record } diff --git a/public/locales/en/legislators.json b/public/locales/en/legislators.json index 0714b478b..c422d3e01 100644 --- a/public/locales/en/legislators.json +++ b/public/locales/en/legislators.json @@ -20,7 +20,6 @@ "electionCycleHeading": "{{year}} Election Cycle", "noContributions": "No itemized contributions recorded yet.", "noData": "Finance data not yet available for this legislator.", - "otherReceipts": "Other non-contribution receipts: {{amount}} (refunds and miscellaneous receipts — not included above)", "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}}", From c46d5c15196cdbc9f91baf677d6600e0319e6f26 Mon Sep 17 00:00:00 2001 From: Sam DeMarrais Date: Tue, 28 Jul 2026 22:11:25 -0400 Subject: [PATCH 10/13] Election bugfix --- functions/src/legislators/scrapeElections.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/functions/src/legislators/scrapeElections.ts b/functions/src/legislators/scrapeElections.ts index fcbe7dbdf..fe7cb22e9 100644 --- a/functions/src/legislators/scrapeElections.ts +++ b/functions/src/legislators/scrapeElections.ts @@ -79,7 +79,7 @@ async function fetchElectionData( if (error.message.includes("Could not parse CSS stylesheet")) { return } - console.error(error) + logger.error(error) }) const dom = new JSDOM(text, { virtualConsole }) @@ -102,7 +102,7 @@ async function fetchElectionData( headers.reverse() cells.reverse() headers.forEach((header, i) => { - const text = cells[i].textContent?.replace(/,/g, "").trim() + const text = cells[i]?.textContent?.replace(/,/g, "").trim() if (text && /^\d+$/.test(text)) { values.set(header, parseInt(text)) } From c571307ac48a3a8d3a1aab0ebb0f65d262ad39d1 Mon Sep 17 00:00:00 2001 From: Eric Pastor <38719351+ericpastorm@users.noreply.github.com> Date: Thu, 30 Jul 2026 18:38:51 +0200 Subject: [PATCH 11/13] Link legislator tabs to URL hashes --- .../LegislatorProfile/LegislatorTabs.test.tsx | 141 ++++++++++++++++++ .../LegislatorProfile/LegislatorTabs.tsx | 70 ++++++--- 2 files changed, 191 insertions(+), 20 deletions(-) create mode 100644 components/LegislatorProfile/LegislatorTabs.test.tsx 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 f0d91c148..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" @@ -21,16 +23,24 @@ import { } 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}` @@ -69,59 +79,79 @@ export function LegislatorTabs({ districtLoading, legislatorId, name, - tabCategory, finance }: { district?: District | undefined districtLoading?: boolean legislatorId: string name: string - tabCategory?: TabCategories 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", + eventKey: tabCategories.finance, content: }, { title: t("tabs.district"), - eventKey: "district", + eventKey: tabCategories.district, content: }, { title: t("tabs.testimony"), - eventKey: "testimony", + eventKey: tabCategories.testimony, content: }, { title: t("tabs.votes"), - eventKey: "votes", + eventKey: tabCategories.votes, content: } ] return ( - + {tabs.map((t, i) => ( From 6e3215b71b3ae5b873b9b0a23129ce79edd9f535 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Wed, 5 Aug 2026 00:18:52 +0000 Subject: [PATCH 12/13] update README.md --- README.md | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) 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

💻 From 6cfe6b14ca71449654caea1e66805c7afce87174 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Wed, 5 Aug 2026 00:18:53 +0000 Subject: [PATCH 13/13] update .all-contributorsrc --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) 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"