Back

Documentation

Everything you need to know about using RidingDesk for your campaign.

Getting Started

RidingDesk is a campaign management platform built for Canadian federal, provincial, territorial, and municipal elections. This guide walks through every module so you can get a campaign team set up and running their ground game.

Sign up at /signup with your name, email, and a password. Click the verification link sent to your inbox (powered by AWS SES in our Canadian region), then set up your campaign — choose federal, provincial, or municipal, pick your riding from a searchable list of every Canadian electoral district, and enter your candidate name and election date.

RidingDesk sign-up screen

After campaign setup you land on the dashboard. RidingDesk runs in any modern desktop browser and on phones — the platform is a Progressive Web App you can “Add to Home Screen” on iOS or Android for an app-like experience without an app store.

Want to explore the platform before signing up? The demo sandbox drops you straight into a fully populated example campaign. No signup, no card.
All voter data is stored on Canadian servers (Toronto and Montreal regions). The platform’s privacy practices are described in detail on the Privacy Policy page.

Dashboard Overview

The dashboard is the home screen after login. It shows campaign-wide totals at the top (voters in the file, doors knocked, calls completed, donations received, lawn signs deployed), a riding-level activity summary, and quick links into each module.

RidingDesk dashboard with campaign-wide totals and activity feed

The left-hand sidebar contains every feature module. The set of items you see depends on your role — a Campaign Manager sees everything; Volunteers see a narrower view focused on their assigned canvassing or phone-bank tasks.

First-time users see a guided tour overlay that highlights each section of the dashboard. Re-launch it any time from Settings → Replay tour.

Voter Database

The voter database is the foundation of the campaign. Each voter record stores name, address, postal code, riding, poll division, support level, contact history, custom tags, and any volunteer notes. Voters are imported via CSV (see Data & CSV) and enriched as canvassers and phone bankers record interactions.

Voter database list view with search and filter controls

Filter by support level (Strong / Lean / Undecided / Soft Opposition / Strong Opposition), contact status, postal code, poll division, language, or custom tag. Save filters as reusable segments. Click a voter to open the detail view with the full interaction timeline. Bulk operations let you tag, segment, or move groups of voters in one go via /api/voters/batch.

Privacy:voter data is personal information governed by PIPEDA and provincial privacy legislation. Don’t share voter exports outside your campaign team. The audit log records every export action.

Canvassing Operations

The canvassing module is the campaign-manager view: build walk lists, draw turfs on the riding map, assign volunteers, and watch progress come in. Walk lists can be built from a polygon you draw, a poll-division boundary, a street range, or a saved voter segment.

Canvassing operations showing the riding map with turf polygons and walk-list controls

Turfs are reusable territory definitions stored against your campaign. A turf can be a polygon (drawn on the map and stored as GeoJSON) or a list of street ranges (e.g. “King St 100–299, even side”). Color-code turfs to organise canvassing teams.

A route optimizer that minimizes walking distance between assigned doors is on the roadmap. Planned

Mobile Canvassing / PWA

Field canvassers use /dashboard/canvasson a phone. RidingDesk is a Progressive Web App: open the site in mobile Safari or Chrome, choose “Add to Home Screen,” and you get a full-screen app icon — no app-store install required.

Mobile canvasser walk-list view on iPhone

The canvasser view shows the assigned walk list ordered by proximity, a button to open turn-by-turn directions in the phone’s native maps app, and a single-tap voter ID response form. Offline mode is built in via a service worker and an IndexedDB-backed queue: interactions recorded without service are persisted locally and pushed up automatically as soon as the device reconnects.

A sync indicator at the top of the canvass view shows pending interaction count when offline. Each successful sync clears the queue.

Bring a battery pack. GPS-driven canvassing on a phone burns through battery in 3–4 hours. Pre-cache the walk list over Wi-Fi at HQ before heading out.

Call Centre (Voters)

The Call Centre module is for voter ID phone banking. Volunteers receive a queue of voters to call, a script tailored to the campaign, and a single-screen logging form that records the disposition (reached / not home / refused / wrong number) plus support level and any notes.

Call Centre voter-calling interface

Calls are made on the volunteer’s own phone — tap the voter’s number to dial. A built-in browser-based softphone is on the roadmap. Planned

CRTC National Do-Not-Call List support is built in. Upload a DNC list to your campaign and any matched numbers are filtered from call queues automatically. The DNC check is also exposed at /api/dnc/check for use during voter import.

Plan calling shifts for evenings and weekends within CRTC permitted hours for the voter’s time zone. The campaign manager can monitor live calling activity from the leaderboard.

Call Time (Donors)

