Cleaner matches. Faster results. More shooters.
Snapshot Scoring isn’t just a scoring app. It runs every match-day job — pre-registration, check-in, squadding, scoring, publishing — and keeps working when the bay has no signal. Between matches, it keeps shooters engaged and points them back to your club.
// snapshot-results v2.6.1 · free · GPLv2 · requires WordPress 5.0+ · tested with WP 6.9
Live from the backend — refreshed every 15 min. You won’t be the first.
How Snapshot Scoring actually grows your club.
Every feature the competitor side gets — career stats, classifier tracking, drill log, club discovery, events feed — also acts as a distribution channel for your club. Daily-active shooters find clubs, follow them, and show up on match day ready to check in.
A shooter finds your club
Competitors search public clubs by name or location in the app. Your club’s public profile shows up — name, location, member count, upcoming matches. One tap to follow.
Your matches hit their feed
From that moment on, every match you create appears in their Events feed, sorted by date. Subscribing to your iCal feed drops the same matches into Google Calendar or Apple Calendar.
Inline registration, two taps
They see a match they want to shoot. Tap it. Their profile info + member numbers + per-org alias + category pre-fill. Equipment validates against your match’s requirements before submit. Tap submit. They’re on your roster before match day.
QR at the clubhouse — or their own Profile Card
Match morning: the shooter hits your check-in desk. Either their name goes in the search, or they show their Profile Card QR and your scanner puts them on the squad in one tap. “12/45 checked in” ticks up. The non-registered shooter behind them gets the walk-up flow.
Run the match
Squads (or posses, if you’re running SASS) built with auto-balance + auto-rotate — or batch-assign by hand when you know your regulars. Stages scored. Need extra help? Hand a QR grant to a volunteer — they score only the stages you assigned, even at remote bays without signal (grants cache on device). Match locks when the last stage is done — bulk-lock all stages atomically when you’re ready.
Results go back into their app
The shooter opens the app on the drive home. Their match history updated itself. Their career stats and classifier rank recalculated. The leaderboard hit your club site. Their results email landed while they were unloading the truck.
Every match-day touchpoint, one app.
Stop juggling spreadsheets, paper score sheets, email threads, and “wait, who’s handling registrations this time?” — Snapshot Scoring covers it all in one app + one plugin, across every discipline your club runs.
Upcoming and completed, at a glance.
One view of everything your club has running. Upcoming match pinned to the top with a “Score Stage 1” CTA ready the moment you start. Locked matches get a green 100% scored bar and a lock icon. Director phone, scorekeeper phone, RO phone — same view everywhere.

