How Strava matching works
Somewhere in your Strava history are brevets called “Morning Ride”, brevets split across a sleep stop, and rides to the start that look like brevets. This is how the tracker tells them apart: the title rules, the scoring, the map check, and the evidence that it works.
At a glance
- counts as a close call
- 3 pts
- map corridor
- 750 m
- map time budget
- 1 s
- Reads
- Title, local date, distance and the route line
- Compares with
- Irish and World calendar events, permanents and rides already in your tracker
- Sorts into
- Ready rides, Questions and Other activities
- Changes
- Nothing, until you press Import
Why a brevet is hard to find
A person looking back through a season recognises a brevet from a word or two and a date. Software has to be told how, and every shortcut it takes has a cost somewhere else. Match loosely and a spin past Sally Gap becomes the Two Gaps permanent. Match strictly and “Morning Ride” is never found at all.
- Morning RideStrava’s default titleNot a word of the route’s name.Found by the map
- Queen Of Connemara #4 RRTY . 4BH201.5 kmThe catalogue has a Queen of Connemara 100 and a 200.The 200
- Eoin Mclove 600 Audax day 1383 km, then “Eoin mclove 600 day 2 with a few Garmin gremlins” at 222.8 kmOne brevet, two recordings, either side of a sleep.One 600
- MCC Spin - Road to Mile Failte 120063.7 kmNames a 1200, but it’s the ride to the start.Left out
- EaCy100 + detour = 200km203.6 kmA 100 route plus a detour, with the total at the end.Asks about the 100
Riders’ own Strava titles, as they arrived.
Before reading any titles, the tracker fetches your activities from Strava, 200 at a time, one request per year running side by side. Each activity is dated by your own clock where it started, not by UTC. Titles containing a skip phrase, or the name of an indoor app such as Zwift or Rouvy, are dropped before any matching starts.
The exact rules
- Pages are fetched until Strava returns an empty one. Up to 20 years can be searched at once, and progress streams back as the activities arrive.
- Each year is fetched with a day’s margin either side in UTC, then filtered by the local start date, so a 00:30 start belongs to the day on your watch.
- Built-in words that bring a ride into view:
audax,rrty,permanent,brm,lrm,fleche,flèche,pbp,sr600,randonneur,randonnée,brest. Your own title hints add to these. They decide what is shown, never what matches. - Built-in exclusions:
zwift,rouvy,trainingpeaks. A skip phrase always beats a hint, but an activity already in your tracker is always shown. - Rides without a hint word are shown from 30 km. A catalogue match under 30 km is left out.
- The catalogue is loaded once per search. A synthetic benchmark of 500 activities against 440 routes ran about eight times faster after that change, with identical results.
Reading the title
Strava titles are personal: the weather, the company, how the last climb felt. The route name is in there somewhere. The first job is to reduce both your title and each catalogue route name to the same plain words, so they can be compared at all.
- Brackets go, with what’s inside
Killeshin 400 Audax (part 2)→killeshin 400 - Units come off numbers
200km→200 - Accents fold
Míle Fáilte→mile failte - Letters and digits split
EaCy100→eacy 100 - Small words and Audax labels drop
Queen Of Connemara→queen connemara - Number words become digits
Two Gaps→2 gap - Plurals shrink to one form
Midlands Lakes→midland lake - Years in your title are ignored
Mile Failte 2026→mile failte
Examples from riders’ titles and catalogue route names.
2 words left to compare with route names.
A simplified copy of the clean-up, running in your browser. Joined words and typos are handled later, when the words are compared.
The words are then compared as a set, so their order doesn’t matter. Spelling slips are forgiven in longer words, and a name can be joined or split. Each allowance comes with a limit, because each one is also a way to match the wrong route.
Criu a Chiardeagainst Criu a Chairde 300Two swapped letters count as one slip.Queen of Conemaraagainst Queen of Connemara 200A missing letter in a long word is forgiven.24/02/2013 Kings Mountain Audax 200km, Irelandagainst Kingsmountain 200Two neighbouring words make the joined name.EastCoast200against East Coast 200It works the other way round too.Kings Road Mountainagainst Kingsmountain 200The two halves have to sit side by side.Kings Hill Audax 200kmagainst Kingsmountain 200Half of a joined name is not the name.Night Rideagainst Night Ride Ardattin 200Only “Ardattin” names the route; “night” and “ride” are everyday words.
Real route names. The Kings Mountain title is a rider’s; the others are probes that test the limits.
The exact rules
- Dropped words:
a an to of the and in into from with on at by for, and the labelsaudax brm lrm sr km. - Plurals:
-iesbecomes-y;-ses -xes -zes -ches -sheslosees; otherwise a finalsgoes (notss). Words of three letters or fewer are left alone. - Years from 1900 on are dropped from your title only. Numbers never count towards how much of a name was found; they are scored separately.
- Typos: both words need five letters or more. One edit is allowed, two when the shorter word has eight letters or more, and two swapped neighbours count as one. At most two words per route can be matched this way.
- Joined names: the joined word needs eight letters or more and each half three. The two title words must be neighbours, in order, not inside brackets, and not everyday words.
Scoring a route name
The tracker scores how much of each route’s name it found in your title. Only the route’s words count, so your own words never lower the score. Twenty-three everyday words such as “morning”, “ride” and “spin” can add to a score, but can never be the only evidence for a route.
- Strava title
24/02/2013 Kings Mountain Audax 200km, Ireland- Recorded
- 219.3 km
- Candidate
- Kingsmountain 200 · permanent
kingsmountainin your titleas “Kings Mountain”, side by side
| Route words found: 1 of 1 | 100 |
|---|---|
| A one-word name: 1 × 2 | +2 |
| 200 is in your title | +5 |
| Score | 107 |
Ready ride, tickedThe date, “Ireland” and the year cost nothing: only the route’s words are counted. A one-word name needs its number, and the 200 is there. 219.3 km is within 95–125% of 200.
The exact rules
- Coverage: an exact word is worth 10 and a typo 7. The total, times 10, is divided by the number of words in the route’s name, so a full match is 100.
- Specific names get a little more: 2 per word in the name, up to 8. A brevet distance from the name in your title adds 5; any other shared number adds 1.
- To be a candidate at all, a longer name needs at least two words found, and at least two thirds of them. A one-word name needs its number in your title, an alias, or a word of five letters or more. Without its number, unless it’s PBP or an alias, it can only be a question.
- Candidates are calendar events on the day you rode (+1), every active permanent, and calendar routes from other dates in the same year, offered as permanents. One-off events such as PBP only match their own year.
- Calendar candidates include the Irish and World listings. When the activity’s time zone or location identifies its country, events in other countries are left out. England, Scotland, Wales and entries labelled United Kingdom are considered together. Events with no country remain candidates; if the activity’s country is unknown, this check does not narrow the list.
- Everyday words: ride, cycle, cycling, bike, biking, morning, lunch, afternoon, evening, night, indoor, virtual, trainer, training, workout, session, spin, turbo, commute, commuting, recovery, zwift, rouvy.
Confirm or ask
A close score is not a reason to ask you. When two routes score within 3 points, the tracker weighs the distance evidence first: the distance in your title, then the distance you recorded. “Criu a Chairde Audax” at 299.9 km scores the same against the 200 and the 300, and the recording settles it.
Between close routes, it asks only when a different route has exactly the same evidence. It also asks when a number in your title disagrees with the route’s, or when a one-word route name has no number to back it up. A ride you’ve already logged for that day adds 4 points to its route, one more than the margin, so it breaks the tie.
A strong name has two or more route-specific words; a weak one has one. A DNF word in the title sets these windows aside, because a ride you didn’t finish is meant to be short.
Your words carry signals too. “DNF”, “bailed” or “pulled out” means the finish needs your answer, and a confirmed match is set up as a DNF for you to check. “Almost” gets a gentler question. “Abandoned” counts only when no word follows it, so “Abandoned Churches” is a route, not a retirement. “Ride to the start” and “home from the finish” are travel, and stay out of the way.
The exact rules
- Finish words:
dnf,did not finish,not finished,incomplete,scratched,pulled out,bailed, andabandonedwhen no word follows it. The gentler one isalmost. - Travel phrases include a cycling word with “to the start” or “from the finish”, “home from”, “warm up for”, “cool down after”, and “spin - road to”. A route whose name starts “Road to” still matches.
- A ride already in your tracker is linked only when every word of its name is in your title and it’s on the same day. The date alone never links.
- With no catalogue match, a title with a trusted word (audax, brm, lrm, brevet, randonneur) and exactly one brevet distance, recorded at 98–105% of it, becomes a new ride ready to import. Not a 600 with 10,000 m of climbing, though: that would quietly become an SR600 needing homologation.
- Ties are broken the same way every time: events on the day, then permanents, then events from other dates, then the newest route.
Checking the map
For a single recording of 94.5 km or more, the tracker also compares the line Strava drew with the route file of each likely event and permanent. It measures two things: how much of your ride lies along the route, and how much of the route your ride covered. A short piece of the course can score perfectly on the first and fail the second.
- Whole route
- ride on route
- 98%
- route covered
- 97%
- Only a piece
- ride on route
- 100%
- route covered
- 30%
- Different ride
- ride on route
- 35%
- route covered
- 30%
Sketches with illustrative percentages, not real routes.
Both lines are cut down to at most 600 points, then sampled every 500 m or so. A sample counts if it lies within 750 m of the other line. The comparison ignores direction, so a route ridden backwards, or a loop started at a different café, still matches in full.
The title found a route and ticked it. If under 40% of each line lies along the other, at a similar length, the match becomes a question: “Does this route match?”
The title found nothing. A route within 15% of the distance wins if its overlap scores 90% or more, both directions reach 80%, and it leads the next route by 5 points.
The map is allowed one second per search, and it refuses to guess. If a competing route couldn’t be compared, because its file is missing or out of date, nothing is promoted. If time runs out, the checks already finished still count, and an unfinished search for a route changes nothing. For a possible match, you also see up to five routes ranked by overlap, with both percentages.
- shortest ride checked
- 94.5 km
- corridor
- 750 m
- points per line, at most
- 600
- route pairs per search
- 256
The exact rules
- Only Strava’s summary line is used. It comes with the activity list, so there are no extra requests, and it is never stored.
- Distances are measured on a sphere to the nearest point of each segment, not just its corners. Routes are split into a grid of cells about 5.5 km across, so each sample only looks at nearby roads.
- Route files are fingerprinted when they are downloaded, at up to 2,000 points, and tied to the file’s content. A fingerprint for an older version of the file counts as missing.
- Finding a route: the score is 70% route covered plus 30% ride on route. Calendar events on the day come first; permanents are tried only if no event qualifies. A permanent that is the same route as that day’s event becomes the event.
- A ride well over the length of that day’s event, such as one that takes in the ride to the start and home, is checked for the event’s whole route. The stretch from passing the start to passing the finish must be within 15% of the route’s length and score as above. The event is then offered as a question, never ticked.
- Taking a match back: both directions under 40%, and the recorded line between 80% and 125% of the route’s length. A much longer or shorter ride is left to the distance rules.
- The check skips a ride that already links to your tracker, a DNF, a partial distance and anything recorded in parts.
One brevet, several recordings
A 600 is often two recordings, and a 1200 four or five. A long part keeps its own match: a part of 100 km or more of a ride of 600 km or more. A shorter part is held back, so nothing claims the brevet until the parts are combined.
- “Killeshin 400 audax (part 1)” and “Killeshin 400 Audax (part 2)”399 of 400 km · 99.8%Combined for review as one 400
- Four recordings called “Celtic knot” over three days918.9 of 1000 km · 91.9%Combined, then asks: “Did you finish?”
- Two short tries at a 300 permanent, a day apart490 of 300 km · 163.3%Kept as two rides
The tick marks the ride’s distance. Parts are drawn to scale.
Parts belong together when they point to the same route and fall within three days. They are combined when they add up to about the whole distance: 95–125% when only the titles connect them, and from 80% when each part has already been matched to the route, because GPS drops out on long rides. Parts with no “part” or “day” in the title stop at 110%. Well over the distance means the route was ridden twice, and those are never combined.
A strong group arrives already combined as one ride in Ready rides, and you can still choose to keep the parts separate. The combined ride keeps the event’s distance, while the recorded total stays in view. If it falls more than 5% short, you’re asked whether you finished.
The exact rules
- A part marker is
part,pt,day,stageorleg, then a number from 1 to 99 or a word from one to ten, with optionalNo.or#. - Titles match with the marker removed and the words sorted, so “600 Eoin McLlove Part 2” still joins “Eoin McLove 600 Part 1”. A shared start of the title needs two distinctive words; “The ride to day 1” is not enough.
- A full recording of the same route on the same day stops parts from combining on their own. A full ride within three days leaves shorter ones on that route in Other activities, and a second full one becomes a question: did you ride it twice?
- Grouping uses dates, names and distances only. It doesn’t compare the parts’ maps or start times.
Where it lands
Every activity ends up in one of three lists. Questions don’t block the ready rides, and each has an answer that isn’t a guess: choose another route, add it to a ride you already have, combine it, or leave it out.
- QuestionsSomething only you know.For example: two routes with the same evidence, a number in the title that disagrees, a short recording, a DNF word, a map that disagrees, a part of a longer ride, a possible repeat.
- Ready ridesClear matches, ticked for a final look.For example: confident catalogue matches, recordings combined for review, an Audax outside the catalogue with its distance in the title.
- Other activitiesIn reach, not in the way.For example: already in your tracker, travel to or from an event, a shorter piece beside a full recording, everyday rides.
Nothing is written to your tracker until you press Import. Each ride is then saved on its own, so one failure doesn’t undo the rest. An activity that belongs to a ride you added by hand is attached to that ride instead of making a second one.
How we know it works
Matching was rebuilt in stages, and each stage was driven by real titles. The biggest change, in August, found more brevets and let in some rides that weren’t. Every one riders reported became a regression test alongside its fix, and those tests run on every change.
- Feb 2026First version: every word of the event’s name had to appear in the title.
- MarTypos, number words, aliases, years ignored in titles. The one bug report: a 300 imported as the 200, because the catalogue had the event on the wrong date.
- JulRebuilt as small parts that can each be tested alone: clean-up, scoring, deciding.
- 9 AugScoring by route-word coverage, so your own words stop counting against you. More brevets were found, and so were some rides that weren’t brevets.
- 10–22 AugEach reported false match became a test, then a rule: everyday words, distance windows, travel legs, joined names, DNF words, split rides, the map check.
- 6 SepThree weeks of anonymous map results reviewed, and a code review. Three bugs found and fixed that day.
- automated tests on matching and import
- 600+
- regression tests for false matches
- 21
- anonymous map checks reviewed
- 556
The map check keeps anonymous records: the two percentages, the length ratio, and what you chose on import. No rider, activity, route, date, name or coordinates. Unanswered records are deleted after 30 days, answered ones after 18 months, as the privacy policy sets out.
Three weeks of those records were reviewed on 6 September. Of 100 suggestions riders answered, 99 were imported as suggested and one was linked to a ride already in the tracker. The accepted ones had a median of 99.7% of the ride on the route and 100% of the route covered. That is not a 99% accuracy rate: only some suggestions are answered, and nothing checks the answers independently.
The same review showed the thresholds were about right. Of 16 confirmed permanents with under 40% overlap both ways, 13 had been turned into questions; the other three came from the day the check was changed. Raising the cut-off to 90% would have questioned nine rides that riders then accepted. A code review that day found three real bugs: a short page of results ended the fetch early, starts just after midnight took the previous day’s date, and a route with no fingerprint could let another be confirmed. All three were fixed the same day.

A clear question beats a confident guess.
It still gets some wrong, and a wrong suggestion costs you one tap. If you find one, report it on the public issue tracker with the title, the date and what you expected. It will probably become the next test. For the steps of an import, see Importing from Strava.
Related topics
Importing from Strava
Find, review, correct, and combine Strava activities before importing.
Managing your rides
Manage your rides and plan from the Irish or World calendar: filters, countries, seasons and SR600s.
Ride types & distances
BRMs, permanents, the Flèche, SR600s, 1,200s and PBP explained.
Permanents guide
Ride an approved route on a day you choose: entry, proof and what counts.