Call Time is a separate module designed for the candidate’s donor-calling time. Where the Call Centre is built around volunteer voter-ID volume, Call Time is a focused queue of past donors and prospects with one number, one ask amount, and one call result at a time.

Call Time donor-calling interface

Each call captures the result (pledge / refused / call back / no answer), the pledged amount, and a brief note. Pledges flow into the fundraising pipeline so the campaign’s finance director can confirm and convert them.

Messages

Messages is the campaign’s email blast tool. Compose a message with subject and body (Markdown-style merge tags such as {{firstName}} and {{candidateName}} are supported), choose a recipient segment, and send. Outgoing email is delivered through AWS SES in the Canadian region.

Messages list view showing previously sent and draft campaign emails
New message composition screen with subject, body, and audience controls

Every send writes a per-recipient row. Bounce, complaint, and delivery events from SES update those rows automatically (via the SNS-driven webhook), so you can see exactly which addresses received your blast and which didn’t. If bounce or complaint rates exceed safe thresholds mid-send, the run auto-pauses and the campaign’s send tier is restricted to protect the sender reputation.

A List-Unsubscribeheader (RFC 8058 one-click) is added to every email automatically, and a footer with an unsubscribe link is appended to the body. Opt-outs are tracked per-campaign so a recipient who unsubscribes from one campaign isn’t inadvertently re-mailed.

A drag-and-drop visual template builder, A/B subject-line testing, and outbound SMS blasts are on the roadmap. Planned SMS sending today is available via the public /api/sms/sendendpoint for integrations, but isn’t yet a first-class Messages workflow.

CASL: commercial email to Canadian recipients requires implied or express consent. Political messages during a writ period have specific exemptions. When in doubt, send only to people who have explicitly opted in to your campaign list.

Surveys

Build short surveys to gather voter sentiment. Four question types are supported: multiple choice (single-select), yes/no, rating scale (1–5 or 1–10), and open text. Each question can be marked required or optional.

Surveys list view with response counts

Survey responses are recorded against the responding voter when the survey is filled out via a link tied to that voter (e.g. through a personalized canvassing or email CTA). Responses can be exported to CSV for analysis.

Fundraising

The fundraising module records every donation against your campaign with donor name, full address, postal code, email, phone, amount, payment method, and timestamp. Every donation has a unique receipt number. Donations can be entered manually for cheques and cash or accepted online through donation pages (see below).

Fundraising dashboard showing recent donations and totals

Online donations are processed by Stripe. The donation flow supports the standard Canadian political contribution disclosures (eligibility attestation, receipt generation). Each campaign has its own Stripe Connect account so funds settle directly to the campaign’s bank account.

A real-time tax-credit calculator on donation pages, recurring/monthly donations, in-kind contribution tracking, and pledge-to-donation reconciliation are on the roadmap. Planned

Contribution limits: RidingDesk records every donation, but campaign managers and official agents are responsible for verifying donor eligibility and ensuring contributions stay under the Elections Canada or provincial limit. Review flagged or unusually large donations in the fundraising compliance report regularly.

Lawn Signs

Lawn-sign requests are tracked through their full lifecycle: requested → approved → installed → collected. Each request stores the supporter’s address with latitude/longitude coordinates so signs appear pinned on the riding map.

Lawn signs map view with pinned requests across the riding

Click a pin to open the per-sign detail page: voter info, status timeline, lead captures from the public sign page, and the volunteer assigned to install. Status transitions write to the audit log.

Each sign also has a public detail URL at /sign/[id] that the candidate or installation crew can share with the supporter to capture endorsements or signatures. Optimised installation routing and inventory tracking are on the roadmap. Planned

Nominations

Most Canadian campaigns require collecting a minimum number of endorsement signatures from electors in the riding before being officially nominated — typically 100 for federal, 25–100 for provincial, varies for municipal. The Nominations module tracks this process end-to-end.

Nominations dashboard showing endorsements collected, target, and filing deadline

Configure the required endorsement count and filing deadline. Volunteers (or the candidate) record each endorsement with the elector’s name, address, postal code, signature date, and (where required) signature image. The dashboard shows progress against the target and flags any duplicate or out-of-riding entries that shouldn’t count toward the total.

Start endorsement collection early. The dashboard on a slow week is a useful nudge to get out and collect a few more.

Casework

Casework is the constituent-services module. Voters and constituents reach out with problems — immigration files stuck at IRCC, EI delays, ServiceOntario issues, potholes — and your office tracks each issue from intake to resolution. Open cases are visible from the dashboard so nothing falls through the cracks.

Casework module with case list and statuses

