CAMPAIGN COMMAND
LOCAL  
TACTICAL FIELD OPERATIONS PLATFORM

The other side is inbound. See it coming. Answer fast.

Opponent mailers, attack ads, hit pieces and social surges land on one threat board. You answer on the same screen. Walk lists out to the doors, phone bank, ringless voicemail, SMS, email, volunteers, all pacing to Election Day.

AES-256ROLE-BASED ACCESSBUILT IN THE FIELD● ONLINE
06:00:00
THREAT RADAR · SECTOR SCAN · ◈ SHIELD ACTIVE
DAYS UNTIL
ELECTION DAY
T‑00

ABOUT · CAMPAIGN COMMAND

Most campaign software is a database with a bill attached. It generates reports. Reports do not knock doors.

Campaign Command was built inside a live race, and it exists to shorten one distance: from “we should knock those doors” to a volunteer standing at that door. Draw the area on the map, filter the universe, cut the list, assign it. The walker carries it on a phone that works with no signal, or on paper with a QR code if they will not use an app. Either way it comes back to the same voter record your call list, your vote goal and your chase list are built from. Nothing to reconcile at midnight.

Then it tells you the truth. The strategy page shows the win number and the arithmetic under it, states its own assumptions, and says so when it cannot know something. Margin is arithmetic. You are on pace or you are not, and your software should be the first to say which.

TURF TO DOOR, ONE PASSA walker is at a door tonight instead of Thursday, because the map, the filters, the cut list and the assignment are the same screen.
KEEPS WORKING UNDERGROUNDNo door is lost to a dead zone. The field app writes every disposition, ID and note to the phone first and syncs when signal returns.
PAPER STILL REPORTSVolunteers who will not touch an app still count. They walk a printed packet, scan the QR code on it, and their doors land in the same data.
THE DOORS YOU MISSEDNobody-home stops being a dead end. Every unanswered address comes back automatically as a list somebody can walk again.
ONE RECORD, EVERY CHANNELA survey answer from a phone bank shows up at the door and in the chase, because doors, dials, texts, ballots, volunteers and the vote goal are one system, not six exports.

Bring your district and your vote goal. Thirty minutes, and you will see the arithmetic and where the doors are.

[ RETURN TO BASE ]
Command Staff

The Team

Built by people who have run the program, not read about it.
Scott Riker Deutsch, Cofounder and Chief Strategist of Campaign Command
Scott Riker Deutsch
Cofounder & Chief Strategist
Unit CC-01  ·  Founding Operative  ·  Field-Certified
“I ran out of patience waiting for somebody else to build it.”

Scott Riker Deutsch was working campaigns before he could see over the yard signs. At seven years old he was dropping literature on doorsteps in East Greenwich, Rhode Island, learning the family trade. His father held elected office for nearly three decades across two states, from town council to the state legislature to county government. His stepfather led the minority caucus in the Rhode Island House. In the Deutsch house, election night was a holiday.

His first win as an operative came in 2010, taking a 21-year-old first-time candidate past a sitting Deputy Majority Leader. In the years since, he has managed and consulted on dozens of winning races, electing everyone from the youngest candidate on the ballot to an octogenarian incumbent. More than twenty-five years in the field taught him what actually moves votes: doors, phones, volunteers, and the discipline to know your pace, precinct by precinct, every single day.

It also taught him what campaigns are forced to work with. A voter file in one system, walk lists in another, phones in a third, volunteers on a spreadsheet, and no way to see the whole race in one place. Deutsch spent years in the technology and consulting world alongside his political work, and he ran out of patience waiting for somebody else to build the tool he needed. So he built it. Campaign Command is the product of every race he has ever run: one command center for the voter file, walk lists, phone banks, texting, ringless voicemail, volunteers, and real-time pace tracking, designed by someone who has actually knocked the doors.

When he is not on the trail or shipping new features, Deutsch is outside, on the road (47 states and counting), or hunting down his next favorite restaurant. He lives in Rhode Island with his wife, stepson, and their cats, Helga and Heidi.

25+
Years in the Field
DOZENS
Of Winning Races
2
Generations of Politics
1
Command Center

Talk with a Strategist

Every demo is run by somebody who has actually run a field program. No SDR, no qualifying call before the real call, and no handoff to a rep who has never knocked a door.

[ Request a Briefing ]
[ RETURN TO BASE ]

FREE TOOLS

The arithmetic every campaign needs and most never write down. No signup, no email, nothing leaves your browser.

Live

Win Number Calculator

How many votes it actually takes to win your seat, then how many doors that is, how many a day, and how many volunteers. Every assumption is yours to change.

[ OPEN ]
Live · check it weekly

Pace Tracker

You have a goal and a deadline. This tells you what you need per day, what you have actually been running, and the date you finish if nothing changes. Bookmark it and update one number each week.

[ OPEN ]
Live

Volunteer Shift Planner

How many volunteers you have to ask to get your doors knocked, and which thing runs out first. Usually it isn’t bodies. It’s the two people who can hand out packets on a Saturday morning.

[ OPEN ]
Live

Turnout Model

