Every match-day touchpoint. Every competitor action. Zero paper.
Twelve sports, one app, from sign-up sheet to published results — and everything below is live in the current build, not a roadmap. Score whether you have full LTE, the bay’s flaky Wi-Fi, or nothing at all, then publish to your club site with a free WordPress plugin.
From sign-up sheet to scoresheet
Every match-day touchpoint — how shooters sign up, how they check in, how they get assigned to squads, how scores get locked — runs through a single app. No clipboard. No paper. No “wait, who’s in posse 3?”
One code, unlimited pre-registrations
Each match generates its own QR code. Post it to your club email, website, or clubhouse bulletin. Shooters scan, fill a mobile-friendly form, land in your queue.
Day-of registration in two taps
New shooter shows up unannounced? The director hits the walk-up button, fills alias + SASS# + category. Auto-approved in one step for managers.
Live roster, live count
“12/45 checked in” live at the top. Searchable by alias or SASS#. Not-checked-in entries float to the top. One-tap toggle per shooter. Batch check-in button clears the whole queue at once.
Auto-promote when a spot opens
When a match hits its cap, new sign-ups join a waitlist with their position shown. The instant someone drops, the next shooter is promoted automatically and notified by email and push — no list juggling at the desk.
Auto-balance & auto-rotate
Auto-balance distributes checked-in shooters evenly across squads. Auto-rotate assigns each squad its starting stage and computes the rotation schedule per squad. Batch-assignment tools for when you’re handling 60+ shooters.
Sport-correct vocabulary
Same workflow, correct word for the discipline. SASS matches call them posses, USPSA / IDPA call them squads — the app uses the right term everywhere based on the sport picked for the match.
Checked-in only on the scoring grid
Shooters who haven’t checked in don’t appear in squad setup or scoring screens. No-shows don’t clutter the line.
Requirements, equipment, notes
Dedicated screen surfaces match requirements, equipment constraints, dress code, and director notes for shooters at registration time. Replaces the inline-modal pattern that didn’t scale to multi-day matches.
Recurring matches in one tap
Clone last weekend’s match (stages, requirements, sport, settings) in one tap; new date, same setup. The QR regenerates for the new match. Monthly cadences stop being weekly setup.
Save a config, reuse it
Save a match’s full scoring setup — penalties, divisions, enforcement toggles — as a named club template, then spin up the next match from it in a tap. Stop re-entering the same rules every weekend.
Atomic score lock
One tap freezes a stage. Bulk-lock all stages atomically when the match is done. Scores can’t be edited; squads can’t be moved. Every change timestamped with an actor.
Every match your club has run, at a glance.
Upcoming match at the top with a prominent “Score Stage 1” CTA. Completed matches show 100% scoring progress with a lock icon. Scoring status bar tells you what’s live, what’s done, and what’s still waiting.