Each case has a human-friendly case number (e.g. C-2026-0042), a status (open / in progress / closed / escalated), a priority, an assigned staff member, and a free-form update timeline. Cases are linked to the originating voter where applicable so you build a record of help provided. Useful for incumbent MPPs/MPs and councillors as well as candidates running on a record of constituent service.

Press / Reporters

A focused contacts database for press relations. Each reporter record stores name, outlet (e.g. CBC News, Toronto Star), beat (e.g. City Hall, federal politics), contact info, and the campaign’s last interaction date and notes.

Press / Reporters list view

The communications lead uses this to stage releases, log interview requests, and keep track of which reporters have covered the candidate or campaign before. Distinct from the Messages module — reporter outreach is typically one-to-one, not blast.

Volunteers

Volunteers are the people powering canvasses, phone banks, sign drops, and election day. The volunteer roster stores contact info, availability, language(s), and any special skills. Each volunteer can be assigned to canvassing turfs and given a role that determines what they see in the dashboard.

Volunteer roster view

Hours logged are tracked per volunteer. Shifts can be scheduled and the system records attendance. Aggregate volunteer hours are exported as in-kind contributions when that’s required by your jurisdiction’s campaign-finance rules.

Leaderboard

A friendly competition view ranking volunteers by doors knocked, calls made, and signs deployed over the last day, week, and campaign-to-date. Designed to surface high performers, recognise volunteer contributions at the next event, and give field directors a quick read on team activity.

Volunteer leaderboard ranked by doors knocked and calls made

Election Day

The Election Day module is the war-room dashboard for E-Day operations. It shows poll division status (open / closed / problem), GOTV activity by poll, scrutineer reports from polling stations, and a running tally of which of your identified supporters still need a knock or a ride to the polls.

Election Day operations dashboard

The dashboard refreshes via Server-Sent Events on /api/election-day/stream— you don’t need to refresh the page to see new data. As scrutineers report poll-by-poll turnout and your phone bankers log GOTV touches, numbers update live.

Set up advance polling days in Settings so the dashboard tracks turnout across the entire voting period rather than just election day itself.

Landing Pages

Build hosted landing pages for the campaign — volunteer signup, event RSVP, petition, policy plank, donation. Each page lives at a unique slug (ridingdesk.ca/p/your-slug), has a configurable headline / body / call-to-action, and captures responses against the campaign.

Landing page builder with template selection

Pages render in either English or French based on the visitor’s language toggle, and they’re mobile responsive. A drag-and-drop visual editor, A/B variants, and custom-domain hosting are on the roadmap; today’s landing pages are configured via the form-style editor and published under the ridingdesk.ca/p/[slug] path. Planned

Donation landing pages are a separate first-class type at ridingdesk.ca/donate/[slug]. Each donation page has an associated Stripe checkout flow, an eligibility-attestation step, and a real-time progress bar against a fundraising goal you set.

Public Tools

A few tools on RidingDesk are publicly accessible — useful both as voter-engagement assets and as starting points for your campaign’s own outreach.

Find your election

/find-elections is a public lookup tool. Visitors enter their postal code or address and the page returns every election at every level — federal, provincial, municipal — that they’re eligible to vote in. Useful to embed in a candidate’s personal site or share on social.

Find Elections public lookup tool

Embeddable postal-code widget

/embed/postalis an iframe-friendly version of the postal lookup that campaigns can embed in their own websites. CSP and X-Frame-Options are configured to allow embedding from any origin. Drop in a one-line iframe snippet and you have a “Find your candidate” widget on your site.

Public sign-ups

Volunteer sign-up, donation pages, and petitions are publicly reachable at the slug URLs from the Landing Pages and Donation Pages modules. Share these directly in emails, on social, on print materials, or via QR codes.

Analytics

The analytics module aggregates the data flowing in from canvasses, phone banks, surveys, and fundraising. The headline reports are voter ID distribution by poll division, contact-rate trend over time, support-distribution breakdown, and volunteer-activity totals.

Analytics dashboard showing voter ID distribution and trend charts

Filter by date range and poll division. Each chart can be exported as CSV. Predictive vote-share modelling and PDF report export are on the roadmap. Planned

Data & CSV

The Data module is for managing the voter file at a database level — bulk imports, exports, and cleanup operations.

Data management view

CSV import

The Import flow accepts the official Elections Canada list of electors and any generic CSV. Upload the file, map your columns to RidingDesk fields (the wizard auto-detects common column names like name, address, postal code, phone, email), preview the result, and confirm. Imports are scoped to your campaign and write to the audit log.

CSV import wizard

CSV export

Voters, donations, volunteers, and canvassing results all expose CSV export endpoints. Apply any filter that’s active in the UI and the export respects it. JSON and PDF exports are on the roadmap. Planned