Club Settings
Pick which sports your club hosts — SASS, USPSA, IDPA, 3-Gun, Steel Challenge, ICORE, GSSF, Bianchi/NRA Action Pistol, PRS/NRL22, PCSL, or any combination. Set a default so match creation skips the picker. Club Defaults set the league + ruleset that new matches inherit; override per match in the wizard. Sport-specific vocabulary (Posse for SASS, Squad for USPSA/IDPA) applied automatically.
Guided club setup
A first-run wizard seeds smart defaults — enabled sports, divisions, scoring — so a brand-new club is match-ready in minutes instead of a stack of config screens. Accept the defaults or tune them; you can always change them later.
QR pre-registration
Each match generates its own QR code. Post it anywhere shooters will see it — email, club site, clubhouse. Fill a mobile form, land in your queue.
Walk-up registration
New shooter shows up on match day? The director taps the walk-up button, fills alias + SASS# + category. Auto-approved in one step.
Waitlist + auto-promote
Cap your match and let the app handle overflow. Sign-ups past the cap join a waitlist with their position shown; when a spot opens, the next shooter is promoted automatically and notified by email and push. No manual list at the desk.
Profile Card QR check-in
Regulars don’t need to type anything — they show their Profile Card QR, your scanner reads it, they’re on the squad. Same QR works at every club on Snapshot Scoring. Travel shooters love it.
NFC tap-to-transfer
Program a cheap NFC tag with a shooter, match, stage, club, or score. Tap a phone to the tag at the clubhouse and the right action runs — check in, follow the club, claim a stage, or pull in a score bundle. No internet, no app open.
Check-in desk
Live count (“12/45 checked in”), searchable roster, one-tap toggle per shooter. Only checked-in shooters appear in squads and scoring. Batch check-in for running the whole line in one go.
Squad & rotate
Auto-balance and auto-rotate in two taps. Each squad gets its starting stage + rotation schedule. Batch-assignment and manual drag-to-move always available.
Equipment validation
Set per-match equipment constraints (caliber, capacity, division compliance) and the app blocks ineligible registrations before they hit your queue. Shooters update their equipment slots once on their profile; matches validate against them at signup.
Match-level requirements
Toggle per-match: alias required, age minimum (computed from DOB), valid membership, equipment compliance. App blocks ineligible registrations rather than letting them land on match day.
Volunteer grants (Temp Auth)
Need a helper scorer for one match? Generate a QR grant scoped to specific stages. They scan, authenticate, score their stages — and that’s all they can do. Permissions cache on device so they keep scoring even at remote bays without signal. Access auto-expires at match end + 12 hours.
Sport-specific scoring UIs
USPSA A/C/D zones with power-factor toggle. IDPA points-down with inline penalty previews. Steel 5-string drop-worst. Each sport gets the right UI, not a generic form.
Match Analytics + Operations Dashboard
Director-side dashboards: stage/entry/group analytics, performance trends, match participant demographics, segmented standings, DQ analysis. The Operations Dashboard is your live air-traffic-control screen for match day.
Score Audit + audit export
Every score edit, every actor, every before/after delta — on one page per match. Defend any score change with one screenshot. Full audit log CSV export for season records.
Lock & bulk-lock
One tap freezes a stage, or bulk-lock all stages atomically when the match is done. Scores can’t be modified; edits require explicit unlock. Every change timestamped with an actor.
Match duplication
Clone last weekend’s match (stages, requirements, sport, settings) in one tap; new date, same setup. Monthly cadences stop being weekly setup.
Scoring templates
Save a match’s full scoring setup — penalties, divisions, enforcement toggles — as a named club template and apply it to new matches in a tap. Build your club’s standard match once, reuse it all season.
Publish everywhere
Results land on your WordPress site + every follower’s feed + each shooter’s email + PDF + CSV + awards certs + a PractiScore .psc file if you need it. One tap.
Bulk email
Message every participant of a match, or every member of the club, in one send — schedule changes, “results are up,” next-match reminders. Straight from the director tools, no separate mailing list to maintain.
Multi-site WordPress pairing
Pair multiple WordPress sites from one director account. Per-site auto-push toggles, per-site OAuth tokens. Run results for two clubs from the same phone — or help a neighboring club without sharing accounts.
Public club profile
Every club gets a discoverable profile — shooters find you via club search, follow with one tap, subscribe to your iCal feed.
Season standings
Group matches under a Season. Year-to-date leaderboards aggregate every match by category — automatic, no manual rollups.
Multi-org membership IDs + alias
Each shooter profile holds SASS, USPSA, and IDPA numbers and per-org aliases on the same row — scores from every discipline auto-link to the right ID at the right org. Travel shooters show up as one person, not three.
Ownership transfer
Hand the keys cleanly when the club secretary changes. Explicit transfer flow with audit log — no shared admin passwords.
Built-in rulebooks + help
Every sport ships with its rulebook inside the app. Tap any penalty term (Procedural, FTDR, Minor Safety, Spirit) on the scoring screen for a sport-aware definition.
iCal subscriptions
Your public match schedule is exposed as an iCal feed (RFC 5545). Shooters subscribe in Google Calendar, Apple Calendar, or Outlook — your matches show up alongside the rest of their week.
Join or run a circuit
Link your club into a multi-club season with combined standings. Shared circuit seasons roll up every member club’s results, with configurable per-match multipliers and a circuit-organizer role separate from club roles.
Offline-first. No internet required.
Match-day networks are a mess, so Snapshot Scoring assumes the worst. Your club can score a whole match with no signal: every tap saves to an encrypted on-device queue, phones at the same match sync to each other over the bay’s Wi-Fi, and everything reconciles the moment you’re back in range. Volunteer permissions and sport rules work offline too. See the full offline stack →
Get it running in fifteen minutes.
If your club already has a WordPress site, this is a five-step process. OAuth 2.0 PKCE pairing — no copy-paste API keys, no cryptic tokens. If you don’t have a WP site, we can spin one up for you in a day.