How many people actually vote in your district, as a range instead of a guess. Three past elections in, and it shows what the low end and the high end cost you in votes-to-win.

[ OPEN ]
Live

Campaign Timeline

Put in your election date and get the whole plan backwards from it, with the dates your state sets flagged as placeholders instead of guessed at. It’ll also tell you what you should be doing today.

[ OPEN ]
Live

Petition Signature Target

The law gives you a number. Duplicates, wrong addresses and bad dates take a share of it back. Work out what to actually collect, then what that is in people and hours a week.

[ OPEN ]
Live

Filing Deadlines & Ballot Access

We don’t publish filing dates, because a stale one could end your candidacy. This is where the real ones live, plus what to do when a state’s own link is broken.

[ OPEN ]

These are models, not predictions. They are only as good as the numbers you put in, and a turnout guess that is ten points off moves everything downstream by the same ten points. Use your own district’s history where you have it. Nothing here knows your state: where a date or a requirement is set by law, get it from your Secretary of State or your local board of elections.

◉  Every tool here runs entirely in your browser. No signup, no server call, no analytics on your numbers.

[ RETURN TO BASE ]

WIN NUMBER

How many votes it takes to win your race, and what that means in doors.

The seat
The field plan
Your vote goal

Enter your district above.

The arithmetic

Everything you typed is in the address bar. Copy the link to come back to it, or send it to somebody.

◉  Nothing you type here is sent anywhere. This runs entirely in your browser; there is no server call and no analytics on these numbers. Your inputs are kept in the address bar so you can bookmark this page and send it to somebody, which also means anyone you send the link to can read them.

This is a model, not a prediction. It is only as good as the numbers you put in, and every assumption on this page is yours to change. Nothing here knows your state or your district: where a date or a requirement is set by law, get it from your Secretary of State or your local board of elections and replace ours.

Want this counted for you?

Campaign Command tracks the same arithmetic against real doors, every night, and tells you when you are off pace.

[ Request a Briefing ]
[ ALL TOOLS ]

TURNOUT MODEL

Your win number rests on a turnout guess. Give this three past elections and get a range instead.

Most recent election
The one before (leave blank if you only have one)
One before that (leave blank)
The election you’re running in
Ballots likely cast

Put in one past election and the registration now. Three give you a tighter range than one.

The arithmetic

[ TAKE THE HIGH END INTO THE WIN NUMBER ]

Everything you typed is in the address bar. Copy the link to come back to it, or send it to somebody.

◉  Nothing you type here is sent anywhere. This runs entirely in your browser; there is no server call and no analytics on these numbers. Your inputs are kept in the address bar so you can bookmark this page and send it to somebody, which also means anyone you send the link to can read them.

This is a model, not a prediction. It is only as good as the numbers you put in, and every assumption on this page is yours to change. Nothing here knows your state or your district: where a date or a requirement is set by law, get it from your Secretary of State or your local board of elections and replace ours.

The number under your number

Campaign Command builds the vote goal off your own file and tells you which way you are drifting as the doors come back, rather than leaving the turnout guess sitting under everything untested.

[ Request a Briefing ]
[ ALL TOOLS ]

VOLUNTEER SHIFTS

You know how many doors you need a week. This works out how many people you have to ask to get them knocked, and which thing actually stops you.

The work
The shift
The people
What actually caps your program

Put in your doors a week and your shift plan.

The arithmetic

Everything you typed is in the address bar. Copy the link to come back to it, or send it to somebody.

◉  Nothing you type here is sent anywhere. This runs entirely in your browser; there is no server call and no analytics on these numbers. Your inputs are kept in the address bar so you can bookmark this page and send it to somebody, which also means anyone you send the link to can read them.

This is a model, not a prediction. It is only as good as the numbers you put in, and every assumption on this page is yours to change. Nothing here knows your state or your district: where a date or a requirement is set by law, get it from your Secretary of State or your local board of elections and replace ours.

Want this tracked, not calculated?

Campaign Command knows who confirmed, who showed, and who’s walked three Saturdays running. It builds next week’s ask list from the people who actually turn up.

[ Request a Briefing ]
[ ALL TOOLS ]

FILING DEADLINES & BALLOT ACCESS

We don’t publish filing dates. Here is where the real ones live.

Why we link out

A deadline three days stale could end your candidacy.
Every state writes its own rules for getting on the ballot, and those rules move between cycles. We could publish fifty-one dates and keep maybe forty of them right. We’d rather hand you the office that actually runs your ballot than become one more thing you have to double-check.
The directories below are maintained by the federal government, not by us.
Both were checked and answered on the day this page was written. Neither is perfect, and that is the point of the warning underneath them.
Start here

FEC · State Election Offices

All fifty states, DC and five territories, each with the office that runs its ballot and a link to that state’s own site. Framed for candidates rather than for voters, which is why it’s first.

[ OPEN DIRECTORY ]
Backup

EAC · Your State’s Election Office

The Election Assistance Commission’s version of the same directory. It’s framed around registering and voting, so it’s the second stop, but it carries a visible refresh date and it’s a different agency.

[ OPEN DIRECTORY ]

