The Governance Company

Civic texting and legislative data, built and run by four engineers.

We make Resistbot and Amendment. Constituents have written to their own officials through our software since 2017, and organizers have reached constituents through it since 2018. We build the same kind of software for clients.

The civic graph Constituents Candidates Government Business Advocacy Lobbyists

2017 A text message becomes a delivered letter

A person texts RESIST to 50409, and the message becomes a letter in front of their own elected officials. It works on the phone they already have.

Resistbot launched in February 2017 on that one idea and spread within days. Volunteers helped build the first version, and 41 people committed code to the first backend. We started on EFF’s form-filler and began replacing it by December.

Resistbot logo

2018 We deliver to every kind of office

Every office takes mail its own way, and the rules change without notice. Our delivery system handles web forms, the congressional APIs, email, fax, and postal mail, and it sends each letter by the route its office accepts.

Today it reads about 870 contact-form definitions and tells six kinds of CAPTCHA apart. Behind it is our directory of officials, including the seats that don’t fit the usual pattern. New Hampshire has 43 floterial districts laid over its ordinary ones. Idaho elects an A seat and a B seat in every House district.

Some of this is people. We keep contacts in the offices and with the IT staff behind them, so when a route breaks we know who to call.

We built the delivery system and the directory in 2018. In October 2018 organizers started publishing petitions to constituents, and the second edge went live.

2019 to 2020 It holds when the news breaks

Civic traffic comes in bursts, so the system has to scale with no warning. In 2020, the election year, we handled 175.6 million messages, in and out, across every channel. The officials lookup scaled out to carry it.

We write each conversation once, and it runs on SMS, iMessage, web chat, and the major messaging apps. The engine underneath is a fork of RapidPro that we run ourselves. Six channels carry letters today.

Every service ships with tracing. A single trace follows a message from the first text to the delivered letter.

The data platform behind Resistbot is serverless: AppSync, Lambda, Step Functions, and DynamoDB, all deployed with CDK. Lambda does much of the connecting. It backs API calls, runs workflow steps, and reacts to changes in the tables. We know DynamoDB well. Conditional writes keep a letter from going out twice, transactions keep petition counts exact, and Streams keep Amendment’s counts live.

It also has to be cheap. A team of four has run this since 2017, which only works when a quiet system costs little. The form-filling workers scale to zero between bursts, and we lean on spot capacity.

Messages a month, since 2017

2021 to 2022 We rebuild the system while it carries messages

We rebuild a system without taking it down. In 2021 and 2022 Resistbot carried 44.3 million messages, and we moved the services under it onto one shared event system.

We kept shipping through it. In 2021 people could pay inside iMessage without leaving the conversation. The Resistbot iOS app shipped in 2022.

Every pull request stands up a complete environment of its own, runs live tests, and cleans up after itself. We deploy to production more than 50 times a week.

2023 to 2024 We finish the rebuild and start Amendment alongside Resistbot

We build the next product while the current one runs. In 2023 we folded four delivery services into one. Twitter suspended our API access in April 2023, and the other channels kept carrying letters.

2024 was an election year. Resistbot carried 28.8 million messages across 2023 and 2024. It has carried messages in every month since February 2017, through four federal elections.

In June 2024 we started building Amendment. On the graph, the dotted lines are the legislative data we collected for a year before anyone outside could use it.

2025 Amendment: every legislature’s bills in one graph

Amendment holds 281,986 bills across 57 jurisdictions and more than 7,500 politicians and candidates, from Congress down to city councils. We collect them from hundreds of public sources and keep them current in one graph. Organizations use its tools to take positions, endorse, and raise money.

Amendment launched in July 2025, a year after we started building it. On the graph, its edges run from government out to the businesses, lobbyists, and advocacy groups that track legislation.

Visitors a month
Amendment logo

Now Next: connections that run both ways

So far, each connection carries messages in one direction. A letter goes to an office, a campaign goes to constituents, and legislation goes out to the people who track it. We’re building the connections that run both ways, inside Amendment.

The first is between voters and candidates, with endorsements, vote pledges, and fundraising. The others connect advocacy groups and lobbyists with each other and with government.

See what is live today, or come talk to us. We take on outside work, and we like swapping notes too.

Work with us What we can build for you

We build software that connects people to their government, for our own products and for clients. Some of it is live today, and some we’re building. The story above shows how we built each piece.

Advocacy groups

Live. Campaign publishing, petition hosting, and letters delivered to the right offices, with delivery reports per state and per office. We also run texting programs for organizations whose supporters asked to hear from them.

Business, lobbyists, and lawyers

Live. Amendment is self-serve: research legislation from Congress to city hall, and track what moves. For teams that need data feeds, API access, or their own tools, we build those too.

Government

Available. Texting programs for election offices and agencies, sent from the office’s own registered number, with delivery and opt-out counts for every send. Public-sector programs are nonpartisan, and the office writes the content.

Candidates

Building. Two-way conversations between voters and candidates inside Amendment: endorsements, vote pledges, and fundraising.

Constituents

Free to write. Five million people have used Resistbot to write to their own officials. Web forms, the congressional APIs, and email cost the sender nothing; fax and postal mail are paid.

Custom work

AI features with evaluation built in, data pipelines from government sources, integrations, and texting at scale. If it connects people to their government, we’ll talk about it.

We’ve built campaigns with elected officials, national organizations, and well-known artists. References on request.

What we run The systems we run every day

Our traffic arrives when the news does. A bill moves, and deliveries can reach four times an ordinary day with no warning. In a typical week, more than half of the people who write to their officials write again the next week.

618,113,260
Messages handled
114
Consecutive months texting
2,424,756,220
Flow runs
55,606,771
Deliveries to officials
5,175,423
People who have written
103,651
Deliveries in a day
8,359
Officials who have received a letter

