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 · free · GPLv2 · requires WordPress 6.0+ · tested with WP 7.1
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. The live count at the top 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? Add the person to the club as a Scorekeeper and they score from their own device, even at remote bays without signal (roles 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 hits your club site when you press Sync Now in WordPress, or on its own with Auto-Push on — and results reach shooters by email only if you send them from the Results screen.
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, Wild Bunch, USPSA, IPSC, IDPA, PCSL, 3-Gun, Steel Challenge, ICORE, GSSF, Bianchi/NRA Action Pistol, PRS/NRL22, 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
Hand a match’s score bundle between phones with a cheap NFC tag: the sending phone writes it, the receiving phone taps it, no signal needed. Handy for pulling a remote bay’s scores back to the director’s phone.
Check-in desk
Live count at the top, 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 the allowed weapon types and caliber patterns per match and the app refuses ineligible entries at sign-up, naming the rule that failed. Shooters record their firearms once on their profile; matches validate against them at signup.
Match-level requirements
Six per-match toggles: alias, date of birth on file, minimum age, maximum age, weapon type, and caliber. A toggle turned on refuses the entry and names the rule that failed, rather than letting it land on match day.
Extra scorers, no shared account
Need a helper scorer? Club Settings → Manage Members → Add Staff, enter their Snapshot username, choose Scorekeeper. That role carries scoring, viewing scores, and check-in — and that’s all they can do. Permissions cache on device so they keep scoring at remote bays without signal. Remove them from the members list when you’re done.
Scoring forms that follow the sport
USPSA A/C/D zones with power-factor toggle. IDPA points-down with inline penalty previews. Steel 5-string drop-worst. One scoring form whose fields come from the sport’s ruleset, so it always asks for exactly what that sport scores.
Match Analytics + Operations Dashboard
Director-side dashboards: stage/entry/group analytics, performance trends, match participant demographics, segmented standings, DQ analysis. The Operations Dashboard is the live view you keep open on match day.
Score Audit
Every score edit, every actor, every before/after delta — on one page per match, filterable by entry, stage, user, action, and date. When a score is questioned, the answer is one page away.
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
Running a recurring monthly? Duplicate last month’s match — stages, requirements, sport and settings carry over — and just set the new date.
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
Locked results reach your club site when you press Sync Now in WordPress (or on their own with Auto-Push on), and already sit in every follower’s feed. From the Results screen, export PDF, CSV, or awards certificates, or email results to every enrolled shooter — each is its own button, not 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 publishing
Connect as many WordPress sites as you publish to; each gets its own OAuth token and its own Sync Now button.
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 on-device queue that is obfuscated in app storage, scores can be handed between phones by NFC tag or QR code, and everything reconciles the moment you’re back in range. Club role 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 six-step process. OAuth 2.0 PKCE connection — 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.
No API keys to copy or paste.
The connect step runs from your WordPress admin, not this screen: Settings → Snapshot, then “Connect with Snapshot.” It’s OAuth 2.0 with PKCE — no copy-paste keys or codes. Press Sync Now in WP admin after you lock a match, or turn on Auto-Push and locked matches publish themselves. Full steps in the publishing guide.
Upload the WP plugin
Download snapshot-results.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.
Connect with Snapshot
In WP admin → Settings → Snapshot, press “Connect with Snapshot.” Sign in, tick the clubs this site should publish, press Allow. No codes to copy — it’s OAuth 2.0 with PKCE, and the token renews itself.
Check the Synced Clubs table
You land back on Settings → Snapshot reading “Connected,” with a Synced Clubs table listing each club you ticked. Full walkthrough, including troubleshooting, in the publishing guide.
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), add any extra scorers to the club as Scorekeepers, score every stage, lock the match.
Sync Now, from WordPress
In WP admin → Settings → Snapshot, press Sync Now on the club’s row. It sends the club record, every match, and full results for every match you have locked.
Common questions from club leadership.
What does it cost?
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. 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. Connect each site from its own WP admin → Settings → Snapshot screen, signing in with the same Snapshot account each time — one OAuth connection per site, each with its own Synced Clubs table and its own Sync Now button. Useful if you run results for more than one club, or if you’re helping a neighboring club without sharing accounts.
What disciplines are supported?
All twelve are fully production-ready today, 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). Each has its own divisions, penalty model, and built-in rulebook. 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.
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?
Three 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.
How do we handle extra scorers?
Add them to the club as a Scorekeeper: Club Settings → Manage Members → Add Staff, enter their Snapshot username, choose Scorekeeper. They need a Snapshot account of their own first, because the invite is by username. Scorekeepers get Score Matches, View Scores, and Check In — nothing else — and they score from their own device. Remove them from the members list when the season is over. Full walkthrough in scoring your first match.
Can scorekeepers work bays with no signal?
Yes. Club roles and their permissions cache on device. A scorekeeper signs in with signal, walks to a remote bay with no signal, and keeps scoring. A persistent banner on the scoring screen shows they are running on cached permissions. Scores reconcile to the server through the offline queue when signal returns.
Can directors set match-level requirements like minimum age or membership?
Minimum age yes, membership no. 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. A toggle left off leaves the value informational and the entry goes through; a toggle turned on refuses the entry and names the rule that failed. There is no membership-validity toggle — membership numbers are stored and pattern-checked per organization, but nothing gates entry on them. Separately, public pre-registrations arrive as pending for a director to approve or reject.
Can we run a sanctioned USPSA or IDPA match?
You can score one, and Snapshot tracks the classification data your organization cares about — divisions, classifications and power factor per organization, with stages flagged as classifiers so a shooter’s progression is recorded. What it does not do today is file classifier results with the national body: there is no upload path to USPSA or IDPA. Club-level and outlaw matches are the fit right now. If your match needs classifiers submitted, plan to file them the way you do today, and tell us — it is on the list and knowing who needs it decides how soon.
How does equipment validation work?
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. The two constraints a director can enforce per match are the allowed weapon types and the allowed caliber patterns. On enrollment the app checks the shooter’s firearms against them and refuses the entry naming the rule that failed — no firearm matching the allowed weapon types, or no firearm caliber matching the allowed patterns — so they can update their gear and try again. A shooter with no equipment on file is not blocked.
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 see who changed a score?
Yes. Every score edit, unlock, and ownership transfer lands in an append-only log with actor, timestamp, and before/after deltas. The Score Audit screen shows the trail for a match, filterable by entry, stage, user, action, and date. There is no CSV export of that log today — email support@snapshotscoring.com if you need a copy for a sanctioning body.
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.
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, obfuscated in app storage), and a match’s score bundle can still be handed between phones by NFC tag or QR code with no server in the middle. Extra scorekeepers work the same way — their permissions cache when they sign 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?
Rosters yes, scores not from the app. CSV import covers the shooter roster, up to 5,000 rows a file, from the Shooters screen; a row that fails comes back with the reason and is skipped, and the rows that are fine still import. Scores have a JSON batch-import endpoint on the API, but there is no button for it in the app and it does not take CSV. SASS Premier and Round-Up Scoring System files are not read today — that compatibility is something we would add on request. Email clubs@snapshotscoring.com before you plan a migration around any of this.
Can we export to PractiScore.com?
Not today — PractiScore .psc export isn’t 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.
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 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.