Confirm anything you find with the office that will physically accept your paperwork, and get it in writing. If you’re running for a city or town seat, that’s often your municipal clerk rather than the state.

A word on what these directories can and can’t do for you. We checked every outbound state link in both of them: most answer fine, a handful block automated checks without being broken, and at least one is genuinely dead. Ohio’s entry in both federal directories points at a hostname that no longer resolves at all, and nobody has noticed. So if a link sends you somewhere broken, search for your state’s secretary of state or state board of elections directly. The office is real even when somebody’s link isn’t. And the failure nobody can catch for you: a state can move its candidate filing section to a different page while every link on the way there still works, so finding a page is not the same as finding the current rules. Ring the office.

This page carries no dates, no signature counts and no requirements, on purpose. Every number you need for ballot access comes from your own state, and it is worth getting in writing from the person who will accept the paperwork.

Once you’re on the ballot

Work out what it takes to win the thing. The win number calculator turns your district into a vote goal and a door count, and the petition tool tells you what to collect so enough signatures survive review.

[ SEE THE TOOLS ]
[ ALL TOOLS ]

PETITION TARGET

How many signatures to collect so enough survive review, and how many people that takes.

We don’t publish what any state requires. That number comes from your Secretary of State or your local board of elections, and it’s worth getting in writing.

The requirement
The collection plan
Signatures to collect

Put the requirement in above.

The arithmetic

Everything you typed is in the address bar. Copy the link to come back to it, or send it to somebody.

◉  Nothing you type here is sent anywhere. This runs entirely in your browser; there is no server call and no analytics on these numbers. Your inputs are kept in the address bar so you can bookmark this page and send it to somebody, which also means anyone you send the link to can read them.

This is a model, not a prediction. It is only as good as the numbers you put in, and every assumption on this page is yours to change. Nothing here knows your state or your district: where a date or a requirement is set by law, get it from your Secretary of State or your local board of elections and replace ours.

The people you just counted

Those circulators are the same volunteers who’ll knock doors in October. Campaign Command keeps the list of who they are and what each of them has actually done, and tells you the week you fall off pace rather than the month after. It doesn’t count petition sheets. It counts everything that comes after them.

[ Request a Briefing ]
[ ALL TOOLS ]

PACE TRACKER

You have a goal and a deadline. This is the date you actually finish if nothing changes.

The goal
The clock
Where you finish

Fill in the goal, what you have done, and the dates.

The arithmetic

Everything you typed is in the address bar. Copy the link to come back to it, or send it to somebody.

◉  Nothing you type here is sent anywhere. This runs entirely in your browser; there is no server call and no analytics on these numbers. Your inputs are kept in the address bar so you can bookmark this page and send it to somebody, which also means anyone you send the link to can read them.

This is a model, not a prediction. It is only as good as the numbers you put in, and every assumption on this page is yours to change. Nothing here knows your state or your district: where a date or a requirement is set by law, get it from your Secretary of State or your local board of elections and replace ours.

Want this counted for you?

Campaign Command keeps this number without anybody typing it in. It knows what got knocked last night, and it tells you the week you fall off pace rather than the month after.

[ Request a Briefing ]
[ ALL TOOLS ]

CAMPAIGN TIMELINE

Your election date is the one thing on this calendar that can’t move. Everything else counts backwards from it.

The election
Your campaign
Days to election day

Put your election date in above.

From here

Everything you typed is in the address bar. Copy the link to come back to it, or send it to somebody.

◉  Nothing you type here is sent anywhere. This runs entirely in your browser; there is no server call and no analytics on these numbers. Your inputs are kept in the address bar so you can bookmark this page and send it to somebody, which also means anyone you send the link to can read them.

This is a model, not a prediction. It is only as good as the numbers you put in, and every assumption on this page is yours to change. Nothing here knows your state or your district: where a date or a requirement is set by law, get it from your Secretary of State or your local board of elections and replace ours.

Want the calendar to know what you’ve actually done?

Campaign Command runs this plan against live data. It knows which doors got knocked, whose ballot came back, and how far behind pace you are on the day you fall behind rather than the week after.

[ Request a Briefing ]
[ ALL TOOLS ]

OPEN POSTS

We build field software for people who are running out of time. Four posts open. All remote.

ELECTION DAY 2026 · T‑00 · EVERYTHING SHIPS BEFORE IT

How we work

Evidence beats opinion, and we say which one we have.
A diagnosis that cites only source code is a hypothesis, and around here you label it as one. Run the query, load the page, count the rows. Nobody loses an argument for saying “I haven’t checked that yet.”
Every mistake gets written down the day it happens.
Not to assign blame. So it can’t happen twice. Our engineering rulebook is a long list of things that already cost somebody a bad night, and each entry has to say what would stop it structurally rather than just warn the next person.
The deadline came from a statute.
November 3, 2026. Software that lands on the 4th did not land. That clarifies a lot of arguments about scope.
Small team, real doors.
The person who writes the walk-order code hears about it from the candidate who walked it that evening. There is no layer between you and whether it worked.
Remote, and honest about it.
No hub office anybody is quietly expected to show up at. In season there is travel, and on Election Day everyone is on.