Catch problems before match day
The equipment system, match-level requirement toggles, and DOB-derived age checks turn registration into a gate. Ineligible entries are refused at sign-up with the rule that failed, so the shooter can fix their gear before match day. Match directors stop saying “sorry, your firearm isn’t legal in this division” on Saturday morning.
Per-shooter profile
Each shooter has equipment slots on their profile — firearm, holster, ammo, optics. Updated once on the profile, validated against every match they sign up for.
Pre-built kits per division
Save a full equipment set — firearm, holster, ammo, optics — as a named loadout per division. At registration it’s a one-tap pull instead of a dig through the range bag, and the slots validate against the match’s constraints automatically.
Per-match equipment rules
Directors set the allowed weapon types and caliber patterns per match. The constraint set is part of the match definition; duplicating a match carries them forward.
Block ineligible registrations
On registration, the app validates the shooter’s equipment slots against the match’s constraints. Failures show the specific failed rule, so the shooter can update their slots and re-submit before match day.
Per-match enforcement
Six per-match toggles: alias, date of birth on file, minimum age, maximum age, weapon type, and caliber. Each toggle is independent — set the policy that fits the match.
Age minimums computed live
Shooters store DOB once on their profile. Match directors set an age minimum on the match. The app blocks under-age registrations automatically — no manual ID checks at the desk.
The match-day analytics layer
Seven director tools that turn match-day data into action — not just a CSV. From the moment a match locks, you have the breakdowns you used to compute by hand, plus the audit trail to defend any score change.
Stage / entry / group breakdowns
Stage-by-stage analytics, per-entry analytics, group analytics, performance trends, segmented standings. See where the time went, which stages broke the field, and how this match compared to last month’s.
Live match-day air-traffic-control
Director-side live view of check-in pace, stage progress, scorer assignments, audit alerts, and equipment-validation queue. The single screen the director keeps open all day.
Every edit, every actor, one page
Every score edit, unlock, and ownership transfer lands in an append-only log with actor, timestamp, and before/after delta; the per-match Score Audit screen shows the trail, filterable by entry, stage, user, action, and date. Defend any score change with one screenshot.
Structured DQ reasons
DQs are recorded with structured reasons (Cold Range, Unsafe Handling, 180 Violation, etc.) — not free-form notes. Match Analytics shows DQ rate per stage, per category, per season.
Match participant breakdown
Match participant demographics, sport-data summary across the season, segmented standings. The numbers you bring to a club board meeting.
Atomic stage lock
Lock all stages atomically when the match is done — no need to walk stage by stage. Audit log captures the bulk-lock as a single event with the actor.
Bring your roster in bulk
CSV roster import for shooters, useful when moving a club over from another scoring app. Score import exists as a JSON endpoint on the API for migrations we help with; there is no CSV score import in the app.
At the bay
Where Snapshot Scoring earns its keep — built specifically for outdoor range conditions, gloved hands, and the chaos of an active stage. Anyone you add to the club as a Scorekeeper gets the same tools, and they keep working at remote bays without signal.
Outdoor-readable layout
High-contrast layouts with oversized stage cards. Readable in direct sun without holding the phone at a weird angle.
Color-coded status bar
Horizontal shooter pills at the top of every scoring screen. Unseen (gray) → in-progress (yellow) → scored (green) → locked (red). Tap any pill to jump to that shooter; auto-scrolls into view on select.
Hit-factor scoring UI
A/C/D zone counters with ± buttons. No-shoots and miss fields. Major/minor power-factor toggle that recalculates zone values live. Hit factor shown in real time as you tap.
Points-down UI
Raw time + points-down counter + procedurals + FTDR + Hit-on-Non-Threat. Each field shows its time penalty preview inline — “+3s” next to procedurals, “+30s” next to FTDR.
5-string drop-worst UI
Five string inputs in milliseconds, auto-formatted to X.XX seconds. Worst-string auto-marked DROPPED. Anything over 30s tagged MAX. Final time updates as you enter.
Auto-reconnect + haptics + undo
Pairs with AMG Commander, Shooters Global SG Timer, and Special Pie M1A2. Stage times land directly in the scoring screen. Auto-reconnects when the radio drops, haptic feedback on shot detection, undo for the last shot, staleness guard prevents stale readings from being applied to the wrong shooter.

