Publish Unstructured Results
Unstructured results are plain-text listing output (as opposed to structured JSON, CSV, or XML) that RunScore uploads to Race Roster. Use this approach to post formatted awards, age-group results, or overall standings exactly as they appear in your listing output.
For structured JSON uploads during your event, see Publish Live Results.
Results are uploaded via the Race Roster API using the Upload Race Results text endpoint.
Required listing commands
The first RSM in the listing (the header file) must include all four of these commands:
| Command | Purpose |
|---|---|
Output Format txt | Tells RunScore to produce plain-text output |
External Report To RaceRoster | Targets Race Roster as the upload destination |
Destination <filename> | Creates/overwrites the upload file. Prefix the filename with ~ (e.g. ~awards-5k.txt) so the file is created in the race directory — see Recommendation |
.Header / .End Of Header | Must include the Race Roster results-race ID marker: ##NNNNNN## |
All subsequent RSMs that add content to the same upload file need only:
| Command | Purpose |
|---|---|
Destination Append <filename> | Appends output to the file already created by the first RSM. The filename must match exactly |
The header RSM with Destination (creates the file) must run first. All subsequent RSMs use Destination Append. If the header has not run yet, Destination Append has nothing to append to and the upload will be empty. Never use plain Destination in a subsequent RSM — it would overwrite the file and destroy all sections written before it.
Optional commands
| Command | Purpose |
|---|---|
records/page <N> | Limits output to the top N records per category (e.g. records/page 3 for top-3 awards). If omitted, all records are sent |
Results-race ID markers
Each upload targets a results race on Race Roster. The ##NNN## marker tells RunScore which results race the file belongs to. Place it inside the .Header / .End Of Header block of the first RSM (the header file that uses Destination):
.Header
##283746##
.End Of Header
In a parameterized .RSM macro, pass the ID as parameter 1:
.Header
##%1##
.End Of Header
The listing file (.LST) or parameter listing (@…lst) then supplies the ID — either directly or via an Entries.INI variable such as %rr_5k_awards_u%:
RaceRosterHeader.RSM %rr_5k_awards_u% "~awards-5k.txt"
To find your results-race ID: open your event on Race Roster, go to the results-race configuration, and copy the numeric ID shown in the top-right corner.
##NNN##The ##NNN## marker belongs in the first RSM — the one with External Report To RaceRoster and Destination. Subsequent RSMs that use Destination Append do not include ##NNN## — they simply append text to the same file.
Multiple distances (5K, 10K, Half)
For races with multiple distances that each need their own results race on Race Roster, use one listing per distance — each with its own header RSM, its own ##NNN## marker, and its own destination filename. See the overall results example below.
Consolidated awards (all categories in one file)
For awards that combine overall + age-group categories into a single upload, use one ##NNN## marker in the header RSM and Destination Append for every subsequent category. See the awards listing example below.
Recommendation
- Separate IDs for structured and unstructured results. If you publish both formats to Race Roster, use distinct sub-event IDs (e.g.
%rr_5k%for structured JSON,%rr_5k_u%for unstructured text). Race Roster treats these as separate result sets. - Define IDs once in
Entries.INI. You can pass numeric IDs directly in a listing (ResultsUnsOnline.rsm 297655 "~results_5k.txt"), but we recommend storing them inEntries.INIand referencing them with%rr_5k_u%(and similar variables). One place to update avoids forgetting to change an ID in one of several listings or RSM files. - Prefix destination filenames with
~. UseDestination ~overalls_5k.txt(or pass"~results_5k.txt"as an RSM parameter). The tilde creates the upload file in the race directory; without it, the file is created in the binary directory, which can cause issues when switching races. See the Destination command for details.
Example: overall results via parameter listing
The 5K sample race includes @ResultsUnsToRR.5.Q.lst, which calls ResultsUnsOnline.rsm with the sub-event ID and destination filename:
ResultsUnsOnline.rsm %rr_5k_u% "~results_5k.txt"
RSM macro (ResultsUnsOnline.rsm)
Output Format txt
External Report To RaceRoster
Destination %2
.Header
##%1##
Overall Results - 5K
.End Of Header
Place,Name,Bib,Time
.Detail
@place,@name,@bib,@chiptime
.End Of Detail
- Param 1 (
%1): Race Roster sub-event ID (e.g.%rr_5k_u%fromEntries.INI, or a numeric ID passed directly). - Param 2 (
%2): Destination filename — must include the~prefix (e.g."~results_5k.txt").
Example: awards listing (consolidated upload)
A typical awards listing consolidates overall winners and all age-group categories into a single upload file. Only the first RSM (RaceRosterHeader.rsm) carries External Report To RaceRoster, Output Format txt, Destination, and ##NNN##. All subsequent RSMs use Destination Append to add their sections to the same file.
See working example in every RunScore build: C:\RunScore\SampleRaces\5k\@awards2RR.6.R.lst
Race Roster setup (one-time)
- Create a results race for this event (e.g. name it "Awards").
- Set Result type to Unstructured (Text/PDF) — not Structured.
- Copy the numeric results-race ID into
Entries.INI(e.g.%rr_5k_awards_u% 283746). - After upload, enable "Results are viewable by the public" in the Race Roster results settings.
Race Roster displays the uploaded text as-is — the same plain-text layout produced by the listing.
Listing wrapper (@awards2RR.6.R.lst)
RaceRosterHeader.RSM %rr_5k_awards_u% "~awards-5k.txt"
OVERHDR.RSM
@OVERALL-RR.RSM 3 FEMALE F "~awards-5k.txt"
@OVERALL-RR.RSM 3 MALE M "~awards-5k.txt"
AGERES-RR.RSM 3 FEMALE F 1 19 "~awards-5k.txt"
AGERES-RR.RSM 3 MALE M 1 19 "~awards-5k.txt"
AGERES-RR.RSM 3 FEMALE F 20 29 "~awards-5k.txt"
AGERES-RR.RSM 3 MALE M 20 29 "~awards-5k.txt"
Header file (RaceRosterHeader.rsm) — must be first
Output Format txt
External Report To RaceRoster
Destination %2
No Page Numbers
No Total
header
##%1##
.End Of Header
- Param 1 (
%1): Race Roster results-race ID (e.g.%rr_5k_awards_u%fromEntries.INI). - Param 2 (
%2): Destination filename — must start with~(e.g."~awards-5k.txt").
This is the only file that creates the upload destination and stamps the ##NNN## marker.
Content RSMs (OVERALL-RR.RSM, AGERES-RR.RSM) — use Destination Append
Destination Append %4
no page numbers
no column headers
Header
.ce ********** %2 OVERALL RESULTS FOR 5K RACE ***********
.End of Header
Field Name
Field AGE
...
Each call appends one section (overall female, overall male, each age group) to the same ~awards-5k.txt file. No External Report To, no Output Format, no ##NNN## — only Destination Append.
Sub-listings that should not be uploaded
RSMs that are print/processing only (e.g. OVERHDR.RSM for the printed banner, EXCLUDE.RSM for excluding overall winners from age groups) have no Destination command at all. They execute but do not write to the upload file.
How to send results
- Prepare your listing file with the commands described above.
- Right-click the listing file in RunScore.
- Select Send results to online.
RunScore generates the upload file (one per Destination in the listing), matches it to its Race Roster results race via the ##NNN## marker, and uploads it.
Preview before sending
To preview output before uploading, use Output To Editor instead. This displays results on screen so you can verify formatting, record counts, and category groupings.
Troubleshooting
| Symptom | Likely cause |
|---|---|
| Upload completes but no results appear on Race Roster | Missing External Report To RaceRoster in the header RSM |
| Upload file is empty or contains only the last section | A subsequent RSM uses plain Destination instead of Destination Append — it overwrites the file |
| Subsequent sections are missing from the upload | RaceRosterHeader.rsm (or equivalent) is not the first RSM in the listing. Destination Append has nothing to append to if the file was not created first |
records/page is ignored (all records sent) | Verify the records/page command is present in the sub-listing. When records/page is set, RunScore respects the cap; when omitted, all records are sent |
| Results appear but with wrong results race | Check that the ##NNN## marker in the header RSM uses the correct results-race ID |
| Upload file appears in the binary directory instead of the race folder | The Destination filename is missing the ~ prefix. Use ~awards-5k.txt (or pass "~awards-5k.txt" as an RSM parameter) so the file is created in the race directory |