By state

Deliveries by the state each sender wrote from. California alone accounts for one in eight.

1 million and up
400K – 999K
100K – 399K
under 100K
CA6,995,930
NY3,701,645
TX3,421,886
PA2,914,399
FL2,792,142
OH2,211,849
WA2,115,520
NC1,909,451
Deliveries, people, officials and bills by state
StateDeliveriesPeople who wroteOfficialsBills, 2025–26
California7,214,782736,8502675,381
New York3,785,600440,12926825,357
Texas3,532,714347,47027012,787
Pennsylvania3,028,888226,1973005,123
Florida2,894,589267,5462173,781
Ohio2,299,718175,8031612,520
Washington2,196,395168,8201863,098
North Carolina1,972,792157,5912112,338
Illinois1,919,557210,98124112,102
Michigan1,723,137148,7631904,159
Colorado1,706,349134,4161221,208
Arizona1,585,229112,6851203,714
Virginia1,347,885133,8881747,229
New Jersey1,329,580145,79216021,918
Oregon1,263,538106,8191153,772
Georgia1,204,776132,0822805,255
Massachusetts1,175,763133,8032268,546
Missouri1,159,71990,5512085,474
Indiana1,125,979105,3741672,409
Minnesota1,065,16898,51722310,532
Wisconsin1,049,16785,9011573,083
Maryland1,019,735103,5332085,262
Tennessee942,05282,8571529,141
Utah716,08553,0471211,980
South Carolina591,88750,5061983,974
Kentucky588,17453,0651553,131
Kansas547,32243,2531791,472
Iowa526,18241,3191664,199
Connecticut486,01557,5782055,201
Maine466,63224,9781972,389
Nevada462,09841,175781,237
Louisiana434,41241,9941573,571
Oklahoma400,47938,8451649,146
Alabama370,92936,8721682,910
New Mexico337,81724,1711202,152
Nebraska317,99824,923631,844
Arkansas296,82027,5701472,169
Idaho283,31922,8241201,592
New Hampshire253,38121,5184162,055
West Virginia210,52518,0061445,657
Alaska209,38112,36067839
Montana208,29215,3111611,761
Mississippi134,90313,4901887,824
Rhode Island133,26816,1701215,602
South Dakota133,0487,7221131,167
Vermont129,02812,4721881,707
Delaware125,83512,485711,291
Hawaii123,42513,5758610,137
North Dakota79,6316,1721501,117
Wyoming58,5394,641101819
District of Columbia35,01611,069151,791
Puerto Rico2,66490484none
United States Virgin Islands2611231none
Guam18121none
Northern Mariana Islands221none
American Samoa111none
Heaviest congressional districts, lifetime
369,628CA-12
348,806WA-7
320,403NY-12
301,224CA-30
298,793NC-11
289,996CO-2
280,323NY-10
262,136PA-3
How people write in: share of 2026 letters, by channel

In the press Coverage since 2017

What reporters and the open-data community have said about Resistbot.

The stack What we build with

languages
Python
TypeScript
Go
Swift
web and API
FastAPI
Strawberry GraphQL
Flask
Django
Next.js
React
Tailwind CSS
data
Postgres
pgvector
Elasticsearch
Redis
InfluxDB
scraping and workflows
Scrapy
Playwright
Temporal
Airflow
Inngest
AWS
DynamoDB
Lambda
EventBridge
ECS Fargate
Step Functions
SQS
Aurora
S3
AppSync
API Gateway
CloudFront
Bedrock
infrastructure as code
Terraform
Pulumi
CDK
hosting and network
Vercel
Docker
Kubernetes
Cloudflare
Tailscale
testing and CI
GitHub Actions
GitLab
CircleCI
observability
Honeycomb
OpenTelemetry
Sentry
PostHog
Prometheus
Grafana
AI
Claude
OpenAI
Gemini
Cohere
Hugging Face
LangChain
LangGraph
LangSmith
Model Context Protocol
messaging
RapidPro
Apple Messages for Business
Twilio
Bird
Infobip
Telegram
Messenger
Bluesky
Discord
email, mail and fax
Loops
Resend
Lob
Documo
payments and sign-in
Stripe
Clerk
Auth0

Team Who builds and runs it

We build and run both products ourselves. Each of us had a career of more than 20 years before this one, at startups and large enterprises, across engineering, infrastructure, and sales. Between us, we have taken companies from first build through acquisition.

Jason Putorti

Co-founded Resistbot in 2017 and leads product across Resistbot and Amendment, from the user experience to pricing and the civic data behind both.

Jessica Peters

Leads data and infrastructure: the cloud platform both products run on, the pipelines that collect and normalize government data at scale, and the AI systems built on that data.

Chris Erickson

Leads architecture across our web applications and core services, from the product frontend down, and the reliability practice that keeps them running through every news cycle. Has built Resistbot since its first months.

Tyler Britten

Leads backend engineering, from the messaging infrastructure behind every Resistbot conversation to the APIs and AI services that power Amendment, and shapes the product for enterprise customers.

How we work Rules we work by

Opt-in only

We only message people who asked to hear from us, and we turn down work that doesn’t meet that bar.

A first-party list

Everyone on the list signed up with us directly, and the list stays with us.

Every letter, the same way

Every letter is one person writing to their own officials. We deliver each one the same way, whatever the sender’s party or position.

Every change ships tested

Every change runs the tests that cover it, then deploys on its own. The whole system runs the same way on a laptop, in CI, and in production, so we find a problem before a customer does.

Contact Come talk to us

The four of us run everything on this page, and we’ve kept it up through two presidential elections. If you’re building civic software, or you want to compare notes on how we run it, write to us.

Say hello