Score a stage in under a minute.
Editing a previously-saved score? The banner tells you before you overwrite. Sport-specific form below. BLE-synced time at the top with auto-reconnect. Miss steppers with “+5s each” preview next to them. Save & Next opens a shooter picker so you can jump directly to the next shooter — no accidental stage change.
Four independent offline mechanisms
Match-day networks are a mess. Snapshot Scoring assumes that and ships a sync stack with four independent mechanisms layered together — every device current whether you have full LTE, the bay’s flaky Wi-Fi, or nothing at all. Each mechanism does one job; together they cover the rest.
5,000 ops, obfuscated at rest
Every score, registration, check-in, and lock saves to device storage first. 5,000-operation capacity sized for a 200-entry × 10-stage match × 2 ops/score. 14-day retention for multi-day events. Payloads obfuscated at rest with a key in the device Keychain (iOS) / Keystore (Android). Built to survive concurrent edits, and retries failed saves automatically — up to 10 attempts per operation.
Foreground / background reconciliation
Auto-syncs when the app returns to foreground, then on a five-minute interval while it stays open. Failed syncs retry on exponential backoff, capped at five minutes apart. Settings → Sync & Offline shows network state, last sync, and the pending queue broken down by type, with Force Sync and Clear Queue. There are no user-facing sync toggles today.
NDEF tags, score bundles
NDEF tags up to 8 KB, written with a private MIME type so other apps don’t intercept them. The match Transfer screen sends and receives a match’s score bundle by tap. The tag format also defines shooter, match, stage and club payloads; nothing in the app reads those yet.
12 transfer types, chunked
Compact QR (~2.9 KB chunked, JSON-with-version-prefix): SCORE / SHOOTER / SHOOTERS / MATCH / STAGE / STAGES / ENTRY / ENTRIES / GROUP / GROUPS / CLUB / BUNDLE. Transfer a full match, a single stage, a roster, or a single shooter — chunked automatically when the payload exceeds one QR.
Score offline immediately on install
Sport rules cached on device at install time. A freshly-installed phone can score offline immediately — no first-load round-trip, no “please connect to download rulesets.”
Cached perms for remote bays
Club roles and their permissions persist on device. A scorekeeper signs in with signal, walks to a remote bay with none, and keeps scoring. A persistent banner reminds them they’re on cached perms.
Replay in order on reconnect
When a phone returns to signal, queued ops replay in order. If the server already holds a newer score for the same entry, you are shown both and choose which to keep. Ops are dropped only after 10 retry attempts, with an explicit alert so you know nothing was silently lost.
Results everywhere at once
The whole point of match day is the scoreboard. Snapshot Scoring puts it in every follower’s feed, in every competitor’s match history, in an email to every shooter, and on print-ready awards certificates — and on your own club website once the plugin is connected.
WordPress publishing
Free publishing plugin for any WordPress club site. Connect once with OAuth 2.0 PKCE (nothing to paste out of a settings screen). Press Sync Now in WP admin after you lock a match — or turn on Auto-Push and it publishes itself — and it lands as custom post types with overall + per-division leaderboards; styled club + match pages work out of the box. Full setup steps are in the publishing guide.
Many clubs, one account
Connect multiple WordPress sites from one director account. Per-site connection status, per-site OAuth tokens. Run results for two clubs from the same phone — or help a neighboring club without sharing accounts.
In the app, automatically
Every follower of your club sees the match in their Events feed. Their match history updates if they shot it. Their career stats and classifier rank recalculate. Zero action required.
Per-shooter breakdowns
One tap emails each shooter their own results — per-stage breakdown, match total, category rank, clean-match flag. Nobody asks “where do I see my scores?”
Reach the whole field at once
Message every participant of a match, or every member of the club, in one send — schedule changes, results-are-up notices, next-match reminders. Straight from the director tools, no separate mailing list.
Multiple export formats
PDF, CSV, and Awards are the three export buttons on the Results screen — clean PDF results (landscape letter, repeating headers), raw CSV, and print-ready certificates, each handed over as a short-lived signed download URL. A JSON match export exists on the API for third-party integrations; it is not one of the in-app buttons.
Print-ready top-3 per category
Generate awards certificates in PDF — one page per top-3-per-category, landscape format, leather + brass design. Print Sunday afternoon for the awards ceremony.
Shareable, SEO-friendly
Locked matches at public clubs get a public results URL — shooters can link their category placement to anyone, indexed by search engines, no login required.
One screen, every output.
36/36 scored, six shooters, six stages, zero clean. PDF, CSV, Awards and Email are one-press final actions off this screen. By-category leaderboards with SASS# and per-stage drill-down. Certificates printed before the awards ceremony starts.