Technical Support Specialist

[ OPEN ][ CLOSE ]
REMOTEFULL-TIMEON-CALL ROTATIONELECTION-DAY DUTY
You’re who picks up when a campaign manager’s voter file didn’t import the way she expected.

Campaign Command is a multi-tenant field CRM. A city council ward might be two thousand doors; a congressional district is a few hundred thousand. The problem is the same shape at both ends: every household has to be geocoded, cut into turf, and walked by somebody.

When a campaign manager calls, it’s usually because an import didn’t land the way she expected, or a walker’s packet won’t open, or a number on her dashboard doesn’t match the number in her head.

You read the failure and say what went wrong in one sentence, without a developer. Our importer refuses to deactivate more than 30% of an active roll unless somebody deliberately sets allow_large_purge. That refusal was written to be read by a human. You’re the human who reads it back to her.

What you’ll actually do

  • Onboard a campaign end to end: tenant, first manager invite, sending domain, DNS on the candidate’s own domain.
  • Triage imports across four voter-file profiles. Each one declares the columns it can’t work without, so the refusal already names the broken mapping.
  • Answer “attempted or reached?” correctly, every time. On one real turf: 96 doors, 29 attempted, 7 reached, 22 nobody home. Pick the wrong one and the re-cut packet is off by 22 houses.
  • Talk a volunteer through the paper return page while she’s standing on a porch with a clipboard.
  • Take the on-call rotation, Election Day included, with the rides board and the strike list open in front of you.
  • Keep the in-app help honest. A script checks every topic against the live router and a reading-level floor, because stale help teaches a volunteer a button that isn’t there.

What we need

  • You read SQL and a stack trace without being a developer.
  • Spreadsheets don’t rattle you. You’ll understand quickly why 0610 and 610 are the same precinct to a person and different precincts to a join, and why 3,383 voters once fell through that crack.
  • Calm and specific with somebody panicking at 6am.
  • Comfortable on a phone screen. The field app is built for one hand in daylight, 56px tap targets minimum.
  • You’ll say “I haven’t checked that yet” instead of guessing.

Nice to have

  • You’ve worked a cycle. Canvass, phone bank, ballot chase, any of it.
  • Postgres or Supabase familiarity; webhook delivery events.
  • You’ve supported a product where the customer’s deadline came from a statute.

Most support queues have a backlog. This one has a date. Everything you fix before November 3 changes a real count of doors knocked, and everything after it is archive.

Integration Engineer

[ OPEN ][ CLOSE ]
REMOTEFULL-TIMEDATA PIPELINESHIP BEFORE NOV 3
Every voter file is wrong in its own way. You own the seams.

The Secretary of State writes one apartment as 6203 MULHEARN DR #APT 203. A vendor export writes 6203 Mulhearn Dr 203. L2 writes 6203 Mulhearn Dr Apt 203. Key those raw and a single door becomes three households, three knocks, and three arguments with the candidate.

You’ll own state and vendor ingestion, the address normalization and dedup pipeline, the geocode provider chain, and outbound email and SMS. Four voter-file profiles ship today, plus mail-ballot and early-vote files. More states means more of them.

The defects here are quiet. A wrong address key resolves cleanly and nothing flags it.

What you’ll actually do

  • Own normalize_address_key and split_address. Key “Apt 17” and “Unit 17” raw and they’re separate doors; that’s 172 such groups in one district, 174 phantom households, and 174 knocks on addresses that don’t exist.
  • Harden the parsers. Parse 1735 Main St, Apt 1204 from the left and you get zip 01204, which is Pittsfield, Massachusetts. Parse from the right. It’s the only end of a US address with reliable structure.
  • Run the geocode chain: Census batch first, Geocodio for the misses at accuracy 0.8 and better, then OSM. census:Non_Exact lands outside the district 11.2% of the time against 0.05% for census:Exact, and the worst miss we’ve measured put a household 12.96 miles from its own street.
  • Close the loop with field GPS. Every knock stamps a position and an accuracy. Median pin error is about 40m; the median gap between neighbouring houses on the same side of a street is 31.3m. That arithmetic is the whole job.
  • Wire outbound. Resend with a Svix-signed webhook that fails closed when the secret is missing, and CallTools for SMS, whose inbound hook carries no signature at all. Its payload is a hint that something happened; re-fetch before you believe a word of it.
  • Hold the compliance edge. No bulk email leaves without a recipient-specific unsubscribe token. The send refuses; it doesn’t warn.

What we need

  • Postgres you’d defend in review: plpgsql, regex, RLS, a query plan you can read.
  • TypeScript, and edge functions on Deno.
  • You’ve lost a fight with address matching at least once and remember why.
  • You go to the running system before the source. A diagnosis that cites only code is a hypothesis, and we’ll ask you to label it as one.
  • You can tell a missing thing from an empty thing. A predicate that matches nothing looks exactly like no work having been done.

Nice to have

  • VAN, L2, or a state BOE export somewhere in your history.
  • Census TIGER, Geocodio, OSRM, PostGIS.
  • 10DLC registration, TCPA, carrier rejection codes.