Exported CSVs contain personal information. Encrypt them when sending by email and delete copies when done. Only Campaign Manager and Data Manager roles can export.

Bilingual Support

RidingDesk is fully bilingual: English and French. The language toggle is in the top navigation on every page; the choice persists across sessions per user.

Dashboard rendered in French

Translations use Canadian French political terminology — circonscription (riding), bureau de scrutin (polling station), pointage (voter ID), porte-à-porte(canvassing). Public-facing pages (landing pages, donation pages, the postal-lookup widget) honour the visitor’s language preference automatically.

Integrations & API

RidingDesk has a REST API for its own first-party use and exposes a small set of outbound integrations.

Integrations settings showing API key management and webhook configuration

Active integrations

  • Stripe— subscription billing for the platform itself, donation processing for campaigns. Each campaign uses Stripe Connect.
  • AWS SES (ca-central-1)— transactional and bulk email delivery, with bounce/complaint webhooks routed back to the platform via SNS.
  • Mapbox— address autocomplete on every address field. Only the address text typed by the user is sent to Mapbox; no other personal data.
  • Cloudflare — DNS and CDN for static assets.

Electoral Data API

A read-only public REST API at /api/v1/electoral/* serves Canadian electoral data: list of elections, riding boundaries (with shape geometry), polls, and candidates. Keys begin with ced_. See the Electoral Data API docs for the full reference, or grab a free key from the self-service form.

Customer Data API

A read/write JSON API at /api/v1/voters, /donations, /volunteers, /canvassing, /lawn-signs, and /campaign for your campaign’s own CRM data. Keys begin with rd_live_ and are minted from Settings → API Keys (STARTER tier or higher). The official @ridingdesk/mcp-server Model Context Protocol package wraps every endpoint as a Claude Desktop tool. See the Customer Data API docs for the full reference, OpenAPI 3.1 spec, and codegen instructions.

Webhooks

The platform receives webhooks from Stripe (billing events) and from AWS SES via SNS (bounces, complaints, deliveries). Outbound webhooks — pushing campaign events to your own integrations — are on the roadmap. Planned

On the roadmap

Two-way data sync with major Canadian party voter databases (Liberalist, CIMS, Populus, NDP VoteBuilder), Google Workspace calendar/contact sync, Mailchimp list sync, Twilio voice, and outbound webhook configuration are all planned but not yet shipped. Planned

Security

Defence-in-depth measures currently in place:

  • TLS 1.2+ for all traffic, with HSTS preload.
  • One-way bcrypt hashing for stored passwords.
  • Role-scoped database queries — every query is bound to the requesting user’s campaign and role.
  • Strict Content Security Policy, X-Frame-Options, X-Content-Type-Options, and Referrer-Policy on every response.
  • CSRF protection via a same-site session cookie plus token validation on state-changing requests.
  • Server-side rate limiting on auth endpoints and bulk write paths.
  • Input validation with Zod schemas at every API boundary.
  • An immutable audit log for every privileged action.
  • Production application errors are reported to Sentrywith strict PII scrubbing — request bodies, cookies, sensitive headers, and email-shaped strings are redacted before leaving the server.

Two-factor authentication (TOTP / WebAuthn), automated intrusion detection, formal third-party penetration testing, and at-rest column-level encryption for the most sensitive fields are on the security roadmap. Planned

Privacy practices — data residency, third-party processors, retention timelines — are detailed in the Privacy Policy.

Settings

Settings is where campaign administrators configure every campaign-level option.

Settings page showing campaign config and team management
  • Campaign profile— candidate name, riding, election date, party affiliation, brand colour, logo.
  • Team— invite team members by email and assign one of six built-in roles: Campaign Manager, Field Director, Communications Lead, Data Analyst, Volunteer, or Observer.
  • Billing— subscription tier, payment method, invoice history. Self-service plan changes via the Stripe billing portal.
  • Tour — replay the guided onboarding tour at any time.

Custom roles beyond the six built-ins are on the roadmap. Planned

Audit Log

Every privileged action writes to the audit log: voter records edited, data imported or exported, donations recorded, team members invited or removed, settings changed, campaigns sent, lawn-sign status transitions. Each entry stores the user, timestamp, action type, the entity affected, and the request IP.

Audit log filterable view

Filter by user, action type, entity type, and date range. The log can be exported as CSV. Records are immutable — nothing in the application can edit or delete a log entry, including campaign managers.

Audit log access is granted to Campaign Manager and Data Analyst roles. If your official agent or legal counsel needs read access for a compliance review, use the CSV export rather than granting them dashboard access.

Need more help?

Email [email protected] or visit the Help Centre for guides and FAQs. The REST APIs are documented at /docs/api.