Pair your site without API keys.
Type your WordPress URL. Type the 6-character pairing code shown in WP admin. Done — the app has an OAuth 2.0 token, your results publish automatically on match lock. Pair multiple sites from the same account; per-site auto-push toggles let you control which clubs publish where.
Upload the WP plugin
Download snapshot-results-2.6.1.zip. In WP admin → Plugins → Add New → Upload Plugin, pick the zip, install, activate. The plugin registers two custom post types for clubs and matches, plus styled out-of-box templates.
Generate a pairing code
From WP admin → Snapshot Settings, click “Generate Pairing Code.” A six-character code valid for 10 minutes will display on screen.
Pair the app to the site
Sign into the app on the director’s phone. Settings → Website Publishing. Type the code. The OAuth 2.0 PKCE flow exchanges it for encrypted access + refresh tokens the app remembers forever. Repeat for each club site you publish to.
Enable your sports + Club Defaults
Open Club Settings in the app. Toggle on the sports your club runs. Pick a default sport. Set your Club Defaults (default league + ruleset) so new matches inherit them automatically. Flip the “Public” switch so shooters can discover you.
Run a match end-to-end
Create a match — pick league + ruleset (defaults to your club’s, override per-match), set requirements (alias, age, equipment), post the QR code, let shooters pre-register, check them in day-of (Profile Card QR or by name), invite volunteer scorers via QR grant if needed, score every stage, lock the match.
Results everywhere at once
Hit Publish. Overall + per-division leaderboards post to your WordPress site (as styled custom post types) and to the Events feed of every shooter who follows your club. Shooters get their individual results emails automatically. Optional: export a PractiScore .psc file to hand to a director who lives on PractiScore.com.
Common questions from club leadership.
What does it cost?
Competitors are always free. Clubs are $20/year and circuits are $100/year (up to 10 clubs), starting when we leave beta — with 30 days’ notice. Clubs that onboard during the beta are founding clubs and stay free for life. No setup fee, no per-match fee, no per-shooter fee. See our Pricing page.
Do we need a WordPress site?
Strongly recommended — that’s where results land for the public and where shooters subscribe to your iCal feed. If you don’t have one, we can stand up a basic club site for you in a day at cost.
Can we manage multiple WordPress sites from one director account?
Yes. Pair as many club sites as you publish to from the same Settings → Website Publishing screen — one OAuth pairing per site. Per-site auto-push toggles let you control which clubs get auto-published results, and per-site connection status tells you if a site needs re-pairing. Useful if you run results for more than one club, or if you’re helping a neighboring club without wanting to share accounts.
What disciplines are supported?
All ten are fully production-ready today: SASS (Time Plus), USPSA (Hit Factor — Production, Steel Challenge, Multi-Gun leagues), IDPA (Points Down), 3-Gun (Time Plus per-firearm), Steel Challenge (Raw Time), ICORE (Time Plus), GSSF (Time Plus), Bianchi/NRA Action Pistol (Points), PRS/NRL22 (Points), and PCSL (Hit Factor). Each has its own scoring engine, dedicated scoring UI, divisions, and built-in rulebook.
Can we run a house variant or a local club ruleset?
Yes — as of April 2026 the scoring engine is DB-backed (Organization → League → RuleSet hierarchy, versioned per year) and composed from eight swappable scoring modules (time_plus, hit_factor, points_down, raw_time, drop_worst, power_factor, bonus_targets, detailed_misses). Email clubs@snapshotscoring.com with the rule variation and we’ll add it to the catalog. The mobile app picks it up on next sync. No code change, no app rebuild. Directors pick the league + ruleset per match in the match-creation wizard, with your Club Defaults pre-selected.
Can one club run multiple sports?
Yes. Enable any combination in Club Settings and pick a default. Match creation shows a sport picker only when more than one sport is enabled. Sport-specific vocabulary adapts — “Posse” on SASS match-day screens, “Squad” on USPSA/IDPA.
How do shooters check in?
Four ways. (1) Search by alias or SASS# on the check-in screen, tap to toggle. (2) Walk-up button for unregistered shooters — fill three fields, done. (3) Scan the shooter’s Profile Card QR with the built-in scanner — their profile, category, every membership number (SASS / USPSA / IDPA), and per-org alias goes in automatically. (4) NFC tag at the clubhouse — tap a programmed tag and they’re checked in without opening the app.
How do we handle volunteer scorers?
From the Grants screen, tap “Create Grant.” Pick the permissions (Score Matches, View Scores, Check In), pick the stages the volunteer will work, and share the generated QR code or invite link. They scan, authenticate, and are ready to score — with access scoped to exactly those stages. Grants auto-expire 12 hours after the match end date. You can revoke earlier if the volunteer no-shows.
Can directors set match-level requirements like minimum age or membership?
Yes. On any match, toggle requirements per-match: alias required, age minimum (computed from DOB), valid SASS/USPSA/IDPA membership, equipment compliance against the match’s constraints. The app blocks ineligible registrations before they hit the line — ineligible shooters land in a review queue rather than on match day.
How does equipment validation work?
Each shooter has equipment slots on their profile (firearm, holster, ammo, optics). Match equipment constraints are set per-match by the director (caliber range, capacity, optics rules, division compliance). On registration, the app validates the shooter’s equipment slots against the match’s constraints — if anything fails, the shooter sees the failed rule and can update their slots before re-submitting.
Is there an analytics dashboard for our club?
Yes. Match Analytics shows stage/entry/group analytics, performance trends, segmented standings, DQ analysis, and match participant demographics. The Operations Dashboard is the live match-day view — check-in pace, stage progress, scorer assignments, audit alerts. Career stats roll up across every match a club has run.
Can directors export the audit log?
Yes. Full audit log CSV export covers every score edit, unlock, ownership transfer, grant action, and admin operation — with actor, timestamp, and before/after deltas. Useful for season records, sanctioning bodies, or insurance.
What permissions model do you use?
Capability-based RBAC with 12 discrete permissions (manage_club, manage_members, manage_matches, manage_stages, manage_groups, manage_entries, score_matches, delete_scores, view_scores, manage_shooters, export_data, check_in) and 3 system roles (Owner, Match Director, Scorekeeper). One user can hold different roles at different clubs, plus temporary stage-scoped grants at events they’re helping with.
How do shooters find us?
Your club gets a public profile with upcoming matches, member count, and description. Shooters search public clubs by name or location, follow you, subscribe to your iCal feed, and your new matches land in their Events feed automatically.
What about multi-day matches?
Native support. Set start + end dates, run all stages over multiple days, results aggregate across the whole match. Offline queue extended to 14 days so disconnected scoring works across long events. Side matches nest under the parent.
Can the timer talk to it?
Yes — BLE shot timers are supported today, with auto-reconnect when the radio drops, haptic feedback on shot detection, undo for the last shot, and a staleness guard to prevent stale readings from being applied to the wrong shooter. We pair with AMG Commander, Shooters Global SG Timer, and Special Pie M1A2. Stage times flow straight into the scoring screen.
What if we lose Wi-Fi?
You keep scoring. Every tap saves to a local queue on the device (up to 14 days, encrypted), and phones at the same match can still exchange scores directly over the bay’s Wi-Fi with no server in the middle. Volunteer scorers work the same way — their permissions cache when they scan in, so they can score a remote bay with no signal at all. When connectivity returns, everything reconciles automatically.
What if the secretary changes?
Explicit club ownership transfer flow with audit log. The outgoing owner initiates, the incoming owner accepts, the system records both. No shared admin passwords.
Can shooters see scores from other clubs?
Yes — shooter accounts auto-link by membership number (SASS / USPSA / IDPA held on the same profile, with per-org aliases). A shooter who travels to your match and signs up later gets their score backfilled into their own history + career stats + classifier rank.
Do you support seasons?
Yes. Group matches under a Season (name, start, end date) and the app aggregates year-to-date standings per category across every match. No manual rollup.
Can we duplicate a match for a recurring monthly?
Yes. Match duplication clones an existing match (stages, requirements, sport, settings) into a new date with one tap. Monthly cadences stop being weekly setup — you just pick the new date and the QR code regenerates.
Can we import existing match data?
Yes. We support direct PractiScore .psc import (POST /api/matches/import/practiscore/) — paste in a PractiScore SQLite database and it maps onto our match / entry / stage / score models. CSV bulk import for shooter rosters and scores is also supported (POST /api/shooters/import_bulk/ + POST /api/scoring/batch-import/) with all-or-nothing rollback on row-level failures. Other vendor formats (SASS Premier, Round-Up) can be added on request via the configurable RuleSet catalog — email clubs@snapshotscoring.com.
Can we export to PractiScore.com?
Yes. Export any locked match as a PractiScore .psc SQLite file (GET /api/matches/{id}/export/practiscore) and upload it to PractiScore.com if your shooters expect to find results there. We’re the only non-PractiScore app that reads and writes the .psc format directly.
Where’s the support?
Email support@snapshotscoring.com, or open the contact form. The team is small but we run matches ourselves — you’ll talk to someone who knows what a P&R or a procedural is.
Try it at your next club night.
No commitment, no contract — just run one match through it. If it doesn’t save you time, walk away.