Most integration work joins two systems that both already work. Here one side is a state agency that spelled the same precinct 610 in August and 0610 in September, and the other side is a volunteer on a porch with 40 doors left. Get the seam right and she knocks the correct one.

Customer Success Strategist

[ OPEN ][ CLOSE ]
REMOTEFULL-TIMETRAVEL IN SEASONELECTION DAY IS ALL HANDS
Measured on whether the campaign wins, not on ticket volume.

You own the account once the contract’s signed. Which means you’ve run a field program, not read about one.

You know what a good turf looks like before anybody walks it, why a canvasser quits the script around door forty, and when a universe has to stop being persuasion and start being turnout.

Campaign Command will tell a manager the truth, including when it can’t know something. It won’t tell her what to do Saturday. You will.

What you’ll actually do

  • Onboard end to end. State file in, district cut into turf, the strategy assumptions set to numbers the manager will defend, sending domain verified.
  • Read pace weekly on every account: doors knocked, supporters identified, votes banked, each against goal and against what the last seven days actually ran.
  • Start the hard conversation early. “You need 340 a day and you’re running 190” is a week-six call, not a week-ten call.
  • Re-cut turf that’s walking badly. One live turf: 96 doors, 29 attempts, 7 conversations, 22 nobody home. That’s a second pass and a phone list, not a failure.
  • Train the volunteer who won’t install anything. Printed packet, QR code on it, same voter record as the app.
  • Work their Election Day. Rides, strike list, ballots that need curing.

What we need

  • You’ve run field. A coordinated campaign, a state party program, a union local, a ballot measure.
  • You can look at a universe count and say why it’s wrong.
  • You can tell a manager she’s off pace and still have the account a month later.
  • The arithmetic doesn’t scare you. Turnout, contact rate, ID rate, doors-per-day-needed.
  • October and November belong to the job.
  • You write short. Most of this is six lines before 7am.

Nice to have

  • VAN, MiniVAN or PDI admin experience, including the parts you hated.
  • You’ve trained people who’d never knocked a door before that morning.
  • Vote-by-mail chase in a state that runs one.
  • A second language the doors in your region actually use.

Built inside a live race, and still running one. When you’re wrong you hear it that night from a walker standing on a porch, not from a survey in March.

Account Executive

[ OPEN ][ CLOSE ]
REMOTEFULL-TIMEQUOTATRAVEL IN SEASON
Selling into a market with a hard deadline inside it. A tool that lands on November 4 was worth nothing.

Campaigns buy late. The manager who should have signed in February signs in September, usually the week after the opponent’s mail hits her district.

Your job is to be the name she already trusts when that week comes, and to pull a few of those decisions forward.

This is new business. Inbound exists. It won’t make your number.

What you’ll actually do

  • Build your own pipeline off filing deadlines, candidate announcements, committee rosters and consultant client lists.
  • Run the demo yourself. Bring their district and their vote goal; thirty minutes to show the arithmetic and where the doors are.
  • Answer “we already have VAN” without reciting a feature list.
  • Sell through the multipliers. A consultant with a roster is worth more than a roster’s worth of cold calls, and so is a party committee that recommends you to everyone on its slate.
  • Structure deals for a buyer whose money arrives in lumps, three days after a fundraiser.
  • Stay in the account through Election Day. The next cycle’s sale is decided on the night of this one.

What we need

  • You’ve worked on a campaign. A race where you knocked the doors counts for more here than a presidential internship.
  • You’ve closed B2B deals with a seasonal buying pattern.
  • You know why a candidate buys in October instead of February, and you can argue her out of waiting.
  • You can be told no by somebody who hasn’t slept, and call back in three weeks anyway.
  • CRM discipline. This market is small and it remembers a dropped follow-up.
  • Travel. Candidate schools, party trainings, a committee meeting in a fire hall.

Nice to have

  • Relationships at a state or county party, a campaign committee or a consulting shop.
  • Sold or supported VAN, PDI, i360, Mobilize, NGP or Hustle.
  • Ran field yourself, so the demo isn’t a script.
  • A cycle on the vendor side, so you know how a renewal dies quietly in December.

Most software sales never produce a scoreboard. Yours does, in November, and you’ll know which of your accounts won. The product was built inside a real race, so you can sell it without adjectives.

Don’t see your post? Tell us what you’d do here and why. We read those.

[ RETURN TO BASE ]

WHAT IT COSTS

There’s no pricing table on this page. That isn’t a dodge, and here’s the whole reasoning behind it.

Campaign software gets priced by what the buyer can obviously afford. That’s why the system running a governor’s race costs what a governor’s race costs, and everybody underneath it gets the cut-down version with the map switched off and the good reports behind an upgrade. We build one system. The thing that changes is the size of the race running on it, not how much of it you’re allowed to touch.

