Cleaner matches. Faster results. More shooters.
Snapshot Scoring isn’t just a scoring app. It’s every match-day touchpoint (QR pre-reg, walk-ups, check-in, squads, scoring, publish), a capability-based permission system with stage-scoped volunteer grants that work offline, equipment validation that catches problems before match day, a director-side analytics layer (Match Analytics, Operations Dashboard, Score Audit), and a six-mechanism offline-first sync stack so the app keeps scoring whether you have full LTE, the bay’s flaky Wi-Fi, or nothing at all. Plus a competitor-side product that keeps shooters engaged between matches and drives 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, 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.
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? Manager taps the walk-up button, fills alias + SASS# + category. Auto-approved in one step.
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 NDEF tags with shooter / match / stage / club / score payloads (up to 8 KB each). Tap a phone to a tag at the clubhouse and the right action runs — check in, follow the club, claim a stage, ingest a score bundle. Works without internet, without an 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.
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.
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.
Six independent offline mechanisms.
Match-day networks are a mess — full LTE in the parking lot, dead spots at the back bay, the bay’s flaky Wi-Fi between. Snapshot Scoring assumes that and ships an offline-first stack with six independent mechanisms layered together.
14-day local mutation queue
Every score, registration, check-in, and lock saves to device storage first. 5,000-operation capacity, 14-day retention, payloads obfuscated at rest with a key in the device Keychain (iOS) / Keystore (Android). Mutex-protected, listener-broadcasting, retry-with-backoff up to 10 attempts per op.
Local-network HTTP peer sync
Multiple phones on the same Wi-Fi exchange scores directly without going to the server. Port 8847, QR-bootstrap session, 30-minute timeout. Director phone + four scoring phones = current with each other regardless of internet.
Delta sync with ETags
Only changed entities transit. ETag-based HTTP caching, per-entity modifiedSince timestamps across nine entity types (matches, shooters, scores, stages, groups, entries, organizations, rulesets, check-ins).
Configurable background sync
Auto-syncs on app foreground, periodic refresh in foreground (default 5 min). Configurable: WiFi-only mode, low-battery skip, pause/resume, exponential retry up to 5 minutes. Pause for the awards ceremony if you want.
NFC tap-to-transfer
NDEF tags up to 8 KB with private MIME so other apps don’t intercept. Five payload types (shooter, match, stage, club, scores). Tap a phone, the right action runs.
QR transfer codec
12 transfer types via compact QR (~2.9 KB chunked, JSON-with-version-prefix): full match bundle, score bundles, shooters, stages, entries, groups, clubs. Chunked automatically when the payload exceeds one QR.
Embedded scoring defaults
Sport rules cached on device at install. A freshly-installed phone scores offline immediately — no first-load round-trip required.
Offline volunteer grants
Permission grants persist on device. Volunteer scans the QR with signal at sign-in, walks to a remote bay with no signal, keeps scoring. Persistent banner shows they’re on cached perms.
Latest-write-wins reconciliation
When a phone returns to signal, queued ops replay in order; conflicts resolve by latest write timestamp. Ops are dropped only after 10 retry attempts, with an explicit alert so you know.
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?
The app and the WordPress plugin are free for your club to use — no setup fee, no per-match fee, no subscription, no “Premium” tier. Free is the model. See the Terms for the 30-day notice we’d give existing clubs if that ever changed.
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 five 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), and Steel Challenge (Raw Time). 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 volunteer scorers work bays with no signal?
Yes. As of April 2026, permission grants cache on device. The volunteer scans the QR with signal at sign-in, walks to a remote bay with no signal, and keeps scoring. A persistent banner reminds them they’re running on cached perms. When they’re back in range, scores reconcile to the server through the offline queue everyone else uses.
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?
Six independent mechanisms keep you running. Every tap saves to a 14-day local mutation queue (5,000-operation capacity, encrypted at rest). Multiple phones at the same match exchange scores over the bay’s Wi-Fi without a server roundtrip (local-network peer sync on port 8847). Delta sync moves only what changed; background sync runs while you’re tapping. NFC tap-to-transfer and QR transfer codec move data between devices without internet at all. Volunteer permission grants and sport rules are cached on device. When connectivity returns, the offline queue 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.