Your shooting, tracked
Every match you’ve shot, every drill you’ve run, every division you compete in — aggregated, searchable, and attached to every membership number you hold across every club that uses the app. Plus classifier progression so you can see your rank trajectory across seasons.
Shooters don’t need you to adopt anything first. The practice log, equipment and loadouts, and club discovery all work on a free account today — create one at app.snapshotscoring.com/register. The scoring history above is the part that needs a club. What shooters get free.
Career dashboard
Total matches, total stages, clean-match rate, avg / best / worst match total, best stage time. Numbers are live from your actual scored matches — no manual entry.
Rank progression across seasons
Watch your USPSA classification, IDPA class, or SASS skill level progress across seasons. Pulled live from scored matches; no manual entry. See trajectory by sport on one screen.
Multi-org auto-link + alias
Hold SASS, USPSA, and IDPA numbers on the same profile, with per-org aliases. Scores from each discipline auto-link to the right ID and the right alias — including matches shot at other clubs before you signed up for the app. Travel shooter in three disciplines? One profile, not three.
Stage times, placements, misses
Drill into any match — stage-by-stage times, hit factor, points down, category placement, overall finish, clean/MDQ flags. Email the full results PDF in one tap.
Practice tracking with targets
Log draws, transitions, reloads, sweeps, stage runs, dry-fire sessions — with firearm, time, location, and notes. Set target time + accuracy goals per drill type; trajectory chart shows progress. Best + average per drill type.
Year-to-date leaderboards
Season standings per club, per category. See your rank, total match time, clean count across every match in the season.
One profile, every match
Per-shooter equipment slots (firearm, holster, ammo, optics) on the profile. Match registration validates against per-match constraints automatically.
Verified email & password reset
Real account management. Verify your email at signup, reset your password via 6-digit code if you forget it.
Profile Card QR — one code, every touchpoint
Unified QR codes for users, clubs, and matches. The same minimal TYPE:ID format means the same scan does different things depending on where you scan it — check in, enroll, register, follow a club. No external barcode app needed.
Check in with a scan
Settings → My QR Code. Your personal card is on screen — show it at any club’s check-in desk and they scan you straight onto the squad. Travel to a match at a club you’ve never been to? Same flow, no extra registration forms.
Shareable club card
From Club Settings, directors get a QR for the club itself. Post it next to the entrance; shooters who scan it land on the public profile ready to follow.
Two taps to register
Each match has its own QR. Scan → pre-filled registration form with your profile info, SASS#, per-org alias, and category already populated.
Same scan, different action
Scan a shooter’s Profile QR on the Check-In screen → check them in. Scan it on the Posse Setup screen → enroll them. Scan it on a public club profile → follow the club.
Tap a programmed tag
Same five payload types as QR (shooter, match, stage, club, scores) on NFC NDEF tags up to 8 KB.
The loop that grows your club
Every feature on the competitor side also does double duty as marketing for your club. Followers see your matches. Searchers find your profile. Inline registration closes the loop from “saw it” to “signed up.”
Find clubs
Search public clubs by name, abbreviation, or location. See member count, follower count, upcoming matches.
Every club, its own page
Name, location, description, website, member + follower counts, next 10 matches.
One tap to subscribe
Shooters tap “Follow” on a club profile. Your matches now land in their Events feed as soon as you create them.
Your matches, in their app
Every match you create appears in the Events feed of every follower, sorted by date with registration CTA inline.
See a match → register → done
Interested shooters register from the feed without leaving it. Profile info + member numbers + per-org alias + category pre-fill themselves.
Calendar subscriptions
Every public club exposes an iCal feed (RFC 5545). Shooters subscribe in Apple Calendar, Google Calendar, or Outlook.
Run a season across multiple clubs
Link clubs together into a season-long series. Shared circuit seasons aggregate every member club’s results into one standings table, with configurable per-match multipliers and a circuit-organizer role that is separate from club roles.
One series, many clubs
Create a circuit season and link member clubs into it. Each club keeps running its own matches; the circuit ties them into a shared series.
Roll up every member club
Circuit standings aggregate results from every member club’s matches into one leaderboard, so competitors see where they stand across the whole series.
Weight the majors
Configure per-match multipliers so a season major counts for more than a club night when the circuit standings are computed.
Separate from club roles
A circuit-organizer role, distinct from club roles, manages the series, its member clubs, and its standings without touching individual club administration.
Twelve sports. One configurable engine. Eight composable modules.
Real per-sport scoring, not a generic tally with a label on it. Each discipline has its own scoring method, division set, and penalty model. Every sport’s scoring form is driven by its ruleset, so the fields you see are the ones that sport scores with, and a new ruleset is a config change rather than a code release. Underneath, eight reusable scoring modules (time_plus, hit_factor, points_down, raw_time, drop_worst, power_factor, bonus_targets, detailed_misses) compose every engine — so a new league year or a house variant is a config row, not a code change. Match directors pick the league + ruleset per match in the match-creation wizard, with Club Defaults pre-selected.
Cowboy Action Shooting
43 official SASS category codes seeded from the 2024 handbook (Buckaroo through La Reina, plus all duelist, gunfighter, costume, and Frontier Cartridge variants). Time Plus scoring with misses (+5s), procedurals (+10s), and spirit-of-the-game penalties (+30s).
Practical Pistol
Full USPSA divisions with hit-factor scoring. A/C/D zone counters, no-shoots, misses, procedurals, and a major/minor power-factor toggle that recalculates points live.
Defensive Pistol
IDPA divisions with points-down scoring. Raw time + points down (1s each) + procedurals (3s) + FTDR (30s) + Hit-on-Non-Threat (5s).
Multi-gun
Time Plus scoring across pistol, rifle, and shotgun stages. Per-firearm miss tracking, MOA penalties, firearm-specific round counts and division rules.
Steel Challenge
SCSA-style speed shooting. Five strings per stage, drop-worst auto-marked, 30s string max auto-capped. Final time computed live.
Revolver
International Confederation of Revolver Enthusiasts. Time Plus scoring with ICORE divisions and penalty model.
Glock Sport Shooting
GSSF-style scoring. Time Plus with GSSF divisions and category structure.
Action Pistol
NRA Action Pistol / Bianchi Cup. Points scoring across the practical, barricade, falling-plate, and mover events.
Precision Rifle
Precision Rifle Series and NRL22. Points scoring with stage-based precision-rifle formats.
Practical Carbine
Practical Competition Shooting League. Hit Factor scoring with PCSL divisions.
Config, not code
As of April 2026, adding a new league year or a house variant is a config task, not a code release. Email clubs@snapshotscoring.com.
Capability-based access control
Permissions follow the role — not the person. A capability model with twelve discrete permissions and three system roles.
Discrete, auditable capabilities
manage_club · manage_members · manage_matches · manage_stages · manage_groups · manage_entries · score_matches · delete_scores · view_scores · manage_shooters · export_data · check_in. Each is individually grantable, auditable, and revocable.
Owner · Match Director · Scorekeeper
System-immutable bundles of permissions. Owners get everything; Match Directors get everything except club/member management; Scorekeepers get score_matches + view_scores + check_in only.
Bring in a second scorer
From the club’s member settings, add an existing Snapshot username as staff and pick Scorekeeper or Match Director. They score from their own device, with no shared account.
Clean handoff, full audit
Explicit ownership transfer flow with audit log. No shared admin passwords.
Under the hood
The boring-but-important stuff that makes the whole system reliable across devices, networks, and seasons.
iOS & Android
Native React Native build for both platforms. Same data model, same UI, same scoring engines.
JWT with auto-refresh
Token-based authentication with automatic refresh. Sign in once, stay signed in. Capability checks on every mutation.
Approval, rejection, waitlist promotion
Real push notifications on iOS and Android fire on the registration events that matter — approved, rejected, or promoted off the waitlist. FCM + APNs managed server-side with auto-deactivation of dead tokens.
OAuth 2.0 + multi-site
Free GPL plugin (snapshot-results) connects via OAuth 2.0 PKCE, so there are no API keys to manage. Connect multiple WordPress sites from one director account, each with its own tokens and connection status.
Every mutation timestamped
Score edits, unlocks, ownership transfers, staff admin actions — all captured with actor + timestamp + before/after deltas.
Bring it to your next match.
No setup fee, no per-shooter fees. $20 a year per club with a 14-day refund; shooters free. See pricing.
Questions about the feature list.
How does scoring work offline?
Four independent mechanisms. (1) 14-day local mutation queue with 5,000-operation capacity; payloads are obfuscated in app storage with a rotation key held in the device Keychain or Keystore, so scores and shooter details cannot be read casually out of storage. (2) Background sync when the app returns to the foreground and on a five-minute interval, with failed syncs retrying on exponential backoff capped at five minutes. (3) NFC tap-to-transfer of a match’s score bundle on NDEF tags up to 8 KB. (4) QR transfer codec across 12 payload types, chunked for larger data. Sport rules and club role permissions are also cached on device.
How long does the offline queue retain operations?
14 days. The local mutation queue holds up to 5,000 operations with retry-with-exponential-backoff up to 10 attempts per operation. Payloads are obfuscated at rest with a key in the device Keychain (iOS) or Keystore (Android).
How do we add a second scorer?
Add the person to the club as a Scorekeeper: Club Settings, Manage Members, Add Staff, enter their Snapshot username, choose Scorekeeper. They need a Snapshot account first, because the invite is by username. Scorekeepers get score_matches, view_scores, and check_in, and they score from their own device with no shared account.
Does this replace PractiScore?
For action shooting clubs that want an integrated stack at a flat $20 a year, yes. Snapshot Scoring covers QR pre-registration, walk-ups, live check-in, squad-building, ruleset-driven scoring forms, BLE timer integration, capability-based RBAC with 12 permissions and 3 system roles, equipment validation, classifier tracking, multi-org membership IDs with per-org aliases, configurable rulesets, director-side analytics, match duplication, and CSV roster import, at a flat yearly price for clubs (free for competitors). It also ships a free WordPress publishing plugin (snapshot-results) that connects with OAuth 2.0 PKCE, so there are no copy-paste API keys.
What sports are supported?
All twelve are fully production-ready, on fourteen scoring presets: SASS (Time Plus), Wild Bunch (Time Plus), USPSA (Hit Factor, with Virginia Count), IPSC (Hit Factor, with fixed-time stages), IDPA (Points Down), PCSL (Hit Factor), 3-Gun (Time Plus per-firearm), Steel Challenge (Raw Time), ICORE (Time Plus), GSSF (Time Plus), Bianchi/NRA Action Pistol (Points), and PRS/NRL22 (Points).
What does the equipment system check?
Each shooter records gear on their profile: firearms (pistol, revolver, rifle, shotgun, PCC) with action type, caliber and optic, plus holster, belt or rig, magazine pouch and shell caddy. A director sets the match’s allowed weapon types and caliber patterns and turns each one on as a hard requirement. With a requirement on, enrolling a shooter whose equipment does not match it is refused; with it off the value is informational and entry goes through.
Can directors set match-level requirements?
Yes. Match Info has an Entry Requirements section with six per-match toggles: alias, date of birth on file, minimum age, maximum age, weapon type, and caliber. Age is computed from date of birth against the match date. There is no membership-validity toggle.
Can Snapshot Scoring read or write PractiScore .psc files?
Not today. PractiScore .psc import and export are not available. A locked match exports as CSV, PDF, or awards certificates from the app’s Results screen if you need the data in another form.
Is there a cost for clubs?
Competitors are always free. A club seat is $20/year; a circuit-host seat is $120/year and covers one circuit plus eight clubs, on sale now on this site. Founding status is open until the iPhone app is on the App Store: run a match with us before then and your club is free for life. No setup fee, no per-match fee, no per-shooter fee. The WordPress plugin remains free and GPL-licensed. See our Pricing page.