ONE BUILD. THERE IS NO LITE VERSION.A school committee seat and a statewide run on the same arithmetic: doors, dials, ballots, and a date that doesn’t move. So there’s one build of this and every campaign on it gets all of it. Nothing in the code even knows what you paid. No seat counter, no per-voter meter, no feature sitting behind a plan flag. Not disabled. Not written.
VOLUNTEERS DON’T COST YOU ANYTHINGPer-seat pricing bills you for the exact thing you’re trying to get more of. Sign up forty canvassers the week after Labor Day and you should feel good about it, not do arithmetic first. Put everybody on. The candidate, the manager, the field director, and the retired couple who take two streets on a Saturday.
QUOTED LIKE A RACE, NOT LIKE A SUBSCRIPTIONCampaign money doesn’t arrive the way a software invoice expects it to. It lands in bursts after a finance call, the work is stacked into the last ten weeks, and the whole thing has an end date printed on it. So we quote the race in front of us: the office, the district, how many voters, and how long you’ve got. You’ll have a number before you’re off the phone.
THE SETUP IS A PERSON, NOT A FORMThere’s no signup button on this site and that’s deliberate. Somebody builds your campaign by hand, sits on the call while your voter file goes in, and stays on while you cut the first list. That isn’t an onboarding package with a line item under it. It’s just how you start, and it’s the same whether you’re the only race we bring on that week or one of twelve.
IT GROWS WITHOUT YOU MOVINGOne login carries every race you’re on. A town committee with a slate, a caucus arm with a target list, a firm with a book of clients: same platform, one switcher in the left rail, and the wall between one candidate’s file and the next sits in the database rather than in the app. Add a race in August and it costs what that race costs. Nobody re-platforms in October.

The campaigns with a data director on payroll have had software like this for twenty years. Everybody else got a spreadsheet, a clipboard, and a volunteer retyping addresses at midnight. That gap is the only reason this company exists, so we’re not going to rebuild it in the price list.

[ Request a Briefing ]
[ RETURN TO BASE ]

RUNNING MORE THAN ONE

Twelve campaigns on one platform is twelve chances for one candidate’s file to turn up in another. So that’s where this page starts.

THE WALL IS IN THE DATABASEEvery voter, household, phone number and note carries the campaign it belongs to as a required column with a foreign key behind it. Postgres decides who reads a row, not the app, and the functions that decide look up your actual membership rather than trusting anything the browser sent. A screen can ask for another campaign’s voters. It gets back an empty result.
ONE LOGIN, EVERY RACE YOU RUNMembership is stored per campaign, so the same organizer can be a manager on one race and a volunteer on another without the roles bleeding together. Switching is a dropdown in the left rail, not a second account. Permissions work the same way: seeing the donor file is a switch a manager flips on one person on one campaign, and it’s off by default even for field captains. The phone app doesn’t carry the switcher yet, so a walker doing two races in a day switches on a laptop.
WE SHOULDN’T HOLD A KEY TO YOUR FILETwo rival campaigns could both be customers here. So “can your people read my voter file?” needs a better answer than yes. The break-glass path is already in the database: one campaign at a time, a written reason, one to twenty-four hours, revocable, on the record, and a grant that never expires isn’t expressible. It ships switched off, which means today an operator can still read every tenant. Turning it on is one statement against the database and a line in your contract, and you should make us do both.
THE SUPPORT SCORE REMEMBERS WHO MOVED ITEvery change to a voter’s support level or vote plan writes a row saying what it was, what it became, who did it and when. That table has no insert or update permission for anyone; a trigger is the only thing that can write to it, and it overwrites the actor server-side, so the person who made the change can’t author the record of it. The trail survives the staffer leaving. Useful when a client asks why their number moved.
NOBODY’S NAME IS IN A DATABASE FUNCTIONThe build fails if a candidate, a state or a season is written into a database function. Every function in the schema gets scanned on every run. More than a thousand of them at the last count, and the check fails the build instead of printing a warning nobody reads. What a volunteer says out loud at a door comes from the campaign row, so your second client doesn’t inherit your first client’s script.

What this is not, yet

You’ve had a vendor tell you all of this was handled. Here’s the list of what isn’t, so you can check it against whatever we say next.

A race in another state is a development project, not a setup task.
This was built inside one state’s election data and some of that state is still compiled in. Vote history is keyed by that state’s election names. The precinct boundary layer points at one state’s GIS service, and the address-point data that supplies about half the map’s pin quality covers two towns and carries no campaign column at all. A second campaign in the same state is roughly a day. A campaign somewhere else is real work, and we’d rather quote it than discover it.
Onboarding isn’t self-serve.
There’s no create-a-campaign screen and no function behind one. A person creates the tenant and the first manager. A slate of twelve is a scheduled setup, not a signup form, and it means we meet every campaign before it exists. Fine at this size. Not a platform.
Nothing adds your campaigns up.
Every dashboard call takes one campaign id. Twelve races is twelve dashboards and one dropdown. The committee-level view where you see all of them pacing at once is the obvious next thing and it does not exist.
Every campaign sends through one email account.
Both mail senders read a single key, so every campaign on the platform shares one sending reputation. One client sending badly hurts deliverability for everyone else on it. Per-campaign sending credentials need a code change that hasn’t been made. Some third-party integrations sit behind one platform-wide account the same way, and those get per-campaign credentials before a second campaign goes on, not after.
There’s no “give me everything” button, and nothing expires either.
You can export lists, mail files and walk packets screen by screen. There’s no single archive of a tenant to hand a client who’s leaving. In the other direction, nothing purges a campaign when it ends; the rows just stay. Deleting a campaign row would take every voter, household, note and knock with it through seventy-five cascading keys, with no undo, and it would orphan the uploaded raw voter files besides. So it isn’t behind a button. Who owns the data is a contract question right now, because the software doesn’t have an opinion.
Invites are a link you copy, one at a time.
One email address per invite, fourteen-day expiry, and nothing mails it for you. Bringing forty organizers onto a slate is forty copy-pastes today.
Some edits leave no trace.
The support-score trail above is solid. A note that gets edited or deleted isn’t, and neither is a corrected door knock. Both are insert-only tables with no revision history, so “it used to say something different” is not a question the database can answer.

The separation is the part that’s expensive to retrofit and it’s done. The onboarding around it is manual, and we’d rather say so than point you at a signup form that isn’t there. If you’re putting a county slate or a caucus target list on one system next cycle, the useful conversation is which of those gaps actually blocks you. For most committees it’s two of them, and not the six you’d expect.

Bring the roster and the filing dates. Thirty minutes, and you’ll know which of those gaps you’d actually hit.

[ REQUEST A BRIEFING ]
[ RETURN TO BASE ]

YOUR FIRST WEEK

Here’s every step between saying yes and a volunteer standing at a door, including the parts we do, the part that’s on you, and the one thing that can hold the whole thing up.

These are stages, not days. The clock doesn’t start when you sign up. It starts when your voter file lands, and that’s the one piece nobody here can hurry.

STAGE 1Ask your state for the voter file

[ OPEN ][ CLOSE ]
You. Start it before you talk to us.

This goes first because it’s the only step with a queue in front of it. Every state releases its registered voter file to candidates, and every state does it differently: a form, sometimes a fee, sometimes a notarized affidavit, and a turnaround that runs anywhere from an afternoon to a month. We don’t publish a number for your state, because a wrong one would cost you weeks. Call and ask. Our own campaign timeline tool puts “voter file in hand” at 240 days out, and that isn’t padding.

If your state office is slow, a national vendor file is the usual fallback. We already read two of those formats without anybody writing anything new.

STAGE 2The setup call, and your campaign gets built

[ OPEN ][ CLOSE ]
Us and you. About an hour.

There’s no signup form on this site. That’s deliberate, and you should know it before you’re surprised by it. A person builds your campaign by hand: name, candidate, office, your district exactly as your state writes it, time zone, primary date, election day. The election date isn’t decoration. Your countdown, your win number and every pace number on your dashboard are computed from it.

Then you get a link, you set a password, and you’re the manager. You invite your staff and volunteers the same way, by name and email. One link each. Forty volunteers is forty links you send yourself. We’d rather tell you that now than have you find it on a Tuesday night.

STAGE 3Your file goes in

[ OPEN ][ CLOSE ]
You click it, we’re on the call. Minutes, not an afternoon.

Upload the spreadsheet, pick the format it came in. Before a single byte is written anywhere, the screen reads your entire existing roll and shows you four numbers: how many matched, how many are new, how many are active now, and how many this file would mark inactive. If it can’t read the whole roll, it refuses to show you a number at all rather than show you a smaller one.

Three guards you’ll never notice unless you need them:

  • A statewide file gets filtered down to your district automatically. You don’t have to cut it up first.
  • An import that would deactivate more than 30% of your active roll stops and makes somebody say so on purpose.
  • A file missing a column its format requires is refused outright, instead of writing blanks over addresses you already had. That rule exists because it once didn’t, and 11,641 street addresses paid for it.

And the rule underneath all of it. The state file owns address, party, registration, precinct, date of birth and vote history. Your campaign owns phones, emails, notes, tags, support levels and do-not-contact. An import never touches your side. A vendor file fills blanks only; it can add a cell number, it can’t change an address.

STAGE 4Your district shows up on a map

[ OPEN ][ CLOSE ]
Automatic. Nobody presses anything.

This is the first moment it stops being software and starts being your race.

The instant the import finishes, geocoding starts on its own. Every household goes through three geocoders in turn, the free ones first and the paid one for whatever’s left. There’s no “geocode now” button because there doesn’t need to be one.

Then you log in, and the map is already the home screen. Your district. Every household a dot, colored by party. Precinct lines over the top, your polling places on it, the filter rail down the left and a live count at the top that moves as you tick boxes. Most people sit with it for twenty minutes the first time. That’s the right instinct, and it’s usually where somebody says “I didn’t know we had that many.”

The honest part: the pins don’t all land at once. Most arrive in the first few minutes, the awkward addresses trickle in behind them, and your dashboard tells you how many households aren’t on the map yet. The counts at the top are computed on the server, so they’re right even while a dot is still missing.

STAGE 5Your first universe, then your first cut

[ OPEN ][ CLOSE ]
You. Twenty minutes the first time. Two minutes by the fifth.

Learn three words once and you’ll never be confused again. A universe is who: a saved set of filters, with no map and no doors. A turf is where: actual doors, already in walking order. A walk list is who’s walking it.

Set your filters. Party, age, vote history, tags, whether there’s a phone number, who’s already been contacted. Watch the count. Then click Draw area, click around the neighborhood, double-click to close the shape. Every number on screen now describes only what’s inside that line. Export, then Cut walk list, then name it.

The doors come out in real walking order, worked out against the actual road network the moment you cut. There’s no optimize button you have to remember to press. Each turf shows an estimate in hours, and that estimate is worth more than the door count: forty doors on one dense street is a very different evening from forty spread over two miles.

STAGE 6Somebody is at a door

[ OPEN ][ CLOSE ]
You. That evening.

This is the other moment. It’s usually the same day as the one above.

Two ways, and the same turf can go out both.

Assign it to a name and it’s in that person’s field app right away. The app is a web page she adds to her home screen, no app store, no download. Tell her one thing before she leaves: open the list once on wifi and wait for the green Saved on phone tag. After that it works in a basement. Every knock writes to the phone first and syncs when the signal comes back.

Or print the packet. Page one is the route map, the doors follow in order, and there’s a QR code on it. Your volunteer who won’t install anything marks the paper, points her camera at the code, types her name and taps what happened at each house. No app, no password. Her doors land in the same place as everybody else’s, on the same voter records your call list and your chase list are built from.

That’s the whole distance. Draw a shape on a map after lunch, and somebody’s knocking that night.

STAGE 7What comes back, and what’s left

[ OPEN ][ CLOSE ]
End of the week.

By Sunday you’ve got real doors in the system, and the interesting number isn’t how many you knocked. It’s what’s left. Every turf shows knocked and remaining. What’s left prints a packet of only the un-knocked doors. Re-cut rest turns them into a fresh turf with its own route for the next person, so nobody re-walks a street somebody already did.

One habit to build in week one: attempted and reached are different questions, and you should always say which one you mean. A turf where most of the doors were nobody-home has been attempted almost in full and reached hardly at all, and those are the same turf. Build the follow-up packet on the wrong word and you send somebody back to houses that were already done.

IT’S THE VOTER FILE. IT’S ALMOST NEVER THE SOFTWARE.

Two ways it bites, and both are fixable this week.

The first is the wait. A request sitting in somebody’s queue for three weeks is three weeks you can’t cut a list. So ask now, not after you’ve decided on software. Nothing on this page is blocked by us.

The second is asking for the wrong thing. A PDF walking list, a file with no vote history, a file with names and no dates of birth: all of those will import cleanly and then quietly can’t do half of what you wanted. Nothing errors. You just find out in September.

When you call, ask for:

  • The registered voter file for your district, or the statewide file. We filter it down to your seat for you.
  • Vote history included, one row per voter.
  • A spreadsheet or a CSV. Not a PDF.
  • Apartment and unit numbers in their own column if they’re held that way. Files write the same apartment as APT 203, #203 and 203, and if that isn’t sorted out one building becomes three households and three wasted knocks.
  • The mail-ballot and early-vote files, if your state publishes them separately. That’s your October chase.

And ask two questions while you’ve got a human on the phone: what does it cost, and how long does it take. Write both answers down and tell us. Everything on this page after that file lands is measured in hours.

What to have ready

You can collect all of this before you talk to anybody, including us.

YOUR ELECTION DATE, AND YOUR PRIMARY DATEEvery countdown and every pace number comes off these.
YOUR OFFICE AND DISTRICT, WRITTEN THE WAY YOUR STATE WRITES ITThat string is what pulls your seat out of a statewide file.
YOUR TIME ZONESounds trivial. It decides what time a shift reminder lands on a volunteer’s phone.
THE VOTER FILE, OR A DECISION TO BUY ONEStage 1.
WHOEVER RUNS THE PROGRAM DAY TO DAYThat’s the first login, and it shouldn’t be the candidate.
YOUR STAFF AND VOLUNTEER EMAIL ADDRESSESOne invite each, so having the list ready saves you an evening.
SOMEONE WHO CAN ADD DNS RECORDS TO YOUR DOMAINOnly if you want to send email as yourself. Usually whoever built your website.

That’s the whole list. No shapefile, no GIS person, no data director.

We can’t make your Secretary of State move faster, and we’re not going to pretend otherwise. Everything after that we can. Once the file’s in hand, the rest of this page is an afternoon: the import runs while you watch the counts climb, the map draws itself, you put a line around a neighborhood, and somebody knocks. You won’t be doing any of it alone the first time either. The person who sets you up has run field programs, and they stay on the phone with you through the first cut.

Bring your election date and your district. Half an hour, and we’ll walk you through exactly what your first week looks like, including how long your state takes.

[ REQUEST A BRIEFING ]
[ RETURN TO BASE ]

REQUEST A BRIEFING

Tell us about the race. Someone will come back to you within one business day.

Who you are
The campaign
The race
Where you are now

We work with campaigns and organizations of any party, and we don’t take two campaigns in the same race. We don’t share or sell your information, and this form doesn’t add you to a mailing list.